class MadCart::Store::Spree

Constants

ORDERS_PER_PAGE
PRODUCTS_PER_PAGE

Public Instance Methods

products_count() click to toggle source
# File lib/mad_cart/store/spree.rb, line 17
def products_count
  (parse_response { connection.get('products.json') })["total_count"]
end
valid?() click to toggle source
# File lib/mad_cart/store/spree.rb, line 13
def valid?
  valid_by_path?('orders.json')
end

Private Instance Methods

api_url_for(store_domain) click to toggle source
# File lib/mad_cart/store/spree.rb, line 99
def api_url_for(store_domain)
 "http://#{store_domain}/api/"
end
create_connection(args={}) click to toggle source
# File lib/mad_cart/store/spree.rb, line 103
def create_connection(args={})
  Faraday.new(DEFAULT_CONNECTION_OPTIONS.merge(:url => api_url_for(args[:store_url]))) do |connection|
    connection.response :json
    connection.adapter Faraday.default_adapter
    connection.headers['X-Spree-Token'] = args[:api_key]
  end
end
for_each(source, items_key, &block) click to toggle source
# File lib/mad_cart/store/spree.rb, line 87
def for_each(source, items_key, &block)
  response    = send(source, { :page => 1 })
  items       = response[items_key.to_s]
  pages_count = response['pages']

  (2..pages_count).each do |page|
    items += send(source, { :page => page })[items_key.to_s]
  end

  items.each(&block)
end
get_customer_hashes() click to toggle source
# File lib/mad_cart/store/spree.rb, line 64
def get_customer_hashes
  orders = []

  for_each(:make_order_request, :orders) do |r|
    orders << {
      order_number: r["number"],
      user_email:   r["email"]
    }
  end

  orders.reverse.select{ |r| r[:user_email].present? }.uniq{ |r| r[:user_email] }.map do |r|
    c = parse_response { connection.get("orders/#{ r[:order_number] }.json") }
    if c['email']
      {
        first_name: c['bill_address'].try(:[], 'firstname'),
        last_name:  c['bill_address'].try(:[], 'lastname'),
        email:      c['email'],
        id:         c['email']
      }
    end
  end.compact
end
get_products(_options={}) click to toggle source
# File lib/mad_cart/store/spree.rb, line 33
def get_products(_options={})
  product_hashes = []

  for_each(:make_product_request, :products) do |r|
    product_hashes << r
  end

  product_hashes.map do |product|
    master         = product.try(:[], "master")
    master_variant = product.try(:[], "variants").try{ |variants| variants.find{ |variant| variant['is_master'] } }
    images         = (master || master_variant).try(:[], "images")

    if images.present?
      image = images.first

      product = product.merge({
        :image_square_url => connection.build_url(image["product_url"] || image["attachment_url"]).to_s,
        :image_url        => connection.build_url(image["large_url"] || image["attachment_url"]).to_s
      })
    end

    product = product.merge({
      :url => connection.build_url("/products/#{ product["slug"] || product['permalink'] }").to_s,
    })

    product
  end.select do |product|
    product[:image_url].present?
  end
end
make_order_request(params={}) click to toggle source
# File lib/mad_cart/store/spree.rb, line 23
def make_order_request(params={})
  params = params.reverse_merge({ :page => 1, :per_page => ORDERS_PER_PAGE })
  parse_response { connection.get('orders.json', params) }
end
make_product_request(params={}) click to toggle source
# File lib/mad_cart/store/spree.rb, line 28
def make_product_request(params={})
  params = params.reverse_merge({ :page => 1, :per_page => PRODUCTS_PER_PAGE })
  parse_response { connection.get('products.json', params) }
end