class Shopify::AppStore

Public Class Methods

find(handle, sort_by = :newest) click to toggle source
# File lib/shopify_appstore.rb, line 36
def self.find(handle, sort_by = :newest)
  top(sort_by).each { |a| return a if a[:handle] == handle }
  nil
end
top(sort_by = :newest) click to toggle source
# File lib/shopify_appstore.rb, line 7
def self.top(sort_by = :newest)
  raise "Unknown sort value" unless [ :newest, :popular, :highest_rated ].include?(sort_by)
  sort_by = sort_by.to_s.gsub('_', '+')
  values = []
  page = 1
  begin
    begin
      url = "http://apps.shopify.com/shopify_applications/filter?sortby=#{sort_by}&page=#{page}"
      page += 1
      doc = Nokogiri::HTML(open(url))
      apps = doc.css('li.app')
      apps.each do |app|
        handle = app.css('a').first[:href].sub('/shopify_applications/', '').gsub('/', '')
        value = {
          :handle => handle,
          :name => app.css('div.app-info strong').first.text,
          :rank => values.size + 1,
          :url => "http://apps.shopify.com/#{handle}/",
          :image => app.css('img').first[:src],
          :description => app.css('p.description').first.text.strip,
        }
        values.push(value)
      end
    end while apps.size == 15
  rescue 
  end
  values
end