123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- require 'active_resource'
- require 'ostruct'
- require 'digest/md5'
- module ShopifyAPI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- class Session
- cattr_accessor :api_key
- cattr_accessor :secret
- cattr_accessor :protocol
- self.protocol = 'https'
- attr_accessor :url, :token, :name
-
- def self.setup(params)
- params.each { |k,value| send("#{k}=", value) }
- end
- def initialize(url, token = nil)
- raise ArgumentError.new("You must provide at least a URL to a Shopify store!") if url.blank?
- url.gsub!(/https?:\/\//, '')
- url = "#{url}.myshopify.com" unless url.include?('.')
-
- self.url, self.token = url, token
- end
-
- def shop
- Shop.current
- end
-
- def create_permission_url
- "http://#{url}/admin/api/auth?api_key=#{api_key}"
- end
-
-
-
- def site
- "#{protocol}://#{api_key}:#{computed_password}@#{url}/admin"
- end
- def valid?
- [url, token].all?
- end
- private
-
-
-
- def computed_password
- Digest::MD5.hexdigest(secret + token.to_s)
- end
- end
-
-
-
-
- class Shop
- def self.current
- ActiveResource::Base.find(:one, :from => "/admin/shop.xml")
- end
- end
-
-
- class CustomCollection < ActiveResource::Base
- def products
- Product.find(:all, :params => {:collection_id => self.id})
- end
-
- def add_product(product)
- Collect.create(:collection_id => self.id, :product_id => product.id)
- end
-
- def remove_product(product)
- collect = Collect.find(:first, :params => {:collection_id => self.id, :product_id => product.id})
- collect.destroy if collect
- end
- end
-
- class SmartCollection < ActiveResource::Base
- def products
- Product.find(:all, :params => {:collection_id => self.id})
- end
- end
-
- class Collect < ActiveResource::Base
- end
- class ShippingAddress < ActiveResource::Base
- end
- class BillingAddress < ActiveResource::Base
- end
- class LineItem < ActiveResource::Base
- end
- class ShippingLine < ActiveResource::Base
- end
- class Order < ActiveResource::Base
- def close; load_attributes_from_response(post(:close)); end
- def open; load_attributes_from_response(post(:open)); end
- def transactions
- Transaction.find(:all, :params => { :order_id => id })
- end
-
- def capture(amount = "")
- Transaction.create(:amount => amount, :kind => "capture", :order_id => id)
- end
- end
-
- class Product < ActiveResource::Base
-
-
- def self.share; post :share; end
- def self.unshare; delete :share; end
-
- def price_range
- prices = variants.collect(&:price)
- format = "%0.2f"
- if prices.min != prices.max
- "#{format % prices.min} - #{format % prices.max}"
- else
- format % prices.min
- end
- end
-
- def collections
- CustomCollection.find(:all, :params => {:product_id => self.id})
- end
-
- def smart_collections
- SmartCollection.find(:all, :params => {:product_id => self.id})
- end
-
- def add_to_collection(collection)
- collection.add_product(self)
- end
-
- def remove_from_collection(collection)
- collection.remove_product(self)
- end
- end
-
- class Variant < ActiveResource::Base
- self.prefix = "/admin/products/:product_id/"
- end
-
- class Image < ActiveResource::Base
- self.prefix = "/admin/products/:product_id/"
-
-
- [:pico, :icon, :thumb, :small, :medium, :large, :original].each do |m|
- reg_exp_match = "/\\1_#{m}.\\2"
- define_method(m) { src.gsub(/\/(.*)\.(\w{2,4})/, reg_exp_match) }
- end
-
- def attach_image(data, filename = nil)
- attributes[:attachment] = Base64.encode64(data)
- attributes[:filename] = filename unless filename.nil?
- end
- end
- class Transaction < ActiveResource::Base
- self.prefix = "/admin/orders/:order_id/"
- end
-
- class Fulfillment < ActiveResource::Base
- self.prefix = "/admin/orders/:order_id/"
- end
- class Country < ActiveResource::Base
- end
- class Page < ActiveResource::Base
- end
-
- class Blog < ActiveResource::Base
- def articles
- Article.find(:all, :params => { :blog_id => id })
- end
- end
-
- class Article < ActiveResource::Base
- self.prefix = "/admin/blogs/:blog_id/"
- end
- class Comment < ActiveResource::Base
- def remove; load_attributes_from_response(post(:remove)); end
- def ham; load_attributes_from_response(post(:ham)); end
- def spam; load_attributes_from_response(post(:spam)); end
- def approve; load_attributes_from_response(post(:approve)); end
- end
-
- class Province < ActiveResource::Base
- self.prefix = "/admin/countries/:country_id/"
- end
-
- class Redirect < ActiveResource::Base
- end
- end
|