Class: Invoiced::Object
- Inherits:
-
Object
show all
- Includes:
- Enumerable
- Defined in:
- lib/invoiced/object.rb
Direct Known Subclasses
Attachment, Charge, Contact, Coupon, CreditBalanceAdjustment, CreditNote, CustomField, Customer, CustomerChasingCadence, Email, EmailTemplate, Estimate, Event, File, GlAccount, Inbox, Invoice, InvoiceChasingCadence, Item, LateFeeSchedule, Letter, LineItem, Member, MerchantAccount, Note, Payment, PaymentMethod, PaymentPlan, PaymentSource, PaymentSourceObject, PdfTemplate, Plan, Refund, Report, Role, SignUpPage, SmsTemplate, Subscription, Task, TaxRate, TaxRule, TextMessage, Theme, Webhook
Constant Summary
collapse
- @@permanent_attributes =
Set.new([:id])
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(client, id = nil, values = {}) ⇒ Object
Returns a new instance of Object.
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/invoiced/object.rb', line 9
def initialize(client, id=nil, values={})
@client = client
@endpoint_base = ''
@endpoint = build_endpoint
@id = id
@values = {}
if !id.nil?
@endpoint += "/#{id}"
@unsaved = Set.new
refresh_from(values.dup.merge({:id => id}))
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# File 'lib/invoiced/object.rb', line 153
def method_missing(name, *args)
if name.to_s.end_with?('=')
attr = name.to_s[0...-1].to_sym
add_accessors([attr])
begin
mth = method(name)
rescue NameError
raise NoMethodError.new("Cannot set #{attr} on this object. HINT: you can't set: #{@@permanent_attributes.to_a.join(', ')}")
end
return mth.call(args[0])
else
return @values[name] if @values.has_key?(name)
end
begin
super
rescue NoMethodError => e
raise e
end
end
|
Instance Attribute Details
Returns the value of attribute client.
5
6
7
|
# File 'lib/invoiced/object.rb', line 5
def client
@client
end
|
Instance Method Details
87
88
89
|
# File 'lib/invoiced/object.rb', line 87
def [](k)
@values[k.to_sym]
end
|
#[]=(k, v) ⇒ Object
91
92
93
|
# File 'lib/invoiced/object.rb', line 91
def []=(k, v)
send(:"#{k}=", v)
end
|
#add_accessors(keys) ⇒ Object
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/invoiced/object.rb', line 133
def add_accessors(keys)
metaclass.instance_eval do
keys.each do |k|
next if @@permanent_attributes.include?(k)
k_eq = :"#{k}="
define_method(k) { @values[k] }
define_method(k_eq) do |v|
if v == ""
raise ArgumentError.new(
"You cannot set #{k} to an empty string." \
"We interpret empty strings as nil in requests." \
"You may set #{self}.#{k} = nil to delete the property.")
end
@values[k] = v
@unsaved.add(k)
end
end
end
end
|
#build_endpoint ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/invoiced/object.rb', line 36
def build_endpoint
if self.class.const_defined? "OBJECT_NAME"
if self.class::OBJECT_NAME == 'inbox'
'/inboxes'
else
'/' + self.class::OBJECT_NAME + 's'
end
else
'/objects'
end
end
|
#each(&blk) ⇒ Object
114
115
116
|
# File 'lib/invoiced/object.rb', line 114
def each(&blk)
@values.each(&blk)
end
|
32
33
34
|
# File 'lib/invoiced/object.rb', line 32
def endpoint()
@endpoint_base + @endpoint
end
|
#endpoint_base ⇒ Object
28
29
30
|
# File 'lib/invoiced/object.rb', line 28
def endpoint_base()
@endpoint_base
end
|
62
63
64
65
|
# File 'lib/invoiced/object.rb', line 62
def inspect
id_string = (!@id.nil?) ? " id=#{@id}" : ""
"#<#{self.class}:0x#{object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
end
|
95
96
97
|
# File 'lib/invoiced/object.rb', line 95
def keys
@values.keys
end
|
118
119
120
|
# File 'lib/invoiced/object.rb', line 118
def metaclass
class << self; self; end
end
|
#refresh_from(values) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/invoiced/object.rb', line 67
def refresh_from(values)
removed = Set.new(@values.keys - values.keys)
added = Set.new(values.keys - @values.keys)
instance_eval do
remove_accessors(removed)
add_accessors(added)
end
removed.each do |k|
@values.delete(k)
@unsaved.delete(k)
end
values.each do |k, v|
@values[k] = v
@unsaved.delete(k)
end
return self
end
|
#remove_accessors(keys) ⇒ Object
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/invoiced/object.rb', line 122
def remove_accessors(keys)
metaclass.instance_eval do
keys.each do |k|
next if @@permanent_attributes.include?(k)
k_eq = :"#{k}="
remove_method(k) if method_defined?(k)
remove_method(k_eq) if method_defined?(k_eq)
end
end
end
|
#retrieve(id, params = {}) ⇒ Object
48
49
50
51
52
53
54
55
56
|
# File 'lib/invoiced/object.rb', line 48
def retrieve(id, params={})
if !id
raise ArgumentError.new("Missing ID.")
end
response = @client.request(:get, "#{endpoint()}/#{id}", params)
Util.convert_to_object(self, response[:body])
end
|
#set_endpoint_base(base) ⇒ Object
23
24
25
26
|
# File 'lib/invoiced/object.rb', line 23
def set_endpoint_base(base)
@endpoint_base = base
self
end
|
107
108
109
110
111
112
|
# File 'lib/invoiced/object.rb', line 107
def to_hash
@values.inject({}) do |acc, (key, value)|
acc[key] = value.respond_to?(:to_hash) ? value.to_hash : value
acc
end
end
|
#to_json(*a) ⇒ Object
103
104
105
|
# File 'lib/invoiced/object.rb', line 103
def to_json(*a)
JSON.generate(@values)
end
|
#to_s(*args) ⇒ Object
58
59
60
|
# File 'lib/invoiced/object.rb', line 58
def to_s(*args)
JSON.pretty_generate(@values)
end
|
99
100
101
|
# File 'lib/invoiced/object.rb', line 99
def values
@values.values
end
|