Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-virtus for openSUSE:Factory checked in at 2021-06-29 22:43:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-virtus (Old)
and /work/SRC/openSUSE:Factory/.rubygem-virtus.new.2625 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-virtus"
Tue Jun 29 22:43:19 2021 rev:3 rq:902941 version:2.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-virtus/rubygem-virtus.changes 2015-03-23 12:18:17.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.rubygem-virtus.new.2625/rubygem-virtus.changes 2021-06-29 22:43:56.758927983 +0200
@@ -1,0 +2,17 @@
+Thu Jun 24 18:07:58 UTC 2021 - Stephan Kulow
+
+updated to version 2.0.0
+ see installed Changelog.md
+
+ # v2.0.0 2021-06-07
+
+ * [added] New method `Virtus::Atrribute::Collection#value_coerced?` (dslh)
+ * [changed] inflecto was replaced with dry-inflector (solnic)
+ * [changed] equalizer was replaced with the internal virtus/equalizer (solnic)
+ * [changed] `Virtus::Attribute#==` was revised (see ef57af319334a1d4f3e0860acbde7c6d6f0eb8ef) (novikserg)
+ * [fixed] Mass assignment bug fix (see #325) (novikserg)
+
+ [Compare v1.0.5..v2.0.0](https://github.com/solnic/virtus/compare/v1.0.5...v2.0.0)
+
+
+-------------------------------------------------------------------
Old:
----
virtus-1.0.5.gem
New:
----
virtus-2.0.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-virtus.spec ++++++
--- /var/tmp/diff_new_pack.TfvtL7/_old 2021-06-29 22:43:57.126928468 +0200
+++ /var/tmp/diff_new_pack.TfvtL7/_new 2021-06-29 22:43:57.126928468 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-virtus
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
@@ -24,16 +24,16 @@
#
Name: rubygem-virtus
-Version: 1.0.5
+Version: 2.0.0
Release: 0
%define mod_name virtus
%define mod_full_name %{mod_name}-%{version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
+BuildRequires: %{ruby >= 2.0}
BuildRequires: %{rubygem gem2rpm}
-BuildRequires: %{ruby}
BuildRequires: ruby-macros >= 5
-Url: https://github.com/solnic/virtus
-Source: http://rubygems.org/gems/%{mod_full_name}.gem
+URL: https://github.com/solnic/virtus
+Source: https://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: Attributes on Steroids for Plain Old Ruby Objects
License: MIT
++++++ virtus-1.0.5.gem -> virtus-2.0.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.ruby-version new/.ruby-version
--- old/.ruby-version 2015-03-18 12:49:02.000000000 +0100
+++ new/.ruby-version 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2015-03-18 12:49:02.000000000 +0100
+++ new/.travis.yml 2021-06-07 15:26:58.000000000 +0200
@@ -1,22 +1,21 @@
+sudo: false
language: ruby
-before_install: gem install bundler
bundler_args: --without tools
-script: "bundle exec rake spec"
-env:
- - CODECLIMATE_REPO_TOKEN=2b66fbb7c7c72503eb7841a479c0ad923f691729f4109b4aa8c9b4def1ebb42d
+cache: bundler
rvm:
- - 1.9
- 2.0
- 2.1
- 2.2
+ - 2.3
+ - 2.4
+ - 2.5
+ - 2.6
+ - 2.7
+ - 3.0
- jruby
- - rbx
- - ruby-head
-matrix:
- allow_failures:
- - rvm: ruby-head
- - rvm: rbx
-notifications:
- email:
- - piotr.solnica@gmail.com
- - dan.kubb@gmail.com
+before_script:
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-a... > ./cc-test-reporter
+ - chmod +x ./cc-test-reporter
+ - ./cc-test-reporter before-build
+after_script:
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Changelog.md new/Changelog.md
--- old/Changelog.md 2015-03-18 12:49:02.000000000 +0100
+++ new/Changelog.md 2021-06-07 15:26:58.000000000 +0200
@@ -1,3 +1,13 @@
+# v2.0.0 2021-06-07
+
+* [added] New method `Virtus::Atrribute::Collection#value_coerced?` (dslh)
+* [changed] inflecto was replaced with dry-inflector (solnic)
+* [changed] equalizer was replaced with the internal virtus/equalizer (solnic)
+* [changed] `Virtus::Attribute#==` was revised (see ef57af319334a1d4f3e0860acbde7c6d6f0eb8ef) (novikserg)
+* [fixed] Mass assignment bug fix (see #325) (novikserg)
+
+[Compare v1.0.5..v2.0.0](https://github.com/solnic/virtus/compare/v1.0.5...v2.0.0)
+
# v1.0.5 2015-03-18
* [feature] Support for :nullify_blank option when configuring a virtus module (lucasmazza)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile new/Gemfile
--- old/Gemfile 2015-03-18 12:49:02.000000000 +0100
+++ new/Gemfile 2021-06-07 15:26:58.000000000 +0200
@@ -2,20 +2,9 @@
gemspec
-gem 'bogus', '~> 0.1'
-gem 'inflecto', '~> 0.0.2'
-gem 'rspec', '~> 3.1'
+gem 'dry-inflector'
+gem 'rspec'
+gem 'bogus'
+gem 'simplecov', platform: :ruby
gem "codeclimate-test-reporter", group: :test, require: false
-
-group :tools do
- gem 'guard'
- gem 'guard-rspec'
-
- gem 'rubocop'
-
- platform :mri do
- gem 'mutant'
- gem 'mutant-rspec'
- end
-end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2015-03-18 12:49:02.000000000 +0100
+++ new/README.md 2021-06-07 15:26:58.000000000 +0200
@@ -1,18 +1,21 @@
[gem]: https://rubygems.org/gems/virtus
[travis]: https://travis-ci.org/solnic/virtus
-[gemnasium]: https://gemnasium.com/solnic/virtus
[codeclimate]: https://codeclimate.com/github/solnic/virtus
[coveralls]: https://coveralls.io/r/solnic/virtus
[inchpages]: http://inch-ci.org/github/solnic/virtus/
+DISCONTINUED
+------------
+
+> 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!
+>
+> @solnic
+
Virtus
======
-# Ruby Object Mapper
-
[![Gem Version](https://badge.fury.io/rb/virtus.svg)][gem]
[![Build Status](https://travis-ci.org/solnic/virtus.svg?branch=master)][travis]
-[![Dependency Status](https://gemnasium.com/solnic/virtus.png)][gemnasium]
[![Code Climate](https://codeclimate.com/github/solnic/virtus/badges/gpa.svg)][codeclimate]
[![Test Coverage](https://codeclimate.com/github/solnic/virtus/badges/coverage.svg)][codeclimate]
[![Inline docs](http://inch-ci.org/github/solnic/virtus.svg?branch=master)][inchpages]
@@ -61,7 +64,7 @@
end
user = User.new(:name => 'Piotr', :age => 31)
-user.attributes # => { :name => "Piotr", :age => 31 }
+user.attributes # => { :name => "Piotr", :age => 31, :birthday => nil }
user.name # => "Piotr"
@@ -579,6 +582,13 @@
Post.attribute_set[:blog].type.primitive # => Blog
```
+## Plugins / Extensions
+
+List of plugins/extensions that add features to Virtus:
+
+* [virtus-localized](https://github.com/XescuGC/virtus-localized): Localize the attributes
+* [virtus-relations](https://github.com/smanolloff/virtus-relations): Add relations to Virtus objects
+
Ruby version support
--------------------
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/attribute/builder.rb new/lib/virtus/attribute/builder.rb
--- old/lib/virtus/attribute/builder.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/attribute/builder.rb 2021-06-07 15:26:58.000000000 +0200
@@ -25,13 +25,7 @@
# @api private
def determine_type
if type.include?('::')
- # TODO: wrap it up in Virtus.constantize and use feature-detection to
- # pick up either Inflecto or ActiveSupport, whateve is available
- if defined?(Inflecto)
- Inflecto.constantize(type)
- else
- raise NotImplementedError, 'Virtus needs inflecto gem to constantize namespaced constant names'
- end
+ Virtus.constantize(type)
else
Object.const_get(type)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/attribute/collection.rb new/lib/virtus/attribute/collection.rb
--- old/lib/virtus/attribute/collection.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/attribute/collection.rb 2021-06-07 15:26:58.000000000 +0200
@@ -80,6 +80,11 @@
end
end
+ # @api public
+ def value_coerced?(value)
+ super && value.all? { |item| member_type.value_coerced? item }
+ end
+
# @api private
def finalize
return self if finalized?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/attribute/default_value.rb new/lib/virtus/attribute/default_value.rb
--- old/lib/virtus/attribute/default_value.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/attribute/default_value.rb 2021-06-07 15:26:58.000000000 +0200
@@ -7,6 +7,8 @@
class DefaultValue
extend DescendantsTracker
+ include Equalizer.new(inspect) << :value
+
# Builds a default value instance
#
# @return [Virtus::Attribute::DefaultValue]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/attribute.rb new/lib/virtus/attribute.rb
--- old/lib/virtus/attribute.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/attribute.rb 2021-06-07 15:26:58.000000000 +0200
@@ -13,12 +13,12 @@
# # strict mode
# attr = Virtus::Attribute.build(Integer, :strict => true)
# attr.coerce('not really coercible')
- # # => Virtus::CoercionError: Failed to coerce "fsafa" into Integer
+ # # => Virtus::CoercionError: Failed to coerce "not really coercible" into Integer
#
class Attribute
extend DescendantsTracker, Options, TypeLookup
- include ::Equalizer.new(:type, :options)
+ include Equalizer.new(inspect) << :type << :options
accept_options :primitive, :accessor, :default, :lazy, :strict, :required, :finalize, :nullify_blank
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/builder.rb new/lib/virtus/builder.rb
--- old/lib/virtus/builder.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/builder.rb 2021-06-07 15:26:58.000000000 +0200
@@ -120,11 +120,7 @@
# @api private
def extensions
- super + [
- Extensions::AllowedWriterMethods,
- ValueObject::AllowedWriterMethods,
- ValueObject::InstanceMethods
- ]
+ super << ValueObject::AllowedWriterMethods << ValueObject::InstanceMethods
end
# @api private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/class_inclusions.rb new/lib/virtus/class_inclusions.rb
--- old/lib/virtus/class_inclusions.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/class_inclusions.rb 2021-06-07 15:26:58.000000000 +0200
@@ -13,7 +13,6 @@
def self.included(descendant)
super
descendant.extend(ClassMethods)
- descendant.extend(Extensions::AllowedWriterMethods)
descendant.class_eval { include Methods }
descendant.class_eval { include InstanceMethods }
descendant.class_eval { include InstanceMethods::Constructor }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/coercer.rb new/lib/virtus/coercer.rb
--- old/lib/virtus/coercer.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/coercer.rb 2021-06-07 15:26:58.000000000 +0200
@@ -3,6 +3,7 @@
# Abstract coercer class
#
class Coercer
+ include Equalizer.new(inspect) << :primitive << :type
# @api private
attr_reader :primitive, :type
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/extensions.rb new/lib/virtus/extensions.rb
--- old/lib/virtus/extensions.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/extensions.rb 2021-06-07 15:26:58.000000000 +0200
@@ -18,7 +18,6 @@
object.instance_eval do
extend Methods
extend InstanceMethods
- extend AllowedWriterMethods
extend InstanceMethods::MassAssignment
end
end
@@ -72,26 +71,9 @@
def values(&block)
private :attributes= if instance_methods.include?(:attributes=)
yield
- include(::Equalizer.new(*attribute_set.map(&:name)))
+ include(Equalizer.new(name, attribute_set.map(&:name)))
end
- private
-
- # Return an attribute set for that instance
- #
- # @return [AttributeSet]
- #
- # @api private
- def attribute_set
- @attribute_set
- end
-
- end # Methods
-
- module AllowedWriterMethods
- WRITER_METHOD_REGEXP = /=\z/.freeze
- INVALID_WRITER_METHODS = %w[ == != === []= attributes= ].to_set.freeze
-
# The list of writer methods that can be mass-assigned to in #attributes=
#
# @return [Set]
@@ -106,8 +88,18 @@
end
end
- end # AllowedWriterMethods
+ private
- end # module Extensions
+ # Return an attribute set for that instance
+ #
+ # @return [AttributeSet]
+ #
+ # @api private
+ def attribute_set
+ @attribute_set
+ end
+ end # Methods
+
+ end # module Extensions
end # module Virtus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/instance_methods.rb new/lib/virtus/instance_methods.rb
--- old/lib/virtus/instance_methods.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/instance_methods.rb 2021-06-07 15:26:58.000000000 +0200
@@ -14,7 +14,7 @@
#
# @api private
def initialize(attributes = nil)
- self.class.attribute_set.set(self, attributes) if attributes
+ attribute_set.set(self, attributes) if attributes
set_default_attributes
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/model.rb new/lib/virtus/model.rb
--- old/lib/virtus/model.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/model.rb 2021-06-07 15:26:58.000000000 +0200
@@ -31,7 +31,7 @@
descendant.extend(Extensions::Methods)
descendant.extend(InstanceMethods)
end
- private_class_method :included
+ private_class_method :extended
end # Core
@@ -51,7 +51,6 @@
# @api private
def self.included(descendant)
super
- descendant.extend(Extensions::AllowedWriterMethods)
descendant.send(:include, InstanceMethods::MassAssignment)
end
private_class_method :included
@@ -59,7 +58,6 @@
# @api private
def self.extended(descendant)
super
- descendant.extend(Extensions::AllowedWriterMethods)
descendant.extend(InstanceMethods::MassAssignment)
end
private_class_method :extended
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/support/options.rb new/lib/virtus/support/options.rb
--- old/lib/virtus/support/options.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/support/options.rb 2021-06-07 15:26:58.000000000 +0200
@@ -37,7 +37,7 @@
# Defines which options are valid for a given attribute class
#
# @example
- # class MyAttribute < Virtus::Attribute::Object
+ # class MyAttribute < Virtus::Attribute
# accept_options :foo, :bar
# end
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus/version.rb new/lib/virtus/version.rb
--- old/lib/virtus/version.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus/version.rb 2021-06-07 15:26:58.000000000 +0200
@@ -1,3 +1,3 @@
module Virtus
- VERSION = '1.0.5'.freeze
+ VERSION = '2.0.0'.freeze
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/virtus.rb new/lib/virtus.rb
--- old/lib/virtus.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/lib/virtus.rb 2021-06-07 15:26:58.000000000 +0200
@@ -207,6 +207,25 @@
@configuration ||= Configuration.new
end
+ # @api private
+ def self.constantize(type)
+ inflector.constantize(type)
+ end
+
+ # @api private
+ def self.inflector
+ @inflector ||=
+ begin
+ require 'dry/inflector'
+ Dry::Inflector.new
+ rescue LoadError
+ raise(
+ NotImplementedError,
+ 'Virtus needs dry-inflector gem to constantize namespaced constant names'
+ )
+ end
+ end
+
# Finalize pending attributes
#
# @example
@@ -241,7 +260,6 @@
end # module Virtus
require 'descendants_tracker'
-require 'equalizer'
require 'axiom-types'
require 'coercible'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2015-03-18 12:49:02.000000000 +0100
+++ new/metadata 2021-06-07 15:26:58.000000000 +0200
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: virtus
version: !ruby/object:Gem::Version
- version: 1.0.5
+ version: 2.0.0
platform: ruby
authors:
- Piotr Solnica
-autorequire:
+autorequire:
bindir: bin
cert_chain: []
-date: 2015-03-18 00:00:00.000000000 Z
+date: 2021-06-07 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: descendants_tracker
@@ -31,26 +31,6 @@
- !ruby/object:Gem::Version
version: 0.0.3
- !ruby/object:Gem::Dependency
- name: equalizer
- requirement: !ruby/object:Gem::Requirement
- requirements:
- - - "~>"
- - !ruby/object:Gem::Version
- version: '0.0'
- - - ">="
- - !ruby/object:Gem::Version
- version: 0.0.9
- type: :runtime
- prerelease: false
- version_requirements: !ruby/object:Gem::Requirement
- requirements:
- - - "~>"
- - !ruby/object:Gem::Version
- version: '0.0'
- - - ">="
- - !ruby/object:Gem::Version
- version: 0.0.9
-- !ruby/object:Gem::Dependency
name: coercible
requirement: !ruby/object:Gem::Requirement
requirements:
@@ -106,7 +86,6 @@
- ".pelusa.yml"
- ".rspec"
- ".ruby-gemset"
-- ".ruby-version"
- ".travis.yml"
- ".yardopts"
- CONTRIBUTING.md
@@ -151,6 +130,7 @@
- lib/virtus/support/type_lookup.rb
- lib/virtus/value_object.rb
- lib/virtus/version.rb
+- spec/integration/attributes_attribute_spec.rb
- spec/integration/building_module_spec.rb
- spec/integration/collection_member_coercion_spec.rb
- spec/integration/custom_attributes_spec.rb
@@ -183,6 +163,8 @@
- spec/unit/virtus/attribute/coercible_predicate_spec.rb
- spec/unit/virtus/attribute/collection/class_methods/build_spec.rb
- spec/unit/virtus/attribute/collection/coerce_spec.rb
+- spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb
+- spec/unit/virtus/attribute/comparison_spec.rb
- spec/unit/virtus/attribute/custom_collection_spec.rb
- spec/unit/virtus/attribute/defined_spec.rb
- spec/unit/virtus/attribute/embedded_value/class_methods/build_spec.rb
@@ -222,7 +204,7 @@
licenses:
- MIT
metadata: {}
-post_install_message:
+post_install_message:
rdoc_options: []
require_paths:
- lib
@@ -230,16 +212,15 @@
requirements:
- - ">="
- !ruby/object:Gem::Version
- version: '0'
+ version: '2.0'
required_rubygems_version: !ruby/object:Gem::Requirement
requirements:
- - ">="
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubyforge_project:
-rubygems_version: 2.4.5
-signing_key:
+rubygems_version: 3.2.15
+signing_key:
specification_version: 4
summary: Attributes on Steroids for Plain Old Ruby Objects
test_files: []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/integration/attributes_attribute_spec.rb new/spec/integration/attributes_attribute_spec.rb
--- old/spec/integration/attributes_attribute_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/integration/attributes_attribute_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+describe "Adding attribute called 'attributes'" do
+
+ context "when mass assignment is disabled" do
+ before do
+ module Examples
+ class User
+ include Virtus.model(mass_assignment: false)
+
+ attribute :attributes
+ end
+ end
+ end
+
+ it "allows model to use `attributes` attribute" do
+ user = Examples::User.new
+ expect(user.attributes).to eq(nil)
+ user.attributes = "attributes string"
+ expect(user.attributes).to eq("attributes string")
+ end
+
+ it "doesn't accept `attributes` key in initializer" do
+ user = Examples::User.new(attributes: 'attributes string')
+ expect(user.attributes).to eq(nil)
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/spec_helper.rb new/spec/spec_helper.rb
--- old/spec/spec_helper.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/spec/spec_helper.rb 2021-06-07 15:26:58.000000000 +0200
@@ -1,12 +1,11 @@
-if RUBY_ENGINE == "rbx"
- require "codeclimate-test-reporter"
- CodeClimate::TestReporter.start
+if RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '3.0'
+ require 'simplecov'
+ SimpleCov.start
end
require 'rspec'
require 'bogus/rspec'
require 'virtus'
-require 'inflecto' # for resolving namespaced constant names
module Virtus
def self.warn(*)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb new/spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb
--- old/spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/virtus/attribute/collection/value_coerced_predicate_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -0,0 +1,31 @@
+require 'spec_helper'
+require 'set'
+
+describe Virtus::Attribute::Collection, '#value_coerced?' do
+ subject { object.value_coerced?(input) }
+
+ let(:object) { described_class.build(Array[Integer]) }
+
+ context 'when input has correctly typed members' do
+ let(:input) { [1, 2, 3] }
+
+ it { is_expected.to be(true) }
+ end
+
+ context 'when input has incorrectly typed members' do
+ let(:input) { [1, 2, '3'] }
+
+ it { is_expected.to be(false) }
+ end
+
+ context 'when the collection type is incorrect' do
+ let(:input) { Set[1, 2, 3] }
+
+ it { is_expected.to be(false) }
+ end
+
+ context 'when the input is empty' do
+ let(:input) { [] }
+ it { is_expected.to be(true) }
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/virtus/attribute/comparison_spec.rb new/spec/unit/virtus/attribute/comparison_spec.rb
--- old/spec/unit/virtus/attribute/comparison_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/unit/virtus/attribute/comparison_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+describe Virtus::Attribute, '#== (defined by including Virtus::Equalizer)' do
+ let(:attribute) { described_class.build(String, :name => :name) }
+
+ it 'returns true when attributes have same type and options' do
+ equal_attribute = described_class.build(String, :name => :name)
+ expect(attribute == equal_attribute).to be_truthy
+ end
+
+ it 'returns false when attributes have different type' do
+ different_attribute = described_class.build(Integer, :name => :name)
+ expect(attribute == different_attribute).to be_falsey
+ end
+
+ it 'returns false when attributes have different options' do
+ different_attribute = described_class.build(Integer, :name => :name_two)
+ expect(attribute == different_attribute).to be_falsey
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/virtus/attribute_set/append_spec.rb new/spec/unit/virtus/attribute_set/append_spec.rb
--- old/spec/unit/virtus/attribute_set/append_spec.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/spec/unit/virtus/attribute_set/append_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -38,10 +38,10 @@
it { is_expected.to equal(object) }
- it 'replaces the original attribute' do
- expect { subject }.to change { object.to_a }.
- from(attributes).
- to([ attribute ])
+ it "replaces the original attribute object" do
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
+ from(attributes.map(&:__id__)).
+ to([attribute.__id__])
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/virtus/attribute_set/element_set_spec.rb new/spec/unit/virtus/attribute_set/element_set_spec.rb
--- old/spec/unit/virtus/attribute_set/element_set_spec.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/spec/unit/virtus/attribute_set/element_set_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -37,20 +37,28 @@
it { is_expected.to equal(attribute) }
- it 'replaces the original attribute' do
- expect { subject }.to change { object.to_a }.from(attributes).to([ attribute ])
+ it "replaces the original attribute object" do
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
+ from(attributes.map(&:__id__)).
+ to([attribute.__id__])
end
- it 'allows #[] to access the attribute with a symbol' do
- expect { subject }.to change { object['name'] }.from(original).to(attribute)
+ it 'allows #[] to access the attribute with a string' do
+ expect { subject }.to change { object['name'].__id__ }.
+ from(original.__id__).
+ to(attribute.__id__)
end
- it 'allows #[] to access the attribute with a string' do
- expect { subject }.to change { object[:name] }.from(original).to(attribute)
+ it 'allows #[] to access the attribute with a symbol' do
+ expect { subject }.to change { object[:name].__id__ }.
+ from(original.__id__).
+ to(attribute.__id__)
end
it 'allows #reset to track overridden attributes' do
- expect { subject }.to change { object.reset.to_a }.from(attributes).to([ attribute ])
+ expect { subject }.to change { object.reset.to_a.map(&:__id__) }.
+ from(attributes.map(&:__id__)).
+ to([attribute.__id__])
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/unit/virtus/attribute_set/merge_spec.rb new/spec/unit/virtus/attribute_set/merge_spec.rb
--- old/spec/unit/virtus/attribute_set/merge_spec.rb 2015-03-18 12:49:02.000000000 +0100
+++ new/spec/unit/virtus/attribute_set/merge_spec.rb 2021-06-07 15:26:58.000000000 +0200
@@ -21,12 +21,14 @@
context 'with a duplicate attribute' do
let(:attributes) { [Virtus::Attribute.build(String, :name => name)] }
- let(:attribute) { Virtus::Attribute.build(String, :name => name) }
+ let(:attribute) { Virtus::Attribute.build(String, :name => name) }
it { is_expected.to equal(object) }
- it 'replaces the original attribute' do
- expect { subject }.to change { object.to_a }.from(attributes).to([attribute])
+ it "replaces the original attribute object" do
+ expect { subject }.to change { object.to_a.map(&:__id__) }.
+ from(attributes.map(&:__id__)).
+ to([attribute.__id__])
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtus.gemspec new/virtus.gemspec
--- old/virtus.gemspec 2015-03-18 12:49:02.000000000 +0100
+++ new/virtus.gemspec 2021-06-07 15:26:58.000000000 +0200
@@ -18,9 +18,9 @@
gem.extra_rdoc_files = %w[LICENSE README.md TODO.md]
gem.add_dependency('descendants_tracker', '~> 0.0', '>= 0.0.3')
- gem.add_dependency('equalizer', '~> 0.0', '>= 0.0.9')
gem.add_dependency('coercible', '~> 1.0')
gem.add_dependency('axiom-types', '~> 0.1')
gem.add_development_dependency 'rake'
+ gem.required_ruby_version = '>= 2.0'
end