careacademy-enumerize 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +69 -0
- data/.gitignore +23 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +327 -0
- data/Gemfile +6 -0
- data/Gemfile.global +12 -0
- data/Gemfile.mongo_mapper +6 -0
- data/Gemfile.rails60 +6 -0
- data/Gemfile.rails61 +6 -0
- data/Gemfile.rails70 +9 -0
- data/Gemfile.railsmaster +5 -0
- data/MIT-LICENSE +22 -0
- data/README.md +641 -0
- data/Rakefile +17 -0
- data/enumerize.gemspec +22 -0
- data/lib/enumerize/activemodel.rb +47 -0
- data/lib/enumerize/activerecord.rb +142 -0
- data/lib/enumerize/attribute.rb +192 -0
- data/lib/enumerize/attribute_map.rb +40 -0
- data/lib/enumerize/base.rb +112 -0
- data/lib/enumerize/hooks/formtastic.rb +27 -0
- data/lib/enumerize/hooks/sequel_dataset.rb +17 -0
- data/lib/enumerize/hooks/simple_form.rb +37 -0
- data/lib/enumerize/hooks/uniqueness.rb +22 -0
- data/lib/enumerize/integrations/rails_admin.rb +18 -0
- data/lib/enumerize/integrations/rspec/matcher.rb +164 -0
- data/lib/enumerize/integrations/rspec.rb +19 -0
- data/lib/enumerize/module.rb +33 -0
- data/lib/enumerize/module_attributes.rb +12 -0
- data/lib/enumerize/mongoid.rb +29 -0
- data/lib/enumerize/predicatable.rb +23 -0
- data/lib/enumerize/predicates.rb +76 -0
- data/lib/enumerize/scope/activerecord.rb +53 -0
- data/lib/enumerize/scope/mongoid.rb +50 -0
- data/lib/enumerize/scope/sequel.rb +56 -0
- data/lib/enumerize/sequel.rb +62 -0
- data/lib/enumerize/set.rb +81 -0
- data/lib/enumerize/utils.rb +12 -0
- data/lib/enumerize/value.rb +47 -0
- data/lib/enumerize/version.rb +5 -0
- data/lib/enumerize.rb +90 -0
- data/lib/sequel/plugins/enumerize.rb +18 -0
- data/spec/enumerize/integrations/rspec/matcher_spec.rb +261 -0
- data/spec/spec_helper.rb +30 -0
- data/test/activemodel_test.rb +114 -0
- data/test/activerecord_test.rb +679 -0
- data/test/attribute_map_test.rb +70 -0
- data/test/attribute_test.rb +141 -0
- data/test/base_test.rb +230 -0
- data/test/formtastic_test.rb +152 -0
- data/test/module_attributes_test.rb +52 -0
- data/test/mongo_mapper_test.rb +83 -0
- data/test/mongoid_test.rb +164 -0
- data/test/multiple_test.rb +65 -0
- data/test/predicates_test.rb +65 -0
- data/test/rails_admin_test.rb +27 -0
- data/test/sequel_test.rb +344 -0
- data/test/set_test.rb +166 -0
- data/test/simple_form_test.rb +156 -0
- data/test/support/mock_controller.rb +31 -0
- data/test/support/shared_enums.rb +43 -0
- data/test/support/view_test_helper.rb +46 -0
- data/test/test_helper.rb +53 -0
- data/test/value_test.rb +158 -0
- metadata +143 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
module EnumerizeExtention
|
7
|
+
def self.included(base)
|
8
|
+
case
|
9
|
+
when base < ActiveRecord::Base
|
10
|
+
base.extend Enumerize
|
11
|
+
when base < Sequel::Model
|
12
|
+
base.plugin :enumerize
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module SkipValidationsEnum
|
18
|
+
def self.included(base)
|
19
|
+
base.include EnumerizeExtention
|
20
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module DoNotSkipValidationsEnum
|
25
|
+
def self.included(base)
|
26
|
+
base.include EnumerizeExtention
|
27
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module SkipValidationsLambdaEnum
|
32
|
+
def self.included(base)
|
33
|
+
base.include EnumerizeExtention
|
34
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { true }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module SkipValidationsLambdaWithParamEnum
|
39
|
+
def self.included(base)
|
40
|
+
base.include EnumerizeExtention
|
41
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { |record| true }
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/concern'
|
4
|
+
require 'active_support/testing/setup_and_teardown'
|
5
|
+
|
6
|
+
if defined?(ActionView::RoutingUrlFor)
|
7
|
+
ActionView::RoutingUrlFor.send(:include, ActionDispatch::Routing::UrlFor)
|
8
|
+
end
|
9
|
+
|
10
|
+
module SetupAndTeardownHelper
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
include ActiveSupport::Testing::SetupAndTeardown
|
14
|
+
|
15
|
+
included do
|
16
|
+
include ActiveSupport::Callbacks
|
17
|
+
define_callbacks :setup, :teardown
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module ViewTestHelper
|
22
|
+
extend ActiveSupport::Concern
|
23
|
+
|
24
|
+
include SetupAndTeardownHelper
|
25
|
+
include ActionView::TestCase::Behavior
|
26
|
+
|
27
|
+
included do
|
28
|
+
setup :set_controller
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_controller
|
32
|
+
@controller = MockController.new
|
33
|
+
end
|
34
|
+
|
35
|
+
def method_missing(method, *args)
|
36
|
+
super unless method.to_s =~ /_path$/
|
37
|
+
end
|
38
|
+
|
39
|
+
def respond_to?(method, include_private=false)
|
40
|
+
method.to_s =~ /_path$/ || super
|
41
|
+
end
|
42
|
+
|
43
|
+
def protect_against_forgery?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/spec'
|
5
|
+
require 'active_support/core_ext/kernel/reporting'
|
6
|
+
require 'active_model'
|
7
|
+
require 'rails'
|
8
|
+
begin
|
9
|
+
require 'mongoid'
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
13
|
+
module RailsAdmin
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'simple_form'
|
17
|
+
SimpleForm.setup {}
|
18
|
+
|
19
|
+
require 'formtastic'
|
20
|
+
|
21
|
+
module EnumerizeTest
|
22
|
+
class Application < Rails::Application
|
23
|
+
config.active_support.deprecation = :stderr
|
24
|
+
config.active_support.test_order = :random
|
25
|
+
config.eager_load = false
|
26
|
+
config.secret_key_base = 'secret'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
EnumerizeTest::Application.initialize!
|
31
|
+
|
32
|
+
$VERBOSE=true
|
33
|
+
|
34
|
+
require 'enumerize'
|
35
|
+
|
36
|
+
Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
|
37
|
+
require file
|
38
|
+
end
|
39
|
+
|
40
|
+
module MiscHelpers
|
41
|
+
def store_translations(locale, translations, &block)
|
42
|
+
begin
|
43
|
+
I18n.backend.store_translations locale, translations
|
44
|
+
yield
|
45
|
+
ensure
|
46
|
+
I18n.reload!
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class MiniTest::Spec
|
52
|
+
include MiscHelpers
|
53
|
+
end
|
data/test/value_test.rb
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
describe Enumerize::Value do
|
7
|
+
class Model
|
8
|
+
end
|
9
|
+
|
10
|
+
class Attr < Struct.new(:values, :name, :i18n_scopes, :klass)
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:attr) { Attr.new([], "attribute_name", [], Model) }
|
14
|
+
let(:val) { Enumerize::Value.new(attr, 'test_value', 1) }
|
15
|
+
|
16
|
+
it 'is a string' do
|
17
|
+
expect(val).must_be_kind_of String
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'equality' do
|
21
|
+
it 'is compared to string' do
|
22
|
+
expect(val).must_be :==, 'test_value'
|
23
|
+
expect(val).wont_be :==, 'not_value'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'is compared to symbol' do
|
27
|
+
expect(val).must_be :==, :test_value
|
28
|
+
expect(val).wont_be :==, :not_value
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'is compared to integer' do
|
32
|
+
expect(val).must_be :==, 1
|
33
|
+
expect(val).wont_be :==, 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'translation' do
|
38
|
+
it 'uses common translation' do
|
39
|
+
store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}}) do
|
40
|
+
expect(val.text).must_be :==, "Common translation"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'uses default translation from the "default" section if its present' do
|
45
|
+
store_translations(:en, :enumerize => {:defaults => {:attribute_name => {:test_value => "Common translation"}}}) do
|
46
|
+
expect(val.text).must_be :==, "Common translation"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'uses model specific translation' do
|
51
|
+
attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
|
52
|
+
|
53
|
+
store_translations(:en, :enumerize => {:model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
|
54
|
+
expect(val.text).must_be :==, "Model Specific translation"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'uses model specific translation rather than common translation' do
|
59
|
+
attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
|
60
|
+
|
61
|
+
store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}, :model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
|
62
|
+
expect(val.text).must_be :==, "Model Specific translation"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'uses simply humanized value when translation is undefined' do
|
67
|
+
store_translations(:en, :enumerize => {}) do
|
68
|
+
expect(val.text).must_be :==, "Test value"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'uses specified in options translation scope' do
|
73
|
+
attr.i18n_scopes = ["other.scope"]
|
74
|
+
|
75
|
+
store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
|
76
|
+
expect(val.text).must_be :==, "Scope specific translation"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'uses first found translation scope from options' do
|
81
|
+
attr.i18n_scopes = ["nonexistent.scope", "other.scope"]
|
82
|
+
|
83
|
+
store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
|
84
|
+
expect(val.text).must_be :==, "Scope specific translation"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'boolean methods comparison' do
|
90
|
+
before do
|
91
|
+
attr.values = [val, Enumerize::Value.new(attr, 'other_value')]
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'returns true if value equals method' do
|
95
|
+
expect(val.test_value?).must_equal true
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'returns false if value does not equal method' do
|
99
|
+
expect(val.other_value?).must_equal false
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'raises NoMethodError if there are no values like boolean method' do
|
103
|
+
expect(proc {
|
104
|
+
val.some_method?
|
105
|
+
}).must_raise NoMethodError
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'raises ArgumentError if arguments are passed' do
|
109
|
+
expect(proc {
|
110
|
+
val.other_value?('<3')
|
111
|
+
}).must_raise ArgumentError
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'responds to methods for existing values' do
|
115
|
+
expect(val).must_respond_to :test_value?
|
116
|
+
expect(val).must_respond_to :other_value?
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'returns a method object' do
|
120
|
+
expect(val.method(:test_value?)).must_be_instance_of Method
|
121
|
+
end
|
122
|
+
|
123
|
+
it "doesn't respond to a method for not existing value" do
|
124
|
+
expect(val).wont_respond_to :some_method?
|
125
|
+
end
|
126
|
+
|
127
|
+
it "doesn't respond to methods is value was modified" do
|
128
|
+
modified_value = val.upcase
|
129
|
+
|
130
|
+
expect(modified_value.upcase).wont_respond_to :some_method?
|
131
|
+
expect(modified_value.upcase).wont_respond_to :test_value?
|
132
|
+
expect(modified_value.upcase).wont_respond_to :other_value?
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe 'serialization' do
|
137
|
+
let(:val) { Enumerize::Value.new(attr, 'test_value') }
|
138
|
+
|
139
|
+
it 'should be serialized to yaml as string value' do
|
140
|
+
assert_equal YAML.dump('test_value'), YAML.dump(val)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'serializes with Marshal' do
|
144
|
+
dump_value = Marshal.dump(val)
|
145
|
+
expect(Marshal.load(dump_value)).must_equal 'test_value'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe 'initialize' do
|
150
|
+
it 'no output if undefined boolean method' do
|
151
|
+
assert_silent() { Enumerize::Value.new(attr, 'test_value') }
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'error output if defined boolean method' do
|
155
|
+
assert_output(nil, /`empty\?` is defined/) { Enumerize::Value.new(attr, 'empty') }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: careacademy-enumerize
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sergey Nartimov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-11-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
description: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper
|
28
|
+
support
|
29
|
+
email: team@brainspec.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".github/workflows/ruby.yml"
|
35
|
+
- ".gitignore"
|
36
|
+
- ".rspec"
|
37
|
+
- CHANGELOG.md
|
38
|
+
- Gemfile
|
39
|
+
- Gemfile.global
|
40
|
+
- Gemfile.mongo_mapper
|
41
|
+
- Gemfile.rails60
|
42
|
+
- Gemfile.rails61
|
43
|
+
- Gemfile.rails70
|
44
|
+
- Gemfile.railsmaster
|
45
|
+
- MIT-LICENSE
|
46
|
+
- README.md
|
47
|
+
- Rakefile
|
48
|
+
- enumerize.gemspec
|
49
|
+
- lib/enumerize.rb
|
50
|
+
- lib/enumerize/activemodel.rb
|
51
|
+
- lib/enumerize/activerecord.rb
|
52
|
+
- lib/enumerize/attribute.rb
|
53
|
+
- lib/enumerize/attribute_map.rb
|
54
|
+
- lib/enumerize/base.rb
|
55
|
+
- lib/enumerize/hooks/formtastic.rb
|
56
|
+
- lib/enumerize/hooks/sequel_dataset.rb
|
57
|
+
- lib/enumerize/hooks/simple_form.rb
|
58
|
+
- lib/enumerize/hooks/uniqueness.rb
|
59
|
+
- lib/enumerize/integrations/rails_admin.rb
|
60
|
+
- lib/enumerize/integrations/rspec.rb
|
61
|
+
- lib/enumerize/integrations/rspec/matcher.rb
|
62
|
+
- lib/enumerize/module.rb
|
63
|
+
- lib/enumerize/module_attributes.rb
|
64
|
+
- lib/enumerize/mongoid.rb
|
65
|
+
- lib/enumerize/predicatable.rb
|
66
|
+
- lib/enumerize/predicates.rb
|
67
|
+
- lib/enumerize/scope/activerecord.rb
|
68
|
+
- lib/enumerize/scope/mongoid.rb
|
69
|
+
- lib/enumerize/scope/sequel.rb
|
70
|
+
- lib/enumerize/sequel.rb
|
71
|
+
- lib/enumerize/set.rb
|
72
|
+
- lib/enumerize/utils.rb
|
73
|
+
- lib/enumerize/value.rb
|
74
|
+
- lib/enumerize/version.rb
|
75
|
+
- lib/sequel/plugins/enumerize.rb
|
76
|
+
- spec/enumerize/integrations/rspec/matcher_spec.rb
|
77
|
+
- spec/spec_helper.rb
|
78
|
+
- test/activemodel_test.rb
|
79
|
+
- test/activerecord_test.rb
|
80
|
+
- test/attribute_map_test.rb
|
81
|
+
- test/attribute_test.rb
|
82
|
+
- test/base_test.rb
|
83
|
+
- test/formtastic_test.rb
|
84
|
+
- test/module_attributes_test.rb
|
85
|
+
- test/mongo_mapper_test.rb
|
86
|
+
- test/mongoid_test.rb
|
87
|
+
- test/multiple_test.rb
|
88
|
+
- test/predicates_test.rb
|
89
|
+
- test/rails_admin_test.rb
|
90
|
+
- test/sequel_test.rb
|
91
|
+
- test/set_test.rb
|
92
|
+
- test/simple_form_test.rb
|
93
|
+
- test/support/mock_controller.rb
|
94
|
+
- test/support/shared_enums.rb
|
95
|
+
- test/support/view_test_helper.rb
|
96
|
+
- test/test_helper.rb
|
97
|
+
- test/value_test.rb
|
98
|
+
homepage: https://github.com/brainspec/enumerize
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.7'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubygems_version: 3.2.33
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
|
121
|
+
test_files:
|
122
|
+
- spec/enumerize/integrations/rspec/matcher_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
- test/activemodel_test.rb
|
125
|
+
- test/activerecord_test.rb
|
126
|
+
- test/attribute_map_test.rb
|
127
|
+
- test/attribute_test.rb
|
128
|
+
- test/base_test.rb
|
129
|
+
- test/formtastic_test.rb
|
130
|
+
- test/module_attributes_test.rb
|
131
|
+
- test/mongo_mapper_test.rb
|
132
|
+
- test/mongoid_test.rb
|
133
|
+
- test/multiple_test.rb
|
134
|
+
- test/predicates_test.rb
|
135
|
+
- test/rails_admin_test.rb
|
136
|
+
- test/sequel_test.rb
|
137
|
+
- test/set_test.rb
|
138
|
+
- test/simple_form_test.rb
|
139
|
+
- test/support/mock_controller.rb
|
140
|
+
- test/support/shared_enums.rb
|
141
|
+
- test/support/view_test_helper.rb
|
142
|
+
- test/test_helper.rb
|
143
|
+
- test/value_test.rb
|