immutable-struct 2.3.0.rc1 → 2.3.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: 3f2631b67a9155ff0938074129f5dca8570498bc
4
- data.tar.gz: 145dc0eb0472fc9673d9cf9cf73c3d558d656b10
3
+ metadata.gz: 90315cc7aa75a487cf037aefed966ae52c2a1826
4
+ data.tar.gz: 6f6c1750a942a9ab4ec45fa015fb0f75c03d3036
5
5
  SHA512:
6
- metadata.gz: d1ae7330e2a5e9ee80abd47c48ac0bea78f3a3bb4dda6bcc9803261f1682a1806f3875a5aee19cb702f8c923895c1e3cf05c6209a60e8d3fbdfcc71c9b76b846
7
- data.tar.gz: 314253075188993c13621ddcf0ca1b7e980884611a4ac3cd5170fde9ed96a907f6d1e05f151797685f83868dd0e65ba1212803d188b0f40a89331fb27f012793
6
+ metadata.gz: bf5c63f1f22ccd08744d02ae6afa583bbd901df66fdb8f68798d7b689bb3c54f487f7279f877f9525c03e98eec824d667d27769e37a828b87f279a4421a2e602
7
+ data.tar.gz: 22507c2b9558426d29574c7aa8d1206894a1b9d00d5c89f679765b5ac89c42f9b40425967afe831b71362f6c684db5c14b7eea3657d10296594cf07cc6553cd1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- immutable-struct (2.3.0.rc1)
4
+ immutable-struct (2.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -6,7 +6,7 @@
6
6
  # will be evaluated as if it were inside a class definition, allowing you
7
7
  # to add methods, include or extend modules, or do whatever else you want.
8
8
  class ImmutableStruct
9
- VERSION='2.3.0.rc1' #:nodoc:
9
+ VERSION='2.3.0' #:nodoc:
10
10
  # Create a new class with the given read-only attributes.
11
11
  #
12
12
  # attributes:: list of symbols or strings that can be used to create attributes.
@@ -124,17 +124,11 @@ class ImmutableStruct
124
124
  klass.class_exec(imethods) do |imethods|
125
125
  define_method(:to_h) do
126
126
  imethods.inject({}) do |hash, method|
127
- next hash if [:to_json, :==, :eql?, :merge, :hash].include?(method)
127
+ next hash if [:==, :eql?, :merge, :hash].include?(method)
128
128
  hash.merge(method.to_sym => self.send(method))
129
129
  end
130
130
  end
131
-
132
- define_method(:to_json) do |*args|
133
- imethods.inject({}) do |hash, method|
134
- next hash if [:to_json, :to_hash, :to_h, :==, :eql?, :merge, :hash].include?(method)
135
- hash.merge(method.to_sym => self.send(method))
136
- end.to_json(*args)
137
- end
131
+ alias_method :to_hash, :to_h
138
132
  end
139
133
  klass
140
134
  end
@@ -152,6 +152,20 @@ describe ImmutableStruct do
152
152
  }
153
153
  end
154
154
  end
155
+ context "to_hash is its alias" do
156
+ it "is identical" do
157
+ klass = ImmutableStruct.new(:name, :minor?, :location, [:aliases]) do
158
+ def nick_name
159
+ 'bob'
160
+ end
161
+ def location_near?(other_location)
162
+ false
163
+ end
164
+ end
165
+ instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
166
+ instance.to_h.should == instance.to_hash
167
+ end
168
+ end
155
169
 
156
170
  context "no-arg method that uses to_h" do
157
171
  it "blows up" do
@@ -159,76 +173,18 @@ describe ImmutableStruct do
159
173
  def nick_name
160
174
  'bob'
161
175
  end
162
- def to_s
163
- to_h.to_s
176
+ def to_json
177
+ to_h.to_json
164
178
  end
165
179
  end
166
180
  instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
167
181
  expect {
168
- instance.to_s.should == instance.to_h.to_s
182
+ instance.to_json.should == instance.to_h.to_json
169
183
  }.to raise_error(SystemStackError)
170
184
  end
171
185
  end
172
186
  end
173
187
 
174
-
175
- describe "to_json" do
176
- it 'recursively handles to_json' do
177
- klass = ImmutableStruct.new(:name, :subclass)
178
-
179
- subklass = ImmutableStruct.new(:number) do
180
- def triple
181
- 3 * number
182
- end
183
- end
184
-
185
- instance = klass.new(
186
- name: 'Rudy',
187
- subclass: subklass.new(
188
- number: 1,
189
- )
190
- )
191
- instance.to_json.should ==
192
- "{\"name\":\"Rudy\",\"subclass\":{\"number\":1,\"triple\":3}}"
193
- end
194
-
195
- it 'handles arrays gracefully' do
196
- klass = ImmutableStruct.new(:name, [:aliases] )
197
-
198
- instance = klass.new(
199
- name: 'Rudy',
200
- aliases: ['Jones', 'Silly']
201
- )
202
- instance.to_json.should ==
203
- "{\"name\":\"Rudy\",\"aliases\":[\"Jones\",\"Silly\"]}"
204
- end
205
-
206
- it 'recursively handles arrays to_json' do
207
- klass = ImmutableStruct.new(:name, [:subclasses])
208
-
209
- subklass = ImmutableStruct.new(:number) do
210
- def triple
211
- 3 * number
212
- end
213
- end
214
-
215
- instance = klass.new(
216
- name: 'Rudy',
217
- subclasses:
218
- [
219
- subklass.new(
220
- number: 2
221
- ),
222
- subklass.new(
223
- number: 3,
224
- )
225
- ]
226
- )
227
- instance.to_json.should ==
228
- "{\"name\":\"Rudy\",\"subclasses\":[{\"number\":2,\"triple\":6},{\"number\":3,\"triple\":9}]}"
229
- end
230
- end
231
-
232
188
  describe "merge" do
233
189
  it "returns a new object as a result of merging attributes" do
234
190
  klass = ImmutableStruct.new(:food, :snacks, :butter)
@@ -338,6 +294,5 @@ describe ImmutableStruct do
338
294
 
339
295
  end
340
296
 
341
-
342
297
  end
343
298
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immutable-struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0.rc1
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stitch Fix Engineering
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-08-08 00:00:00.000000000 Z
13
+ date: 2017-08-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -94,9 +94,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - ">"
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 1.3.1
99
+ version: '0'
100
100
  requirements: []
101
101
  rubyforge_project:
102
102
  rubygems_version: 2.4.5