invoiced 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,167 +1,167 @@
1
1
  module Invoiced
2
- class Object
3
- include Enumerable
4
-
5
- attr_reader :client
6
-
7
- @@permanent_attributes = Set.new([:id])
8
-
9
- def initialize(client, id=nil, values={})
10
- @client = client
11
- class_name = self.class.name.split('::').last
12
- @endpoint_base = ''
13
- @endpoint = '/' + class_name.underscore.pluralize.downcase
14
-
15
- @id = id
16
- @values = {}
17
-
18
- if !id.nil?
19
- @endpoint += "/#{id}"
20
- @unsaved = Set.new
21
- refresh_from(values.dup.merge({:id => id}))
22
- end
23
- end
24
-
25
- def set_endpoint_base(base)
26
- @endpoint_base = base
27
- self
28
- end
29
-
30
- def endpoint_base()
31
- @endpoint_base
32
- end
33
-
34
- def endpoint()
35
- @endpoint_base + @endpoint
36
- end
37
-
38
- def retrieve(id, opts={})
39
- if !id
40
- raise ArgumentError.new("Missing ID.")
41
- end
42
-
43
- response = @client.request(:get, "#{self.endpoint()}/#{id}", opts)
44
-
45
- Util.convert_to_object(self, response[:body])
46
- end
47
-
48
- def load(opts={})
49
- end
50
-
51
- def to_s(*args)
52
- JSON.pretty_generate(@values)
53
- end
54
-
55
- def inspect
56
- id_string = (!@id.nil?) ? " id=#{@id}" : ""
57
- "#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
58
- end
59
-
60
- def refresh_from(values)
61
- removed = Set.new(@values.keys - values.keys)
62
- added = Set.new(values.keys - @values.keys)
63
-
64
- instance_eval do
65
- remove_accessors(removed)
66
- add_accessors(added)
67
- end
68
- removed.each do |k|
69
- @values.delete(k)
70
- @unsaved.delete(k)
71
- end
72
- values.each do |k, v|
73
- @values[k] = v
74
- @unsaved.delete(k)
75
- end
76
-
77
- return self
78
- end
79
-
80
- def [](k)
81
- @values[k.to_sym]
82
- end
83
-
84
- def []=(k, v)
85
- send(:"#{k}=", v)
86
- end
87
-
88
- def keys
89
- @values.keys
90
- end
91
-
92
- def values
93
- @values.values
94
- end
95
-
96
- def to_json(*a)
97
- JSON.generate(@values)
98
- end
99
-
100
- def to_hash
101
- @values.inject({}) do |acc, (key, value)|
102
- acc[key] = value.respond_to?(:to_hash) ? value.to_hash : value
103
- acc
104
- end
105
- end
106
-
107
- def each(&blk)
108
- @values.each(&blk)
109
- end
110
-
111
- def metaclass
112
- class << self; self; end
113
- end
114
-
115
- def remove_accessors(keys)
116
- metaclass.instance_eval do
117
- keys.each do |k|
118
- next if @@permanent_attributes.include?(k)
119
- k_eq = :"#{k}="
120
- remove_method(k) if method_defined?(k)
121
- remove_method(k_eq) if method_defined?(k_eq)
122
- end
123
- end
124
- end
125
-
126
- def add_accessors(keys)
127
- metaclass.instance_eval do
128
- keys.each do |k|
129
- next if @@permanent_attributes.include?(k)
130
- k_eq = :"#{k}="
131
- define_method(k) { @values[k] }
132
- define_method(k_eq) do |v|
133
- if v == ""
134
- raise ArgumentError.new(
135
- "You cannot set #{k} to an empty string." \
136
- "We interpret empty strings as nil in requests." \
137
- "You may set #{self}.#{k} = nil to delete the property.")
138
- end
139
- @values[k] = v
140
- @unsaved.add(k)
141
- end
142
- end
143
- end
144
- end
145
-
146
- def method_missing(name, *args)
147
- if name.to_s.end_with?('=')
148
- attr = name.to_s[0...-1].to_sym
149
- add_accessors([attr])
150
- begin
151
- mth = method(name)
152
- rescue NameError
153
- raise NoMethodError.new("Cannot set #{attr} on this object. HINT: you can't set: #{@@permanent_attributes.to_a.join(', ')}")
154
- end
155
- return mth.call(args[0])
156
- else
157
- return @values[name] if @values.has_key?(name)
158
- end
159
-
160
- begin
161
- super
162
- rescue NoMethodError => e
163
- raise e
164
- end
165
- end
166
- end
2
+ class Object
3
+ include Enumerable
4
+
5
+ attr_reader :client
6
+
7
+ @@permanent_attributes = Set.new([:id])
8
+
9
+ def initialize(client, id=nil, values={})
10
+ @client = client
11
+ class_name = self.class.name.split('::').last
12
+ @endpoint_base = ''
13
+ @endpoint = '/' + class_name.underscore.pluralize.downcase
14
+
15
+ @id = id
16
+ @values = {}
17
+
18
+ if !id.nil?
19
+ @endpoint += "/#{id}"
20
+ @unsaved = Set.new
21
+ refresh_from(values.dup.merge({:id => id}))
22
+ end
23
+ end
24
+
25
+ def set_endpoint_base(base)
26
+ @endpoint_base = base
27
+ self
28
+ end
29
+
30
+ def endpoint_base()
31
+ @endpoint_base
32
+ end
33
+
34
+ def endpoint()
35
+ @endpoint_base + @endpoint
36
+ end
37
+
38
+ def retrieve(id, opts={})
39
+ if !id
40
+ raise ArgumentError.new("Missing ID.")
41
+ end
42
+
43
+ response = @client.request(:get, "#{self.endpoint()}/#{id}", opts)
44
+
45
+ Util.convert_to_object(self, response[:body])
46
+ end
47
+
48
+ def load(opts={})
49
+ end
50
+
51
+ def to_s(*args)
52
+ JSON.pretty_generate(@values)
53
+ end
54
+
55
+ def inspect
56
+ id_string = (!@id.nil?) ? " id=#{@id}" : ""
57
+ "#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@values)
58
+ end
59
+
60
+ def refresh_from(values)
61
+ removed = Set.new(@values.keys - values.keys)
62
+ added = Set.new(values.keys - @values.keys)
63
+
64
+ instance_eval do
65
+ remove_accessors(removed)
66
+ add_accessors(added)
67
+ end
68
+ removed.each do |k|
69
+ @values.delete(k)
70
+ @unsaved.delete(k)
71
+ end
72
+ values.each do |k, v|
73
+ @values[k] = v
74
+ @unsaved.delete(k)
75
+ end
76
+
77
+ return self
78
+ end
79
+
80
+ def [](k)
81
+ @values[k.to_sym]
82
+ end
83
+
84
+ def []=(k, v)
85
+ send(:"#{k}=", v)
86
+ end
87
+
88
+ def keys
89
+ @values.keys
90
+ end
91
+
92
+ def values
93
+ @values.values
94
+ end
95
+
96
+ def to_json(*a)
97
+ JSON.generate(@values)
98
+ end
99
+
100
+ def to_hash
101
+ @values.inject({}) do |acc, (key, value)|
102
+ acc[key] = value.respond_to?(:to_hash) ? value.to_hash : value
103
+ acc
104
+ end
105
+ end
106
+
107
+ def each(&blk)
108
+ @values.each(&blk)
109
+ end
110
+
111
+ def metaclass
112
+ class << self; self; end
113
+ end
114
+
115
+ def remove_accessors(keys)
116
+ metaclass.instance_eval do
117
+ keys.each do |k|
118
+ next if @@permanent_attributes.include?(k)
119
+ k_eq = :"#{k}="
120
+ remove_method(k) if method_defined?(k)
121
+ remove_method(k_eq) if method_defined?(k_eq)
122
+ end
123
+ end
124
+ end
125
+
126
+ def add_accessors(keys)
127
+ metaclass.instance_eval do
128
+ keys.each do |k|
129
+ next if @@permanent_attributes.include?(k)
130
+ k_eq = :"#{k}="
131
+ define_method(k) { @values[k] }
132
+ define_method(k_eq) do |v|
133
+ if v == ""
134
+ raise ArgumentError.new(
135
+ "You cannot set #{k} to an empty string." \
136
+ "We interpret empty strings as nil in requests." \
137
+ "You may set #{self}.#{k} = nil to delete the property.")
138
+ end
139
+ @values[k] = v
140
+ @unsaved.add(k)
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ def method_missing(name, *args)
147
+ if name.to_s.end_with?('=')
148
+ attr = name.to_s[0...-1].to_sym
149
+ add_accessors([attr])
150
+ begin
151
+ mth = method(name)
152
+ rescue NameError
153
+ raise NoMethodError.new("Cannot set #{attr} on this object. HINT: you can't set: #{@@permanent_attributes.to_a.join(', ')}")
154
+ end
155
+ return mth.call(args[0])
156
+ else
157
+ return @values[name] if @values.has_key?(name)
158
+ end
159
+
160
+ begin
161
+ super
162
+ rescue NoMethodError => e
163
+ raise e
164
+ end
165
+ end
166
+ end
167
167
  end
@@ -1,11 +1,11 @@
1
1
  module Invoiced
2
- module Operations
3
- module Create
4
- def create(body={})
5
- response = @client.request(:post, self.endpoint(), body)
2
+ module Operations
3
+ module Create
4
+ def create(body={})
5
+ response = @client.request(:post, self.endpoint(), body)
6
6
 
7
- Util.convert_to_object(self, response[:body])
8
- end
9
- end
10
- end
7
+ Util.convert_to_object(self, response[:body])
8
+ end
9
+ end
10
+ end
11
11
  end
@@ -1,18 +1,18 @@
1
1
  module Invoiced
2
- module Operations
3
- module Delete
4
- def delete
5
- response = @client.request(:delete, self.endpoint())
2
+ module Operations
3
+ module Delete
4
+ def delete
5
+ response = @client.request(:delete, self.endpoint())
6
6
 
7
- if response[:code] == 204
7
+ if response[:code] == 204
8
8
  refresh_from({:id => @id})
9
9
  elsif response[:code] == 200
10
10
  # update the local values with the response
11
11
  refresh_from(response[:body].dup.merge({:id => self.id}))
12
- end
12
+ end
13
13
 
14
- return response[:code] == 204 || response[:code] == 200
15
- end
16
- end
17
- end
14
+ return response[:code] == 204 || response[:code] == 200
15
+ end
16
+ end
17
+ end
18
18
  end
@@ -1,17 +1,17 @@
1
1
  module Invoiced
2
- module Operations
3
- module List
4
- def list(opts={})
5
- response = @client.request(:get, self.endpoint(), opts)
2
+ module Operations
3
+ module List
4
+ def list(opts={})
5
+ response = @client.request(:get, self.endpoint(), opts)
6
6
 
7
- # build objects
8
- objects = Util.build_objects(self, response[:body])
7
+ # build objects
8
+ objects = Util.build_objects(self, response[:body])
9
9
 
10
- # store the metadata from the list operation
11
- metadata = Invoiced::List.new(response[:headers][:link], response[:headers][:x_total_count])
10
+ # store the metadata from the list operation
11
+ metadata = Invoiced::List.new(response[:headers][:link], response[:headers][:x_total_count])
12
12
 
13
- return objects, metadata
14
- end
15
- end
16
- end
13
+ return objects, metadata
14
+ end
15
+ end
16
+ end
17
17
  end
@@ -1,27 +1,27 @@
1
1
  module Invoiced
2
- module Operations
3
- module Update
4
- def save(params = {})
5
- update = {}
2
+ module Operations
3
+ module Update
4
+ def save(params = {})
5
+ update = {}
6
6
 
7
- @unsaved.each do |k|
8
- update[k] = @values[k]
9
- end
7
+ @unsaved.each do |k|
8
+ update[k] = @values[k]
9
+ end
10
10
 
11
- update.merge(params)
11
+ update.merge(params)
12
12
 
13
- # perform the update if there are any changes
14
- if update.length > 0
15
- response = @client.request(:patch, self.endpoint(), update)
13
+ # perform the update if there are any changes
14
+ if update.length > 0
15
+ response = @client.request(:patch, self.endpoint(), update)
16
16
 
17
- # update the local values with the response
18
- refresh_from(response[:body].dup.merge({:id => self.id}))
17
+ # update the local values with the response
18
+ refresh_from(response[:body].dup.merge({:id => self.id}))
19
19
 
20
- return response[:code] == 200
21
- end
20
+ return response[:code] == 200
21
+ end
22
22
 
23
- false
24
- end
25
- end
26
- end
23
+ false
24
+ end
25
+ end
26
+ end
27
27
  end
@@ -1,12 +1,12 @@
1
1
  module Invoiced
2
2
  class Subscription < Object
3
- include Invoiced::Operations::List
4
- include Invoiced::Operations::Create
5
- include Invoiced::Operations::Update
6
- include Invoiced::Operations::Delete
3
+ include Invoiced::Operations::List
4
+ include Invoiced::Operations::Create
5
+ include Invoiced::Operations::Update
6
+ include Invoiced::Operations::Delete
7
7
 
8
- def cancel
9
- delete
10
- end
11
- end
8
+ def cancel
9
+ delete
10
+ end
11
+ end
12
12
  end
@@ -1,22 +1,22 @@
1
1
  module Invoiced
2
2
  class Transaction < Object
3
- include Invoiced::Operations::List
4
- include Invoiced::Operations::Create
5
- include Invoiced::Operations::Update
6
- include Invoiced::Operations::Delete
3
+ include Invoiced::Operations::List
4
+ include Invoiced::Operations::Create
5
+ include Invoiced::Operations::Update
6
+ include Invoiced::Operations::Delete
7
7
 
8
- def send(opts={})
9
- response = @client.request(:post, "#{self.endpoint()}/emails", opts)
8
+ def send(opts={})
9
+ response = @client.request(:post, "#{self.endpoint()}/emails", opts)
10
10
 
11
- # build email objects
12
- email = Email.new(@client)
13
- Util.build_objects(email, response[:body])
14
- end
11
+ # build email objects
12
+ email = Email.new(@client)
13
+ Util.build_objects(email, response[:body])
14
+ end
15
15
 
16
- def refund(opts={})
17
- response = @client.request(:post, "#{self.endpoint()}/refunds", opts)
16
+ def refund(opts={})
17
+ response = @client.request(:post, "#{self.endpoint()}/refunds", opts)
18
18
 
19
- Util.convert_to_object(self, response[:body])
20
- end
21
- end
19
+ Util.convert_to_object(self, response[:body])
20
+ end
21
+ end
22
22
  end
data/lib/invoiced/util.rb CHANGED
@@ -1,60 +1,60 @@
1
1
  module Invoiced
2
- class Util
3
- class << self
4
- def auth_header(api_key)
5
- "Basic " + Base64.strict_encode64(api_key + ":")
6
- end
2
+ class Util
3
+ class << self
4
+ def auth_header(api_key)
5
+ "Basic " + Base64.strict_encode64(api_key + ":")
6
+ end
7
7
 
8
- def uri_encode(params)
9
- flatten_params(params).
10
- map { |k,v| "#{k}=#{url_encode(v)}" }.join('&')
11
- end
8
+ def uri_encode(params)
9
+ flatten_params(params).
10
+ map { |k,v| "#{k}=#{url_encode(v)}" }.join('&')
11
+ end
12
12
 
13
- def build_objects(_class, objects)
14
- objects.map {
15
- |object| convert_to_object(_class, object)
16
- }
17
- end
13
+ def build_objects(_class, objects)
14
+ objects.map {
15
+ |object| convert_to_object(_class, object)
16
+ }
17
+ end
18
18
 
19
- def convert_to_object(_class, values)
20
- object = _class.class.new(_class.client, values[:id], values)
21
- object.set_endpoint_base(_class.endpoint_base())
22
- end
19
+ def convert_to_object(_class, values)
20
+ object = _class.class.new(_class.client, values[:id], values)
21
+ object.set_endpoint_base(_class.endpoint_base())
22
+ end
23
23
 
24
- private
24
+ private
25
25
 
26
- def url_encode(params)
27
- URI.escape(params.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
28
- end
26
+ def url_encode(params)
27
+ URI.encode_www_form_component(params)
28
+ end
29
29
 
30
- def flatten_params(params, parent_key=nil)
31
- result = []
32
- params.each do |key, value|
33
- calculated_key = parent_key ? "#{parent_key}[#{url_encode(key)}]" : url_encode(key)
34
- if value.is_a?(Hash)
35
- result += flatten_params(value, calculated_key)
36
- elsif value.is_a?(Array)
37
- result += flatten_params_array(value, calculated_key)
38
- else
39
- result << [calculated_key, value]
40
- end
41
- end
42
- result
43
- end
30
+ def flatten_params(params, parent_key=nil)
31
+ result = []
32
+ params.each do |key, value|
33
+ calculated_key = parent_key ? "#{parent_key}[#{url_encode(key)}]" : url_encode(key)
34
+ if value.is_a?(Hash)
35
+ result += flatten_params(value, calculated_key)
36
+ elsif value.is_a?(Array)
37
+ result += flatten_params_array(value, calculated_key)
38
+ else
39
+ result << [calculated_key, value]
40
+ end
41
+ end
42
+ result
43
+ end
44
44
 
45
- def flatten_params_array(value, calculated_key)
46
- result = []
47
- value.each do |elem|
48
- if elem.is_a?(Hash)
49
- result += flatten_params(elem, "#{calculated_key}[]")
50
- elsif elem.is_a?(Array)
51
- result += flatten_params_array(elem, calculated_key)
52
- else
53
- result << ["#{calculated_key}[]", elem]
54
- end
55
- end
56
- result
57
- end
58
- end
59
- end
45
+ def flatten_params_array(value, calculated_key)
46
+ result = []
47
+ value.each do |elem|
48
+ if elem.is_a?(Hash)
49
+ result += flatten_params(elem, "#{calculated_key}[]")
50
+ elsif elem.is_a?(Array)
51
+ result += flatten_params_array(elem, calculated_key)
52
+ else
53
+ result << ["#{calculated_key}[]", elem]
54
+ end
55
+ end
56
+ result
57
+ end
58
+ end
59
+ end
60
60
  end
@@ -1,3 +1,3 @@
1
1
  module Invoiced
2
- VERSION = '0.7.0'
2
+ VERSION = '0.8.0'
3
3
  end