hash_db 0.0.2 → 0.0.3

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.
@@ -8,14 +8,20 @@ module HashDB
8
8
  klass.keys foreign_key
9
9
 
10
10
  define_method "#{name}" do
11
- base_id = id
12
11
  @attributes[name] ||= begin
12
+ base_id = id
13
13
  [].tap do |array|
14
14
  array.define_singleton_method :<< do |object|
15
15
  object.send("#{foreign_key}=", base_id)
16
16
  super object
17
17
  end
18
18
 
19
+ array.define_singleton_method :new do |*args|
20
+ klass.new(*args).tap do |object|
21
+ array << object
22
+ end
23
+ end
24
+
19
25
  array.define_singleton_method :create do |*args|
20
26
  klass.create(*args).tap do |object|
21
27
  array << object
@@ -1,3 +1,3 @@
1
1
  module HashDB
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -2,16 +2,24 @@ require "spec_helper"
2
2
 
3
3
  describe HashDB::Model do
4
4
  context ".has_many" do
5
- it "should allow assigning and retrieving objects" do
6
- post = Class.new do
5
+ let :post do
6
+ Class.new do
7
7
  include HashDB::Model
8
8
  end
9
+ end
9
10
 
10
- user = Class.new do
11
+ let :user do
12
+ # Class.new creates a new scope, where we cannot access the let(:post)
13
+ # above. This is a workaround for it.
14
+ # TODO: Find a better way to do this.
15
+ _post = post
16
+ Class.new do
11
17
  include HashDB::Model
12
- has_many :posts, foreign_key: :user_id, class: post
18
+ has_many :posts, foreign_key: :user_id, class: _post
13
19
  end
20
+ end
14
21
 
22
+ it "should allow assigning and retrieving objects" do
15
23
  u1 = user.create
16
24
  u2 = user.create
17
25
  p1 = post.create
@@ -22,19 +30,40 @@ describe HashDB::Model do
22
30
  u2.posts << p1
23
31
  p1.user_id.should eq u2.id
24
32
  end
33
+
34
+ it "should initialize related modules with .new" do
35
+ u1 = user.create
36
+ p1 = u1.posts.new
37
+
38
+ p1.user_id.should eq u1.id
39
+ end
40
+
41
+ it "should create related model with .create" do
42
+ u1 = user.create
43
+ p1 = u1.posts.create
44
+
45
+ p1.user_id.should eq u1.id
46
+ p1.id.should_not be_nil
47
+ end
25
48
  end
26
49
 
27
50
  context ".belongs_to" do
28
- it "should allow assigning and retrieving objects" do
29
- user = Class.new do
51
+ let :user do
52
+ Class.new do
30
53
  include HashDB::Model
31
54
  end
55
+ end
32
56
 
33
- post = Class.new do
57
+ let :post do
58
+ # Same hack as mentioned above.
59
+ _user = user
60
+ Class.new do
34
61
  include HashDB::Model
35
- belongs_to :user, key: :user_id, class: user
62
+ belongs_to :user, key: :user_id, class: _user
36
63
  end
64
+ end
37
65
 
66
+ it "should allow assigning and retrieving objects" do
38
67
  u1 = user.create
39
68
  u2 = user.create
40
69
  p1 = post.create
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.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: 2013-02-02 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -100,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
100
  version: '0'
101
101
  segments:
102
102
  - 0
103
- hash: -3250930581944786811
103
+ hash: -2794194441662757614
104
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  version: '0'
110
110
  segments:
111
111
  - 0
112
- hash: -3250930581944786811
112
+ hash: -2794194441662757614
113
113
  requirements: []
114
114
  rubyforge_project:
115
115
  rubygems_version: 1.8.24