Class: Cb::Utils::Api

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/cb/utils/api.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApi

Returns a new instance of Api.



10
11
12
13
14
15
16
17
# File 'lib/cb/utils/api.rb', line 10

def initialize
  self.class.debug_output $stderr if Cb.configuration.debug_api
  self.class.default_params :developerkey => Cb.configuration.dev_key,
                            :outputjson => Cb.configuration.use_json.to_s

  self.class.default_timeout Cb.configuration.time_out
  self.class.headers.merge! ({'accept-encoding' => 'deflate, gzip'}) unless Cb.configuration.debug_api
end

Class Method Details

.camelize(input) ⇒ Object



91
92
93
94
# File 'lib/cb/utils/api.rb', line 91

def self.camelize(input)
  input.sub!(/^[a-z\d]*/) { $&.capitalize }
  input.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$2.capitalize}" }.gsub('/', '::')
end

.criteria_to_hash(criteria) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/cb/utils/api.rb', line 72

def self.criteria_to_hash(criteria)
  params = Hash.new
  if criteria.respond_to?(:instance_variables)
    criteria.instance_variables.each do |var|
      var_name = var.to_s
      var_name.slice!(0)
      var_name_hash_safe = camelize(var_name)
      params["#{var_name_hash_safe}"] = criteria.instance_variable_get(var)
    end
  end
  params
end

.is_numeric?(obj) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/cb/utils/api.rb', line 85

def self.is_numeric?(obj)
  true if Float(obj) rescue false
end

Instance Method Details

#append_api_responses(obj, resp) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/cb/utils/api.rb', line 43

def append_api_responses(obj, resp)
  meta_class = obj.respond_to?('cb_response') ? obj.cb_response : Cb::Utils::MetaValues.new

  resp.each do |api_key, api_value|
    meta_name = format_hash_key(api_key)
    unless meta_name.empty?
      if meta_name == 'errors' && api_value.is_a?(Hash)
        api_value = api_value.values
      elsif meta_name == 'error' && api_value.is_a?(String)
        # this is a horrible hack to get consistent object.cb_response.errors behavior for the client
        meta_name = 'errors'
        api_value = [api_value]
      elsif self.class.is_numeric?(api_value)
        api_value = api_value.to_i
      end

      meta_class.class.send(:attr_reader, meta_name)
      meta_class.instance_variable_set(:"@#{meta_name}", api_value)
    end
  end

  obj.class.send(:attr_reader, 'api_error')
  obj.instance_variable_set(:@api_error, @api_error)

  obj.class.send(:attr_reader, 'cb_response')
  obj.instance_variable_set(:@cb_response, meta_class)
  obj
end

#cb_get(*args, &block) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/cb/utils/api.rb', line 19

def cb_get(*args, &block)
  self.class.base_uri Cb.configuration.base_uri
  response = self.class.get(*args, &block)
  validated_response = ResponseValidator.validate(response)
  set_api_error(validated_response)
  validated_response
end

#cb_post(*args, &block) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/cb/utils/api.rb', line 27

def cb_post(*args, &block)
  self.class.base_uri Cb.configuration.base_uri
  response = self.class.post(*args, &block)
  validated_response = ResponseValidator.validate(response)
  set_api_error(validated_response)
  validated_response
end

#cb_put(*args, &block) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/cb/utils/api.rb', line 35

def cb_put(*args, &block)
  self.class.base_uri Cb.configuration.base_uri
  response = self.class.put(*args, &block)
  validated_response = ResponseValidator.validate(response)
  set_api_error(validated_response)
  validated_response
end