class Lipstick::Api::Session
Attributes
base_url[R]
API endpoint, eg. example.com/admin
credentials[R]
Hash containing :username, :password
logger[R]
Used for logging request and response info.
Public Class Methods
new(params)
click to toggle source
Public: Initialize session.
params - Hash
-
:url
- API endpoint, eg. example.com/admin -
:username
-
:password
-
:logger
- Used for logging request and response info.
# File lib/lipstick/api/session.rb, line 24 def initialize(params) @base_url = params[:url] || raise("url not defined.") raise("username missing") unless params[:username] raise("password missing") unless params[:password] @credentials = { username: params[:username], password: params[:password] } @logger = params[:logger] || Logger.new('/dev/null') end
Public Instance Methods
camelize(str)
click to toggle source
# File lib/lipstick/api/session.rb, line 125 def camelize(str) return str.to_s unless str.to_s.include?(?_) str.to_s.split("_").each {|s| s.capitalize! }.join end
campaign_find_active()
click to toggle source
Find all active campaigns.
# File lib/lipstick/api/session.rb, line 33 def campaign_find_active call_api(:campaign_find_active) end
campaign_view(campaign_id)
click to toggle source
Fetch details for a given campaign.
# File lib/lipstick/api/session.rb, line 38 def campaign_view(campaign_id) call_api(:campaign_view, campaign_id: campaign_id) end
customer_find_active_product(customer_id, campaign_id = nil)
click to toggle source
# File lib/lipstick/api/session.rb, line 42 def customer_find_active_product(customer_id, campaign_id = nil) params = { customer_id: customer_id } params.merge!(campaign_id: campaign_id) if campaign_id call_api(:customer_find_active_product, params) end
new_order(params)
click to toggle source
Create order for new customer
# File lib/lipstick/api/session.rb, line 49 def new_order(params) camelcase_params!(params) call_api('NewOrder', params) end
order_find(start_time, end_time, params = {})
click to toggle source
# File lib/lipstick/api/session.rb, line 54 def order_find(start_time, end_time, params = {}) params.merge!( start_date: start_time.strftime('%m/%d/%Y'), start_time: start_time.strftime('%H:%M:%S'), end_date: end_time.strftime('%m/%d/%Y'), end_time: end_time.strftime('%H:%M:%S')) params[:campaign_id] ||= 'all' params[:product_id] ||= 'all' params[:criteria] ||= 'all' call_api(:order_find, params) end
order_find_updated(start_time, end_time, params = {})
click to toggle source
# File lib/lipstick/api/session.rb, line 66 def order_find_updated(start_time, end_time, params = {}) params.merge!( start_date: start_time.strftime('%m/%d/%Y'), start_time: start_time.strftime('%H:%M:%S'), end_date: end_time.strftime('%m/%d/%Y'), end_time: end_time.strftime('%H:%M:%S')) params[:campaign_id] ||= 'all' call_api(:order_find_updated, params) end
order_refund(order_id, amount, keep_recurring = true)
click to toggle source
# File lib/lipstick/api/session.rb, line 76 def order_refund(order_id, amount, keep_recurring = true) call_api(:order_refund, order_id: order_id, amount: amount.to_s, keep_recurring: keep_recurring ? '1' : '0') end
order_update(order_id, action, value)
click to toggle source
# File lib/lipstick/api/session.rb, line 83 def order_update(order_id, action, value) call_api(:order_update, order_ids: order_id, actions: action, values: value) end
order_update_recurring(order_id, status)
click to toggle source
# File lib/lipstick/api/session.rb, line 87 def order_update_recurring(order_id, status) call_api(:order_update_recurring, order_id: order_id, status: status) end
order_view(order_id)
click to toggle source
# File lib/lipstick/api/session.rb, line 91 def order_view(order_id) call_api(:order_view, order_id: order_id) end
order_void(order_id)
click to toggle source
# File lib/lipstick/api/session.rb, line 95 def order_void(order_id) call_api(:order_void, order_id: order_id) end
shipping_method_find(campaign_id = 'all')
click to toggle source
# File lib/lipstick/api/session.rb, line 99 def shipping_method_find(campaign_id = 'all') call_api(:shipping_method_find, campaign_id: campaign_id) do |fields| if fields[:response_code] == '100' [:shipping_ids].each do |key| fields[key] = CSV.parse_line(fields[key]).map(&:to_i) end end end end
underscore(camel_cased_word)
click to toggle source
partly copied from activesupport/inflector
# File lib/lipstick/api/session.rb, line 114 def underscore(camel_cased_word) word = camel_cased_word.to_s.dup word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2') word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') word.tr!("-", "_") word.tr!("[", "_") word.tr!("]", "") word.downcase! word end
validate_credentials()
click to toggle source
# File lib/lipstick/api/session.rb, line 109 def validate_credentials call_api(:validate_credentials) end
Protected Instance Methods
call_api(method, params = {}, &block)
click to toggle source
# File lib/lipstick/api/session.rb, line 140 def call_api(method, params = {}, &block) params = params.merge(method: method) logger.info "request = #{params.inspect}" response = post_form(uri_for(method), params.merge(credentials)) logger.info "response = #{response.inspect}" logger.debug "response.body = #{response.body}" if block_given? api_response = parse_response(response, &block) else fields = response_fields(response) klassname = "#{camelize(method)}Response".to_sym klass = Lipstick::Api.constants.include?(klassname) ? Lipstick::Api.const_get(klassname) : Lipstick::Api::Response api_response = klass.new(fields) end logger.info "API response = #{api_response.inspect}" api_response end
camelcase_params!(params)
click to toggle source
Munge params into style accepted by transaction API.
# File lib/lipstick/api/session.rb, line 132 def camelcase_params!(params) params.keys.select {|key| key.is_a?(Symbol) && key.to_s.include?(?_) }.each do |key| camelcase_key = camelize(key) camelcase_key[0] = camelcase_key[0].chr.downcase params[camelcase_key] = params.delete(key) end end
parse_response(response) { |fields| ... }
click to toggle source
# File lib/lipstick/api/session.rb, line 188 def parse_response(response, &block) fields = response_fields(response) yield fields if block_given? Lipstick::Api::Response.new(fields) end
post_form(uri, params)
click to toggle source
# File lib/lipstick/api/session.rb, line 163 def post_form(uri, params) post = Net::HTTP::Post.new(uri.request_uri) post.set_form_data(params) request(uri, post) end
request(uri, request)
click to toggle source
# File lib/lipstick/api/session.rb, line 169 def request(uri, request) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.request(request) end
response_fields(response)
click to toggle source
# File lib/lipstick/api/session.rb, line 176 def response_fields(response) if response.body.include?(?=) CGI::unescape(response.body).split('&').inject({}) do |h,kv| k,v = kv.split('=') k = k.to_sym if k.match(/\w/) h.merge( k => v ) end else { response_code: response.body } end end
uri_for(method)
click to toggle source
# File lib/lipstick/api/session.rb, line 158 def uri_for(method) api = ['NewOrder'].include?(method) ? 'transact' : 'membership' URI.parse("#{base_url}/#{api}.php") end