virtus 1.0.5 → 2.0.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
- SHA1:
3
- metadata.gz: 1a85ace0a75695ebb65294da839a389e5349b660
4
- data.tar.gz: 2c8d5150758b6bab5ce1bb8484cdaff11d1fe581
2
+ SHA256:
3
+ metadata.gz: 51fade6650444cdaba10d9fee1ab99f7a5707ddacbdb9c08a734dc415c6a7af8
4
+ data.tar.gz: e8569ca6dc7f6b3bbbe6a00e1be51882dd3135b5e27ba218536f2409a3f495ec
5
5
  SHA512:
6
- metadata.gz: e92ffbfc9ee7b17c58253130ad0e5bdf45857618d04d64d5c8e58b0d3d156deac13d2cc44d3b628f08ec76cdc9bc8634aca2570e987de2cd64e07ffe21fb8d04
7
- data.tar.gz: 33db1e4a9040ce6d008062683a6eedcce3632b4854290a114795accad964233094d80f324d1b703487f6f14d6b1510e383dfce32bf7a341f9bf372d95fd37363
6
+ metadata.gz: 289ce0a7a1d1841d832df7644fe1aa4d0202dd906161fb3b3704d0823ea1adb113976e0320505d8ea9ed2e8d00beb97ba235def16c4760ec9f384ceff3a3cdaf
7
+ data.tar.gz: 7a0b0d652a88006bd1b5cd1e24157eb96700e788e6e2f6dc5e4d442f838a2fb59274f918aaab1ac93f042d0268bbd5bcee484e2e80cf2b3eeaacfb34f7448a00
data/.travis.yml CHANGED
@@ -1,22 +1,21 @@
1
+ sudo: false
1
2
  language: ruby
2
- before_install: gem install bundler
3
3
  bundler_args: --without tools
4
- script: "bundle exec rake spec"
5
- env:
6
- - CODECLIMATE_REPO_TOKEN=2b66fbb7c7c72503eb7841a479c0ad923f691729f4109b4aa8c9b4def1ebb42d
4
+ cache: bundler
7
5
  rvm:
8
- - 1.9
9
6
  - 2.0
10
7
  - 2.1
11
8
  - 2.2
9
+ - 2.3
10
+ - 2.4
11
+ - 2.5
12
+ - 2.6
13
+ - 2.7
14
+ - 3.0
12
15
  - jruby
13
- - rbx
14
- - ruby-head
15
- matrix:
16
- allow_failures:
17
- - rvm: ruby-head
18
- - rvm: rbx
19
- notifications:
20
- email:
21
- - piotr.solnica@gmail.com
22
- - dan.kubb@gmail.com
16
+ before_script:
17
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
18
+ - chmod +x ./cc-test-reporter
19
+ - ./cc-test-reporter before-build
20
+ after_script:
21
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/Changelog.md CHANGED
@@ -1,3 +1,13 @@
1
+ # v2.0.0 2021-06-07
2
+
3
+ * [added] New method `Virtus::Atrribute::Collection#value_coerced?` (dslh)
4
+ * [changed] inflecto was replaced with dry-inflector (solnic)
5
+ * [changed] equalizer was replaced with the internal virtus/equalizer (solnic)
6
+ * [changed] `Virtus::Attribute#==` was revised (see ef57af319334a1d4f3e0860acbde7c6d6f0eb8ef) (novikserg)
7
+ * [fixed] Mass assignment bug fix (see #325) (novikserg)
8
+
9
+ [Compare v1.0.5..v2.0.0](https://github.com/solnic/virtus/compare/v1.0.5...v2.0.0)
10
+
1
11
  # v1.0.5 2015-03-18
2
12
 
3
13
  * [feature] Support for :nullify_blank option when configuring a virtus module (lucasmazza)
data/Gemfile CHANGED
@@ -2,20 +2,9 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'bogus', '~> 0.1'
6
- gem 'inflecto', '~> 0.0.2'
7
- gem 'rspec', '~> 3.1'
5
+ gem 'dry-inflector'
6
+ gem 'rspec'
7
+ gem 'bogus'
8
+ gem 'simplecov', platform: :ruby
8
9
 
9
10
  gem "codeclimate-test-reporter", group: :test, require: false
10
-
11
- group :tools do
12
- gem 'guard'
13
- gem 'guard-rspec'
14
-
15
- gem 'rubocop'
16
-
17
- platform :mri do
18
- gem 'mutant'
19
- gem 'mutant-rspec'
20
- end
21
- end
data/README.md CHANGED
@@ -1,18 +1,21 @@
1
1
  [gem]: https://rubygems.org/gems/virtus
2
2
  [travis]: https://travis-ci.org/solnic/virtus
3
- [gemnasium]: https://gemnasium.com/solnic/virtus
4
3
  [codeclimate]: https://codeclimate.com/github/solnic/virtus
5
4
  [coveralls]: https://coveralls.io/r/solnic/virtus
6
5
  [inchpages]: http://inch-ci.org/github/solnic/virtus/
7
6
 
7
+ DISCONTINUED
8
+ ------------
9
+
10
+ > Working on virtus taught me a lot about handling data in Ruby, which involves coercions, type safety and validation (amongst other things). Even though the project has been successful, and serving well for many people, I decided to build something better. As a result, [dry-types](https://github.com/dry-rb/dry-types), [dry-struct](https://github.com/dry-rb/dry-struct) and [dry-schema](https://github.com/dry-rb/dry-schema) were born. These projects should be considered as virtus' successors, with better separation of concerns and better features. If you're interested in a modern take on same problems that virtus tried to solve, please check out these projects!
11
+ >
12
+ > @solnic
13
+
8
14
  Virtus
9
15
  ======
10
16
 
11
- # Ruby Object Mapper
12
-
13
17
  [![Gem Version](https://badge.fury.io/rb/virtus.svg)][gem]
14
18
  [![Build Status](https://travis-ci.org/solnic/virtus.svg?branch=master)][travis]
15
- [![Dependency Status](https://gemnasium.com/solnic/virtus.png)][gemnasium]
16
19
  [![Code Climate](https://codeclimate.com/github/solnic/virtus/badges/gpa.svg)][codeclimate]
17
20
  [![Test Coverage](https://codeclimate.com/github/solnic/virtus/badges/coverage.svg)][codeclimate]
18
21
  [![Inline docs](http://inch-ci.org/github/solnic/virtus.svg?branch=master)][inchpages]
@@ -61,7 +64,7 @@ class User
61
64
  end
62
65
 
63
66
  user = User.new(:name => 'Piotr', :age => 31)
64
- user.attributes # => { :name => "Piotr", :age => 31 }
67
+ user.attributes # => { :name => "Piotr", :age => 31, :birthday => nil }
65
68
 
66
69
  user.name # => "Piotr"
67
70
 
@@ -579,6 +582,13 @@ Blog.attribute_set[:posts].member_type.primitive # => Post
579
582
  Post.attribute_set[:blog].type.primitive # => Blog
580
583
  ```
581
584
 
585
+ ## Plugins / Extensions
586
+
587
+ List of plugins/extensions that add features to Virtus:
588
+
589
+ * [virtus-localized](https://github.com/XescuGC/virtus-localized): Localize the attributes
590
+ * [virtus-relations](https://github.com/smanolloff/virtus-relations): Add relations to Virtus objects
591
+
582
592
  Ruby version support
583
593
  --------------------
584
594
 
data/lib/virtus.rb CHANGED
@@ -207,6 +207,25 @@ module Virtus
207
207
  @configuration ||= Configuration.new
208
208
  end
209
209
 
210
+ # @api private
211
+ def self.constantize(type)
212
+ inflector.constantize(type)
213
+ end
214
+
215
+ # @api private
216
+ def self.inflector
217
+ @inflector ||=
218
+ begin
219
+ require 'dry/inflector'
220
+ Dry::Inflector.new
221
+ rescue LoadError
222
+ raise(
223
+ NotImplementedError,
224
+ 'Virtus needs dry-inflector gem to constantize namespaced constant names'
225
+ )
226
+ end
227
+ end
228
+
210
229
  # Finalize pending attributes
211
230
  #
212
231
  # @example
@@ -241,7 +260,6 @@ module Virtus
241
260
  end # module Virtus
242
261
 
243
262
  require 'descendants_tracker'
244
- require 'equalizer'
245
263
  require 'axiom-types'
246
264
  require 'coercible'
247
265
 
@@ -13,12 +13,12 @@ module Virtus
13
13
  # # strict mode
14
14
  # attr = Virtus::Attribute.build(Integer, :strict => true)
15
15
  # attr.coerce('not really coercible')
16
- # # => Virtus::CoercionError: Failed to coerce "fsafa" into Integer
16
+ # # => Virtus::CoercionError: Failed to coerce "not really coercible" into Integer
17
17
  #
18
18
  class Attribute
19
19
  extend DescendantsTracker, Options, TypeLookup
20
20
 
21
- include ::Equalizer.new(:type, :options)
21
+ include Equalizer.new(inspect) << :type << :options
22
22
 
23
23
  accept_options :primitive, :accessor, :default, :lazy, :strict, :required, :finalize, :nullify_blank
24
24
 
@@ -25,13 +25,7 @@ module Virtus
25
25
  # @api private
26
26
  def determine_type
27
27
  if type.include?('::')
28
- # TODO: wrap it up in Virtus.constantize and use feature-detection to
29
- # pick up either Inflecto or ActiveSupport, whateve is available
30
- if defined?(Inflecto)
31
- Inflecto.constantize(type)
32
- else
33
- raise NotImplementedError, 'Virtus needs inflecto gem to constantize namespaced constant names'
34
- end
28
+ Virtus.constantize(type)
35
29
  else
36
30
  Object.const_get(type)
37
31
  end
@@ -80,6 +80,11 @@ module Virtus
80
80
  end
81
81
  end
82
82
 
83
+ # @api public
84
+ def value_coerced?(value)
85
+ super && value.all? { |item| member_type.value_coerced? item }
86
+ end
87
+
83
88
  # @api private
84
89
  def finalize
85
90
  return self if finalized?
@@ -7,6 +7,8 @@ module Virtus
7
7
  class DefaultValue
8
8
  extend DescendantsTracker
9
9
 
10
+ include Equalizer.new(inspect) << :value
11
+
10
12
  # Builds a default value instance
11
13
  #
12
14
  # @return [Virtus::Attribute::DefaultValue]
@@ -120,11 +120,7 @@ module Virtus
120
120
 
121
121
  # @api private
122
122
  def extensions
123
- super + [
124
- Extensions::AllowedWriterMethods,
125
- ValueObject::AllowedWriterMethods,
126
- ValueObject::InstanceMethods
127
- ]
123
+ super << ValueObject::AllowedWriterMethods << ValueObject::InstanceMethods
128
124
  end
129
125
 
130
126
  # @api private
@@ -13,7 +13,6 @@ module Virtus
13
13
  def self.included(descendant)
14
14
  super
15
15
  descendant.extend(ClassMethods)
16
- descendant.extend(Extensions::AllowedWriterMethods)
17
16
  descendant.class_eval { include Methods }
18
17
  descendant.class_eval { include InstanceMethods }
19
18
  descendant.class_eval { include InstanceMethods::Constructor }
@@ -3,6 +3,7 @@ module Virtus
3
3
  # Abstract coercer class
4
4
  #
5
5
  class Coercer
6
+ include Equalizer.new(inspect) << :primitive << :type
6
7
 
7
8
  # @api private
8
9
  attr_reader :primitive, :type
@@ -18,7 +18,6 @@ module Virtus
18
18
  object.instance_eval do
19
19
  extend Methods
20
20
  extend InstanceMethods
21
- extend AllowedWriterMethods
22
21
  extend InstanceMethods::MassAssignment
23
22
  end
24
23
  end
@@ -72,26 +71,9 @@ module Virtus
72
71
  def values(&block)
73
72
  private :attributes= if instance_methods.include?(:attributes=)
74
73
  yield
75
- include(::Equalizer.new(*attribute_set.map(&:name)))
74
+ include(Equalizer.new(name, attribute_set.map(&:name)))
76
75
  end
77
76
 
78
- private
79
-
80
- # Return an attribute set for that instance
81
- #
82
- # @return [AttributeSet]
83
- #
84
- # @api private
85
- def attribute_set
86
- @attribute_set
87
- end
88
-
89
- end # Methods
90
-
91
- module AllowedWriterMethods
92
- WRITER_METHOD_REGEXP = /=\z/.freeze
93
- INVALID_WRITER_METHODS = %w[ == != === []= attributes= ].to_set.freeze
94
-
95
77
  # The list of writer methods that can be mass-assigned to in #attributes=
96
78
  #
97
79
  # @return [Set]
@@ -106,8 +88,18 @@ module Virtus
106
88
  end
107
89
  end
108
90
 
109
- end # AllowedWriterMethods
91
+ private
110
92
 
111
- end # module Extensions
93
+ # Return an attribute set for that instance
94
+ #
95
+ # @return [AttributeSet]
96
+ #
97
+ # @api private
98
+ def attribute_set
99
+ @attribute_set
100
+ end
112
101
 
102
+ end # Methods
103
+
104
+ end # module Extensions
113
105
  end # module Virtus
@@ -14,7 +14,7 @@ module Virtus
14
14
  #
15
15
  # @api private
16
16
  def initialize(attributes = nil)
17
- self.class.attribute_set.set(self, attributes) if attributes
17
+ attribute_set.set(self, attributes) if attributes
18
18
  set_default_attributes
19
19
  end
20
20
 
data/lib/virtus/model.rb CHANGED
@@ -31,7 +31,7 @@ module Virtus
31
31
  descendant.extend(Extensions::Methods)
32
32
  descendant.extend(InstanceMethods)
33
33
  end
34
- private_class_method :included
34
+ private_class_method :extended
35
35
 
36
36
  end # Core
37
37
 
@@ -51,7 +51,6 @@ module Virtus
51
51
  # @api private
52
52
  def self.included(descendant)
53
53
  super
54
- descendant.extend(Extensions::AllowedWriterMethods)
55
54
  descendant.send(:include, InstanceMethods::MassAssignment)
56
55
  end
57
56
  private_class_method :included
@@ -59,7 +58,6 @@ module Virtus
59
58
  # @api private
60
59
  def self.extended(descendant)
61
60
  super
62
- descendant.extend(Extensions::AllowedWriterMethods)
63
61
  descendant.extend(InstanceMethods::MassAssignment)
64
62
  end
65
63
  private_class_method :extended
@@ -37,7 +37,7 @@ module Virtus
37
37
  # Defines which options are valid for a given attribute class
38
38
  #
39
39
  # @example
40
- # class MyAttribute < Virtus::Attribute::Object
40
+ # class MyAttribute < Virtus::Attribute
41
41
  # accept_options :foo, :bar
42
42
  # end
43
43
  #
@@ -1,3 +1,3 @@
1
1
  module Virtus
2
- VERSION = '1.0.5'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Adding attribute called 'attributes'" do
4
+
5
+ context "when mass assignment is disabled" do
6
+ before do
7
+ module Examples
8
+ class User
9
+ include Virtus.model(mass_assignment: false)
10
+
11
+ attribute :attributes
12
+ end
13
+ end
14
+ end
15
+
16
+ it "allows model to use `attributes` attribute" do
17
+ user = Examples::User.new
18
+ expect(user.attributes).to eq(nil)
19
+ user.attributes = "attributes string"
20
+ expect(user.attributes).to eq("attributes string")
21
+ end
22
+
23
+ it "doesn't accept `attributes` key in initializer" do
24
+ user = Examples::User.new(attributes: 'attributes string')
25
+ expect(user.attributes).to eq(nil)
26
+ end
27
+ end
28
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,11 @@
1
- if RUBY_ENGINE == "rbx"
2
- require "codeclimate-test-reporter"
3
- CodeClimate::TestReporter.start
1
+ if RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '3.0'
2
+ require 'simplecov'
3
+ SimpleCov.start
4
4
  end
5
5
 
6
6
  require 'rspec'
7
7
  require 'bogus/rspec'
8
8
  require 'virtus'
9
- require 'inflecto' # for resolving namespaced constant names
10
9
 
11
10
  module Virtus
12
11
  def self.warn(*)
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'set'
3
+
4
+ describe Virtus::Attribute::Collection, '#value_coerced?' do
5
+ subject { object.value_coerced?(input) }
6
+
7
+ let(:object) { described_class.build(Array[Integer]) }
8
+
9
+ context 'when input has correctly typed members' do
10
+ let(:input) { [1, 2, 3] }
11
+
12
+ it { is_expected.to be(true) }
13
+ end
14
+
15
+ context 'when input has incorrectly typed members' do
16
+ let(:input) { [1, 2, '3'] }
17
+
18
+ it { is_expected.to be(false) }
19
+ end
20
+
21
+ context 'when the collection type is incorrect' do
22
+ let(:input) { Set[1, 2, 3] }
23
+
24
+ it { is_expected.to be(false) }
25
+ end
26
+
27
+ context 'when the input is empty' do
28
+ let(:input) { [] }
29
+ it { is_expected.to be(true) }
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute, '#== (defined by including Virtus::Equalizer)' do
4
+ let(:attribute) { described_class.build(String, :name => :name) }
5
+
6
+ it 'returns true when attributes have same type and options' do
7
+ equal_attribute = described_class.build(String, :name => :name)
8
+ expect(attribute == equal_attribute).to be_truthy
9
+ end
10
+
11
+ it 'returns false when attributes have different type' do
12
+ different_attribute = described_class.build(Integer, :name => :name)
13
+ expect(attribute == different_attribute).to be_falsey
14
+ end
15
+
16
+ it 'returns false when attributes have different options' do
17
+ different_attribute = described_class.build(Integer, :name => :name_two)
18
+ expect(attribute == different_attribute).to be_falsey
19
+ end
20
+ end
@@ -38,10 +38,10 @@ describe Virtus::AttributeSet, '#<<' do
38
38
 
39
39
  it { is_expected.to equal(object) }
40
40
 
41
- it 'replaces the original attribute' do
42
- expect { subject }.to change { object.to_a }.
43
- from(attributes).
44
- to([ attribute ])
41
+ it "replaces the original attribute object" do
42
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
43
+ from(attributes.map(&:__id__)).
44
+ to([attribute.__id__])
45
45
  end
46
46
  end
47
47
  end
@@ -37,20 +37,28 @@ describe Virtus::AttributeSet, '#[]=' do
37
37
 
38
38
  it { is_expected.to equal(attribute) }
39
39
 
40
- it 'replaces the original attribute' do
41
- expect { subject }.to change { object.to_a }.from(attributes).to([ attribute ])
40
+ it "replaces the original attribute object" do
41
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
42
+ from(attributes.map(&:__id__)).
43
+ to([attribute.__id__])
42
44
  end
43
45
 
44
- it 'allows #[] to access the attribute with a symbol' do
45
- expect { subject }.to change { object['name'] }.from(original).to(attribute)
46
+ it 'allows #[] to access the attribute with a string' do
47
+ expect { subject }.to change { object['name'].__id__ }.
48
+ from(original.__id__).
49
+ to(attribute.__id__)
46
50
  end
47
51
 
48
- it 'allows #[] to access the attribute with a string' do
49
- expect { subject }.to change { object[:name] }.from(original).to(attribute)
52
+ it 'allows #[] to access the attribute with a symbol' do
53
+ expect { subject }.to change { object[:name].__id__ }.
54
+ from(original.__id__).
55
+ to(attribute.__id__)
50
56
  end
51
57
 
52
58
  it 'allows #reset to track overridden attributes' do
53
- expect { subject }.to change { object.reset.to_a }.from(attributes).to([ attribute ])
59
+ expect { subject }.to change { object.reset.to_a.map(&:__id__) }.
60
+ from(attributes.map(&:__id__)).
61
+ to([attribute.__id__])
54
62
  end
55
63
  end
56
64
  end
@@ -21,12 +21,14 @@ describe Virtus::AttributeSet, '#merge' do
21
21
 
22
22
  context 'with a duplicate attribute' do
23
23
  let(:attributes) { [Virtus::Attribute.build(String, :name => name)] }
24
- let(:attribute) { Virtus::Attribute.build(String, :name => name) }
24
+ let(:attribute) { Virtus::Attribute.build(String, :name => name) }
25
25
 
26
26
  it { is_expected.to equal(object) }
27
27
 
28
- it 'replaces the original attribute' do
29
- expect { subject }.to change { object.to_a }.from(attributes).to([attribute])
28
+ it "replaces the original attribute object" do
29
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
30
+ from(attributes.map(&:__id__)).
31
+ to([attribute.__id__])
30
32
  end
31
33
  end
32
34
  end
data/virtus.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |gem|
18
18
  gem.extra_rdoc_files = %w[LICENSE README.md TODO.md]
19
19
 
20
20
  gem.add_dependency('descendants_tracker', '~> 0.0', '>= 0.0.3')
21
- gem.add_dependency('equalizer', '~> 0.0', '>= 0.0.9')
22
21
  gem.add_dependency('coercible', '~> 1.0')
23
22
  gem.add_dependency('axiom-types', '~> 0.1')
24
23
 
25
24
  gem.add_development_dependency 'rake'
25
+ gem.required_ruby_version = '>= 2.0'
26
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-18 00:00:00.000000000 Z
11
+ date: 2021-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: descendants_tracker
@@ -30,26 +30,6 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.0.3
33
- - !ruby/object:Gem::Dependency
34
- name: equalizer
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.0'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 0.0.9
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '0.0'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 0.0.9
53
33
  - !ruby/object:Gem::Dependency
54
34
  name: coercible
55
35
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +86,6 @@ files:
106
86
  - ".pelusa.yml"
107
87
  - ".rspec"
108
88
  - ".ruby-gemset"
109
- - ".ruby-version"
110
89
  - ".travis.yml"
111
90
  - ".yardopts"
112
91
  - CONTRIBUTING.md
@@ -151,6 +130,7 @@ files:
151
130
  - lib/virtus/support/type_lookup.rb
152
131
  - lib/virtus/value_object.rb
153
132
  - lib/virtus/version.rb
133
+ - spec/integration/attributes_attribute_spec.rb
154
134
  - spec/integration/building_module_spec.rb
155
135
  - spec/integration/collection_member_coercion_spec.rb
156
136
  - spec/integration/custom_attributes_spec.rb
@@ -183,6 +163,8 @@ files:
183
163
  - spec/unit/virtus/attribute/coercible_predicate_spec.rb
184
164
  - spec/unit/virtus/attribute/collection/class_methods/build_spec.rb
185
165
  - spec/unit/virtus/attribute/collection/coerce_spec.rb
166
+ - spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb
167
+ - spec/unit/virtus/attribute/comparison_spec.rb
186
168
  - spec/unit/virtus/attribute/custom_collection_spec.rb
187
169
  - spec/unit/virtus/attribute/defined_spec.rb
188
170
  - spec/unit/virtus/attribute/embedded_value/class_methods/build_spec.rb
@@ -222,7 +204,7 @@ homepage: https://github.com/solnic/virtus
222
204
  licenses:
223
205
  - MIT
224
206
  metadata: {}
225
- post_install_message:
207
+ post_install_message:
226
208
  rdoc_options: []
227
209
  require_paths:
228
210
  - lib
@@ -230,16 +212,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
212
  requirements:
231
213
  - - ">="
232
214
  - !ruby/object:Gem::Version
233
- version: '0'
215
+ version: '2.0'
234
216
  required_rubygems_version: !ruby/object:Gem::Requirement
235
217
  requirements:
236
218
  - - ">="
237
219
  - !ruby/object:Gem::Version
238
220
  version: '0'
239
221
  requirements: []
240
- rubyforge_project:
241
- rubygems_version: 2.4.5
242
- signing_key:
222
+ rubygems_version: 3.2.15
223
+ signing_key:
243
224
  specification_version: 4
244
225
  summary: Attributes on Steroids for Plain Old Ruby Objects
245
226
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.1