attr_extras 6.2.5 → 7.1.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 +4 -4
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/ci.yml +2 -2
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +9 -1
- data/README.md +0 -11
- data/attr_extras.gemspec +5 -11
- data/lib/attr_extras/attr_implement.rb +2 -1
- data/lib/attr_extras/attr_initialize.rb +6 -4
- data/lib/attr_extras/attr_value.rb +2 -1
- data/lib/attr_extras/explicit.rb +4 -4
- data/lib/attr_extras/params_builder.rb +3 -3
- data/lib/attr_extras/utils.rb +4 -3
- data/lib/attr_extras/version.rb +1 -1
- data/spec/attr_extras/aattr_initialize_spec.rb +25 -0
- data/spec/attr_extras/attr_implement_spec.rb +2 -2
- data/spec/attr_extras/attr_initialize_spec.rb +7 -7
- data/spec/attr_extras/method_object_spec.rb +14 -0
- data/spec/attr_extras/params_builder_spec.rb +3 -3
- data/spec/attr_extras/pattr_initialize_spec.rb +1 -1
- data/spec/attr_extras/static_facade_spec.rb +14 -0
- data/spec/attr_extras/utils_spec.rb +1 -1
- data/spec/attr_extras/vattr_initialize_spec.rb +1 -1
- metadata +6 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 466f80d1e0d81139ee5eeb996a584fb26b7ae69062e5bce75a901095e1b3ff82
|
4
|
+
data.tar.gz: a8e7b0a9ef95e1375d5a928d65f0c76371c8796c1cca813a4c27a897e32cadbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68c0d15374bd6a9a3eeaecd3d7b7458ed874e99f05927ac3a07b2c9d6d11c63d7c230347191eb1c06d2501fca387cb032c5d67e580422833afb4967bdc09fb74
|
7
|
+
data.tar.gz: c1012ecd9b537608b382eec96a8a449fc85d8f32dd2ad6380ae6a246cf5d44d3b61c00a7c8be21b32a7a0f4d22afcf7c7a0ca0870877a84dbb587c433b6355e6
|
data/.github/workflows/ci.yml
CHANGED
@@ -13,10 +13,10 @@ jobs:
|
|
13
13
|
|
14
14
|
strategy:
|
15
15
|
matrix:
|
16
|
-
ruby-version: [
|
16
|
+
ruby-version: [3.1, "3.0", 2.7, jruby-head]
|
17
17
|
|
18
18
|
steps:
|
19
|
-
- uses: actions/checkout@
|
19
|
+
- uses: actions/checkout@v3
|
20
20
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
21
21
|
uses: ruby/setup-ruby@v1
|
22
22
|
with:
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [7.1.0](https://github.com/barsoom/attr_extras/releases/tag/v7.1.0)
|
4
|
+
|
5
|
+
- Make `static_facade` and `method_object` take a block for initalization.
|
6
|
+
|
7
|
+
## [7.0.0](https://github.com/barsoom/attr_extras/releases/tag/v7.0.0)
|
8
|
+
|
9
|
+
- Drop end-of-lifed Ruby 2.5 and 2.6.
|
10
|
+
- Don't share default value object instances. (We now do a shallow `dup`.) Thanks to [sammo1235](https://github.com/barsoom/attr_extras/pull/46)!
|
11
|
+
|
3
12
|
## [6.2.4](https://github.com/barsoom/attr_extras/releases/tag/v6.2.4)
|
4
13
|
|
5
14
|
- Fix keyword argument warnings with Ruby 2.7. Thanks to [Elliot Winkler](https://github.com/barsoom/attr_extras/pull/34)!
|
data/Gemfile
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in attr_extras.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem "barsoom_utils"
|
8
|
+
gem "m" # Running individual tests.
|
9
|
+
gem "minitest"
|
10
|
+
gem "rake"
|
11
|
+
gem "rubocop"
|
12
|
+
end
|
data/README.md
CHANGED
@@ -517,17 +517,6 @@ You can run an individual test using the [m](https://github.com/qrush/m) gem:
|
|
517
517
|
The tests are intentionally split into two test suites for reasons described in `Rakefile`.
|
518
518
|
|
519
519
|
|
520
|
-
## Contributors
|
521
|
-
|
522
|
-
* [Henrik Nyh](https://github.com/henrik)
|
523
|
-
* [Joakim Kolsjö](https://github.com/joakimk)
|
524
|
-
* [Victor Arias](https://github.com/victorarias)
|
525
|
-
* [Teo Ljungberg](https://github.com/teoljungberg)
|
526
|
-
* [Kim Persson](https://github.com/lavinia)
|
527
|
-
* [Joe Ferris](https://github.com/jferris)
|
528
|
-
* [Julien Vanier](https://github.com/monkbroc)
|
529
|
-
|
530
|
-
|
531
520
|
## License
|
532
521
|
|
533
522
|
[MIT](LICENSE.txt)
|
data/attr_extras.gemspec
CHANGED
@@ -2,23 +2,17 @@
|
|
2
2
|
require File.expand_path("../lib/attr_extras/version", __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Henrik Nyh", "Joakim Kolsjö", "Tomas Skogberg", "Victor Arias", "Ola K"]
|
6
|
-
gem.email = ["henrik@nyh.se"]
|
5
|
+
gem.authors = [ "Henrik Nyh", "Joakim Kolsjö", "Tomas Skogberg", "Victor Arias", "Ola K" ]
|
6
|
+
gem.email = [ "henrik@nyh.se" ]
|
7
7
|
gem.summary = %q{Takes some boilerplate out of Ruby with methods like attr_initialize.}
|
8
8
|
gem.homepage = "https://github.com/barsoom/attr_extras"
|
9
9
|
|
10
10
|
gem.files = `git ls-files`.split($\)
|
11
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
11
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
12
12
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
13
|
gem.name = "attr_extras"
|
14
|
-
gem.require_paths = ["lib"]
|
14
|
+
gem.require_paths = [ "lib" ]
|
15
15
|
gem.license = "MIT"
|
16
16
|
gem.version = AttrExtras::VERSION
|
17
|
-
gem.metadata
|
18
|
-
|
19
|
-
gem.add_development_dependency "minitest", ">= 5"
|
20
|
-
gem.add_development_dependency "m", "~> 1.5.1" # Running individual tests.
|
21
|
-
|
22
|
-
# For Travis CI.
|
23
|
-
gem.add_development_dependency "rake"
|
17
|
+
gem.metadata = { "rubygems_mfa_required" => "true" }
|
24
18
|
end
|
@@ -2,7 +2,9 @@ require "attr_extras/params_builder"
|
|
2
2
|
|
3
3
|
class AttrExtras::AttrInitialize
|
4
4
|
def initialize(klass, names, block)
|
5
|
-
@klass
|
5
|
+
@klass = klass
|
6
|
+
@names = names
|
7
|
+
@block = block
|
6
8
|
end
|
7
9
|
|
8
10
|
attr_reader :klass, :names
|
@@ -19,13 +21,13 @@ class AttrExtras::AttrInitialize
|
|
19
21
|
validate_args = method(:validate_args)
|
20
22
|
|
21
23
|
klass.send(:define_method, :initialize) do |*values|
|
22
|
-
hash_values = (values[(klass_params.positional_args.length)..-1] || []).
|
24
|
+
hash_values = (values[(klass_params.positional_args.length)..-1] || []).reduce(:merge) || {}
|
23
25
|
|
24
26
|
validate_arity.call(values.length, self.class)
|
25
27
|
validate_args.call(values, klass_params)
|
26
28
|
|
27
29
|
klass_params.default_values.each do |name, default_value|
|
28
|
-
instance_variable_set("@#{name}", default_value)
|
30
|
+
instance_variable_set("@#{name}", default_value.dup)
|
29
31
|
end
|
30
32
|
|
31
33
|
klass_params.positional_args.zip(values).each do |name, value|
|
@@ -55,7 +57,7 @@ class AttrExtras::AttrInitialize
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def validate_args(values, klass_params)
|
58
|
-
hash_values = values[(klass_params.positional_args.length)..-1].
|
60
|
+
hash_values = values[(klass_params.positional_args.length)..-1].reduce(:merge) || {}
|
59
61
|
unknown_keys = hash_values.keys - klass_params.hash_args_names
|
60
62
|
|
61
63
|
if unknown_keys.any?
|
data/lib/attr_extras/explicit.rb
CHANGED
@@ -60,7 +60,7 @@ module AttrExtras
|
|
60
60
|
|
61
61
|
alias_method :attr_accessor_initialize, :aattr_initialize
|
62
62
|
|
63
|
-
def static_facade(method_name_or_names, *names)
|
63
|
+
def static_facade(method_name_or_names, *names, &block)
|
64
64
|
if names.any? { |name| name.is_a?(Array) }
|
65
65
|
Array(method_name_or_names).each do |method_name|
|
66
66
|
define_singleton_method(method_name) do |*args, **opts, &block|
|
@@ -75,11 +75,11 @@ module AttrExtras
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
pattr_initialize(*names)
|
78
|
+
pattr_initialize(*names, &block)
|
79
79
|
end
|
80
80
|
|
81
|
-
def method_object(*names)
|
82
|
-
static_facade :call, *names
|
81
|
+
def method_object(*names, &block)
|
82
|
+
static_facade :call, *names, &block
|
83
83
|
end
|
84
84
|
|
85
85
|
def attr_query(*names)
|
@@ -25,13 +25,13 @@ module AttrExtras
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def hash_args_required
|
28
|
-
@hash_args_required ||= hash_args.select { |name| name.to_s.end_with?(REQUIRED_SIGN) }
|
29
|
-
map { |name| remove_required_sign(name) }
|
28
|
+
@hash_args_required ||= hash_args.select { |name| name.to_s.end_with?(REQUIRED_SIGN) }
|
29
|
+
.map { |name| remove_required_sign(name) }
|
30
30
|
end
|
31
31
|
|
32
32
|
def default_values
|
33
33
|
@default_values ||= begin
|
34
|
-
default_values_hash = names.flatten.select { |name| name.is_a?(Hash) }.
|
34
|
+
default_values_hash = names.flatten.select { |name| name.is_a?(Hash) }.reduce(:merge) || {}
|
35
35
|
|
36
36
|
default_values_hash.map { |name, value|
|
37
37
|
[ remove_required_sign(name), value ]
|
data/lib/attr_extras/utils.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module AttrExtras::Utils
|
2
2
|
def self.flat_names(names)
|
3
|
-
names
|
4
|
-
|
5
|
-
|
3
|
+
names
|
4
|
+
.flatten
|
5
|
+
.flat_map { |x| x.is_a?(Hash) ? x.keys : x }
|
6
|
+
.map { |x| x.to_s.sub(/!\z/, "") }
|
6
7
|
end
|
7
8
|
end
|
data/lib/attr_extras/version.rb
CHANGED
@@ -65,4 +65,29 @@ describe Object, ".aattr_initialize" do
|
|
65
65
|
|
66
66
|
_(example.foo).must_equal "Foo"
|
67
67
|
end
|
68
|
+
|
69
|
+
it "does not use the same default value object across class instances" do
|
70
|
+
klass = Class.new do
|
71
|
+
aattr_initialize [:name, items: []]
|
72
|
+
end
|
73
|
+
|
74
|
+
data = [
|
75
|
+
{ name: "One", items: [1, 2, 3] },
|
76
|
+
{ name: "Two", items: [4, 5, 6] },
|
77
|
+
]
|
78
|
+
|
79
|
+
results = data.each_with_object([]) do |datum, results|
|
80
|
+
name, items = datum.values_at(:name, :items)
|
81
|
+
foo = klass.new(name: name)
|
82
|
+
|
83
|
+
items.each do |n|
|
84
|
+
foo.items << n
|
85
|
+
end
|
86
|
+
|
87
|
+
results << foo
|
88
|
+
end
|
89
|
+
|
90
|
+
_(results.first.items).must_equal [1, 2, 3]
|
91
|
+
_(results.last.items).must_equal [4, 5, 6]
|
92
|
+
end
|
68
93
|
end
|
@@ -13,7 +13,7 @@ describe Object, ".attr_implement" do
|
|
13
13
|
|
14
14
|
it "allows specifying arity and argument names" do
|
15
15
|
klass = Class.new do
|
16
|
-
attr_implement :foo, [:name, :age]
|
16
|
+
attr_implement :foo, [ :name, :age ]
|
17
17
|
end
|
18
18
|
|
19
19
|
example = klass.new
|
@@ -80,7 +80,7 @@ end
|
|
80
80
|
describe Object, ".cattr_implement" do
|
81
81
|
it "applies to class methods" do
|
82
82
|
klass = Class.new do
|
83
|
-
cattr_implement :foo, [:name, :age]
|
83
|
+
cattr_implement :foo, [ :name, :age ]
|
84
84
|
end
|
85
85
|
|
86
86
|
exception = _(lambda { klass.foo(1, 2) }).must_raise AttrExtras::MethodNotImplementedError
|
@@ -24,7 +24,7 @@ describe Object, ".attr_initialize" do
|
|
24
24
|
|
25
25
|
it "can set ivars from a hash" do
|
26
26
|
klass = Class.new do
|
27
|
-
attr_initialize :foo, [:bar, :baz]
|
27
|
+
attr_initialize :foo, [ :bar, :baz ]
|
28
28
|
end
|
29
29
|
|
30
30
|
example = klass.new("Foo", bar: "Bar", baz: "Baz")
|
@@ -35,7 +35,7 @@ describe Object, ".attr_initialize" do
|
|
35
35
|
|
36
36
|
it "can set default values for keyword arguments" do
|
37
37
|
klass = Class.new do
|
38
|
-
attr_initialize :foo, [:bar, baz: "default baz"]
|
38
|
+
attr_initialize :foo, [ :bar, baz: "default baz" ]
|
39
39
|
end
|
40
40
|
|
41
41
|
example = klass.new("Foo", bar: "Bar")
|
@@ -49,7 +49,7 @@ describe Object, ".attr_initialize" do
|
|
49
49
|
|
50
50
|
it "treats hash values as optional" do
|
51
51
|
klass = Class.new do
|
52
|
-
attr_initialize :foo, [:bar, :baz]
|
52
|
+
attr_initialize :foo, [ :bar, :baz ]
|
53
53
|
end
|
54
54
|
|
55
55
|
example = klass.new("Foo", bar: "Bar")
|
@@ -61,7 +61,7 @@ describe Object, ".attr_initialize" do
|
|
61
61
|
|
62
62
|
it "can require hash values" do
|
63
63
|
klass = Class.new do
|
64
|
-
attr_initialize [:optional, :required!]
|
64
|
+
attr_initialize [ :optional, :required! ]
|
65
65
|
end
|
66
66
|
|
67
67
|
example = klass.new(required: "X")
|
@@ -72,7 +72,7 @@ describe Object, ".attr_initialize" do
|
|
72
72
|
|
73
73
|
it "complains about unknown hash values" do
|
74
74
|
klass = Class.new do
|
75
|
-
attr_initialize :foo, [:bar, :baz!]
|
75
|
+
attr_initialize :foo, [ :bar, :baz! ]
|
76
76
|
end
|
77
77
|
|
78
78
|
# Should not raise.
|
@@ -85,7 +85,7 @@ describe Object, ".attr_initialize" do
|
|
85
85
|
# Regression.
|
86
86
|
it "assigns hash values to positional arguments even when there's also hash arguments" do
|
87
87
|
klass = Class.new do
|
88
|
-
attr_initialize :foo, [:bar]
|
88
|
+
attr_initialize :foo, [ :bar ]
|
89
89
|
end
|
90
90
|
|
91
91
|
# Should not raise.
|
@@ -95,7 +95,7 @@ describe Object, ".attr_initialize" do
|
|
95
95
|
# Regression.
|
96
96
|
it "only looks at hash arguments when determining missing required keys" do
|
97
97
|
klass = Class.new do
|
98
|
-
attr_initialize :foo, [:bar!]
|
98
|
+
attr_initialize :foo, [ :bar! ]
|
99
99
|
end
|
100
100
|
|
101
101
|
# Provides a hash to "foo" but does not provide "bar".
|
@@ -26,6 +26,20 @@ describe Object, ".method_object" do
|
|
26
26
|
assert klass.call
|
27
27
|
end
|
28
28
|
|
29
|
+
it "accepts a block for initialization" do
|
30
|
+
klass = Class.new do
|
31
|
+
method_object :value do
|
32
|
+
@copy = @value
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :copy
|
36
|
+
end
|
37
|
+
|
38
|
+
example = klass.new("expected")
|
39
|
+
|
40
|
+
_(example.copy).must_equal "expected"
|
41
|
+
end
|
42
|
+
|
29
43
|
it "passes along any block" do
|
30
44
|
klass = Class.new do
|
31
45
|
method_object
|
@@ -4,7 +4,7 @@ describe AttrExtras::AttrInitialize::ParamsBuilder do
|
|
4
4
|
subject { AttrExtras::AttrInitialize::ParamsBuilder.new(names) }
|
5
5
|
|
6
6
|
describe "when positional and hash params are present" do
|
7
|
-
let(:names) { [ :foo, :bar, [ :baz, :qux!, quux: "Quux" ]] }
|
7
|
+
let(:names) { [ :foo, :bar, [ :baz, :qux!, quux: "Quux" ] ] }
|
8
8
|
|
9
9
|
it "properly devides params by the type" do
|
10
10
|
_(subject.positional_args).must_equal [ :foo, :bar ]
|
@@ -16,7 +16,7 @@ describe AttrExtras::AttrInitialize::ParamsBuilder do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "when only positional params are present" do
|
19
|
-
let(:names) { [ :foo, :bar] }
|
19
|
+
let(:names) { [ :foo, :bar ] }
|
20
20
|
|
21
21
|
it "properly devides params by the type" do
|
22
22
|
_(subject.positional_args).must_equal [ :foo, :bar ]
|
@@ -28,7 +28,7 @@ describe AttrExtras::AttrInitialize::ParamsBuilder do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe "when only hash params are present" do
|
31
|
-
let(:names) { [[ { baz: "Baz" }, :qux!, { quux: "Quux" } ]] }
|
31
|
+
let(:names) { [ [ { baz: "Baz" }, :qux!, { quux: "Quux" } ] ] }
|
32
32
|
|
33
33
|
it "properly devides params by the type" do
|
34
34
|
_(subject.positional_args).must_be_empty
|
@@ -45,6 +45,20 @@ describe Object, ".static_facade" do
|
|
45
45
|
assert klass.barable?(false)
|
46
46
|
end
|
47
47
|
|
48
|
+
it "accepts a block for initialization" do
|
49
|
+
klass = Class.new do
|
50
|
+
static_facade :foo, :value do
|
51
|
+
@copy = @value
|
52
|
+
end
|
53
|
+
|
54
|
+
attr_reader :copy
|
55
|
+
end
|
56
|
+
|
57
|
+
example = klass.new("expected")
|
58
|
+
|
59
|
+
_(example.copy).must_equal "expected"
|
60
|
+
end
|
61
|
+
|
48
62
|
it "passes along any block to the instance method" do
|
49
63
|
klass = Class.new do
|
50
64
|
static_facade :foo
|
@@ -13,7 +13,7 @@ describe AttrExtras::Utils do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "flattens hash arguments with defaults and strips any bangs" do
|
16
|
-
_(AttrExtras::Utils.flat_names([ :foo, [ bar: "Bar", baz!: "Baz"] ])).must_equal [ "foo", "bar", "baz" ]
|
16
|
+
_(AttrExtras::Utils.flat_names([ :foo, [ bar: "Bar", baz!: "Baz" ] ])).must_equal [ "foo", "bar", "baz" ]
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_extras
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
@@ -12,50 +12,8 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
16
|
-
dependencies:
|
17
|
-
- !ruby/object:Gem::Dependency
|
18
|
-
name: minitest
|
19
|
-
requirement: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '5'
|
24
|
-
type: :development
|
25
|
-
prerelease: false
|
26
|
-
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
requirements:
|
28
|
-
- - ">="
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '5'
|
31
|
-
- !ruby/object:Gem::Dependency
|
32
|
-
name: m
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
34
|
-
requirements:
|
35
|
-
- - "~>"
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 1.5.1
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - "~>"
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 1.5.1
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: rake
|
47
|
-
requirement: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - ">="
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '0'
|
52
|
-
type: :development
|
53
|
-
prerelease: false
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
55
|
-
requirements:
|
56
|
-
- - ">="
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
version: '0'
|
15
|
+
date: 2023-02-09 00:00:00.000000000 Z
|
16
|
+
dependencies: []
|
59
17
|
description:
|
60
18
|
email:
|
61
19
|
- henrik@nyh.se
|
@@ -63,8 +21,10 @@ executables: []
|
|
63
21
|
extensions: []
|
64
22
|
extra_rdoc_files: []
|
65
23
|
files:
|
24
|
+
- ".github/dependabot.yml"
|
66
25
|
- ".github/workflows/ci.yml"
|
67
26
|
- ".gitignore"
|
27
|
+
- ".rubocop.yml"
|
68
28
|
- CHANGELOG.md
|
69
29
|
- Gemfile
|
70
30
|
- LICENSE.txt
|
@@ -119,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
79
|
- !ruby/object:Gem::Version
|
120
80
|
version: '0'
|
121
81
|
requirements: []
|
122
|
-
rubygems_version: 3.
|
82
|
+
rubygems_version: 3.4.3
|
123
83
|
signing_key:
|
124
84
|
specification_version: 4
|
125
85
|
summary: Takes some boilerplate out of Ruby with methods like attr_initialize.
|