her 0.2.6 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,61 +4,61 @@ require File.join(File.dirname(__FILE__), "../spec_helper.rb")
4
4
  describe Her::Model::Relationships do
5
5
  context "setting relationships without details" do
6
6
  before do # {{{
7
- spawn_model :User
7
+ spawn_model "Foo::User"
8
8
  end # }}}
9
9
 
10
10
  it "handles a single 'has_many' relationship" do # {{{
11
- User.has_many :comments
12
- User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Comment" }]
11
+ Foo::User.has_many :comments
12
+ Foo::User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Comment", :path => "/comments" }]
13
13
  end # }}}
14
14
 
15
15
  it "handles multiples 'has_many' relationship" do # {{{
16
- User.has_many :comments
17
- User.has_many :posts
18
- User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Comment" }, { :name => :posts, :class_name => "Post" }]
16
+ Foo::User.has_many :comments
17
+ Foo::User.has_many :posts
18
+ Foo::User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Comment", :path => "/comments" }, { :name => :posts, :class_name => "Post", :path => "/posts" }]
19
19
  end # }}}
20
20
 
21
21
  it "handles a single 'has_one' relationship" do # {{{
22
- User.has_one :category
23
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }]
22
+ Foo::User.has_one :category
23
+ Foo::User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :path => "/category" }]
24
24
  end # }}}
25
25
 
26
26
  it "handles multiples 'has_one' relationship" do # {{{
27
- User.has_one :category
28
- User.has_one :role
29
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category" }, { :name => :role, :class_name => "Role" }]
27
+ Foo::User.has_one :category
28
+ Foo::User.has_one :role
29
+ Foo::User.relationships[:has_one].should == [{ :name => :category, :class_name => "Category", :path => "/category" }, { :name => :role, :class_name => "Role", :path => "/role" }]
30
30
  end # }}}
31
31
 
32
32
  it "handles a single belongs_to relationship" do # {{{
33
- User.belongs_to :organization
34
- User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Organization", :foreign_key => "organization_id" }]
33
+ Foo::User.belongs_to :organization
34
+ Foo::User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Organization", :foreign_key => "organization_id", :path => "/organizations/:id" }]
35
35
  end # }}}
36
36
 
37
37
  it "handles multiples 'belongs_to' relationship" do # {{{
38
- User.belongs_to :organization
39
- User.belongs_to :family
40
- User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Organization", :foreign_key => "organization_id" }, { :name => :family, :class_name => "Family", :foreign_key => "family_id" }]
38
+ Foo::User.belongs_to :organization
39
+ Foo::User.belongs_to :family
40
+ Foo::User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Organization", :foreign_key => "organization_id", :path => "/organizations/:id" }, { :name => :family, :class_name => "Family", :foreign_key => "family_id", :path => "/families/:id" }]
41
41
  end # }}}
42
42
  end
43
43
 
44
44
  context "setting relationships with details" do
45
45
  before do # {{{
46
- spawn_model :User
46
+ spawn_model "Foo::User"
47
47
  end # }}}
48
48
 
49
49
  it "handles a single 'has_many' relationship" do # {{{
50
- User.has_many :comments, :class_name => "Post"
51
- User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Post" }]
50
+ Foo::User.has_many :comments, :class_name => "Post"
51
+ Foo::User.relationships[:has_many].should == [{ :name => :comments, :class_name => "Post", :path => "/comments" }]
52
52
  end # }}}
53
53
 
54
54
  it "handles a single 'has_one' relationship" do # {{{
55
- User.has_one :category, :class_name => "Topic", :foreign_key => "topic_id"
56
- User.relationships[:has_one].should == [{ :name => :category, :class_name => "Topic", :foreign_key => "topic_id" }]
55
+ Foo::User.has_one :category, :class_name => "Topic", :foreign_key => "topic_id"
56
+ Foo::User.relationships[:has_one].should == [{ :name => :category, :class_name => "Topic", :foreign_key => "topic_id", :path => "/category" }]
57
57
  end # }}}
58
58
 
59
59
  it "handles a single belongs_to relationship" do # {{{
60
- User.belongs_to :organization, :class_name => "Business", :foreign_key => "business_id"
61
- User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Business", :foreign_key => "business_id" }]
60
+ Foo::User.belongs_to :organization, :class_name => "Business", :foreign_key => "org_id"
61
+ Foo::User.relationships[:belongs_to].should == [{ :name => :organization, :class_name => "Business", :foreign_key => "org_id", :path => "/organizations/:id" }]
62
62
  end # }}}
63
63
  end
64
64
 
@@ -76,54 +76,54 @@ describe Her::Model::Relationships do
76
76
  end
77
77
  end
78
78
 
79
- spawn_model :User do
79
+ spawn_model "Foo::User" do
80
80
  has_many :comments
81
81
  has_one :role
82
82
  belongs_to :organization
83
83
  end
84
84
 
85
- spawn_model :Organization
86
- spawn_model :Comment
87
- spawn_model :Role
85
+ spawn_model "Foo::Organization"
86
+ spawn_model "Foo::Comment"
87
+ spawn_model "Foo::Role"
88
88
 
89
- @user_with_included_data = User.find(1)
90
- @user_without_included_data = User.find(2)
89
+ @user_with_included_data = Foo::User.find(1)
90
+ @user_without_included_data = Foo::User.find(2)
91
91
  end # }}}
92
92
 
93
93
  it "maps an array of included data through has_many" do # {{{
94
- @user_with_included_data.comments.first.class.should == Comment
94
+ @user_with_included_data.comments.first.should be_a(Foo::Comment)
95
95
  @user_with_included_data.comments.length.should == 2
96
96
  @user_with_included_data.comments.first.id.should == 2
97
97
  @user_with_included_data.comments.first.body.should == "Tobias, you blow hard!"
98
98
  end # }}}
99
99
 
100
100
  it "fetches data that was not included through has_many" do # {{{
101
- @user_without_included_data.comments.first.class.should == Comment
101
+ @user_without_included_data.comments.first.should be_a(Foo::Comment)
102
102
  @user_without_included_data.comments.length.should == 2
103
103
  @user_without_included_data.comments.first.id.should == 4
104
104
  @user_without_included_data.comments.first.body.should == "They're having a FIRESALE?"
105
105
  end # }}}
106
106
 
107
107
  it "maps an array of included data through has_one" do # {{{
108
- @user_with_included_data.role.class.should == Role
108
+ @user_with_included_data.role.should be_a(Foo::Role)
109
109
  @user_with_included_data.role.id.should == 1
110
110
  @user_with_included_data.role.body.should == "Admin"
111
111
  end # }}}
112
112
 
113
113
  it "fetches data that was not included through has_one" do # {{{
114
- @user_without_included_data.role.class.should == Role
114
+ @user_without_included_data.role.should be_a(Foo::Role)
115
115
  @user_without_included_data.role.id.should == 2
116
116
  @user_without_included_data.role.body.should == "User"
117
117
  end # }}}
118
118
 
119
119
  it "maps an array of included data through belongs_to" do # {{{
120
- @user_with_included_data.organization.class.should == Organization
120
+ @user_with_included_data.organization.should be_a(Foo::Organization)
121
121
  @user_with_included_data.organization.id.should == 1
122
122
  @user_with_included_data.organization.name.should == "Bluth Company"
123
123
  end # }}}
124
124
 
125
125
  it "fetches data that was not included through belongs_to" do # {{{
126
- @user_without_included_data.organization.class.should == Organization
126
+ @user_without_included_data.organization.should be_a(Foo::Organization)
127
127
  @user_without_included_data.organization.id.should == 1
128
128
  @user_without_included_data.organization.name.should == "Bluth Company"
129
129
  end # }}}
@@ -138,28 +138,25 @@ describe Her::Model::Relationships do
138
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
139
  stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
140
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] }
141
+ stub.get("/companies/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
142
142
  end
143
143
  end
144
144
 
145
-
146
- spawn_model :User do
147
- belongs_to :organization, :class_name => "Business"
145
+ spawn_model "Foo::User" do
146
+ belongs_to :company, :path => "/organizations/:id", :foreign_key => :organization_id
148
147
  end
149
148
 
150
- spawn_model :Business do
151
- collection_path "/organizations"
152
- end
149
+ spawn_model "Foo::Company"
153
150
 
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)
151
+ @user_with_included_data = Foo::User.find(1)
152
+ @user_without_included_data = Foo::User.find(2)
153
+ @user_with_included_nil_data = Foo::User.find(3)
157
154
  end # }}}
158
155
 
159
156
  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"
157
+ @user_with_included_data.company.should be_a(Foo::Company)
158
+ @user_with_included_data.company.id.should == 1
159
+ @user_with_included_data.company.name.should == "Bluth Company"
163
160
  end # }}}
164
161
 
165
162
  it "does not map included data if it’s nil" do # {{{
@@ -167,9 +164,9 @@ describe Her::Model::Relationships do
167
164
  end # }}}
168
165
 
169
166
  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"
167
+ @user_without_included_data.company.should be_a(Foo::Company)
168
+ @user_without_included_data.company.id.should == 1
169
+ @user_without_included_data.company.name.should == "Bluth Company"
173
170
  end # }}}
174
171
  end
175
172
  end
@@ -1,13 +1,20 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
2
 
3
3
  require "her"
4
- require "mocha"
5
-
6
- module Helpers
7
- end
4
+ require "mocha_standalone"
8
5
 
9
6
  RSpec.configure do |c|
10
- c.include Helpers
7
+ c.mock_with :mocha
8
+
9
+ c.before :each do
10
+ @globals = []
11
+ end
12
+
13
+ c.after :each do
14
+ @globals.each do |global|
15
+ Object.instance_eval { remove_const global } if Object.const_defined?(global)
16
+ end
17
+ end
11
18
  end
12
19
 
13
20
  class Hash
@@ -19,12 +26,20 @@ class Array
19
26
  end
20
27
 
21
28
  def spawn_model(klass, &block)
22
- Object.instance_eval { remove_const klass } if Object.const_defined?(klass)
23
- Object.const_set(klass, Class.new).send(:include, Her::Model)
24
- Object.const_get(klass).class_eval(&block) if block_given?
25
- end
26
-
27
- def spawn_submodel(mod, klass)
28
- Object.instance_eval { remove_const mod } if Object.const_defined?(mod)
29
- Object.const_set(mod, Module.new).const_set(klass, Class.new).send(:include, Her::Model)
29
+ if klass =~ /::/
30
+ base, submodel = klass.split(/::/).map{ |s| s.to_sym }
31
+ Object.const_set(base, Module.new) unless Object.const_defined?(base)
32
+ Object.const_get(base).module_eval do
33
+ remove_const submodel if constants.include?(submodel)
34
+ submodel = const_set(submodel, Class.new)
35
+ submodel.send(:include, Her::Model)
36
+ submodel.class_eval(&block) if block_given?
37
+ end
38
+ @globals << base
39
+ else
40
+ Object.instance_eval { remove_const klass } if Object.const_defined?(klass)
41
+ Object.const_set(klass, Class.new).send(:include, Her::Model)
42
+ Object.const_get(klass).class_eval(&block) if block_given?
43
+ @globals << klass.to_sym
44
+ end
30
45
  end
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.6
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-12 00:00:00.000000000Z
12
+ date: 2012-07-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -271,7 +271,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
271
271
  version: '0'
272
272
  segments:
273
273
  - 0
274
- hash: -1476848547800206176
274
+ hash: -87674710700490998
275
275
  required_rubygems_version: !ruby/object:Gem::Requirement
276
276
  none: false
277
277
  requirements:
@@ -280,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
280
  version: '0'
281
281
  segments:
282
282
  - 0
283
- hash: -1476848547800206176
283
+ hash: -87674710700490998
284
284
  requirements: []
285
285
  rubyforge_project:
286
286
  rubygems_version: 1.8.18