blobject 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c7c862a83d86e0593b9001b7230fa361cd7b13f
4
- data.tar.gz: 2219dc72d2f80c9004c8489f33d4772d82286dc6
3
+ metadata.gz: 8f3a8ab425b9c9b3de5ace8572a6c16843c0c560
4
+ data.tar.gz: 1bc87a2a366c478f06409997050a2a30bc0a2f82
5
5
  SHA512:
6
- metadata.gz: a0f6b8c6af581fc4ae3adeba3320621fc033393f6362171a01241c8c051c4b68e7a9162e8a6696068bc25f5f5243aa267a50180fd0f83751bf908e334fc55ae6
7
- data.tar.gz: 11f5c2466cf946bb37791a150e442168bb28e69580108ae3c6717358251957e81cb9414ff6319f3c56977c2d5563804341bce17e7d50a97b6f0f83b59c9d63e3
6
+ metadata.gz: 2ae1597da2a534678f9a55362445f75efeafd06f9d1d41b8bbd8b57b24b314c7fdac92915ad58580456569a71bdc238f5c30678c2a4b76ffc98a4cc686b19482
7
+ data.tar.gz: ad3d8fd3a41908cc65e22349690cc0188c28132c4dfcf68a02f9b17ea7d1d5f418da4f449c85c5d07bb1864b031c4802d0ed1bcc2d3da9183b9ff5310ca5f1fd
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- blobject (0.4.1)
4
+ blobject (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -11,8 +11,7 @@ class Blobject
11
11
 
12
12
  # pass an optional hash of values to preload
13
13
  # you can also pass a block, the new Blobject will be yield
14
- def initialize hash = {}
15
-
14
+ def initialize hash={}
16
15
  @hash = Hash.new
17
16
 
18
17
  hash.each do |key, value|
@@ -34,7 +33,6 @@ class Blobject
34
33
 
35
34
  # delegates to the internal Hash
36
35
  def inspect
37
-
38
36
  @hash.inspect
39
37
  end
40
38
 
@@ -45,7 +43,6 @@ class Blobject
45
43
 
46
44
  # creates a recursive copy of the internal hash
47
45
  def to_hash
48
-
49
46
  h = hash.dup
50
47
  @hash.each do |name, node|
51
48
  h[name] = node.to_hash if node.respond_to? :to_hash
@@ -56,7 +53,6 @@ class Blobject
56
53
  # method_missing is only called the first time an attribute is used. successive calls use
57
54
  # memoized getters, setters and checkers
58
55
  def method_missing method, *params, &block
59
-
60
56
  __tag_and_raise__ NoMethodError.new(method) if ProhibitedNames.include?(method)
61
57
 
62
58
  case
@@ -115,22 +111,14 @@ class Blobject
115
111
 
116
112
  # hash-like access to the Blobject's attributes
117
113
  def [] name
118
-
119
114
  send name
120
115
  end
121
116
 
122
117
  # hash-like attribute setter
123
118
  def []= name, value
124
-
125
119
  send "#{name.to_s}=", value
126
120
  end
127
121
 
128
- # freeze a Blobject to prevent it being modified
129
- def freeze
130
- self.class.send(:__freeze_r__, @hash) unless frozen?
131
- super
132
- end
133
-
134
122
  # for rails: `render json: blobject`
135
123
  def as_json *args
136
124
  return hash.as_json(*args) if hash.respond_to? :as_json
@@ -144,19 +132,16 @@ class Blobject
144
132
 
145
133
  # serialize the Blobject as a yaml string
146
134
  def to_yaml
147
-
148
135
  as_yaml.to_yaml
149
136
  end
150
137
 
151
138
  # get a Blobject from a json string, if the yaml string describes an array, an array will be returned
152
139
  def self.from_json json
153
-
154
140
  __blobjectify__(JSON.parse(json))
155
141
  end
156
142
 
157
143
  # get a Blobject from a yaml string, if the yaml string describes an array, an array will be returned
158
144
  def self.from_yaml yaml
159
-
160
145
  __blobjectify__(YAML.load(yaml))
161
146
  end
162
147
 
@@ -189,21 +174,7 @@ class Blobject
189
174
 
190
175
  protected
191
176
 
192
- def __freeze_r__ object
193
-
194
- if object.respond_to?(:each) && object.each.is_a?(Enumerator)
195
- values = object.is_a?(Hash) ? object.values : object
196
- values.each do |v|
197
- v.freeze
198
- __freeze_r__(v)
199
- end
200
- end
201
-
202
- object.freeze
203
- end
204
-
205
177
  def __blobjectify__ object
206
-
207
178
  array = object if object.is_a? Array
208
179
  hash = object if object.is_a? Hash
209
180
 
@@ -213,7 +184,6 @@ class Blobject
213
184
  end
214
185
 
215
186
  def __define_attribute__ name
216
-
217
187
  __tag_and_raise__ NameError.new("invalid attribute name #{name}") unless name =~ /^\w+$/
218
188
  name = name.to_sym
219
189
 
@@ -1,4 +1,4 @@
1
1
  class Blobject
2
2
  # semver gem version
3
- VERSION = '0.4.1'
3
+ VERSION = '0.5.0'
4
4
  end
@@ -278,51 +278,4 @@ describe Blobject do
278
278
  end
279
279
  end
280
280
  end
281
-
282
- describe 'freeze' do
283
- before :each do
284
- list_element = Blobject.new
285
-
286
- b.name.first = 'barry'
287
- b.data.list = [1, 2, 3, list_element]
288
- b.data.inner_hash = {:inner => {:one => 1}}
289
-
290
- b.freeze
291
- end
292
-
293
- it 'freezes the internal hash' do
294
- b.freeze
295
- b.hash.must_be :frozen?
296
- end
297
-
298
- it 'still provides access' do
299
- refute_nil b.name.first
300
- end
301
-
302
- it 'freezes the internal hash' do
303
- assert b.hash.frozen?
304
- end
305
-
306
- it 'allows access to existing attributes' do
307
- assert_equal b.name.first, 'barry'
308
- end
309
-
310
- it 'recursively freezes nested Blobjects' do
311
- assert b.frozen?
312
- assert b.name.frozen?
313
- assert b.data.list[3].frozen?
314
- assert b.data.inner_hash.frozen?
315
- end
316
-
317
- it 'raises an error when trying to set an attribute' do
318
- proc { b.hello = 123 }.must_raise RuntimeError
319
- end
320
-
321
- it 'still returns a blobject when trying to get an attribute' do
322
- b.meow_face.must_be_instance_of Blobject
323
- # check again to test memoized method
324
- b.meow_face.must_be_instance_of Blobject
325
- end
326
- end
327
-
328
281
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blobject
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Taylor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
11
+ date: 2014-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest