immutable-struct 2.3.0 → 2.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 90315cc7aa75a487cf037aefed966ae52c2a1826
4
- data.tar.gz: 6f6c1750a942a9ab4ec45fa015fb0f75c03d3036
2
+ SHA256:
3
+ metadata.gz: 79b8217337e96a8a7514ea7cfef14f75176fe8468dd552d0c523f934483d5080
4
+ data.tar.gz: b7517bc4e1ae43423a4483d2fa42a4913710453fc00a17cab37bc78ee6b83d33
5
5
  SHA512:
6
- metadata.gz: bf5c63f1f22ccd08744d02ae6afa583bbd901df66fdb8f68798d7b689bb3c54f487f7279f877f9525c03e98eec824d667d27769e37a828b87f279a4421a2e602
7
- data.tar.gz: 22507c2b9558426d29574c7aa8d1206894a1b9d00d5c89f679765b5ac89c42f9b40425967afe831b71362f6c684db5c14b7eea3657d10296594cf07cc6553cd1
6
+ metadata.gz: dba93bcdabd6fdcaaa137ad6c3b20ab379ecc64128aa19f5ae796e13ef9d04d0a66c9fa2becef11bbee15488793b7ebad3c8c42047f541b1226284ff02f78c44
7
+ data.tar.gz: 1478ce402dea03830755e8b28393683c7da8a308247c7db39d0856c0eb95e4e56276fc3926ab3b469bf9a4a4f07b9435951535b3e91498e6a0f1960714e5c801
@@ -0,0 +1,64 @@
1
+ # DO NOT MODIFY - this is managed by Git Reduce in goro
2
+ #
3
+ ---
4
+ version: 2
5
+ jobs:
6
+ ruby-2.6.1:
7
+ docker:
8
+ - image: circleci/ruby:2.6.1
9
+ working_directory: "~/immutable-struct"
10
+ steps:
11
+ - checkout
12
+ - run: bundle install --full-index
13
+ - run: bundle exec rspec --format RspecJunitFormatter --out /tmp/test-results/rspec.xml
14
+ --format=doc
15
+ - run:
16
+ name: Run Additional CI Steps
17
+ command: if [ -e bin/additional-ci-steps ]; then bin/additional-ci-steps;
18
+ fi
19
+ - run:
20
+ name: Notify Pager Duty
21
+ command: 'bundle exec y-notify #eng-platform'
22
+ when: on_fail
23
+ - store_test_results:
24
+ path: "/tmp/test-results"
25
+ ruby-2.5.3:
26
+ docker:
27
+ - image: circleci/ruby:2.5.3
28
+ working_directory: "~/immutable-struct"
29
+ steps:
30
+ - checkout
31
+ - run: bundle install --full-index
32
+ - run: bundle exec rspec --format RspecJunitFormatter --out /tmp/test-results/rspec.xml
33
+ --format=doc
34
+ - run:
35
+ name: Run Additional CI Steps
36
+ command: if [ -e bin/additional-ci-steps ]; then bin/additional-ci-steps;
37
+ fi
38
+ - run:
39
+ name: Notify Pager Duty
40
+ command: 'bundle exec y-notify #eng-platform'
41
+ when: on_fail
42
+ - store_test_results:
43
+ path: "/tmp/test-results"
44
+ workflows:
45
+ version: 2
46
+ on-commit:
47
+ jobs:
48
+ - ruby-2.6.1:
49
+ context: org-global
50
+ - ruby-2.5.3:
51
+ context: org-global
52
+ scheduled:
53
+ triggers:
54
+ - schedule:
55
+ cron: 4 21 * * 1,2,3,4,5
56
+ filters:
57
+ branches:
58
+ only:
59
+ - master
60
+ jobs:
61
+ - ruby-2.6.1:
62
+ context: org-global
63
+ - ruby-2.5.3:
64
+ context: org-global
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/version_tmp
16
16
  tmp
17
17
  html
18
18
  .*.sw?
19
+ Gemfile.lock
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.2.2
1
+ 2.5.3
data/.travis.yml CHANGED
@@ -2,8 +2,7 @@ language: ruby
2
2
  before_install:
3
3
  - gem install bundler
4
4
  rvm:
5
- - 1.9.3
6
- - 2.0.0
7
- - 2.1.0
8
- - 2.2.2
5
+ - 2.5.0
6
+ - 2.4.3
7
+ - 2.3.6
9
8
  - ruby-head
data/README.rdoc CHANGED
@@ -56,7 +56,17 @@ If not using bundler, just use RubyGems:
56
56
  new_person.name # => "Other Dave"
57
57
  new_person.age # => 41
58
58
  new_person.active? # => true
59
-
59
+
60
+ You can coerce values into struct types by using the +from+ method.
61
+ This is similar to Ruby's conversion functions, e.g. Integer("1").
62
+
63
+ dave = Person.from(p)
64
+ dave.equal?(p) # => true (object equality)
65
+
66
+ daveish = Person.from(dave.to_h)
67
+ daveish.equal?(dave) # => false
68
+ daveish == dave # => true
69
+
60
70
  You can treat the interior of the block as a normal class definition with the exception of setting constants.
61
71
  Use +const_set+ to scope constants as-expected.
62
72
 
@@ -66,7 +76,7 @@ Use +const_set+ to scope constants as-expected.
66
76
  end
67
77
  Point::ZERO # => 0
68
78
  ::ONE_HUNDRED # => 100
69
- ::ZERO # => NameError: uninitialized constant ZERO
79
+ ::ZERO # => NameError: uninitialized constant ZERO
70
80
 
71
81
 
72
82
  == Links
data/build-matrix.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "build_matrix": {
3
+ }
4
+ }
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "bundler", "> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency('rspec_junit_formatter')
24
25
  end
@@ -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' #:nodoc:
9
+ VERSION='2.4.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.
@@ -72,6 +72,15 @@ class ImmutableStruct
72
72
  end
73
73
  end
74
74
 
75
+ define_singleton_method(:from) do |value|
76
+ case value
77
+ when self then value
78
+ when Hash then new(value)
79
+ else
80
+ raise ArgumentError, "cannot coerce #{value.class} #{value.inspect} into #{self}"
81
+ end
82
+ end
83
+
75
84
  define_method(:initialize) do |*args|
76
85
  attrs = args[0] || {}
77
86
  attributes.each do |attribute|
data/owners.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "owners": [
3
+ {
4
+ "team": "platform"
5
+ }
6
+ ]
7
+ }
@@ -13,31 +13,30 @@ describe ImmutableStruct do
13
13
  end
14
14
  subject { @klass.new }
15
15
 
16
- it { should respond_to(:foo) }
17
- it { should respond_to(:bar) }
18
- it { should respond_to(:baz) }
19
- it { should_not respond_to(:foo=) }
20
- it { should_not respond_to(:bar=) }
21
- it { should_not respond_to(:baz=) }
22
- it { should_not respond_to(:foo?) }
23
- it { should_not respond_to(:bar?) }
24
- it { should_not respond_to(:baz?) }
16
+ it { is_expected.to respond_to(:foo) }
17
+ it { is_expected.to respond_to(:bar) }
18
+ it { is_expected.to respond_to(:baz) }
19
+ it { is_expected.not_to respond_to(:foo=) }
20
+ it { is_expected.not_to respond_to(:bar=) }
21
+ it { is_expected.not_to respond_to(:baz=) }
22
+ it { is_expected.not_to respond_to(:foo?) }
23
+ it { is_expected.not_to respond_to(:bar?) }
24
+ it { is_expected.not_to respond_to(:baz?) }
25
25
 
26
26
  context "instances can be created with a hash" do
27
-
28
27
  context 'with symbol keys' do
29
28
  subject { @klass.new(foo: "FOO", bar: 42, baz: [:a,:b,:c]) }
30
29
 
31
- it { subject.foo.should == "FOO" }
32
- it { subject.bar.should == 42 }
33
- it { subject.baz.should == [:a,:b,:c] }
30
+ it { expect(subject.foo).to eq("FOO") }
31
+ it { expect(subject.bar).to eq(42) }
32
+ it { expect(subject.baz).to eq([:a,:b,:c]) }
34
33
  end
35
34
 
36
35
  context "with string keys" do
37
36
  subject { ImmutableStruct.new(:foo) }
38
37
 
39
- it { subject.new('foo' => true).foo.should == true }
40
- it { subject.new('foo' => false).foo.should == false }
38
+ it { expect(subject.new('foo' => true).foo).to eq(true) }
39
+ it { expect(subject.new('foo' => false).foo).to eq(false) }
41
40
  end
42
41
  end
43
42
  end
@@ -46,20 +45,20 @@ describe ImmutableStruct do
46
45
  subject { ImmutableStruct.new(:foo?) }
47
46
 
48
47
  context "with boolean values" do
49
- it { subject.new(foo: false).foo?.should == false }
50
- it { subject.new(foo: false).foo.should == false }
51
- it { subject.new(foo: true).foo?.should == true }
52
- it { subject.new(foo: true).foo.should == true }
48
+ it { expect(subject.new(foo: false).foo?).to eq(false) }
49
+ it { expect(subject.new(foo: false).foo).to eq(false) }
50
+ it { expect(subject.new(foo: true).foo?).to eq(true) }
51
+ it { expect(subject.new(foo: true).foo).to eq(true) }
53
52
  end
54
53
 
55
54
  context "with falsey, non-boolean values" do
56
- it { subject.new.foo?.should == false }
57
- it { subject.new.foo.should == nil }
55
+ it { expect(subject.new.foo?).to eq(false) }
56
+ it { expect(subject.new.foo).to eq(nil) }
58
57
  end
59
58
 
60
59
  context "with truthy, non-boolean values" do
61
- it { subject.new(foo: "true").foo?.should == true }
62
- it { subject.new(foo: "true").foo.should == "true" }
60
+ it { expect(subject.new(foo: "true").foo?).to eq(true) }
61
+ it { expect(subject.new(foo: "true").foo).to eq("true") }
63
62
  end
64
63
  end
65
64
 
@@ -67,8 +66,8 @@ describe ImmutableStruct do
67
66
  it "can define an array value that should never be nil" do
68
67
  klass = ImmutableStruct.new([:foo], :bar)
69
68
  instance = klass.new
70
- instance.foo.should == []
71
- instance.bar.should == nil
69
+ expect(instance.foo).to eq([])
70
+ expect(instance.bar).to eq(nil)
72
71
  end
73
72
  end
74
73
 
@@ -77,7 +76,7 @@ describe ImmutableStruct do
77
76
  def derived; self.foo + ":" + self.bar; end
78
77
  end
79
78
  instance = klass.new(foo: "hello", bar: "world")
80
- instance.derived.should == "hello:world"
79
+ expect(instance.derived).to eq("hello:world")
81
80
  end
82
81
 
83
82
  it "allows defining class methods" do
@@ -87,8 +86,8 @@ describe ImmutableStruct do
87
86
  end
88
87
  end
89
88
  instance = klass.from_array(["hello","world"])
90
- instance.foo.should == "hello"
91
- instance.bar.should == "world"
89
+ expect(instance.foo).to eq("hello")
90
+ expect(instance.bar).to eq("world")
92
91
  end
93
92
 
94
93
  it "allows module inclusion" do
@@ -97,8 +96,8 @@ describe ImmutableStruct do
97
96
  end
98
97
  instance = klass.new
99
98
 
100
- instance.should respond_to(:hello)
101
- klass.should_not respond_to(:hello)
99
+ expect(instance).to respond_to(:hello)
100
+ expect(klass).not_to respond_to(:hello)
102
101
  end
103
102
 
104
103
  it "allows module extension" do
@@ -107,8 +106,28 @@ describe ImmutableStruct do
107
106
  end
108
107
  instance = klass.new
109
108
 
110
- instance.should_not respond_to(:hello)
111
- klass.should respond_to(:hello)
109
+ expect(instance).not_to respond_to(:hello)
110
+ expect(klass).to respond_to(:hello)
111
+ end
112
+ end
113
+
114
+ describe "coercion" do
115
+ let(:klass) { ImmutableStruct.new(:lolwat) }
116
+
117
+ it "is a noop when value is already the defined type" do
118
+ value = klass.new
119
+ new_value = klass.from(value)
120
+ expect(new_value).to be(value)
121
+ end
122
+
123
+ it "initializes a new value when Hash is given" do
124
+ value = klass.from(lolwat: "haha")
125
+ expect(value.lolwat).to eq("haha")
126
+ end
127
+
128
+ it "errors when value cannot be coerced" do
129
+ expect { klass.from(Object.new) }
130
+ .to raise_error(ArgumentError)
112
131
  end
113
132
  end
114
133
 
@@ -121,16 +140,17 @@ describe ImmutableStruct do
121
140
  end
122
141
  end
123
142
  instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
124
- instance.to_h.should == {
143
+ expect(instance.to_h).to eq({
125
144
  name: "Rudy",
126
145
  minor: "ayup",
127
146
  minor?: true,
128
147
  location: nil,
129
148
  aliases: [ "Rudyard", "Roozoola"],
130
149
  nick_name: "bob",
131
- }
150
+ })
132
151
  end
133
152
  end
153
+
134
154
  context "additional method that takes arguments" do
135
155
  it "should not call the additional method" do
136
156
  klass = ImmutableStruct.new(:name, :minor?, :location, [:aliases]) do
@@ -142,16 +162,17 @@ describe ImmutableStruct do
142
162
  end
143
163
  end
144
164
  instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
145
- instance.to_h.should == {
165
+ expect(instance.to_h).to eq({
146
166
  name: "Rudy",
147
167
  minor: "ayup",
148
168
  minor?: true,
149
169
  location: nil,
150
170
  aliases: [ "Rudyard", "Roozoola"],
151
171
  nick_name: "bob",
152
- }
172
+ })
153
173
  end
154
174
  end
175
+
155
176
  context "to_hash is its alias" do
156
177
  it "is identical" do
157
178
  klass = ImmutableStruct.new(:name, :minor?, :location, [:aliases]) do
@@ -163,24 +184,7 @@ describe ImmutableStruct do
163
184
  end
164
185
  end
165
186
  instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
166
- instance.to_h.should == instance.to_hash
167
- end
168
- end
169
-
170
- context "no-arg method that uses to_h" do
171
- it "blows up" do
172
- klass = ImmutableStruct.new(:name, :minor?, :location, [:aliases]) do
173
- def nick_name
174
- 'bob'
175
- end
176
- def to_json
177
- to_h.to_json
178
- end
179
- end
180
- instance = klass.new(name: "Rudy", minor: "ayup", aliases: [ "Rudyard", "Roozoola" ])
181
- expect {
182
- instance.to_json.should == instance.to_h.to_json
183
- }.to raise_error(SystemStackError)
187
+ expect(instance.to_h).to eq(instance.to_hash)
184
188
  end
185
189
  end
186
190
  end
@@ -191,20 +195,19 @@ describe ImmutableStruct do
191
195
  instance = klass.new(food: 'hot dogs', butter: true)
192
196
  new_instance = instance.merge(snacks: 'candy hot dogs', butter: false)
193
197
 
194
- instance.food.should == 'hot dogs'
195
- instance.butter.should == true
196
- instance.snacks.should == nil
198
+ expect(instance.food).to eq('hot dogs')
199
+ expect(instance.butter).to eq(true)
200
+ expect(instance.snacks).to eq(nil)
197
201
 
198
- new_instance.food.should == 'hot dogs'
199
- new_instance.snacks.should == 'candy hot dogs'
200
- new_instance.butter.should == false
202
+ expect(new_instance.food).to eq('hot dogs')
203
+ expect(new_instance.snacks).to eq('candy hot dogs')
204
+ expect(new_instance.butter).to eq(false)
201
205
 
202
- new_instance.object_id.should_not == instance.object_id
206
+ expect(new_instance.object_id).not_to eq(instance.object_id)
203
207
  end
204
208
  end
205
209
 
206
210
  describe "equality" do
207
-
208
211
  before do
209
212
  klass_1 = ImmutableStruct.new(:foo, [:bars])
210
213
  klass_2 = ImmutableStruct.new(:foo, [:bars])
@@ -215,84 +218,77 @@ describe ImmutableStruct do
215
218
  end
216
219
 
217
220
  describe "==" do
218
-
219
221
  it "should be equal to itself" do
220
- (@k1_a == @k1_a).should be true
222
+ expect(@k1_a == @k1_a).to be true
221
223
  end
222
224
 
223
225
  it "should be equal to same class with identical attribute values" do
224
- (@k1_a == @k1_c).should be true
226
+ expect(@k1_a == @k1_c).to be true
225
227
  end
226
228
 
227
229
  it 'should not be equal to same class with different attribute values' do
228
- (@k1_a == @k1_b).should be false
230
+ expect(@k1_a == @k1_b).to be false
229
231
  end
230
232
 
231
233
  it 'should not be equal to different class with identical attribute values' do
232
- (@k1_a == @k3_a).should be false
234
+ expect(@k1_a == @k3_a).to be false
233
235
  end
234
-
235
236
  end
236
237
 
237
238
  describe "eql?" do
238
-
239
239
  it "should be equal to itself" do
240
- @k1_a.eql?(@k1_a).should be true
240
+ expect(@k1_a.eql?(@k1_a)).to be true
241
241
  end
242
242
 
243
243
  it "should be equal to same class with identical attribute values" do
244
- @k1_a.eql?(@k1_c).should be true
244
+ expect(@k1_a.eql?(@k1_c)).to be true
245
245
  end
246
246
 
247
247
  it 'should not be equal to same class with different attribute values' do
248
- @k1_a.eql?(@k1_b).should be false
248
+ expect(@k1_a.eql?(@k1_b)).to be false
249
249
  end
250
250
 
251
251
  it 'should not be equal to different class with identical attribute values' do
252
- @k1_a.eql?(@k3_a).should be false
252
+ expect(@k1_a.eql?(@k3_a)).to be false
253
253
  end
254
-
255
254
  end
256
255
 
257
256
  describe "hash" do
258
-
259
257
  it "should have same hash value as itself" do
260
- @k1_a.hash.eql?(@k1_a.hash).should be true
258
+ expect(@k1_a.hash.eql?(@k1_a.hash)).to be true
261
259
  end
262
260
 
263
261
  it "should have same hash value as same class with identical attribute values" do
264
- @k1_a.hash.eql?(@k1_c.hash).should be true
262
+ expect(@k1_a.hash.eql?(@k1_c.hash)).to be true
265
263
  end
266
264
 
267
265
  it 'should not have hash value as same class with different attribute values' do
268
- @k1_a.hash.eql?(@k1_b.hash).should be false
266
+ expect(@k1_a.hash.eql?(@k1_b.hash)).to be false
269
267
  end
270
268
 
271
269
  it 'should not have hash value equal to different class with identical attribute values' do
272
- @k1_a.hash.eql?(@k3_a.hash).should be false
270
+ expect(@k1_a.hash.eql?(@k3_a.hash)).to be false
273
271
  end
274
272
 
275
273
  it 'should reject set addition if same instance is already a member' do
276
274
  set = Set.new([@k1_a])
277
- set.add?(@k1_a).should be nil
275
+ expect(set.add?(@k1_a)).to be nil
278
276
  end
279
277
 
280
278
  it 'should reject set addition if different instance, but attributes are the same' do
281
279
  set = Set.new([@k1_a])
282
- set.add?(@k1_c).should be nil
280
+ expect(set.add?(@k1_c)).to be nil
283
281
  end
284
282
 
285
283
  it 'should allow set addition if different instance and attribute values' do
286
284
  set = Set.new([@k1_a])
287
- set.add?(@k1_b).should_not be nil
285
+ expect(set.add?(@k1_b)).not_to be nil
288
286
  end
289
287
 
290
288
  it 'should allow set addition if different class' do
291
289
  set = Set.new([@k1_a])
292
- set.add?(@k2_a).should_not be nil
290
+ expect(set.add?(@k2_a)).not_to be nil
293
291
  end
294
-
295
292
  end
296
-
297
293
  end
298
294
  end
data/spec/spec_helper.rb CHANGED
@@ -5,7 +5,7 @@ require 'immutable-struct'
5
5
 
6
6
  RSpec.configure do |config|
7
7
  config.expect_with :rspec do |c|
8
- c.syntax = [:should, :expect]
8
+ c.syntax = [:expect]
9
9
  end
10
10
  config.order = "random"
11
11
  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
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stitch Fix Engineering
@@ -10,20 +10,20 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-08-14 00:00:00.000000000 Z
13
+ date: 2019-03-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ">"
20
20
  - !ruby/object:Gem::Version
21
21
  version: '1.3'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - ">"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '1.3'
29
29
  - !ruby/object:Gem::Dependency
@@ -54,6 +54,20 @@ dependencies:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rspec_junit_formatter
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
57
71
  description: Easily create value objects without the pain of Ruby's Struct (or its
58
72
  setters)
59
73
  email:
@@ -64,6 +78,7 @@ executables: []
64
78
  extensions: []
65
79
  extra_rdoc_files: []
66
80
  files:
81
+ - ".circleci/config.yml"
67
82
  - ".gitignore"
68
83
  - ".ruby-gemset"
69
84
  - ".ruby-version"
@@ -71,12 +86,13 @@ files:
71
86
  - CODE_OF_CONDUCT.md
72
87
  - CONTRIBUTING.md
73
88
  - Gemfile
74
- - Gemfile.lock
75
89
  - LICENSE.txt
76
90
  - README.rdoc
77
91
  - Rakefile
92
+ - build-matrix.json
78
93
  - immutable-struct.gemspec
79
94
  - lib/immutable-struct.rb
95
+ - owners.json
80
96
  - spec/immutable_struct_spec.rb
81
97
  - spec/spec_helper.rb
82
98
  homepage: https://github.com/stitchfix/immutable-struct
@@ -98,8 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
114
  - !ruby/object:Gem::Version
99
115
  version: '0'
100
116
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.4.5
117
+ rubygems_version: 3.0.1
103
118
  signing_key:
104
119
  specification_version: 4
105
120
  summary: Easily create value objects without the pain of Ruby's Struct (or its setters)
data/Gemfile.lock DELETED
@@ -1,35 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- immutable-struct (2.3.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- diff-lcs (1.2.5)
10
- rake (11.2.2)
11
- rspec (3.5.0)
12
- rspec-core (~> 3.5.0)
13
- rspec-expectations (~> 3.5.0)
14
- rspec-mocks (~> 3.5.0)
15
- rspec-core (3.5.3)
16
- rspec-support (~> 3.5.0)
17
- rspec-expectations (3.5.0)
18
- diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.5.0)
20
- rspec-mocks (3.5.0)
21
- diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.5.0)
23
- rspec-support (3.5.0)
24
-
25
- PLATFORMS
26
- ruby
27
-
28
- DEPENDENCIES
29
- bundler (~> 1.3)
30
- immutable-struct!
31
- rake
32
- rspec
33
-
34
- BUNDLED WITH
35
- 1.14.6