blobject 0.1.0 → 0.1.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.
- data/Gemfile +2 -0
- data/Gemfile.lock +7 -0
- data/README.rdoc +25 -1
- data/VERSION +1 -1
- data/blobject.gemspec +30 -2
- data/blobject.psd +0 -0
- data/lib/blobject.rb +36 -6
- data/test/helper.rb +1 -0
- data/test/test_blobject.rb +40 -2
- metadata +111 -11
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
= blobject
|
2
2
|
|
3
|
-
|
3
|
+
Blobject is for building untyped blobs of data.
|
4
|
+
|
5
|
+
An ActiveRecord is not usually enough for view data. The required view data could be more than on ActiveRecords and/or the resultant calculations of some business logic.
|
6
|
+
|
7
|
+
= Features
|
8
|
+
|
9
|
+
* call a chain of methods and build an object graph automagically
|
10
|
+
* check the existence of a value with 'method?'
|
11
|
+
* overrides ruby freeze
|
12
|
+
* recursively loads data from JSON strings
|
13
|
+
* empty? recursive
|
14
|
+
|
15
|
+
* init with an object and list of accessors to copy
|
16
|
+
* init with hash
|
17
|
+
* init with block (frozen)
|
18
|
+
|
19
|
+
|
20
|
+
= Example Usage
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
= Limitations
|
25
|
+
|
26
|
+
Blobjects are intended for de/serialization and there for the cycles in the object graph will lead to a non terminating thread.
|
27
|
+
|
4
28
|
|
5
29
|
== Contributing to blobject
|
6
30
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/blobject.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{blobject}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sam Taylor"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-04-06}
|
13
13
|
s.description = %q{coming soon}
|
14
14
|
s.email = %q{sjltaylor@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"blobject.gemspec",
|
28
|
+
"blobject.psd",
|
28
29
|
"lib/blobject.rb",
|
29
30
|
"test/helper.rb",
|
30
31
|
"test/test_blobject.rb"
|
@@ -43,17 +44,44 @@ Gem::Specification.new do |s|
|
|
43
44
|
s.specification_version = 3
|
44
45
|
|
45
46
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_runtime_dependency(%q<blobject>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
49
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
50
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
51
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
55
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
46
56
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
47
57
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
48
58
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
49
59
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
50
60
|
else
|
61
|
+
s.add_dependency(%q<blobject>, [">= 0"])
|
62
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
63
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
64
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
65
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
66
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
67
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
68
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
69
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
51
70
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
52
71
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
53
72
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
54
73
|
s.add_dependency(%q<rcov>, [">= 0"])
|
55
74
|
end
|
56
75
|
else
|
76
|
+
s.add_dependency(%q<blobject>, [">= 0"])
|
77
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
78
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
79
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
80
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
81
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
82
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
83
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
84
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
57
85
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
58
86
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
87
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
data/blobject.psd
ADDED
Binary file
|
data/lib/blobject.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
def blobject *parameters, &block
|
2
|
+
Blobject.new *parameters, &block
|
3
|
+
end
|
4
|
+
|
1
5
|
# similar to OpenStruct
|
2
6
|
# b.foo.bar = 8 automatically creates a blobject called "foo" on "b"
|
3
7
|
# to check whether a variable is defined use the '?' syntax i.e: b.is_it_here? => nil, b.foo? == b.foo
|
@@ -25,10 +29,20 @@ public
|
|
25
29
|
unfreeze
|
26
30
|
end
|
27
31
|
|
28
|
-
def initialize
|
32
|
+
def initialize hash_of_initial_values_or_an_object={}, array_of_methods_to_copy_data_from_object=[]
|
29
33
|
@values = {}
|
30
|
-
|
31
|
-
|
34
|
+
|
35
|
+
if (hash_of_initial_values_or_an_object.class == Hash)
|
36
|
+
merge_hash hash_of_initial_values_or_an_object
|
37
|
+
else
|
38
|
+
array_of_methods_to_copy_data_from_object.each do |accessor|
|
39
|
+
@values[accessor.to_s] = hash_of_initial_values_or_an_object.send accessor
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
if block_given?
|
44
|
+
yield self
|
45
|
+
end
|
32
46
|
self
|
33
47
|
end
|
34
48
|
|
@@ -46,7 +60,9 @@ public
|
|
46
60
|
@values[assignment.to_s] = args[0]
|
47
61
|
else
|
48
62
|
# return the value or a new blobject
|
49
|
-
|
63
|
+
value = @values[str]
|
64
|
+
|
65
|
+
return value unless value.nil?
|
50
66
|
return nil if frozen?
|
51
67
|
@values[str] = Blobject.new
|
52
68
|
return @values[str]
|
@@ -66,7 +82,7 @@ public
|
|
66
82
|
value = Blobject.blobjectify_array value
|
67
83
|
end
|
68
84
|
|
69
|
-
@values[key] = value
|
85
|
+
@values[key.to_s] = value
|
70
86
|
end
|
71
87
|
self
|
72
88
|
end
|
@@ -136,6 +152,20 @@ public
|
|
136
152
|
end
|
137
153
|
|
138
154
|
def blank?
|
139
|
-
|
155
|
+
empty?
|
156
|
+
end
|
157
|
+
|
158
|
+
def empty?
|
159
|
+
@values.empty? || @values.values.empty? || !@values.values.any? do |v|
|
160
|
+
# if the value is a Blobject, Hash or Array return
|
161
|
+
# true if it is not empty.
|
162
|
+
# else just return true, the value is regarded as not empty.
|
163
|
+
if [Blobject, Array, Hash].include?(v.class)
|
164
|
+
!v.empty?
|
165
|
+
else
|
166
|
+
true
|
167
|
+
end
|
168
|
+
end
|
140
169
|
end
|
170
|
+
|
141
171
|
end
|
data/test/helper.rb
CHANGED
data/test/test_blobject.rb
CHANGED
@@ -1,7 +1,45 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestBlobject < Test::Unit::TestCase
|
4
|
-
should "
|
5
|
-
|
4
|
+
should "not be empty? if the blobject has data" do
|
5
|
+
b = Blobject.new
|
6
|
+
b.data = 'LOOK! some data. :)'
|
7
|
+
assert !b.empty?
|
8
|
+
end
|
9
|
+
|
10
|
+
should "not be empty if the blobject complex with real data" do
|
11
|
+
b = Blobject.new
|
12
|
+
b.colors.red = '#ff0000'
|
13
|
+
assert !b.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'report empty when there are no descendants' do
|
17
|
+
assert Blobject.new.empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'report empty? as true when descendants are empty Hash, Array or Blobjects' do
|
21
|
+
b = Blobject.new
|
22
|
+
b.array = []
|
23
|
+
b.hash = {}
|
24
|
+
b.blobject = Blobject.new
|
25
|
+
assert b.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'report empty? as false when descendants include a non-empty Array' do
|
29
|
+
b = Blobject.new
|
30
|
+
b.array = [1,2,3,4,5]
|
31
|
+
assert !b.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'report empty? as false when descendants include a non-empty Hash' do
|
35
|
+
b = Blobject.new
|
36
|
+
b.hash = {:key1 => 1, :key2 =>2, :key3 => 3}
|
37
|
+
assert !b.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'report empty? as false when descendants include a non-empty Blobject' do
|
41
|
+
b = Blobject.new
|
42
|
+
b.blobject = Blobject.new :initial_data => [1,2,3]
|
43
|
+
assert !b.empty?
|
6
44
|
end
|
7
45
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: blobject
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Sam Taylor
|
@@ -10,23 +10,34 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-04-06 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: blobject
|
18
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
|
-
type: :
|
24
|
+
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: shoulda
|
29
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: bundler
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
30
41
|
none: false
|
31
42
|
requirements:
|
32
43
|
- - ~>
|
@@ -34,10 +45,10 @@ dependencies:
|
|
34
45
|
version: 1.0.0
|
35
46
|
type: :development
|
36
47
|
prerelease: false
|
37
|
-
version_requirements: *
|
48
|
+
version_requirements: *id003
|
38
49
|
- !ruby/object:Gem::Dependency
|
39
50
|
name: jeweler
|
40
|
-
requirement: &
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
52
|
none: false
|
42
53
|
requirements:
|
43
54
|
- - ~>
|
@@ -45,10 +56,10 @@ dependencies:
|
|
45
56
|
version: 1.5.2
|
46
57
|
type: :development
|
47
58
|
prerelease: false
|
48
|
-
version_requirements: *
|
59
|
+
version_requirements: *id004
|
49
60
|
- !ruby/object:Gem::Dependency
|
50
61
|
name: rcov
|
51
|
-
requirement: &
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
52
63
|
none: false
|
53
64
|
requirements:
|
54
65
|
- - ">="
|
@@ -56,7 +67,95 @@ dependencies:
|
|
56
67
|
version: "0"
|
57
68
|
type: :development
|
58
69
|
prerelease: false
|
59
|
-
version_requirements: *
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: shoulda
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: bundler
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.0.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: jeweler
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ~>
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.5.2
|
101
|
+
type: :development
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rcov
|
106
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: "0"
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: shoulda
|
117
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: "0"
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: *id010
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: bundler
|
128
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.0.0
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: *id011
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: jeweler
|
139
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ~>
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 1.5.2
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: *id012
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: rcov
|
150
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: "0"
|
156
|
+
type: :development
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: *id013
|
60
159
|
description: coming soon
|
61
160
|
email: sjltaylor@gmail.com
|
62
161
|
executables: []
|
@@ -75,6 +174,7 @@ files:
|
|
75
174
|
- Rakefile
|
76
175
|
- VERSION
|
77
176
|
- blobject.gemspec
|
177
|
+
- blobject.psd
|
78
178
|
- lib/blobject.rb
|
79
179
|
- test/helper.rb
|
80
180
|
- test/test_blobject.rb
|
@@ -92,7 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
192
|
requirements:
|
93
193
|
- - ">="
|
94
194
|
- !ruby/object:Gem::Version
|
95
|
-
hash:
|
195
|
+
hash: 4269951930364776276
|
96
196
|
segments:
|
97
197
|
- 0
|
98
198
|
version: "0"
|