module Clayful
Public Class Methods
base_url()
click to toggle source
# File lib/clayful.rb, line 26 def self.base_url; @@base_url end
base_url=(v;)
click to toggle source
# File lib/clayful.rb, line 27 def self.base_url=v; @@base_url = v end
call_api(options)
click to toggle source
# File lib/clayful.rb, line 132 def self.call_api(options) extracted = self.extract_request_arguments(options) extracted = extracted.merge({ 'request_url' => self.get_endpoint(extracted['request_url']), 'model_name' => options['model_name'], 'method_name' => options['method_name'], 'uses_form_data' => !!options['uses_form_data'], 'error' => nil, 'response' => nil, }) # Extend default headers with header options extracted['headers'] = @@default_headers.clone.merge(extracted['headers']) self.trigger('request', extracted) begin response = self.plugins['request'].call(extracted) extracted['response'] = response self.trigger('response', extracted) return response rescue Clayful::Exception => e extracted['error'] = e self.trigger('response', extracted) raise # re-raise the error end end
config(options = {})
click to toggle source
# File lib/clayful.rb, line 173 def self.config(options = {}) headers = self.options_to_headers(options) @@default_headers = @@default_headers.merge(headers) end
default_headers()
click to toggle source
# File lib/clayful.rb, line 29 def self.default_headers; @@default_headers end
default_headers=(v;)
click to toggle source
# File lib/clayful.rb, line 30 def self.default_headers=v; @@default_headers = v end
extract_request_arguments(options = {})
click to toggle source
# File lib/clayful.rb, line 94 def self.extract_request_arguments(options = {}) result = { 'http_method' => options['http_method'], 'request_url' => options['path'], 'payload' => nil, 'query' => {}, 'headers' => {}, 'meta' => {} } rest = options['args'].slice(options['params'].length..-1) options['params'].each.with_index do |key, i| result['request_url'] = result['request_url'].sub('{' + key + '}', options['args'][i].to_s) end http_method = options['http_method'] if (http_method == 'POST' or http_method == 'PUT') and (not options['without_payload']) result['payload'] = rest.shift end query_headers = rest[0] ? rest[0] : {} query = query_headers.fetch('query', {}) meta = query_headers.fetch('meta', {}) result['query'] = self.normalize_query_values(query) result['headers'] = self.options_to_headers(query_headers) result['meta'] = meta result end
format_image_url(base_url, options = {})
click to toggle source
# File lib/clayful.rb, line 231 def self.format_image_url(base_url, options = {}) query = [] normalized = self.normalize_query_values(options) normalized.each do |k, v| query.push("#{k}=#{v}") end query = query.join('&') query.empty? ? base_url : base_url + '?' + query end
format_number(number, currency = {})
click to toggle source
# File lib/clayful.rb, line 248 def self.format_number(number, currency = {}) if not number.is_a? Numeric return '' end precision = currency.fetch('precision', nil) delimiter = currency.fetch('delimiter', {}) thousands = delimiter.fetch('thousands', '') decimal = delimiter.fetch('decimal', '.') if precision.is_a? Numeric # Conver to float to keep '.n' n = (10 ** precision).to_f number = (number * n).round / n # To deal with 0.0 case.. if precision == 0 number = number.round end end a, b = number.to_s.split('.') a = a.reverse.scan(/.{1,3}/).join(thousands).reverse b = b ? b : '' if precision.is_a? Numeric diff = precision - b.length diff = diff < 0 ? 0 : diff b += '0' * diff end decimal = b.empty? ? '' : decimal [a, b].join(decimal) end
format_price(number, currency = {})
click to toggle source
# File lib/clayful.rb, line 296 def self.format_price(number, currency = {}) formatted_number = self.format_number(number, currency) if formatted_number.empty? return '' end symbol = currency.fetch('symbol', '') format_string = currency.fetch('format', '{price}') format_string .sub('{symbol}', symbol) .sub('{price}', formatted_number) end
get_endpoint(path)
click to toggle source
# File lib/clayful.rb, line 80 def self.get_endpoint(path) @@base_url + path end
install(scope, plugin)
click to toggle source
# File lib/clayful.rb, line 182 def self.install(scope, plugin) if @@plugins[scope] @@plugins[scope] = plugin end end
listeners()
click to toggle source
# File lib/clayful.rb, line 35 def self.listeners; @@listeners end
listeners=(v;)
click to toggle source
# File lib/clayful.rb, line 36 def self.listeners=v; @@listeners = v end
normalize_query_values(query = {})
click to toggle source
# File lib/clayful.rb, line 87 def self.normalize_query_values(query = {}) Hash[ query.map { |k, v| [k.to_s, ERB::Util.url_encode(v.to_s)] } ] end
off(event_name, callback)
click to toggle source
# File lib/clayful.rb, line 204 def self.off(event_name, callback) listeners = @@listeners[event_name] if listeners listeners.delete(callback) end end
on(event_name, callback)
click to toggle source
# File lib/clayful.rb, line 192 def self.on(event_name, callback) listeners = @@listeners[event_name] if listeners listeners.push(callback) end end
options_to_headers(o = {})
click to toggle source
# File lib/clayful.rb, line 39 def self.options_to_headers(o = {}) headers = {} if o['language'] headers['Accept-Language'] = o['language'] end if o['currency'] headers['Accept-Currency'] = o['currency'] end if o['time_zone'] headers['Accept-Time-Zone'] = o['time_zone'] end if o['client'] headers['Authorization'] = 'Bearer ' + o['client'] end if o['customer'] headers['Authorization-Customer'] = o['customer'] end if o['reCAPTCHA'] headers['reCAPTCHA-Response'] = o['reCAPTCHA'] end if o['debug_language'] headers['Accept-Debug-Language'] = o['debug_language'] end if o['headers'] headers = headers.merge(o['headers']) end headers end
plugins()
click to toggle source
# File lib/clayful.rb, line 32 def self.plugins; @@plugins end
plugins=(v;)
click to toggle source
# File lib/clayful.rb, line 33 def self.plugins=v; @@plugins = v end
trigger(event_name, data)
click to toggle source
# File lib/clayful.rb, line 216 def self.trigger(event_name, data) listeners = @@listeners[event_name] if listeners listeners.each do |listener| listener.call(data) end end end