her 0.2 → 0.2.1

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.
@@ -2,5 +2,7 @@ module Her
2
2
  module Middleware
3
3
  autoload :FirstLevelParseJSON, "her/middleware/first_level_parse_json"
4
4
  autoload :SecondLevelParseJSON, "her/middleware/second_level_parse_json"
5
+
6
+ DefaultParseJSON = FirstLevelParseJSON
5
7
  end
6
8
  end
data/lib/her/model.rb CHANGED
@@ -16,12 +16,14 @@ module Her
16
16
  autoload :Relationships, "her/model/relationships"
17
17
  autoload :Hooks, "her/model/hooks"
18
18
  autoload :Introspection, "her/model/introspection"
19
+ autoload :Paths, "her/model/paths"
19
20
 
20
21
  extend ActiveSupport::Concern
21
22
 
22
23
  # Instance methods
23
24
  include Her::Model::ORM
24
25
  include Her::Model::Introspection
26
+ include Her::Model::Paths
25
27
 
26
28
  # Class methods
27
29
  included do
@@ -30,10 +32,11 @@ module Her
30
32
  extend Her::Model::ORM
31
33
  extend Her::Model::Relationships
32
34
  extend Her::Model::Hooks
35
+ extend Her::Model::Paths
33
36
 
34
37
  # Define default settings
35
- collection_path "#{self.to_s.downcase.pluralize}"
36
- item_path "#{self.to_s.downcase}"
38
+ collection_path "/#{self.to_s.downcase.pluralize}"
39
+ resource_path "/#{self.to_s.downcase.pluralize}/:id"
37
40
  uses_api Her::API.default_api
38
41
  end
39
42
  end
@@ -7,30 +7,6 @@ module Her
7
7
  @her_api = api
8
8
  end # }}}
9
9
 
10
- # Defines a custom collection path for the resource
11
- #
12
- # @example
13
- # class User
14
- # include Her::Model
15
- # collection_path "users"
16
- # end
17
- def collection_path(path=nil) # {{{
18
- return @her_collection_path unless path
19
- @her_collection_path = path
20
- end # }}}
21
-
22
- # Defines a custom item path for the resource
23
- #
24
- # @example
25
- # class User
26
- # include Her::Model
27
- # item_path "user"
28
- # end
29
- def item_path(path=nil) # {{{
30
- return @her_item_path unless path
31
- @her_item_path = path
32
- end # }}}
33
-
34
10
  # Main request wrapper around Her::API. Used to make custom request to the API.
35
11
  # @private
36
12
  def request(attrs={}, &block) # {{{
@@ -47,7 +23,7 @@ module Her
47
23
  # @popular_users = User.get(:popular)
48
24
  # # Fetched via GET "/users/popular"
49
25
  def get(path, attrs={}) # {{{
50
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
26
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
51
27
  get_raw(path, attrs) do |parsed_data|
52
28
  if parsed_data[:data].is_a?(Array)
53
29
  new_collection(parsed_data)
@@ -59,13 +35,13 @@ module Her
59
35
 
60
36
  # Make a GET request and return the parsed JSON response (not mapped to objects)
61
37
  def get_raw(path, attrs={}, &block) # {{{
62
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
38
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
63
39
  request(attrs.merge(:_method => :get, :_path => path), &block)
64
40
  end # }}}
65
41
 
66
42
  # Make a GET request and return a collection of resources
67
43
  def get_collection(path, attrs={}) # {{{
68
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
44
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
69
45
  get_raw(path, attrs) do |parsed_data|
70
46
  new_collection(parsed_data)
71
47
  end
@@ -73,7 +49,7 @@ module Her
73
49
 
74
50
  # Make a GET request and return a collection of resources
75
51
  def get_resource(path, attrs={}) # {{{
76
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
52
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
77
53
  get_raw(path, attrs) do |parsed_data|
78
54
  new(parsed_data[:data])
79
55
  end
@@ -81,7 +57,7 @@ module Her
81
57
 
82
58
  # Make a POST request and return either a collection or a resource
83
59
  def post(path, attrs={}) # {{{
84
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
60
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
85
61
  post_raw(path, attrs) do |parsed_data|
86
62
  if parsed_data[:data].is_a?(Array)
87
63
  new_collection(parsed_data)
@@ -93,13 +69,13 @@ module Her
93
69
 
94
70
  # Make a POST request and return the parsed JSON response (not mapped to objects)
95
71
  def post_raw(path, attrs={}, &block) # {{{
96
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
72
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
97
73
  request(attrs.merge(:_method => :post, :_path => path), &block)
98
74
  end # }}}
99
75
 
100
76
  # Make a POST request and return a collection of resources
101
77
  def post_collection(path, attrs={}) # {{{
102
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
78
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
103
79
  post_raw(path, attrs) do |parsed_data|
104
80
  new_collection(parsed_data)
105
81
  end
@@ -107,7 +83,7 @@ module Her
107
83
 
108
84
  # Make a POST request and return a collection of resources
109
85
  def post_resource(path, attrs={}) # {{{
110
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
86
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
111
87
  post_raw(path, attrs) do |parsed_data|
112
88
  new(parsed_data[:data])
113
89
  end
@@ -115,7 +91,7 @@ module Her
115
91
 
116
92
  # Make a PUT request and return either a collection or a resource
117
93
  def put(path, attrs={}) # {{{
118
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
94
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
119
95
  put_raw(path, attrs) do |parsed_data|
120
96
  if parsed_data[:data].is_a?(Array)
121
97
  new_collection(parsed_data)
@@ -127,13 +103,13 @@ module Her
127
103
 
128
104
  # Make a PUT request and return the parsed JSON response (not mapped to objects)
129
105
  def put_raw(path, attrs={}, &block) # {{{
130
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
106
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
131
107
  request(attrs.merge(:_method => :put, :_path => path), &block)
132
108
  end # }}}
133
109
 
134
110
  # Make a PUT request and return a collection of resources
135
111
  def put_collection(path, attrs={}) # {{{
136
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
112
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
137
113
  put_raw(path, attrs) do |parsed_data|
138
114
  new_collection(parsed_data)
139
115
  end
@@ -141,7 +117,7 @@ module Her
141
117
 
142
118
  # Make a PUT request and return a collection of resources
143
119
  def put_resource(path, attrs={}) # {{{
144
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
120
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
145
121
  put_raw(path, attrs) do |parsed_data|
146
122
  new(parsed_data[:data])
147
123
  end
@@ -149,7 +125,7 @@ module Her
149
125
 
150
126
  # Make a PATCH request and return either a collection or a resource
151
127
  def patch(path, attrs={}) # {{{
152
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
128
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
153
129
  patch_raw(path, attrs) do |parsed_data|
154
130
  if parsed_data[:data].is_a?(Array)
155
131
  new_collection(parsed_data)
@@ -161,13 +137,13 @@ module Her
161
137
 
162
138
  # Make a PATCH request and return the parsed JSON response (not mapped to objects)
163
139
  def patch_raw(path, attrs={}, &block) # {{{
164
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
140
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
165
141
  request(attrs.merge(:_method => :patch, :_path => path), &block)
166
142
  end # }}}
167
143
 
168
144
  # Make a PATCH request and return a collection of resources
169
145
  def patch_collection(path, attrs={}) # {{{
170
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
146
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
171
147
  patch_raw(path, attrs) do |parsed_data|
172
148
  new_collection(parsed_data)
173
149
  end
@@ -175,7 +151,7 @@ module Her
175
151
 
176
152
  # Make a PATCH request and return a collection of resources
177
153
  def patch_resource(path, attrs={}) # {{{
178
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
154
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
179
155
  patch_raw(path, attrs) do |parsed_data|
180
156
  new(parsed_data[:data])
181
157
  end
@@ -183,7 +159,7 @@ module Her
183
159
 
184
160
  # Make a DELETE request and return either a collection or a resource
185
161
  def delete(path, attrs={}) # {{{
186
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
162
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
187
163
  delete_raw(path, attrs) do |parsed_data|
188
164
  if parsed_data[:data].is_a?(Array)
189
165
  new_collection(parsed_data)
@@ -195,13 +171,13 @@ module Her
195
171
 
196
172
  # Make a DELETE request and return the parsed JSON response (not mapped to objects)
197
173
  def delete_raw(path, attrs={}, &block) # {{{
198
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
174
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
199
175
  request(attrs.merge(:_method => :delete, :_path => path), &block)
200
176
  end # }}}
201
177
 
202
178
  # Make a DELETE request and return a collection of resources
203
179
  def delete_collection(path, attrs={}) # {{{
204
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
180
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
205
181
  delete_raw(path, attrs) do |parsed_data|
206
182
  new_collection(parsed_data)
207
183
  end
@@ -209,7 +185,7 @@ module Her
209
185
 
210
186
  # Make a DELETE request and return a collection of resources
211
187
  def delete_resource(path, attrs={}) # {{{
212
- path = "#{@her_collection_path}/#{path}" if path.is_a?(Symbol)
188
+ path = "#{build_request_path(attrs)}/#{path}" if path.is_a?(Symbol)
213
189
  delete_raw(path, attrs) do |parsed_data|
214
190
  new(parsed_data[:data])
215
191
  end
@@ -11,9 +11,7 @@ module Her
11
11
  # @user = User.find(1)
12
12
  # p @user # => #<User(/users/1) id=1 name="Tobias Fünke">
13
13
  def inspect # {{{
14
- resource_path = self.class.collection_path
15
- resource_path << "/#{id}" if @data.include?(:id)
16
- "#<#{self.class}(#{resource_path}) #{@data.inject([]) { |memo, item| key, value = item; memo << "#{key}=#{attribute_for_inspect(value)}"}.join(" ")}>"
14
+ "#<#{self.class}(#{self.class.build_request_path(@data)}) #{@data.inject([]) { |memo, item| key, value = item; memo << "#{key}=#{attribute_for_inspect(value)}"}.join(" ")}>"
17
15
  end # }}}
18
16
 
19
17
  private
data/lib/her/model/orm.rb CHANGED
@@ -50,7 +50,7 @@ module Her
50
50
  # @user = User.find(1)
51
51
  # # Fetched via GET "/users/1"
52
52
  def find(id, params={}) # {{{
53
- request(params.merge(:_method => :get, :_path => "#{@her_collection_path}/#{id}")) do |parsed_data|
53
+ request(params.merge(:_method => :get, :_path => "#{build_request_path(params.merge(:id => id))}")) do |parsed_data|
54
54
  new(parsed_data[:data])
55
55
  end
56
56
  end # }}}
@@ -61,7 +61,7 @@ module Her
61
61
  # @users = User.all
62
62
  # # Fetched via GET "/users"
63
63
  def all(params={}) # {{{
64
- request(params.merge(:_method => :get, :_path => "#{@her_collection_path}")) do |parsed_data|
64
+ request(params.merge(:_method => :get, :_path => "#{build_request_path(params)}")) do |parsed_data|
65
65
  new_collection(parsed_data)
66
66
  end
67
67
  end # }}}
@@ -76,7 +76,7 @@ module Her
76
76
  perform_hook(resource, :before, :create)
77
77
  perform_hook(resource, :before, :save)
78
78
  params = resource.instance_eval { @data }
79
- request(params.merge(:_method => :post, :_path => "#{@her_collection_path}")) do |parsed_data|
79
+ request(params.merge(:_method => :post, :_path => "#{build_request_path(params)}")) do |parsed_data|
80
80
  resource.instance_eval do
81
81
  @data = parsed_data[:data]
82
82
  end
@@ -118,7 +118,7 @@ module Her
118
118
  perform_hook(resource, :before, :update)
119
119
  perform_hook(resource, :before, :save)
120
120
  end
121
- self.class.request(params.merge(:_method => :put, :_path => "#{self.class.collection_path}/#{id}")) do |parsed_data|
121
+ self.class.request(params.merge(:_method => :put, :_path => "#{request_path}")) do |parsed_data|
122
122
  @data = parsed_data[:data]
123
123
  end
124
124
  self.class.class_eval do
@@ -131,7 +131,7 @@ module Her
131
131
  perform_hook(resource, :before, :create)
132
132
  perform_hook(resource, :before, :save)
133
133
  end
134
- self.class.request(params.merge(:_method => :post, :_path => "#{self.class.collection_path}")) do |parsed_data|
134
+ self.class.request(params.merge(:_method => :post, :_path => "#{request_path}")) do |parsed_data|
135
135
  @data = parsed_data[:data]
136
136
  end
137
137
  self.class.class_eval do
@@ -152,7 +152,7 @@ module Her
152
152
  params = @data.dup
153
153
  resource = self
154
154
  self.class.class_eval { perform_hook(resource, :before, :destroy) }
155
- self.class.request(params.merge(:_method => :delete, :_path => "#{self.class.collection_path}/#{id}")) do |parsed_data|
155
+ self.class.request(params.merge(:_method => :delete, :_path => "#{request_path}")) do |parsed_data|
156
156
  @data = parsed_data[:data]
157
157
  end
158
158
  self.class.class_eval { perform_hook(resource, :after, :destroy) }
@@ -164,9 +164,8 @@ module Her
164
164
  # @example
165
165
  # User.destroy_existing(1)
166
166
  # # Called via DELETE "/users/1"
167
- def destroy_existing(id) # {{{
168
- params = {}
169
- request(params.merge(:_method => :delete, :_path => "#{collection_path}/#{id}")) do |parsed_data|
167
+ def destroy_existing(id, params={}) # {{{
168
+ request(params.merge(:_method => :delete, :_path => "#{build_request_path(params.merge(:id => id))}")) do |parsed_data|
170
169
  new(parsed_data[:data])
171
170
  end
172
171
  end # }}}
@@ -0,0 +1,59 @@
1
+ module Her
2
+ module Model
3
+ module Paths
4
+ # Defines a custom collection path for the resource
5
+ #
6
+ # @example
7
+ # class User
8
+ # include Her::Model
9
+ # collection_path "/users"
10
+ # end
11
+ def collection_path(path=nil) # {{{
12
+ return @her_collection_path unless path
13
+ @her_resource_path = "#{path}/:id"
14
+ @her_collection_path = path
15
+ end # }}}
16
+
17
+ # Defines a custom resource path for the resource
18
+ #
19
+ # @example
20
+ # class User
21
+ # include Her::Model
22
+ # resource_path "/users/:id"
23
+ # end
24
+ def resource_path(path=nil) # {{{
25
+ return @her_resource_path unless path
26
+ @her_resource_path = path
27
+ end # }}}
28
+
29
+ # Return a custom path based on the collection path and variable parameters
30
+ #
31
+ # @example
32
+ # class User
33
+ # include Her::Model
34
+ # collection_path "/utilisateurs"
35
+ # end
36
+ #
37
+ # User.all # Fetched via GET /utilisateurs
38
+ def build_request_path(parameters={}) # {{{
39
+ (path = parameters.include?(:id) ? @her_resource_path : @her_collection_path).gsub(/:([\w_]+)/) do
40
+ # Look for :key or :_key, otherwise raise an exception
41
+ parameters[$1.to_sym] || parameters["_#{$1}".to_sym] || raise(Her::Errors::PathError.new("Missing :_#{$1} parameter to build the request path (#{path})."))
42
+ end
43
+ end # }}}
44
+
45
+ # Return a path based on the collection path and a resource data
46
+ #
47
+ # @example
48
+ # class User
49
+ # include Her::Model
50
+ # collection_path "/utilisateurs"
51
+ # end
52
+ #
53
+ # User.find(1) # Fetched via GET /utilisateurs/1
54
+ def request_path # {{{
55
+ self.class.build_request_path(@data)
56
+ end # }}}
57
+ end
58
+ end
59
+ end
@@ -49,11 +49,10 @@ module Her
49
49
  def has_many(name, attrs={}) # {{{
50
50
  @her_relationships ||= {}
51
51
  (@her_relationships[:has_many] ||= []) << attrs.merge(:name => name)
52
- collection_path = @her_collection_path
53
52
 
54
53
  define_method(name) do
55
54
  return @data[name] if @data.include?(name) # Do not fetch from API again if we have it in @data
56
- self.class.get_collection("#{collection_path}/#{id}/#{Object.const_get(name.to_s.classify).collection_path}")
55
+ self.class.get_collection("#{self.class.build_request_path(:id => id)}/#{name.to_s.pluralize}")
57
56
  end
58
57
  end # }}}
59
58
 
@@ -78,11 +77,10 @@ module Her
78
77
  def has_one(name, attrs={}) # {{{
79
78
  @her_relationships ||= {}
80
79
  (@her_relationships[:has_one] ||= []) << attrs.merge(:name => name)
81
- collection_path = @her_collection_path
82
80
 
83
81
  define_method(name) do
84
82
  return @data[name] if @data.include?(name) # Do not fetch from API again if we have it in @data
85
- self.class.get_resource("#{collection_path}/#{id}/#{Object.const_get(name.to_s.classify).item_path}")
83
+ self.class.get_resource("#{self.class.build_request_path(:id => id)}/#{name.to_s.singularize}")
86
84
  end
87
85
  end # }}}
88
86
 
@@ -107,11 +105,10 @@ module Her
107
105
  def belongs_to(name, attrs={}) # {{{
108
106
  @her_relationships ||= {}
109
107
  (@her_relationships[:belongs_to] ||= []) << attrs.merge(:name => name)
110
- collection_path = @her_collection_path
111
108
 
112
109
  define_method(name) do
113
110
  return @data[name] if @data.include?(name) # Do not fetch from API again if we have it in @data
114
- self.class.get_resource("#{Object.const_get(name.to_s.classify).collection_path}/#{@data["#{name}_id".to_sym]}")
111
+ self.class.get_resource("#{Object.const_get(name.to_s.classify).build_request_path(:id => @data["#{name}_id".to_sym])}")
115
112
  end
116
113
  end # }}}
117
114
  end
data/lib/her/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Her
2
- VERSION = "0.2"
2
+ VERSION = "0.2.1"
3
3
  end
data/spec/api_spec.rb CHANGED
@@ -16,36 +16,6 @@ describe Her::API do
16
16
  @api.setup :base_uri => "https://api.example.com"
17
17
  @api.base_uri.should == "https://api.example.com"
18
18
  end # }}}
19
-
20
- it "sets additional middleware" do # {{{
21
- class Foo < Faraday::Response::Middleware; end;
22
- class Bar < Faraday::Response::Middleware; end;
23
-
24
- @api = Her::API.new
25
- @api.setup :base_uri => "https://api.example.com", :add_middleware => [Foo, Bar]
26
- @api.middleware.should == [Foo, Bar, Her::Middleware::FirstLevelParseJSON, Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]
27
-
28
- @api = Her::API.new
29
- @api.setup :base_uri => "https://api.example.com", :add_middleware => Foo
30
- @api.middleware.should == [Foo, Her::Middleware::FirstLevelParseJSON, Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]
31
- end # }}}
32
-
33
- it "overrides middleware" do # {{{
34
- class Foo < Faraday::Response::Middleware; end;
35
- class Bar < Faraday::Response::Middleware; end;
36
-
37
- @api = Her::API.new
38
- @api.setup :base_uri => "https://api.example.com", :middleware => [Foo, Bar]
39
- @api.middleware.should == [Foo, Bar]
40
- end # }}}
41
-
42
- it "sets a parse middleware" do # {{{
43
- class Foo < Faraday::Response::Middleware; end;
44
-
45
- @api = Her::API.new
46
- @api.setup :base_uri => "https://api.example.com", :parse_middleware => Foo
47
- @api.middleware.should == [Foo, Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]
48
- end # }}}
49
19
  end
50
20
 
51
21
  describe "#request" do
@@ -59,22 +29,20 @@ describe Her::API do
59
29
  end
60
30
 
61
31
  @api = Her::API.new
62
- @api.setup :base_uri => "https://api.example.com", :middleware => []
63
- @api.request(:_method => :get, :_path => "/foo") do |parsed_data|
64
- parsed_data[:data] == "Foo, it is."
65
- end
32
+ @api.setup :base_uri => "https://api.example.com", :parse_middleware => Foo
33
+ parsed_data = @api.request(:_method => :get, :_path => "/foo")
34
+ parsed_data[:data] == "Foo, it is."
66
35
  end # }}}
67
36
 
68
37
  it "parses a request with the default parser" do # {{{
69
- FakeWeb.register_uri(:get, "https://api.example.com/users/1", :body => MultiJson.dump(:data => { :id => 1, :name => "George Michael Bluth" }, :errors => ["This is a single error"], :metadata => { :page => 1, :per_page => 10 }))
38
+ FakeWeb.register_uri(:get, "https://api.example.com/users/1", :body => MultiJson.dump({ :id => 1, :name => "George Michael Bluth", :errors => ["This is a single error"], :metadata => { :page => 1, :per_page => 10 } }))
70
39
 
71
40
  @api = Her::API.new
72
41
  @api.setup :base_uri => "https://api.example.com"
73
- @api.request(:_method => :get, :_path => "users/1") do |parsed_data|
74
- parsed_data[:data].should == { :id => 1, :name => "George Michael Bluth" }
75
- parsed_data[:errors].should == ["This is a single error"]
76
- parsed_data[:metadata].should == { :page => 1, :per_page => 10 }
77
- end
42
+ parsed_data = @api.request(:_method => :get, :_path => "users/1")
43
+ parsed_data[:data].should == { :id => 1, :name => "George Michael Bluth" }
44
+ parsed_data[:errors].should == ["This is a single error"]
45
+ parsed_data[:metadata].should == { :page => 1, :per_page => 10 }
78
46
  end # }}}
79
47
 
80
48
  it "parses a request with a custom parser" do # {{{
@@ -94,12 +62,14 @@ describe Her::API do
94
62
  end
95
63
 
96
64
  @api = Her::API.new
97
- @api.setup :base_uri => "https://api.example.com", :parse_middleware => CustomParser
98
- @api.request(:_method => :get, :_path => "users/1") do |parsed_data|
99
- parsed_data[:data].should == { :id => 1, :name => "George Michael Bluth" }
100
- parsed_data[:errors].should == []
101
- parsed_data[:metadata].should == {}
65
+ @api.setup :base_uri => "https://api.example.com" do |connection|
66
+ connection.delete Her::Middleware::DefaultParseJSON
67
+ connection.use CustomParser
102
68
  end
69
+ parsed_data = @api.request(:_method => :get, :_path => "users/1")
70
+ parsed_data[:data].should == { :id => 1, :name => "George Michael Bluth" }
71
+ parsed_data[:errors].should == []
72
+ parsed_data[:metadata].should == {}
103
73
  end # }}}
104
74
  end
105
75
  end