diff -Nru ruby-enumerize-2.2.2/CHANGELOG.md ruby-enumerize-2.3.1/CHANGELOG.md --- ruby-enumerize-2.2.2/CHANGELOG.md 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/CHANGELOG.md 2019-05-06 13:59:05.000000000 +0000 @@ -4,6 +4,18 @@ ### bug fix +## 2.3.1 (May 2, 2019) + +### enhancements + +* Add ability to skip validations by passing `:skip_validations` option. (by [@chumakoff](https://github.com/chumakoff)) +* Add option `scope: shallow` to extend scopes based on enumerized attribute values (by [@moofkit](https://github.com/moofkit/)) + +### bug fix + +* Fix issue with ActiveRecord and Mongoid `reload` method when enumberized attributes weren't synced from DB. (by [@nashby](https://github.com/nashby) and [@FunkyloverOne](https://github.com/FunkyloverOne)) +* Fix issue with ActiveRecord `reload` method not working for ActiveRecord::Store attributes due to `1b776c`. (by [@rickcsong](https://github.com/rickcsong)) + ## 2.2.2 (March 6, 2018) ### bug fix diff -Nru ruby-enumerize-2.2.2/debian/changelog ruby-enumerize-2.3.1/debian/changelog --- ruby-enumerize-2.2.2/debian/changelog 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/changelog 2020-09-09 20:54:51.000000000 +0000 @@ -1,3 +1,28 @@ +ruby-enumerize (2.3.1-1) unstable; urgency=medium + + [ Utkarsh Gupta ] + * Add salsa-ci.yml + + [ Debian Janitor ] + * Bump debhelper from old 11 to 12. + * Set debhelper-compat version in Build-Depends. + * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository, + Repository-Browse. + + [ Cédric Boutillier ] + * Update team name + * Add .gitattributes to keep unwanted files out of the source package + * New upstream version 2.3.1 + * Refresh upstream metadata + * Use gem install layout + * Standards-Version bumped to 4.5.0 (no changes needed) + * Debhelper compatibility level switched to 13 + * Explicitly don't require root in debian/rules + * Drop explicit dependency on ruby interpreter + * Refresh patch + + -- Cédric Boutillier Wed, 09 Sep 2020 22:54:51 +0200 + ruby-enumerize (2.2.2-1) unstable; urgency=medium * New upstream version 2.2.2 diff -Nru ruby-enumerize-2.2.2/debian/compat ruby-enumerize-2.3.1/debian/compat --- ruby-enumerize-2.2.2/debian/compat 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -11 diff -Nru ruby-enumerize-2.2.2/debian/control ruby-enumerize-2.3.1/debian/control --- ruby-enumerize-2.2.2/debian/control 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/control 2020-09-09 20:54:51.000000000 +0000 @@ -1,31 +1,31 @@ Source: ruby-enumerize Section: ruby Priority: optional -Maintainer: Debian Ruby Extras Maintainers +Maintainer: Debian Ruby Team Uploaders: Cédric Boutillier -Build-Depends: debhelper (>= 11~), - gem2deb, +Build-Depends: debhelper-compat (= 13), + gem2deb (>= 1), ruby-minitest, ruby-rails, - ruby-rspec, + rake, ruby-sequel, ruby-sqlite3 -Standards-Version: 4.1.4 +Standards-Version: 4.5.0 Vcs-Git: https://salsa.debian.org/ruby-team/ruby-enumerize.git Vcs-Browser: https://salsa.debian.org/ruby-team/ruby-enumerize Homepage: https://github.com/brainspec/enumerize Testsuite: autopkgtest-pkg-ruby XS-Ruby-Versions: all +Rules-Requires-Root: no Package: ruby-enumerize Architecture: all XB-Ruby-Versions: ${ruby:Versions} -Depends: ruby | ruby-interpreter, - ruby-activesupport (>= 3.2~), - ruby-i18n, - ${misc:Depends}, - ${shlibs:Depends} -Recommends: ruby-rspec-expectations +Depends: ${misc:Depends}, + ${ruby:Depends}, + ${shlibs:Depends}, + ruby-activesupport (>= 3.2), + ruby-i18n Description: enumerated attributes with internationalisation This library implements enumerated attributes, with internationalisation support, to provide translation of the attributes in various languages. diff -Nru ruby-enumerize-2.2.2/debian/patches/disable_some_tests.patch ruby-enumerize-2.3.1/debian/patches/disable_some_tests.patch --- ruby-enumerize-2.2.2/debian/patches/disable_some_tests.patch 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/patches/disable_some_tests.patch 2020-09-09 20:54:51.000000000 +0000 @@ -3,11 +3,11 @@ debian/ruby-tests.rake. Author: Cédric Boutillier Forwarded: not-needed -Last-Update: 2015-08-12 +Last-Update: 2020-09-09 --- a/test/test_helper.rb +++ b/test/test_helper.rb -@@ -2,6 +2,7 @@ +@@ -4,6 +4,7 @@ require 'minitest/spec' require 'active_support/core_ext/kernel/reporting' require 'active_model' @@ -15,7 +15,7 @@ require 'rails' begin require 'mongoid' -@@ -11,11 +12,6 @@ +@@ -13,11 +14,6 @@ module RailsAdmin end diff -Nru ruby-enumerize-2.2.2/debian/ruby-tests.rake ruby-enumerize-2.3.1/debian/ruby-tests.rake --- ruby-enumerize-2.2.2/debian/ruby-tests.rake 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/ruby-tests.rake 2020-09-09 20:54:51.000000000 +0000 @@ -1,17 +1,9 @@ +require 'gem2deb/rake/testtask' -require 'rake/testtask' -require 'rspec/core/rake_task' - -Rake::TestTask.new do |t| +Gem2Deb::Rake::TestTask.new do |t| t.libs << 'test' t.test_files = FileList.new('test/*_test.rb') do |fl| fl.exclude(/formtastic|simple_form/) end - t.verbose = true -end - -RSpec::Core::RakeTask.new('default') do |t| - #t.pattern = 'test/rspec_spec.rb' end -task :default => :test diff -Nru ruby-enumerize-2.2.2/debian/rules ruby-enumerize-2.3.1/debian/rules --- ruby-enumerize-2.2.2/debian/rules 2018-06-21 22:34:08.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/rules 2020-09-09 20:54:51.000000000 +0000 @@ -1,18 +1,7 @@ #!/usr/bin/make -f -#export DH_VERBOSE=1 -# -# Uncomment to ignore all test failures (but the tests will run anyway) -#export DH_RUBY_IGNORE_TESTS=all -# -# Uncomment to ignore some test failures (but the tests will run anyway). -# Valid values: -#export DH_RUBY_IGNORE_TESTS=ruby2.1 ruby2.2 -# -# If you need to specify the .gemspec (eg there is more than one) -#export DH_RUBY_GEMSPEC=gem.gemspec -# -# Uncomment to check dependencies during build: -# export GEM2DEB_TEST_RUNNER = --check-dependencies + +export GEM2DEB_TEST_RUNNER = --check-dependencies +export DH_RUBY = --gem-install %: dh $@ --buildsystem=ruby --with ruby diff -Nru ruby-enumerize-2.2.2/debian/upstream/metadata ruby-enumerize-2.3.1/debian/upstream/metadata --- ruby-enumerize-2.2.2/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 +++ ruby-enumerize-2.3.1/debian/upstream/metadata 2020-09-09 20:54:51.000000000 +0000 @@ -0,0 +1,7 @@ +--- +Archive: GitHub +Bug-Database: https://github.com/brainspec/enumerize/issues +Bug-Submit: https://github.com/brainspec/enumerize/issues/new +Changelog: https://github.com/brainspec/enumerize/tags +Repository: https://github.com/brainspec/enumerize.git +Repository-Browse: https://github.com/brainspec/enumerize diff -Nru ruby-enumerize-2.2.2/Gemfile.global ruby-enumerize-2.3.1/Gemfile.global --- ruby-enumerize-2.2.2/Gemfile.global 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/Gemfile.global 2019-05-06 13:59:05.000000000 +0000 @@ -5,7 +5,7 @@ gem 'rake' gem 'rspec', :require => false -gem 'sqlite3', :platform => [:ruby, :mswin, :mingw] +gem 'sqlite3', '~> 1.3.6', :platform => [:ruby, :mswin, :mingw] gem 'pg', '~> 0.21.0', :platform => [:ruby, :mswin, :mingw] gem 'sequel' diff -Nru ruby-enumerize-2.2.2/lib/enumerize/activemodel.rb ruby-enumerize-2.3.1/lib/enumerize/activemodel.rb --- ruby-enumerize-2.2.2/lib/enumerize/activemodel.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/activemodel.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module ActiveModelAttributesSupport def enumerize(name, options={}) diff -Nru ruby-enumerize-2.2.2/lib/enumerize/activerecord.rb ruby-enumerize-2.3.1/lib/enumerize/activerecord.rb --- ruby-enumerize-2.2.2/lib/enumerize/activerecord.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/activerecord.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module ActiveRecordSupport def enumerize(name, options={}) @@ -50,6 +52,28 @@ became end + + def reload(options = nil) + reloaded = super + + reloaded.class.enumerized_attributes.each do |attr| + begin + # Checks first if the enumerized attribute is in ActiveRecord::Store + store_attr, _ = reloaded.class.stored_attributes.detect do |store_attr, keys| + keys.include?(attr.name) + end + + if store_attr.present? + reloaded.send("#{attr.name}=", reloaded.send(store_attr).with_indifferent_access[attr.name]) + else + reloaded.send("#{attr.name}=", reloaded[attr.name]) + end + rescue ActiveModel::MissingAttributeError + end + end + + reloaded + end end module RelationMethods diff -Nru ruby-enumerize-2.2.2/lib/enumerize/attribute_map.rb ruby-enumerize-2.3.1/lib/enumerize/attribute_map.rb --- ruby-enumerize-2.2.2/lib/enumerize/attribute_map.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/attribute_map.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize class AttributeMap attr_reader :attributes diff -Nru ruby-enumerize-2.2.2/lib/enumerize/attribute.rb ruby-enumerize-2.3.1/lib/enumerize/attribute.rb --- ruby-enumerize-2.2.2/lib/enumerize/attribute.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/attribute.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,6 +1,8 @@ +# frozen_string_literal: true + module Enumerize class Attribute - attr_reader :klass, :name, :values, :default_value, :i18n_scope + attr_reader :klass, :name, :values, :default_value, :i18n_scope, :skip_validations_value def initialize(klass, name, options={}) raise ArgumentError, ':in option is required' unless options[:in] @@ -11,21 +13,23 @@ @klass = klass @name = name.to_sym - value_class = options.fetch(:value_class, Value) - @values = Array(options[:in]).map { |v| value_class.new(self, *v) } - - @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }] - @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }] - if options[:i18n_scope] raise ArgumentError, ':i18n_scope option accepts only String or Array of strings' unless Array(options[:i18n_scope]).all? { |s| s.is_a?(String) } @i18n_scope = options[:i18n_scope] end + value_class = options.fetch(:value_class, Value) + @values = Array(options[:in]).map { |v| value_class.new(self, *v).freeze } + + @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }] + @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }] + if options[:default] @default_value = find_default_value(options[:default]) raise ArgumentError, 'invalid default value' unless @default_value end + + @skip_validations_value = options.fetch(:skip_validations, false) end def find_default_value(value) @@ -44,11 +48,15 @@ values.map { |value| find_value(value) }.compact end + def each_value + values.each { |value| yield value } + end + def i18n_scopes @i18n_scopes ||= if i18n_scope - scopes = Array(i18n_scope) + Array(i18n_scope) elsif @klass.respond_to?(:model_name) - scopes = ["enumerize.#{@klass.model_name.i18n_key}.#{name}"] + ["enumerize.#{@klass.model_name.i18n_key}.#{name}"] else [] end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/base.rb ruby-enumerize-2.3.1/lib/enumerize/base.rb --- ruby-enumerize-2.2.2/lib/enumerize/base.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/base.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Base def self.included(base) @@ -72,6 +74,9 @@ def _validate_enumerized_attributes self.class.enumerized_attributes.each do |attr| + skip_validations = Utils.call_if_callable(attr.skip_validations_value, self) + next if skip_validations + value = read_attribute_for_validation(attr.name) next if value.blank? @@ -96,12 +101,7 @@ value_for_validation = _enumerized_values_for_validation[attr.name.to_s] if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?) - value = attr.default_value - - if value.respond_to?(:call) - value = value.arity == 0 ? value.call : value.call(self) - end - + value = Utils.call_if_callable(attr.default_value, self) public_send("#{attr.name}=", value) end rescue ActiveModel::MissingAttributeError diff -Nru ruby-enumerize-2.2.2/lib/enumerize/hooks/formtastic.rb ruby-enumerize-2.3.1/lib/enumerize/hooks/formtastic.rb --- ruby-enumerize-2.2.2/lib/enumerize/hooks/formtastic.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/hooks/formtastic.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/concern' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/hooks/sequel_dataset.rb ruby-enumerize-2.3.1/lib/enumerize/hooks/sequel_dataset.rb --- ruby-enumerize-2.2.2/lib/enumerize/hooks/sequel_dataset.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/hooks/sequel_dataset.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Hooks module SequelDataset diff -Nru ruby-enumerize-2.2.2/lib/enumerize/hooks/simple_form.rb ruby-enumerize-2.3.1/lib/enumerize/hooks/simple_form.rb --- ruby-enumerize-2.2.2/lib/enumerize/hooks/simple_form.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/hooks/simple_form.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/concern' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/hooks/uniqueness.rb ruby-enumerize-2.3.1/lib/enumerize/hooks/uniqueness.rb --- ruby-enumerize-2.2.2/lib/enumerize/hooks/uniqueness.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/hooks/uniqueness.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/concern' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/integrations/rails_admin.rb ruby-enumerize-2.3.1/lib/enumerize/integrations/rails_admin.rb --- ruby-enumerize-2.2.2/lib/enumerize/integrations/rails_admin.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/integrations/rails_admin.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Integrations module RailsAdmin diff -Nru ruby-enumerize-2.2.2/lib/enumerize/integrations/rspec/matcher.rb ruby-enumerize-2.3.1/lib/enumerize/integrations/rspec/matcher.rb --- ruby-enumerize-2.2.2/lib/enumerize/integrations/rspec/matcher.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/integrations/rspec/matcher.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Integrations module RSpec diff -Nru ruby-enumerize-2.2.2/lib/enumerize/integrations/rspec.rb ruby-enumerize-2.3.1/lib/enumerize/integrations/rspec.rb --- ruby-enumerize-2.2.2/lib/enumerize/integrations/rspec.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/integrations/rspec.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'enumerize/integrations/rspec/matcher' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/module_attributes.rb ruby-enumerize-2.3.1/lib/enumerize/module_attributes.rb --- ruby-enumerize-2.2.2/lib/enumerize/module_attributes.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/module_attributes.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module ModuleAttributes def included(base) diff -Nru ruby-enumerize-2.2.2/lib/enumerize/module.rb ruby-enumerize-2.3.1/lib/enumerize/module.rb --- ruby-enumerize-2.2.2/lib/enumerize/module.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/module.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize class Module < ::Module attr_reader :_class_methods diff -Nru ruby-enumerize-2.2.2/lib/enumerize/mongoid.rb ruby-enumerize-2.3.1/lib/enumerize/mongoid.rb --- ruby-enumerize-2.2.2/lib/enumerize/mongoid.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/mongoid.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module MongoidSupport def enumerize(name, options={}) @@ -5,9 +7,23 @@ _enumerize_module.dependent_eval do if self < ::Mongoid::Document + include InstanceMethods + after_initialize :_set_default_value_for_enumerized_attributes end end end + + module InstanceMethods + def reload + reloaded = super + + reloaded.class.enumerized_attributes.each do |attr| + reloaded.send("#{attr.name}=", reloaded[attr.name]) + end + + reloaded + end + end end end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/predicatable.rb ruby-enumerize-2.3.1/lib/enumerize/predicatable.rb --- ruby-enumerize-2.2.2/lib/enumerize/predicatable.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/predicatable.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Predicatable def respond_to_missing?(method, include_private=false) diff -Nru ruby-enumerize-2.2.2/lib/enumerize/predicates.rb ruby-enumerize-2.3.1/lib/enumerize/predicates.rb --- ruby-enumerize-2.2.2/lib/enumerize/predicates.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/predicates.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/core_ext/module/delegation' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/scope/activerecord.rb ruby-enumerize-2.3.1/lib/enumerize/scope/activerecord.rb --- ruby-enumerize-2.2.2/lib/enumerize/scope/activerecord.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/scope/activerecord.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Scope module ActiveRecord @@ -16,6 +18,8 @@ private def _define_activerecord_scope_methods!(name, options) + return _define_activerecord_shallow_scopes!(name) if options[:scope] == :shallow + scope_name = options[:scope] == true ? "with_#{name}" : options[:scope] define_singleton_method scope_name do |*values| @@ -32,6 +36,14 @@ end end end + + def _define_activerecord_shallow_scopes!(attribute_name) + enumerized_attributes[attribute_name].each_value do |value_obj| + define_singleton_method(value_obj) do + where(attribute_name => value_obj.value) + end + end + end end end end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/scope/mongoid.rb ruby-enumerize-2.3.1/lib/enumerize/scope/mongoid.rb --- ruby-enumerize-2.2.2/lib/enumerize/scope/mongoid.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/scope/mongoid.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Scope module Mongoid @@ -16,6 +18,7 @@ private def _define_mongoid_scope_methods!(name, options) + return _define_mongoid_shallow_scopes!(name) if options[:scope] == :shallow scope_name = options[:scope] == true ? "with_#{name}" : options[:scope] define_singleton_method scope_name do |*values| @@ -30,6 +33,14 @@ end end end + + def _define_mongoid_shallow_scopes!(attribute_name) + enumerized_attributes[attribute_name].each_value do |value_obj| + define_singleton_method(value_obj) do + self.in(attribute_name => value_obj.value) + end + end + end end end end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/scope/sequel.rb ruby-enumerize-2.3.1/lib/enumerize/scope/sequel.rb --- ruby-enumerize-2.2.2/lib/enumerize/scope/sequel.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/scope/sequel.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module Scope module Sequel @@ -18,6 +20,8 @@ private def _define_sequel_scope_methods!(name, options) + return _define_sequel_shallow_scopes!(name) if options[:scope] == :shallow + klass = self scope_name = options[:scope] == true ? "with_#{name}" : options[:scope] @@ -35,6 +39,14 @@ end end end + + def _define_sequel_shallow_scopes!(attribute_name) + enumerized_attributes[attribute_name].each_value do |value_obj| + def_dataset_method(value_obj) do + where(attribute_name => value_obj.value.to_s) + end + end + end end end end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/sequel.rb ruby-enumerize-2.3.1/lib/enumerize/sequel.rb --- ruby-enumerize-2.2.2/lib/enumerize/sequel.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/sequel.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Enumerize module SequelSupport def enumerize(name, options={}) @@ -17,8 +19,11 @@ module InstanceMethods def validate super - + self.class.enumerized_attributes.each do |attr| + skip_validations = Utils.call_if_callable(attr.skip_validations_value, self) + next if skip_validations + value = read_attribute_for_validation(attr.name) next if value.blank? @@ -38,13 +43,13 @@ if defined?(Sequel::Plugins::Serialization::InstanceMethods) modules = self.class.ancestors plugin_idx = modules.index(Sequel::Plugins::Serialization::InstanceMethods) - + if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods) abort "ERROR: You need to enable the Sequel serialization plugin before calling any enumerize methods on a model." end - + plugin_idx = modules.index(Sequel::Plugins::ValidationHelpers::InstanceMethods) - + if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods) abort "ERROR: You need to enable the Sequel validation_helpers plugin before calling any enumerize methods on a model." end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/set.rb ruby-enumerize-2.3.1/lib/enumerize/set.rb --- ruby-enumerize-2.2.2/lib/enumerize/set.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/set.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/core_ext/module/delegation' module Enumerize diff -Nru ruby-enumerize-2.2.2/lib/enumerize/utils.rb ruby-enumerize-2.3.1/lib/enumerize/utils.rb --- ruby-enumerize-2.2.2/lib/enumerize/utils.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/utils.rb 2019-05-06 13:59:05.000000000 +0000 @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Enumerize + module Utils + class << self + def call_if_callable(value, param = nil) + return value unless value.respond_to?(:call) + value.arity == 0 ? value.call : value.call(param) + end + end + end +end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/value.rb ruby-enumerize-2.3.1/lib/enumerize/value.rb --- ruby-enumerize-2.2.2/lib/enumerize/value.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/value.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'i18n' module Enumerize @@ -11,10 +13,16 @@ @value = value.nil? ? name.to_s : value super(name.to_s) + + @i18n_keys = @attr.i18n_scopes.map { |s| :"#{s}.#{self}" } + @i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}" + @i18n_keys << :"enumerize.#{@attr.name}.#{self}" + @i18n_keys << self.underscore.humanize # humanize value if there are no translations + @i18n_keys end def text - I18n.t(i18n_keys[0], :default => i18n_keys[1..-1]) + I18n.t(@i18n_keys[0], :default => @i18n_keys[1..-1]) end def ==(other) @@ -30,19 +38,5 @@ def predicate_call(value) value == self end - - def i18n_keys - @i18n_keys ||= begin - i18n_keys = i18n_scopes - i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}" - i18n_keys << :"enumerize.#{@attr.name}.#{self}" - i18n_keys << self.underscore.humanize # humanize value if there are no translations - i18n_keys - end - end - - def i18n_scopes - @attr.i18n_scopes.map { |s| :"#{s}.#{self}" } - end end end diff -Nru ruby-enumerize-2.2.2/lib/enumerize/version.rb ruby-enumerize-2.3.1/lib/enumerize/version.rb --- ruby-enumerize-2.2.2/lib/enumerize/version.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize/version.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,5 +1,5 @@ # frozen_string_literal: true module Enumerize - VERSION = '2.2.2' + VERSION = '2.3.1' end diff -Nru ruby-enumerize-2.2.2/lib/enumerize.rb ruby-enumerize-2.3.1/lib/enumerize.rb --- ruby-enumerize-2.2.2/lib/enumerize.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/enumerize.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/concern' require 'enumerize/version' @@ -10,6 +12,7 @@ autoload :Module, 'enumerize/module' autoload :Predicates, 'enumerize/predicates' autoload :Predicatable, 'enumerize/predicatable' + autoload :Utils, 'enumerize/utils' autoload :ModuleAttributes, 'enumerize/module_attributes' autoload :ActiveModelAttributesSupport, 'enumerize/activemodel' diff -Nru ruby-enumerize-2.2.2/lib/sequel/plugins/enumerize.rb ruby-enumerize-2.3.1/lib/sequel/plugins/enumerize.rb --- ruby-enumerize-2.2.2/lib/sequel/plugins/enumerize.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/lib/sequel/plugins/enumerize.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Sequel module Plugins module Enumerize diff -Nru ruby-enumerize-2.2.2/Rakefile ruby-enumerize-2.3.1/Rakefile --- ruby-enumerize-2.2.2/Rakefile 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/Rakefile 2019-05-06 13:59:05.000000000 +0000 @@ -1,4 +1,6 @@ #!/usr/bin/env rake +# frozen_string_literal: true + require "bundler/gem_tasks" require 'rake/testtask' diff -Nru ruby-enumerize-2.2.2/README.md ruby-enumerize-2.3.1/README.md --- ruby-enumerize-2.2.2/README.md 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/README.md 2019-05-06 13:59:05.000000000 +0000 @@ -58,6 +58,18 @@ end ``` +:warning: By default, `enumerize` adds `inclusion` validation to the model. You can skip validations by passing `skip_validations` option. :warning: + +```ruby +class User < ActiveRecord::Base + extend Enumerize + + enumerize :sex, in: [:male, :female], skip_validations: lambda { |user| user.new_record? } + + enumerize :role, in: [:user, :admin], skip_validations: true +end +``` + Mongoid: ```ruby @@ -256,6 +268,24 @@ # SELECT "users".* FROM "users" WHERE "users"."status" IN (2) AND "users"."sex" IN ('male', 'female') ``` +Shallow scopes: + +Adds named scopes to the class directly + +```ruby +class User < ActiveRecord::Base + extend Enumerize + enumerize :sex, :in => [:male, :female], scope: :shallow + enumerize :status, :in => { active: 1, blocked: 2 }, scope: :shallow +end + +User.male +# SELECT "users".* FROM "users" WHERE "users"."sex" = 'male' + +User.active +# SELECT "users".* FROM "users" WHERE "users"."status" = 1 +``` + :warning: It is not possible to define a scope when using the `:multiple` option. :warning: Array-like attributes with plain ruby objects: diff -Nru ruby-enumerize-2.2.2/spec/enumerize/integrations/rspec/matcher_spec.rb ruby-enumerize-2.3.1/spec/enumerize/integrations/rspec/matcher_spec.rb --- ruby-enumerize-2.2.2/spec/enumerize/integrations/rspec/matcher_spec.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/spec/enumerize/integrations/rspec/matcher_spec.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_record' silence_warnings do diff -Nru ruby-enumerize-2.2.2/spec/spec_helper.rb ruby-enumerize-2.3.1/spec/spec_helper.rb --- ruby-enumerize-2.2.2/spec/spec_helper.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/spec/spec_helper.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rails' require 'enumerize' require 'rspec/matchers/fail_matchers' diff -Nru ruby-enumerize-2.2.2/test/activemodel_test.rb ruby-enumerize-2.3.1/test/activemodel_test.rb --- ruby-enumerize-2.2.2/test/activemodel_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/activemodel_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' if defined?(::ActiveModel::Attributes) diff -Nru ruby-enumerize-2.2.2/test/activerecord_test.rb ruby-enumerize-2.3.1/test/activerecord_test.rb --- ruby-enumerize-2.2.2/test/activerecord_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/activerecord_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -44,7 +44,10 @@ t.string :name t.string :interests t.integer :status + t.text :settings + t.integer :skill t.string :account_type, :default => :basic + t.string :foo end create_table :documents do |t| @@ -78,13 +81,18 @@ extend Enumerize include RoleEnum - enumerize :sex, :in => [:male, :female] + store :settings, accessors: [:language] + + enumerize :sex, :in => [:male, :female], scope: :shallow + enumerize :language, :in => [:en, :jp] serialize :interests, Array enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true enumerize :status, :in => { active: 1, blocked: 2 }, scope: true + enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow + enumerize :account_type, :in => [:basic, :premium] # There is no column for relationship enumeration for testing purposes: model @@ -103,6 +111,26 @@ validates :interests, presence: true end +class SkipValidationsUser < ActiveRecord::Base + self.table_name = "users" + include SkipValidationsEnum +end + +class DoNotSkipValidationsUser < ActiveRecord::Base + self.table_name = "users" + include DoNotSkipValidationsEnum +end + +class SkipValidationsLambdaUser < ActiveRecord::Base + self.table_name = "users" + include SkipValidationsLambdaEnum +end + +class SkipValidationsLambdaWithParamUser < ActiveRecord::Base + self.table_name = "users" + include SkipValidationsLambdaWithParamEnum +end + describe Enumerize::ActiveRecordSupport do it 'sets nil if invalid value is passed' do user = User.new @@ -128,6 +156,21 @@ end end + it 'sets nil if invalid stored attribute value is passed' do + user = User.new + user.language = :invalid + user.language.must_be_nil + end + + it 'saves stored attribute value' do + User.delete_all + user = User.new + user.language = :en + user.save! + user.reload + user.language.must_equal 'en' + end + it 'has default value' do User.new.role.must_equal 'user' User.new.attributes['role'].must_equal 'user' @@ -173,6 +216,14 @@ user.errors[:role].must_include 'is not included in the list' end + it 'sets value to enumerized field from db when record is reloaded' do + user = User.create!(interests: [:music]) + User.find(user.id).update(interests: %i[music dancing]) + user.interests.must_equal %w[music] + user.reload + user.interests.must_equal %w[music dancing] + end + it 'validates inclusion when using write_attribute with string attribute' do user = User.new user.send(:write_attribute, 'role', 'wrong') @@ -212,6 +263,31 @@ user.read_attribute(:role).must_be_nil end + it 'validates inclusion when :skip_validations = false' do + user = DoNotSkipValidationsUser.new + user.foo = 'wrong' + user.wont_be :valid? + user.errors[:foo].must_include 'is not included in the list' + end + + it 'does not validate inclusion when :skip_validations = true' do + user = SkipValidationsUser.new + user.foo = 'wrong' + user.must_be :valid? + end + + it 'supports :skip_validations option as lambda' do + user = SkipValidationsLambdaUser.new + user.foo = 'wrong' + user.must_be :valid? + end + + it 'supports :skip_validations option as lambda with a parameter' do + user = SkipValidationsLambdaWithParamUser.new + user.foo = 'wrong' + user.must_be :valid? + end + it 'supports multiple attributes' do user = User.new user.interests.must_be_empty @@ -263,7 +339,11 @@ it 'stores custom values for multiple attributes' do User.delete_all - klass = Class.new(User) + klass = Class.new(User) do + def self.name + 'UserSubclass' + end + end klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true user = klass.new @@ -281,6 +361,7 @@ user_1 = User.create!(status: :active, role: :admin) user_2 = User.create!(status: :blocked) + user_3 = User.create!(sex: :male, skill: :pro) User.with_status(:active).must_equal [user_1] User.with_status(:blocked).must_equal [user_2] @@ -289,7 +370,8 @@ User.without_status(:active).must_equal [user_2] User.without_status(:active, :blocked).must_equal [] - User.having_role(:admin).must_equal [user_1] + User.male.must_equal [user_3] + User.pro.must_equal [user_3] end it 'ignores not enumerized values that passed to the scope method' do @@ -433,7 +515,11 @@ it 'allows using update_all for multiple enumerize' do User.delete_all - klass = Class.new(User) + klass = Class.new(User) do + def self.name + 'UserSubclass' + end + end klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true user = klass.create(status: :active) diff -Nru ruby-enumerize-2.2.2/test/attribute_map_test.rb ruby-enumerize-2.3.1/test/attribute_map_test.rb --- ruby-enumerize-2.2.2/test/attribute_map_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/attribute_map_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' module Enumerize diff -Nru ruby-enumerize-2.2.2/test/attribute_test.rb ruby-enumerize-2.3.1/test/attribute_test.rb --- ruby-enumerize-2.2.2/test/attribute_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/attribute_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' describe Enumerize::Attribute do @@ -14,6 +16,11 @@ attr.values.must_equal %w[a b] end + it 'returns frozen values' do + build_attr nil, :foo, :in => [:a, :b] + attr.values.map(&:frozen?).must_equal [true, true] + end + it 'converts name to symbol' do build_attr nil, 'foo', :in => %w[a b] attr.name.must_equal :foo diff -Nru ruby-enumerize-2.2.2/test/base_test.rb ruby-enumerize-2.3.1/test/base_test.rb --- ruby-enumerize-2.2.2/test/base_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/base_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' describe Enumerize::Base do @@ -43,7 +45,7 @@ it 'scopes translation by i18n key' do def kklass.model_name - name = "ExampleClass" + name = String.new("ExampleClass") def name.i18n_key 'example_class' end diff -Nru ruby-enumerize-2.2.2/test/formtastic_test.rb ruby-enumerize-2.3.1/test/formtastic_test.rb --- ruby-enumerize-2.2.2/test/formtastic_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/formtastic_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' Formtastic::FormBuilder.action_class_finder = Formtastic::ActionClassFinder diff -Nru ruby-enumerize-2.2.2/test/module_attributes_test.rb ruby-enumerize-2.3.1/test/module_attributes_test.rb --- ruby-enumerize-2.2.2/test/module_attributes_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/module_attributes_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class ModuleAttributesSpec < MiniTest::Spec diff -Nru ruby-enumerize-2.2.2/test/mongoid_test.rb ruby-enumerize-2.3.1/test/mongoid_test.rb --- ruby-enumerize-2.2.2/test/mongoid_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/mongoid_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' begin @@ -18,10 +20,16 @@ field :sex field :role + field :foo + field :skill + enumerize :sex, :in => %w[male female], scope: true enumerize :status, :in => %w[notice warning error], scope: true enumerize :role, :in => %w[admin user], :default => 'user', scope: :having_role enumerize :mult, :in => %w[one two three four], :multiple => true + enumerize :foo, :in => %w[bar baz], :skip_validations => true + enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow + enumerize :account_type, :in => %w[basic premium], scope: :shallow end before { $VERBOSE = nil } @@ -78,6 +86,20 @@ user.wont_be :valid? end + it 'does not validate inclusion when :skip_validations option passed' do + user = model.new + user.foo = 'wrong' + user.must_be :valid? + end + + it 'sets value to enumerized field from db when record is reloaded' do + user = model.create!(mult: [:one]) + model.find(user.id).update(mult: %i[two three]) + user.mult.must_equal %w[one] + user.reload + user.mult.must_equal %w[two three] + end + it 'assigns value on loaded record' do model.delete_all model.create!(:sex => :male) @@ -99,17 +121,21 @@ user_1 = model.create!(sex: :male, role: :admin) user_2 = model.create!(sex: :female, role: :user) + user_3 = model.create!(skill: :pro, account_type: :premium) model.with_sex(:male).to_a.must_equal [user_1] model.with_sex(:female).to_a.must_equal [user_2] model.with_sex(:male, :female).to_set.must_equal [user_1, user_2].to_set - model.without_sex(:male).to_a.must_equal [user_2] - model.without_sex(:female).to_a.must_equal [user_1] - model.without_sex(:male, :female).to_a.must_equal [] + model.without_sex(:male).to_set.must_equal [user_2, user_3].to_set + model.without_sex(:female).to_set.must_equal [user_1, user_3].to_set + model.without_sex(:male, :female).to_a.must_equal [user_3] model.having_role(:admin).to_a.must_equal [user_1] - model.having_role(:user).to_a.must_equal [user_2] + model.having_role(:user).to_a.must_equal [user_2, user_3] + + model.pro.to_a.must_equal [user_3] + model.premium.to_a.must_equal [user_3] end it 'chains scopes' do diff -Nru ruby-enumerize-2.2.2/test/mongo_mapper_test.rb ruby-enumerize-2.3.1/test/mongo_mapper_test.rb --- ruby-enumerize-2.2.2/test/mongo_mapper_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/mongo_mapper_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' begin @@ -16,9 +18,11 @@ key :sex key :role + key :foo - enumerize :sex, :in => %w[male female] + enumerize :sex, :in => %w[male female] enumerize :role, :in => %w[admin user], :default => 'user' + enumerize :foo, :in => %w[bar baz], :skip_validations => true end before { $VERBOSE = nil } @@ -60,6 +64,12 @@ user.wont_be :valid? end + it 'does not validate inclusion when :skip_validations option passed' do + user = model.new + user.foo = 'wrong' + user.must_be :valid? + end + it 'assigns value on loaded record' do model.delete_all model.create!(:sex => :male) diff -Nru ruby-enumerize-2.2.2/test/multiple_test.rb ruby-enumerize-2.3.1/test/multiple_test.rb --- ruby-enumerize-2.2.2/test/multiple_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/multiple_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' describe Enumerize::Base do diff -Nru ruby-enumerize-2.2.2/test/predicates_test.rb ruby-enumerize-2.3.1/test/predicates_test.rb --- ruby-enumerize-2.2.2/test/predicates_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/predicates_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' describe Enumerize::Predicates do diff -Nru ruby-enumerize-2.2.2/test/rails_admin_test.rb ruby-enumerize-2.3.1/test/rails_admin_test.rb --- ruby-enumerize-2.2.2/test/rails_admin_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/rails_admin_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RailsAdminSpec < MiniTest::Spec diff -Nru ruby-enumerize-2.2.2/test/sequel_test.rb ruby-enumerize-2.3.1/test/sequel_test.rb --- ruby-enumerize-2.2.2/test/sequel_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/sequel_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' require 'sequel' require 'logger' @@ -21,7 +23,9 @@ String :name String :interests String :status + Integer :skill String :account_type, default: "basic" + String :foo end DB.create_table :documents do @@ -50,12 +54,14 @@ plugin :enumerize include RoleEnum - enumerize :sex, :in => [:male, :female] + enumerize :sex, :in => [:male, :female], scope: :shallow enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true enumerize :status, :in => { active: 1, blocked: 2 }, scope: true + enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow + enumerize :account_type, :in => [:basic, :premium] end @@ -67,6 +73,22 @@ end end + class SkipValidationsUser < Sequel::Model(:users) + include SkipValidationsEnum + end + + class DoNotSkipValidationsUser < Sequel::Model(:users) + include DoNotSkipValidationsEnum + end + + class SkipValidationsLambdaUser < Sequel::Model(:users) + include SkipValidationsLambdaEnum + end + + class SkipValidationsLambdaWithParamUser < Sequel::Model(:users) + include SkipValidationsLambdaWithParamEnum + end + describe Enumerize::SequelSupport do it 'sets nil if invalid value is passed' do user = User.new @@ -150,6 +172,31 @@ user.values[:role].must_be_nil end + it 'validates inclusion when :skip_validations = false' do + user = DoNotSkipValidationsUser.new + user.foo = 'wrong' + user.wont_be :valid? + user.errors[:foo].must_include 'is not included in the list' + end + + it 'does not validate inclusion when :skip_validations = true' do + user = SkipValidationsUser.new + user.foo = 'wrong' + user.must_be :valid? + end + + it 'supports :skip_validations option as lambda' do + user = SkipValidationsLambdaUser.new + user.foo = 'wrong' + user.must_be :valid? + end + + it 'supports :skip_validations option as lambda with a parameter' do + user = SkipValidationsLambdaWithParamUser.new + user.foo = 'wrong' + user.must_be :valid? + end + it 'supports multiple attributes' do user = User.new user.interests ||= [] @@ -212,6 +259,7 @@ user_1 = User.create(status: :active, role: :admin) user_2 = User.create(status: :blocked) + user_3 = User.create(sex: :male, skill: :pro) User.with_status(:active).to_a.must_equal [user_1] User.with_status(:blocked).to_a.must_equal [user_2] @@ -221,6 +269,8 @@ User.without_status(:active, :blocked).to_a.must_equal [] User.having_role(:admin).to_a.must_equal [user_1] + User.male.to_a.must_equal [user_3] + User.pro.to_a.must_equal [user_3] end it 'allows either key or value as valid' do diff -Nru ruby-enumerize-2.2.2/test/set_test.rb ruby-enumerize-2.3.1/test/set_test.rb --- ruby-enumerize-2.2.2/test/set_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/set_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' require 'yaml' diff -Nru ruby-enumerize-2.2.2/test/simple_form_test.rb ruby-enumerize-2.3.1/test/simple_form_test.rb --- ruby-enumerize-2.2.2/test/simple_form_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/simple_form_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' require 'simple_form/version' diff -Nru ruby-enumerize-2.2.2/test/support/mock_controller.rb ruby-enumerize-2.3.1/test/support/mock_controller.rb --- ruby-enumerize-2.2.2/test/support/mock_controller.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/support/mock_controller.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MockController attr_writer :action_name diff -Nru ruby-enumerize-2.2.2/test/support/shared_enums.rb ruby-enumerize-2.3.1/test/support/shared_enums.rb --- ruby-enumerize-2.2.2/test/support/shared_enums.rb 1970-01-01 00:00:00.000000000 +0000 +++ ruby-enumerize-2.3.1/test/support/shared_enums.rb 2019-05-06 13:59:05.000000000 +0000 @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'active_record' +require 'sequel' + +module EnumerizeExtention + def self.included(base) + case + when base < ActiveRecord::Base + base.extend Enumerize + when base < Sequel::Model + base.plugin :enumerize + end + end +end + +module SkipValidationsEnum + def self.included(base) + base.include EnumerizeExtention + base.enumerize :foo, :in => [:bar, :baz], :skip_validations => true + end +end + +module DoNotSkipValidationsEnum + def self.included(base) + base.include EnumerizeExtention + base.enumerize :foo, :in => [:bar, :baz], :skip_validations => false + end +end + +module SkipValidationsLambdaEnum + def self.included(base) + base.include EnumerizeExtention + base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { true } + end +end + +module SkipValidationsLambdaWithParamEnum + def self.included(base) + base.include EnumerizeExtention + base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { |record| true } + end +end diff -Nru ruby-enumerize-2.2.2/test/support/view_test_helper.rb ruby-enumerize-2.3.1/test/support/view_test_helper.rb --- ruby-enumerize-2.2.2/test/support/view_test_helper.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/support/view_test_helper.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'active_support/concern' require 'active_support/testing/setup_and_teardown' diff -Nru ruby-enumerize-2.2.2/test/test_helper.rb ruby-enumerize-2.3.1/test/test_helper.rb --- ruby-enumerize-2.2.2/test/test_helper.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/test_helper.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'minitest/autorun' require 'minitest/spec' require 'active_support/core_ext/kernel/reporting' diff -Nru ruby-enumerize-2.2.2/test/value_test.rb ruby-enumerize-2.3.1/test/value_test.rb --- ruby-enumerize-2.2.2/test/value_test.rb 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/test/value_test.rb 2019-05-06 13:59:05.000000000 +0000 @@ -1,12 +1,14 @@ +# frozen_string_literal: true + require 'test_helper' require 'yaml' describe Enumerize::Value do - class Attr < Struct.new(:values) + class Attr < Struct.new(:values, :name, :i18n_scopes) end - let(:attr) { Attr.new([]) } - let(:val) { Enumerize::Value.new(attr, 'test_value', 1) } + let(:attr) { Attr.new([], "attribute_name", []) } + let(:val) { Enumerize::Value.new(attr, 'test_value', 1) } it 'is a string' do val.must_be_kind_of String @@ -30,7 +32,6 @@ end describe 'translation' do - let(:attr) { Struct.new(:values, :name, :i18n_scopes).new([], "attribute_name", []) } it 'uses common translation' do store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}}) do diff -Nru ruby-enumerize-2.2.2/.travis.yml ruby-enumerize-2.3.1/.travis.yml --- ruby-enumerize-2.2.2/.travis.yml 2018-06-21 22:27:48.000000000 +0000 +++ ruby-enumerize-2.3.1/.travis.yml 2019-05-06 13:59:05.000000000 +0000 @@ -10,10 +10,17 @@ - Gemfile.rails52 - Gemfile.mongo_mapper rvm: - - 2.2.7 - - 2.3.3 - - 2.4.1 + - 2.2.9 + - 2.3.6 + - 2.4.3 + - 2.5.0 - jruby-9.1.14.0 +before_install: + # Rubygems > 3.0.0 no longer supported rubies < 2.3 + - gem install "rubygems-update:<3.0.0" --no-document && update_rubygems + # Bundler 2.0 is not supported by Rails < 5 + - gem list -i bundler -v '>= 2.0.0' && rvm @global do gem uninstall bundler -x || true + - gem install bundler -v '< 2' env: global: - DB_USER=postgres