roseweixel/lacquer-lover

View on GitHub
app/helpers/application_helper.rb

Summary

Maintainability
C
1 day
Test Coverage
require 'net/http'
require "addressable/uri"

module ApplicationHelper
 
  def bootstrap_class_for flash_type
    { success: "alert-success", error: "alert-danger", alert: "alert-warning", notice: "alert-info" }[flash_type.to_sym] || flash_type.to_s
  end
 
  def flash_messages(opts = {})
    flash.each do |msg_type, message|
      concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} fade in") do 
              concat content_tag(:button, 'x', class: "close", data: { dismiss: 'alert' })
              concat message 
            end)
    end
    nil
  end

  def name_links(users)
    users.collect{|user| link_to user.name, user_path(user)}
  end

  def transactions_categories
    [ 
      'transactions_for_your_approval', 
      'transactions_you_accepted', 
      'active_owned_transactions', 
      'active_requested_transactions', 
      'accepted_requested_transactions', 
      'pending_requested_transactions', 
      'rejected_requested_transactions',
      'lacquer_gifts_received_not_acknowledged',
      'requested_returned_unconfirmed_transactions',
      'owned_returned_unconfirmed_transactions',
      'disputed_transactions' 
    ]
  end

  def friendships_categories
    [ 
      'friendships_for_your_approval',
      'requested_friendships_awaiting_approval',
      'rejected_friend_requests'
    ]
  end

  def notification_types
    ['friendship', 'transaction']
  end

  def notification_categories
    transactions_categories + friendships_categories
  end

  def header_text_for_notification_category(notification_category)
    header_string_hash = { 
      "transactions_for_your_approval" => "Transactions Awaiting Your Approval",
      "transactions_you_accepted" => "Transactions You Accepted", 
      "active_owned_transactions" => "Lacquers Currently Loaned Out", 
      "active_requested_transactions" => "Lacquers You're Borrowing", 
      "accepted_requested_transactions" => "Accepted Loan Requests", 
      "pending_requested_transactions" => "Pending Loan Requests", 
      "rejected_requested_transactions" => "Rejected Loan Requests",
      "lacquer_gifts_received_not_acknowledged" => "You've Got Gifts!",
      "requested_returned_unconfirmed_transactions" => "Lacquers You've Returned",
      "owned_returned_unconfirmed_transactions" => "Returns to Confirm",
      "disputed_transactions" => "Disputed Transactions",
      "friendships_for_your_approval" => "Friendships Awaiting Your Approval",
      "requested_friendships_awaiting_approval" => "Your Pending Friend Requests", 
      "rejected_friend_requests" => "Sorry, these friend requests were not approved."
    }

    header_string_hash[notification_category]
  end

  def is_an_email_address_not_noreply?(string)
    !!string.match(/[a-zA-Z\d]+\w*(?:\.\w+)*@[a-zA-Z\d-]+\.[a-zA-Z\d-]+(?:\.[a-zA-Z\d-]+)*/) && !string.match(/(noreply|no-reply)/i)
  end

  def is_an_email_address?(string)
    !!string.match(/[a-zA-Z\d]+\w*(?:\.\w+)*@[a-zA-Z\d-]+\.[a-zA-Z\d-]+(?:\.[a-zA-Z\d-]+)*/)
  end

  def display_image(user_lacquer)
    if user_lacquer.selected_display_image && user_lacquer.selected_display_image == user_lacquer.lacquer.default_picture
      picture_for(user_lacquer.lacquer)
    else
      image = user_lacquer.selected_display_image || user_lacquer.swatch_image
      if image
        image_tag(image, :width => "90")
      end
    end
  end

  def valid?(url)
    begin
      if url.start_with?("lacquers/")
        return false
      elsif url.class == Paperclip::Attachment || !url.start_with?("http")
        return true
      else
        uri = Addressable::URI.parse(url)

        request = Net::HTTP.new uri.host

        # rescue SocketError that occurs when offline
        response= request.request_head uri.path

        response.code.to_i == 200
      end
    rescue SocketError
      return false
    end
  end

  def picture_for(lacquer)
    if lacquer.picture && valid?(lacquer.picture)
      begin 
        if lacquer.brand.name == "Zoya" || lacquer.brand.name == "Nars" || lacquer.brand.name == "I Love Nail Polish (ILNP)" || lacquer.brand.name == "Formula X by Sephora"
          image_tag(lacquer.picture, :size => "90x90", :class => "chunky_image")
        elsif lacquer.brand.name == "Essie"
          image_tag(lacquer.picture, :size => "42x90", :class => "padded_lacquer_pic")
        elsif lacquer.brand.name == "OPI"
          image_tag(lacquer.picture, :size => "40x90", :class => "padded_lacquer_pic")
        elsif lacquer.brand.name == "China Glaze"
          image_tag(lacquer.picture, :size => "39x90", :class => "padded_lacquer_pic")
        elsif lacquer.brand.name == "Deborah Lippmann"
          image_tag(lacquer.picture, :size => "55x90", :class => "padded_lacquer_pic")
        elsif lacquer.brand.name == "Butter London"
          image_tag(lacquer.picture, :size => "51x90", :class => "padded_lacquer_pic")
        else
          image_tag(lacquer.picture, :size => "45x90", :class => "padded_lacquer_pic")
        end
      rescue
        image_tag('generic-polish.png', :size => "45x90", :class => "padded_lacquer_pic")
      end
    elsif lacquer.swatches.any?
      image_tag(lacquer.swatches.sample.image, :height => "90")
    else
      image_tag('generic-polish.png', :size => "45x90", :class => "padded_lacquer_pic")
    end
  end

  def large_picture_for(lacquer)
    if lacquer.picture && valid?(lacquer.picture)
      begin
        if lacquer.brand.name == "Deborah Lippmann" 
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large deborah")
        elsif lacquer.brand.name == "OPI"
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large opi")
        elsif lacquer.brand.name == "Butter London"
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large butter")
        elsif lacquer.brand.name == "China Glaze"
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large")
        elsif lacquer.brand.name == "Essie"
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large essie")
        elsif lacquer.brand.name == "Nails Inc."
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large nailsinc")
        elsif lacquer.brand.name == "Formula X by Sephora" || lacquer.brand.name == "Nars" || lacquer.brand.name == "Zoya" || lacquer.brand.name == "I Love Nail Polish (ILNP)"
          image_tag(lacquer.picture, :size => "360x360", :class => "chunky_image_large")
        else
          image_tag(lacquer.picture, :size => "360x360", :class => "padded_lacquer_pic_large")
        end
      rescue
        image_tag('generic-polish.png', :size => "360x360", :class => "padded_lacquer_pic_large")
      end
    elsif lacquer.swatches.any?
      image_tag(lacquer.swatches.sample.image.url(:medium), :width => "360px", :height => "auto")
    else
      image_tag('generic-polish.png', :size => "360x360", :class => "padded_lacquer_pic_large")
    end
  end

  def small_picture_for(lacquer)
    if lacquer.picture && valid?(lacquer.picture)
      begin
        if lacquer.brand.name == "Deborah Lippmann" 
          image_tag(lacquer.picture, :size => "31x50", :class => "padded_lacquer_pic_small")
        elsif lacquer.brand.name == "OPI"
          image_tag(lacquer.picture, :size => "21x50", :class => "padded_lacquer_pic_small")
        elsif lacquer.brand.name == "Butter London"
          image_tag(lacquer.picture, :size => "29x50", :class => "padded_lacquer_pic_small")
        elsif lacquer.brand.name == "I Love Nail Polish (ILNP)" || lacquer.brand.name == "Nars" || lacquer.brand.name == "Formula X by Sephora" || lacquer.brand.name == "Zoya"
          image_tag(lacquer.picture, :size => "50x50", :class => "chunky_image_small")
        elsif lacquer.brand.name == "China Glaze"
          image_tag(lacquer.picture, :size => "22x50", :class => "padded_lacquer_pic_small")
        elsif lacquer.brand.name == "Essie"
          image_tag(lacquer.picture, :size => "23x50", :class => "padded_lacquer_pic_small")
        elsif lacquer.brand.name == "Nails Inc."
          image_tag(lacquer.picture, :size => "36x50", :class => "padded_lacquer_pic_small")
        else
          image_tag(lacquer.picture, :size => "36x50", :class => "padded_lacquer_pic_small")
        end
      rescue
        image_tag('generic-polish.png', :size => "31x50", :class => "padded_lacquer_pic_small")
      end
    else
      image_tag('generic-polish.png', :size => "31x50", :class => "padded_lacquer_pic_small")
    end
  end
end