her 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -91,21 +91,19 @@ describe Her::Model::Paths do
91
91
 
92
92
  context "making HTTP requests" do
93
93
  before do # {{{
94
- api = Her::API.new
95
- api.setup :base_uri => "https://api.example.com" do |builder|
94
+ Her::API.setup :url => "https://api.example.com" do |builder|
96
95
  builder.use Her::Middleware::FirstLevelParseJSON
97
96
  builder.use Faraday::Request::UrlEncoded
98
- builder.use Faraday::Adapter::NetHttp
97
+ builder.adapter :test do |stub|
98
+ stub.get("/organizations/2/users") { |env| [200, {}, [{ :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }, { :id => 2, :fullname => "Lindsay Fünke", :organization_id => 2 }].to_json] }
99
+ stub.post("/organizations/2/users") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }.to_json] }
100
+ stub.put("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2 }.to_json] }
101
+ stub.get("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2, :active => true }.to_json] }
102
+ stub.delete("/organizations/2/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2, :active => false }.to_json] }
103
+ end
99
104
  end
100
105
 
101
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/2/users", :body => [{ :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }, { :id => 2, :fullname => "Lindsay Fünke", :organization_id => 2 }].to_json)
102
- FakeWeb.register_uri(:post, "https://api.example.com/organizations/2/users", :body => { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2 }.to_json)
103
- FakeWeb.register_uri(:put, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2 }.to_json)
104
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Tobias Fünke", :organization_id => 2, :active => true }.to_json)
105
- FakeWeb.register_uri(:delete, "https://api.example.com/organizations/2/users/1", :body => { :id => 1, :fullname => "Lindsay Fünke", :organization_id => 2, :active => false }.to_json)
106
-
107
106
  spawn_model :User do
108
- uses_api api
109
107
  collection_path "/organizations/:organization_id/users"
110
108
  end
111
109
  end # }}}
@@ -20,13 +20,13 @@ describe Her::Model::Relationships do
20
20
 
21
21
  it "handles a single 'has_one' relationship" do # {{{
22
22
  User.has_one :category
23
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :foreign_key => "category_id" }]
23
+ User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }]
24
24
  end # }}}
25
25
 
26
26
  it "handles multiples 'has_one' relationship" do # {{{
27
27
  User.has_one :category
28
28
  User.has_one :role
29
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :foreign_key => "category_id" }, { :name => :role, :class_name => "Role", :foreign_key => "role_id" }]
29
+ User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }, { :name => :role, :class_name => "Role" }]
30
30
  end # }}}
31
31
 
32
32
  it "handles a single belongs_to relationship" do # {{{
@@ -64,18 +64,18 @@ describe Her::Model::Relationships do
64
64
 
65
65
  context "handling relationships without details" do
66
66
  before do # {{{
67
- Her::API.setup :base_uri => "https://api.example.com" do |builder|
67
+ Her::API.setup :url => "https://api.example.com" do |builder|
68
68
  builder.use Her::Middleware::FirstLevelParseJSON
69
69
  builder.use Faraday::Request::UrlEncoded
70
- builder.use Faraday::Adapter::NetHttp
70
+ builder.adapter :test do |stub|
71
+ stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :comments => [{ :id => 2, :body => "Tobias, you blow hard!" }, { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak" }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json] }
72
+ stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
73
+ stub.get("/users/2/comments") { |env| [200, {}, [{ :id => 4, :body => "They're having a FIRESALE?" }, { :id => 5, :body => "Is this the tiny town from Footloose?" }].to_json] }
74
+ stub.get("/users/2/role") { |env| [200, {}, { :id => 2, :body => "User" }.to_json] }
75
+ stub.get("/organizations/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
76
+ end
71
77
  end
72
78
 
73
- FakeWeb.register_uri(:get, "https://api.example.com/users/1", :body => { :id => 1, :name => "Tobias Fünke", :comments => [{ :id => 2, :body => "Tobias, you blow hard!" }, { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak" }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json)
74
- FakeWeb.register_uri(:get, "https://api.example.com/users/2", :body => { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json)
75
- FakeWeb.register_uri(:get, "https://api.example.com/users/2/comments", :body => [{ :id => 4, :body => "They're having a FIRESALE?" }, { :id => 5, :body => "Is this the tiny town from Footloose?" }].to_json)
76
- FakeWeb.register_uri(:get, "https://api.example.com/users/2/role", :body => { :id => 2, :body => "User" }.to_json)
77
- FakeWeb.register_uri(:get, "https://api.example.com/organizations/1", :body => { :id => 1, :name => "Bluth Company" }.to_json)
78
-
79
79
  spawn_model :User do
80
80
  has_many :comments
81
81
  has_one :role
@@ -128,4 +128,48 @@ describe Her::Model::Relationships do
128
128
  @user_without_included_data.organization.name.should == "Bluth Company"
129
129
  end # }}}
130
130
  end
131
+
132
+ context "handling relationships with details" do
133
+ before do # {{{
134
+ Her::API.setup :url => "https://api.example.com" do |builder|
135
+ builder.use Her::Middleware::FirstLevelParseJSON
136
+ builder.use Faraday::Request::UrlEncoded
137
+ builder.adapter :test do |stub|
138
+ stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json] }
139
+ stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
140
+ stub.get("/users/3") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization => nil }.to_json] }
141
+ stub.get("/organizations/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
142
+ end
143
+ end
144
+
145
+
146
+ spawn_model :User do
147
+ belongs_to :organization, :class_name => "Business"
148
+ end
149
+
150
+ spawn_model :Business do
151
+ collection_path "/organizations"
152
+ end
153
+
154
+ @user_with_included_data = User.find(1)
155
+ @user_without_included_data = User.find(2)
156
+ @user_with_included_nil_data = User.find(3)
157
+ end # }}}
158
+
159
+ it "maps an array of included data through belongs_to" do # {{{
160
+ @user_with_included_data.organization.class.should == Business
161
+ @user_with_included_data.organization.id.should == 1
162
+ @user_with_included_data.organization.name.should == "Bluth Company"
163
+ end # }}}
164
+
165
+ it "does not map included data if it’s nil" do # {{{
166
+ @user_with_included_nil_data.organization.should be_nil
167
+ end # }}}
168
+
169
+ it "fetches data that was not included through belongs_to" do # {{{
170
+ @user_without_included_data.organization.class.should == Business
171
+ @user_without_included_data.organization.id.should == 1
172
+ @user_without_included_data.organization.name.should == "Bluth Company"
173
+ end # }}}
174
+ end
131
175
  end
@@ -1,7 +1,6 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
2
 
3
3
  require "her"
4
- require "fakeweb"
5
4
  require "mocha"
6
5
 
7
6
  module Helpers
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: her
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,216 +9,200 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-05 00:00:00.000000000Z
12
+ date: 2012-07-12 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - '='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.2.2
21
+ version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - '='
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.9.2.2
29
+ version: 0.9.2
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - '='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 2.9.0
37
+ version: '2.10'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - '='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 2.9.0
45
+ version: '2.10'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: yard
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
- - - '='
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 0.7.5
53
+ version: '0.8'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - '='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.7.5
61
+ version: '0.8'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: redcarpet
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - '='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.17.2
69
+ version: '2.1'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - '='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.17.2
77
+ version: '2.1'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: mocha
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - '='
83
+ - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 0.11.3
85
+ version: '0.11'
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - '='
91
+ - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 0.11.3
94
- - !ruby/object:Gem::Dependency
95
- name: fakeweb
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - '='
100
- - !ruby/object:Gem::Version
101
- version: 1.3.0
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - '='
108
- - !ruby/object:Gem::Version
109
- version: 1.3.0
93
+ version: '0.11'
110
94
  - !ruby/object:Gem::Dependency
111
95
  name: guard
112
96
  requirement: !ruby/object:Gem::Requirement
113
97
  none: false
114
98
  requirements:
115
- - - '='
99
+ - - ~>
116
100
  - !ruby/object:Gem::Version
117
- version: 1.0.1
101
+ version: '1.0'
118
102
  type: :development
119
103
  prerelease: false
120
104
  version_requirements: !ruby/object:Gem::Requirement
121
105
  none: false
122
106
  requirements:
123
- - - '='
107
+ - - ~>
124
108
  - !ruby/object:Gem::Version
125
- version: 1.0.1
109
+ version: '1.0'
126
110
  - !ruby/object:Gem::Dependency
127
111
  name: guard-rspec
128
112
  requirement: !ruby/object:Gem::Requirement
129
113
  none: false
130
114
  requirements:
131
- - - '='
115
+ - - ~>
132
116
  - !ruby/object:Gem::Version
133
- version: 0.7.0
117
+ version: '0.7'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
121
  none: false
138
122
  requirements:
139
- - - '='
123
+ - - ~>
140
124
  - !ruby/object:Gem::Version
141
- version: 0.7.0
125
+ version: '0.7'
142
126
  - !ruby/object:Gem::Dependency
143
127
  name: rb-fsevent
144
128
  requirement: !ruby/object:Gem::Requirement
145
129
  none: false
146
130
  requirements:
147
- - - '='
131
+ - - ~>
148
132
  - !ruby/object:Gem::Version
149
- version: 0.9.1
133
+ version: '0.9'
150
134
  type: :development
151
135
  prerelease: false
152
136
  version_requirements: !ruby/object:Gem::Requirement
153
137
  none: false
154
138
  requirements:
155
- - - '='
139
+ - - ~>
156
140
  - !ruby/object:Gem::Version
157
- version: 0.9.1
141
+ version: '0.9'
158
142
  - !ruby/object:Gem::Dependency
159
143
  name: growl
160
144
  requirement: !ruby/object:Gem::Requirement
161
145
  none: false
162
146
  requirements:
163
- - - '='
147
+ - - ~>
164
148
  - !ruby/object:Gem::Version
165
- version: 1.0.3
149
+ version: '1.0'
166
150
  type: :development
167
151
  prerelease: false
168
152
  version_requirements: !ruby/object:Gem::Requirement
169
153
  none: false
170
154
  requirements:
171
- - - '='
155
+ - - ~>
172
156
  - !ruby/object:Gem::Version
173
- version: 1.0.3
157
+ version: '1.0'
174
158
  - !ruby/object:Gem::Dependency
175
159
  name: activesupport
176
160
  requirement: !ruby/object:Gem::Requirement
177
161
  none: false
178
162
  requirements:
179
- - - '='
163
+ - - ~>
180
164
  - !ruby/object:Gem::Version
181
- version: 3.2.3
165
+ version: '3.2'
182
166
  type: :runtime
183
167
  prerelease: false
184
168
  version_requirements: !ruby/object:Gem::Requirement
185
169
  none: false
186
170
  requirements:
187
- - - '='
171
+ - - ~>
188
172
  - !ruby/object:Gem::Version
189
- version: 3.2.3
173
+ version: '3.2'
190
174
  - !ruby/object:Gem::Dependency
191
175
  name: faraday
192
176
  requirement: !ruby/object:Gem::Requirement
193
177
  none: false
194
178
  requirements:
195
- - - '='
179
+ - - ~>
196
180
  - !ruby/object:Gem::Version
197
- version: 0.8.0
181
+ version: '0.8'
198
182
  type: :runtime
199
183
  prerelease: false
200
184
  version_requirements: !ruby/object:Gem::Requirement
201
185
  none: false
202
186
  requirements:
203
- - - '='
187
+ - - ~>
204
188
  - !ruby/object:Gem::Version
205
- version: 0.8.0
189
+ version: '0.8'
206
190
  - !ruby/object:Gem::Dependency
207
191
  name: multi_json
208
192
  requirement: !ruby/object:Gem::Requirement
209
193
  none: false
210
194
  requirements:
211
- - - '='
195
+ - - ~>
212
196
  - !ruby/object:Gem::Version
213
- version: 1.3.4
197
+ version: '1.3'
214
198
  type: :runtime
215
199
  prerelease: false
216
200
  version_requirements: !ruby/object:Gem::Requirement
217
201
  none: false
218
202
  requirements:
219
- - - '='
203
+ - - ~>
220
204
  - !ruby/object:Gem::Version
221
- version: 1.3.4
205
+ version: '1.3'
222
206
  description: Her is an ORM that maps REST resources and collections to Ruby objects
223
207
  email:
224
208
  - remi@exomel.com
@@ -227,6 +211,7 @@ extensions: []
227
211
  extra_rdoc_files: []
228
212
  files:
229
213
  - .gitignore
214
+ - .rspec
230
215
  - .travis.yml
231
216
  - Gemfile
232
217
  - Guardfile
@@ -245,8 +230,10 @@ files:
245
230
  - her.gemspec
246
231
  - lib/her.rb
247
232
  - lib/her/api.rb
233
+ - lib/her/collection.rb
248
234
  - lib/her/errors.rb
249
235
  - lib/her/middleware.rb
236
+ - lib/her/middleware/accept_json.rb
250
237
  - lib/her/middleware/first_level_parse_json.rb
251
238
  - lib/her/middleware/second_level_parse_json.rb
252
239
  - lib/her/model.rb
@@ -259,6 +246,7 @@ files:
259
246
  - lib/her/model/relationships.rb
260
247
  - lib/her/version.rb
261
248
  - spec/api_spec.rb
249
+ - spec/middleware/accept_json_spec.rb
262
250
  - spec/middleware/first_level_parse_json_spec.rb
263
251
  - spec/middleware/second_level_parse_json_spec.rb
264
252
  - spec/model/hooks_spec.rb
@@ -269,7 +257,8 @@ files:
269
257
  - spec/model/relationships_spec.rb
270
258
  - spec/spec_helper.rb
271
259
  homepage: http://remiprev.github.com/her
272
- licenses: []
260
+ licenses:
261
+ - MIT
273
262
  post_install_message:
274
263
  rdoc_options: []
275
264
  require_paths:
@@ -282,7 +271,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
282
271
  version: '0'
283
272
  segments:
284
273
  - 0
285
- hash: 112971381959523864
274
+ hash: -1476848547800206176
286
275
  required_rubygems_version: !ruby/object:Gem::Requirement
287
276
  none: false
288
277
  requirements:
@@ -291,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
280
  version: '0'
292
281
  segments:
293
282
  - 0
294
- hash: 112971381959523864
283
+ hash: -1476848547800206176
295
284
  requirements: []
296
285
  rubyforge_project:
297
286
  rubygems_version: 1.8.18
@@ -301,6 +290,7 @@ summary: A simple Representational State Transfer-based Hypertext Transfer Proto
301
290
  Object Relational Mapper. Her?
302
291
  test_files:
303
292
  - spec/api_spec.rb
293
+ - spec/middleware/accept_json_spec.rb
304
294
  - spec/middleware/first_level_parse_json_spec.rb
305
295
  - spec/middleware/second_level_parse_json_spec.rb
306
296
  - spec/model/hooks_spec.rb