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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +69 -0
  3. data/.gitignore +23 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +327 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.global +12 -0
  8. data/Gemfile.mongo_mapper +6 -0
  9. data/Gemfile.rails60 +6 -0
  10. data/Gemfile.rails61 +6 -0
  11. data/Gemfile.rails70 +9 -0
  12. data/Gemfile.railsmaster +5 -0
  13. data/MIT-LICENSE +22 -0
  14. data/README.md +641 -0
  15. data/Rakefile +17 -0
  16. data/enumerize.gemspec +22 -0
  17. data/lib/enumerize/activemodel.rb +47 -0
  18. data/lib/enumerize/activerecord.rb +142 -0
  19. data/lib/enumerize/attribute.rb +192 -0
  20. data/lib/enumerize/attribute_map.rb +40 -0
  21. data/lib/enumerize/base.rb +112 -0
  22. data/lib/enumerize/hooks/formtastic.rb +27 -0
  23. data/lib/enumerize/hooks/sequel_dataset.rb +17 -0
  24. data/lib/enumerize/hooks/simple_form.rb +37 -0
  25. data/lib/enumerize/hooks/uniqueness.rb +22 -0
  26. data/lib/enumerize/integrations/rails_admin.rb +18 -0
  27. data/lib/enumerize/integrations/rspec/matcher.rb +164 -0
  28. data/lib/enumerize/integrations/rspec.rb +19 -0
  29. data/lib/enumerize/module.rb +33 -0
  30. data/lib/enumerize/module_attributes.rb +12 -0
  31. data/lib/enumerize/mongoid.rb +29 -0
  32. data/lib/enumerize/predicatable.rb +23 -0
  33. data/lib/enumerize/predicates.rb +76 -0
  34. data/lib/enumerize/scope/activerecord.rb +53 -0
  35. data/lib/enumerize/scope/mongoid.rb +50 -0
  36. data/lib/enumerize/scope/sequel.rb +56 -0
  37. data/lib/enumerize/sequel.rb +62 -0
  38. data/lib/enumerize/set.rb +81 -0
  39. data/lib/enumerize/utils.rb +12 -0
  40. data/lib/enumerize/value.rb +47 -0
  41. data/lib/enumerize/version.rb +5 -0
  42. data/lib/enumerize.rb +90 -0
  43. data/lib/sequel/plugins/enumerize.rb +18 -0
  44. data/spec/enumerize/integrations/rspec/matcher_spec.rb +261 -0
  45. data/spec/spec_helper.rb +30 -0
  46. data/test/activemodel_test.rb +114 -0
  47. data/test/activerecord_test.rb +679 -0
  48. data/test/attribute_map_test.rb +70 -0
  49. data/test/attribute_test.rb +141 -0
  50. data/test/base_test.rb +230 -0
  51. data/test/formtastic_test.rb +152 -0
  52. data/test/module_attributes_test.rb +52 -0
  53. data/test/mongo_mapper_test.rb +83 -0
  54. data/test/mongoid_test.rb +164 -0
  55. data/test/multiple_test.rb +65 -0
  56. data/test/predicates_test.rb +65 -0
  57. data/test/rails_admin_test.rb +27 -0
  58. data/test/sequel_test.rb +344 -0
  59. data/test/set_test.rb +166 -0
  60. data/test/simple_form_test.rb +156 -0
  61. data/test/support/mock_controller.rb +31 -0
  62. data/test/support/shared_enums.rb +43 -0
  63. data/test/support/view_test_helper.rb +46 -0
  64. data/test/test_helper.rb +53 -0
  65. data/test/value_test.rb +158 -0
  66. 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
@@ -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
@@ -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