Class: ActiveRest::Base

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::AttributeMethods, ActiveModel::Serialization, ActiveModel::Serializers::JSON
Defined in:
lib/base.rb

Direct Known Subclasses

ApiModel, OtherModel

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allObject

method GET



40
41
42
43
# File 'lib/base.rb', line 40

def self.all
  puts name.to_s + ' .all'
  # get
end

.api(configurations) ⇒ Object

def attributes

{'name' => nil}

end



29
30
31
32
33
34
35
36
37
# File 'lib/base.rb', line 29

def self.api(configurations)
  configurations.each do |key, value|
    define_singleton_method("api_#{key}") { nil }
    singleton_class.class_eval do
      remove_method("api_#{key}") if method_defined?("api_#{key}")
      define_method("api_#{key}") { value }
    end
  end
end

.create(attrs = {}) ⇒ Object

method POST



52
53
54
# File 'lib/base.rb', line 52

def self.create(attrs = {})
  puts name.to_s + ' .create ' + attrs.inspect
end

.delete(tokens = '') ⇒ Object



96
97
98
# File 'lib/base.rb', line 96

def self.delete(tokens = '')
  request(:delete, tokens)
end

.find(id) ⇒ Object

method GET



46
47
48
49
# File 'lib/base.rb', line 46

def self.find(id)
  puts name.to_s + ' .find ' + id
  # get("/#{id}")
end

.get(tokens = '') ⇒ Object

Wrapper method for the request methods of the same names



80
81
82
83
84
85
# File 'lib/base.rb', line 80

def self.get(tokens = '')
  resp = request(:get, tokens)
  return initialize_objects(resp) if resp.is_a?(Array)
  return initialize_object(resp) if resp.is_a?(Hash)
  raise 'Unknown response format'
end

.post(tokens = '', attrs) ⇒ Object



87
88
89
90
# File 'lib/base.rb', line 87

def self.post(tokens = '', attrs)
  resp = request(:post, tokens, attrs)
  initialize_object(resp)
end

.put(tokens, attrs) ⇒ Object



92
93
94
# File 'lib/base.rb', line 92

def self.put(tokens, attrs)
  request(:put, tokens, attrs)
end

.request(verb, tokens = '', params = nil) ⇒ Object

def self.initialize_object(attrs)

obj = new(attrs)
obj.assign_attributes(attrs)

end

def self.initialize_objects(attrs_arr)

attrs_arr.map { |attrs| initialize_object(attrs) }

end



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/base.rb', line 109

def self.request(verb, tokens = '', params = nil)
  # puts "ApiClient::request #{verb},"\
  # " #{BASE_URL}#{path}, #{params}, #{headers}"
  path = method_defined?(:api_path) ? api_path : ''

  response = RestClient::Request.execute(
    method: verb,
    url: api_url + path + tokens,
    payload: params ? serialize(params) : to_json,
    headers: {
      content_type: 'application/json',
      accept: 'application/json'
    }.merge!(api_headers)
  )

  deserialize(response)
end

Instance Method Details

#assign_attributes(_values, _options = {}) ⇒ Object



127
128
129
# File 'lib/base.rb', line 127

def assign_attributes(_values, _options = {})
  send("#{k}=", v)
end

#attributesObject



21
22
23
# File 'lib/base.rb', line 21

def attributes
  @attributes.to_hash
end

#attributes=(hash) ⇒ Object

include ActiveModel::Serializers::Xml



15
16
17
18
19
# File 'lib/base.rb', line 15

def attributes=(hash)
  hash.each do |key, value|
    send("#{key}=", value)
  end
end

#deserialize(payload) ⇒ Object



137
138
139
140
141
# File 'lib/base.rb', line 137

def deserialize(payload)
  # this may not always be json
  # from_xml(payload)
  from_json(payload)
end

#serialize(payload) ⇒ Object



131
132
133
134
135
# File 'lib/base.rb', line 131

def serialize(payload)
  # this may not always be json
  # payload.to_xml
  payload.to_json
end

#update(attrs = {}) ⇒ Object

serialize the attrs and PUT method PUT



58
59
60
61
62
# File 'lib/base.rb', line 58

def update(attrs = {})
  puts name.to_s + ' .update ' + attrs.inspect
  resp = self.class.request(:put, "/#{id}", attrs)
  assign_attributes(resp)
end