embedded_record 0.0.3 → 0.0.4
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.
- data/.travis.yml +7 -0
- data/README.md +18 -3
- data/embedded_record.gemspec +2 -3
- data/lib/embedded_record.rb +24 -3
- data/test/embedded_record_test.rb +44 -0
- metadata +26 -3
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# EmbeddedRecord
|
1
|
+
# EmbeddedRecord [](http://travis-ci.org/wojtekmach/embedded_record)
|
2
2
|
|
3
|
-
* http://github.com/wojtekmach/
|
3
|
+
* http://github.com/wojtekmach/embedded_record
|
4
4
|
|
5
5
|
## DESCRIPTION:
|
6
6
|
|
@@ -73,9 +73,24 @@ p car.color_ids # => [:red, :green]
|
|
73
73
|
p car.colors_mask # => 3 (2**0 + 2**1)
|
74
74
|
```
|
75
75
|
|
76
|
+
NullObject support:
|
77
|
+
|
78
|
+
```
|
79
|
+
class Color
|
80
|
+
record nil, :name => "Blank"
|
81
|
+
end
|
82
|
+
|
83
|
+
Color.ids # => [:red, :green, :blue] # still the same
|
84
|
+
|
85
|
+
Car.new.color.name # => "Blank" # No whiny nils!
|
86
|
+
```
|
87
|
+
|
76
88
|
## REQUIREMENTS:
|
77
89
|
|
78
|
-
|
90
|
+
Development:
|
91
|
+
|
92
|
+
* rake
|
93
|
+
* minitest >= 2.6
|
79
94
|
|
80
95
|
## INSTALL:
|
81
96
|
|
data/embedded_record.gemspec
CHANGED
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
# s.add_runtime_dependency "rest-client"
|
20
|
+
s.add_development_dependency "rake"
|
21
|
+
s.add_development_dependency "minitest", ">= 2.6"
|
23
22
|
end
|
data/lib/embedded_record.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module EmbeddedRecord
|
2
|
-
VERSION = "0.0.
|
2
|
+
VERSION = "0.0.4"
|
3
3
|
|
4
4
|
def self.included(klass)
|
5
5
|
klass.extend self
|
@@ -17,6 +17,8 @@ module EmbeddedRecord
|
|
17
17
|
define_method name do
|
18
18
|
if val = send(attr)
|
19
19
|
klass.all[val]
|
20
|
+
elsif klass.null_record
|
21
|
+
klass.null_record
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -198,7 +200,26 @@ module EmbeddedRecord::Record
|
|
198
200
|
|
199
201
|
record.send "#{k}=", v
|
200
202
|
end
|
201
|
-
|
203
|
+
|
204
|
+
if id == nil
|
205
|
+
@null_record = record
|
206
|
+
else
|
207
|
+
records[id] = record
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
##
|
212
|
+
# Returns null record, a record which id is nil
|
213
|
+
#
|
214
|
+
# Example:
|
215
|
+
#
|
216
|
+
# class Foo
|
217
|
+
# record nil, :name => "Empty"
|
218
|
+
# end
|
219
|
+
#
|
220
|
+
# Foo.null_record.name # => "Empty"
|
221
|
+
def null_record
|
222
|
+
@null_record
|
202
223
|
end
|
203
224
|
|
204
225
|
##
|
@@ -206,7 +227,7 @@ module EmbeddedRecord::Record
|
|
206
227
|
def attribute(name)
|
207
228
|
attributes << name
|
208
229
|
|
209
|
-
|
230
|
+
if !method_defined?(name) || name == :id
|
210
231
|
attr_accessor name
|
211
232
|
end
|
212
233
|
end
|
@@ -137,3 +137,47 @@ describe "Object embedding records" do
|
|
137
137
|
@shirt.colors.must_equal [Color.find(:green), Color.find(:blue)]
|
138
138
|
end
|
139
139
|
end
|
140
|
+
|
141
|
+
describe EmbeddedRecord do
|
142
|
+
before do
|
143
|
+
@cls = Class.new do
|
144
|
+
include EmbeddedRecord
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "with embed_record and null record" do
|
149
|
+
before do
|
150
|
+
rec = Class.new do
|
151
|
+
include EmbeddedRecord::Record
|
152
|
+
attribute :name
|
153
|
+
record nil, :name => "Empty"
|
154
|
+
end
|
155
|
+
|
156
|
+
@cls.class_eval do
|
157
|
+
attr_accessor :foo_mask
|
158
|
+
embed_record :foo, :class => rec
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
it "#<name> when <name>_mask is nil returns null record" do
|
163
|
+
@cls.new.foo.name.must_equal "Empty"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe EmbeddedRecord::Record do
|
169
|
+
before do
|
170
|
+
@cls = Class.new do
|
171
|
+
include EmbeddedRecord::Record
|
172
|
+
attribute :name
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
it "#record with nil acts as a null object" do
|
177
|
+
@cls.class_eval do
|
178
|
+
record nil, :name => "Empty"
|
179
|
+
end
|
180
|
+
@cls.null_record.name.must_equal "Empty"
|
181
|
+
@cls.all.must_equal []
|
182
|
+
end
|
183
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embedded_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,30 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
13
|
-
dependencies:
|
12
|
+
date: 2011-11-07 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &70207362929780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70207362929780
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: minitest
|
27
|
+
requirement: &70207362928920 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.6'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70207362928920
|
14
36
|
description:
|
15
37
|
email:
|
16
38
|
- wojtek@wojtekmach.pl
|
@@ -19,6 +41,7 @@ extensions: []
|
|
19
41
|
extra_rdoc_files: []
|
20
42
|
files:
|
21
43
|
- .gitignore
|
44
|
+
- .travis.yml
|
22
45
|
- Gemfile
|
23
46
|
- README.md
|
24
47
|
- Rakefile
|