Class: KillBillClient::Model::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/killbill_client/models/resource.rb

Constant Summary collapse

KILLBILL_API_PREFIX =
'/1.0/kb/'
@@attribute_names =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#etagObject (readonly)

Returns the value of attribute etag.



7
8
9
# File 'lib/killbill_client/models/resource.rb', line 7

def etag
  @etag
end

#responseObject (readonly)

Returns the value of attribute response.



7
8
9
# File 'lib/killbill_client/models/resource.rb', line 7

def response
  @response
end

#session_idObject (readonly)

Returns the value of attribute session_id.



7
8
9
# File 'lib/killbill_client/models/resource.rb', line 7

def session_id
  @session_id
end

#uriObject

Set on create call



173
174
175
# File 'lib/killbill_client/models/resource.rb', line 173

def uri
  @uri
end

Class Method Details

.attribute(name) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/killbill_client/models/resource.rb', line 117

def attribute(name)
 self.send('attr_accessor', name.to_sym)

 self.instance_variable_set('@json_attributes', []) unless self.instance_variable_get('@json_attributes')
 self.instance_variable_get('@json_attributes') << name.to_s

 attributes = self.instance_variable_get('@json_attributes')

 (
  class << self;
    self
  end).send(:define_method, :json_attributes) do
    attributes
  end
end

.create_alias(new_name, old_name) ⇒ Object

hack to cater the api return attributes and javax attributes without editing gen scripts call only after its declared as a instance_method using attr_accessor



151
152
153
154
# File 'lib/killbill_client/models/resource.rb', line 151

def create_alias(new_name, old_name)
  alias_method new_name.to_sym, old_name.to_sym #getter
  alias_method "#{new_name}=".to_sym, "#{old_name}=".to_sym #setter
end

.delete(uri, params = {}, options = {}, clazz = self) ⇒ Object



35
36
37
38
# File 'lib/killbill_client/models/resource.rb', line 35

def delete(uri, params = {}, options = {}, clazz = self)
  response = KillBillClient::API.delete uri, params, options
  from_response clazz, response
end

.extract_session_id(response) ⇒ Object

Extract the session id from a response



157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/killbill_client/models/resource.rb', line 157

def extract_session_id(response)
  # The Set-Cookie header looks like
  # "set-cookie"=>["JSESSIONID=16; Path=/; HttpOnly", "rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sat, 17-Aug-2013 23:39:37 GMT"],
  session_cookie = response['set-cookie']
  unless session_cookie.nil?
    session_cookie.split(';').each do |chunk|
      chunk.strip!
      key, value = chunk.split('=')
      return value if key == 'JSESSIONID'
    end
  end
  nil
end

.from_json(resource_class, json) ⇒ Resource

Instantiates a record from a JSON blob.

Parameters:

  • resource_class (Resource)
  • json (String)

Returns:

See Also:



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/killbill_client/models/resource.rb', line 66

def from_json(resource_class, json)
  # e.g. DELETE
  return nil if json.nil? or json.size == 0
  data = JSON.parse json

  if data.is_a? Array
    records = Resources.new
    data.each do |data_element|
      if data_element.is_a? Enumerable
        records << instantiate_record_from_json(resource_class, data_element)
      else
        # Value (e.g. String)
        records << data_element
      end
    end
    records
  else
    instantiate_record_from_json(resource_class, data)
  end
end

.from_response(resource_class, response) ⇒ Resource

Instantiates a record from an HTTP response, setting the record’s response attribute in the process.

Parameters:

  • resource_class (Resource)
  • response (Net::HTTPResponse)

Returns:



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/killbill_client/models/resource.rb', line 46

def from_response(resource_class, response)
  case response['Content-Type']
  when %r{application/pdf}
    response.body
  when %r{application/json}
    record = from_json resource_class, response.body
    session_id = extract_session_id(response)
    record.instance_eval { @etag, @session_id, @response = response['ETag'], session_id, response }
    record
  else
    raise ArgumentError, "#{response['Content-Type']} is not supported by the library"
  end
end

.get(uri, params = {}, options = {}, clazz = self) ⇒ Object



20
21
22
23
# File 'lib/killbill_client/models/resource.rb', line 20

def get(uri, params = {}, options = {}, clazz = self)
  response = KillBillClient::API.get uri, params, options
  from_response clazz, response
end

.has_many(attr_name, type = nil) ⇒ Object



133
134
135
136
137
138
139
# File 'lib/killbill_client/models/resource.rb', line 133

def has_many(attr_name, type = nil)
  send("attr_accessor", attr_name.to_sym)

  #add it to attribute_names
  @@attribute_names[self.name] = {} unless @@attribute_names[self.name]
  @@attribute_names[self.name][attr_name.to_sym] = {:type => type,  :cardinality => :many }
end

.has_one(attr_name, type = nil) ⇒ Object



141
142
143
144
145
146
147
# File 'lib/killbill_client/models/resource.rb', line 141

def has_one(attr_name, type = nil)
  send("attr_accessor", attr_name.to_sym)

  #add it to attribute_names
  @@attribute_names[self.name] = {} unless @@attribute_names[self.name]
  @@attribute_names[self.name][attr_name.to_sym] = { :type => type, :cardinality => :one }
end

.head(uri, params = {}, options = {}, clazz = self) ⇒ Object



15
16
17
18
# File 'lib/killbill_client/models/resource.rb', line 15

def head(uri, params = {}, options = {}, clazz = self)
  response = KillBillClient::API.head uri, params, options
  from_response clazz, response
end

.instantiate_record_from_json(resource_class, data) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/killbill_client/models/resource.rb', line 87

def instantiate_record_from_json(resource_class, data)
  record = resource_class.send :new
  
  data.each do |name, value|
    name = Utils.underscore name
    attr_desc = @@attribute_names[record.class.name][name.to_sym] rescue nil

    unless attr_desc.nil?
      type = attr_desc[:type]
      if attr_desc[:cardinality] == :many && !type.nil? && value.is_a?(Array)
        newValue = []
        value.each do |val|
          if val.is_a?(Hash)
            newValue << instantiate_record_from_json(type, val)
          else
            newValue << val
          end
        end
        value = newValue
      elsif attr_desc[:cardinality] == :one && !type.nil? && value.is_a?(Hash)
        value = instantiate_record_from_json(type, value)
      end
    end #end unless attr_desc.nil? or data_elem.blank?

    record.send("#{Utils.underscore name}=", value )
  end #end data.each

  record
end

.post(uri, body = nil, params = {}, options = {}, clazz = self) ⇒ Object



25
26
27
28
# File 'lib/killbill_client/models/resource.rb', line 25

def post(uri, body = nil, params = {}, options = {}, clazz = self)
  response = KillBillClient::API.post uri, body, params, options
  from_response clazz, response
end

.put(uri, body = nil, params = {}, options = {}, clazz = self) ⇒ Object



30
31
32
33
# File 'lib/killbill_client/models/resource.rb', line 30

def put(uri, body = nil, params = {}, options = {}, clazz = self)
  response = KillBillClient::API.put uri, body, params, options
  from_response clazz, response
end

Instance Method Details

#refresh(options = {}, clazz = self.class) ⇒ Object



190
191
192
193
194
195
196
# File 'lib/killbill_client/models/resource.rb', line 190

def refresh(options = {}, clazz=self.class)
  if @uri
    self.class.get @uri, {}, options, clazz
  else
    self
  end
end

#to_hashObject



175
176
177
178
179
180
181
182
183
184
# File 'lib/killbill_client/models/resource.rb', line 175

def to_hash
  json_hash = {}
  self.class.json_attributes.each do |name|
    value = self.send(name)
    unless value.nil?
      json_hash[Utils.camelize name, :lower] = value.is_a?(Resource) ? value.to_hash : value
    end
  end
  json_hash
end

#to_jsonObject



186
187
188
# File 'lib/killbill_client/models/resource.rb', line 186

def to_json
  to_hash.to_json
end