enumerize 0.8.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +73 -0
  3. data/.gitignore +2 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +210 -0
  6. data/Gemfile +4 -21
  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/README.md +366 -73
  14. data/Rakefile +4 -4
  15. data/enumerize.gemspec +2 -1
  16. data/lib/enumerize/activemodel.rb +47 -0
  17. data/lib/enumerize/activerecord.rb +102 -27
  18. data/lib/enumerize/attribute.rb +59 -15
  19. data/lib/enumerize/attribute_map.rb +2 -0
  20. data/lib/enumerize/base.rb +32 -17
  21. data/lib/enumerize/hooks/formtastic.rb +7 -9
  22. data/lib/enumerize/hooks/sequel_dataset.rb +17 -0
  23. data/lib/enumerize/hooks/simple_form.rb +9 -12
  24. data/lib/enumerize/hooks/uniqueness.rb +7 -8
  25. data/lib/enumerize/integrations/rails_admin.rb +3 -1
  26. data/lib/enumerize/integrations/rspec/matcher.rb +112 -26
  27. data/lib/enumerize/integrations/rspec.rb +3 -0
  28. data/lib/enumerize/module.rb +2 -0
  29. data/lib/enumerize/module_attributes.rb +2 -0
  30. data/lib/enumerize/mongoid.rb +36 -0
  31. data/lib/enumerize/predicatable.rb +10 -17
  32. data/lib/enumerize/predicates.rb +5 -1
  33. data/lib/enumerize/scope/activerecord.rb +53 -0
  34. data/lib/enumerize/scope/mongoid.rb +50 -0
  35. data/lib/enumerize/scope/sequel.rb +56 -0
  36. data/lib/enumerize/sequel.rb +62 -0
  37. data/lib/enumerize/set.rb +20 -8
  38. data/lib/enumerize/utils.rb +12 -0
  39. data/lib/enumerize/value.rb +20 -20
  40. data/lib/enumerize/version.rb +3 -1
  41. data/lib/enumerize.rb +33 -2
  42. data/lib/sequel/plugins/enumerize.rb +18 -0
  43. data/spec/enumerize/integrations/rspec/matcher_spec.rb +261 -0
  44. data/spec/spec_helper.rb +30 -0
  45. data/test/activemodel_test.rb +114 -0
  46. data/test/activerecord_test.rb +434 -58
  47. data/test/attribute_map_test.rb +9 -7
  48. data/test/attribute_test.rb +52 -23
  49. data/test/base_test.rb +118 -66
  50. data/test/formtastic_test.rb +28 -12
  51. data/test/module_attributes_test.rb +10 -8
  52. data/test/mongo_mapper_test.rb +26 -11
  53. data/test/mongoid_test.rb +100 -15
  54. data/test/multiple_test.rb +41 -12
  55. data/test/predicates_test.rb +34 -26
  56. data/test/rails_admin_test.rb +8 -6
  57. data/test/sequel_test.rb +342 -0
  58. data/test/set_test.rb +42 -26
  59. data/test/simple_form_test.rb +25 -1
  60. data/test/support/mock_controller.rb +6 -0
  61. data/test/support/shared_enums.rb +43 -0
  62. data/test/support/view_test_helper.rb +18 -1
  63. data/test/test_helper.rb +33 -2
  64. data/test/value_test.rb +79 -28
  65. metadata +51 -12
  66. data/.travis.yml +0 -19
  67. data/Gemfile.rails4 +0 -23
  68. data/lib/enumerize/form_helper.rb +0 -23
  69. data/test/rspec_matcher_test.rb +0 -76
  70. data/test/rspec_spec.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f08aba602317c54ffaf5f735e09a205a5d1a624c
4
- data.tar.gz: 87f7613830f330b958dbd0a61f7a7ac89c262623
2
+ SHA256:
3
+ metadata.gz: 07d568d0eb005ebea8b0ded7cb260d6c7792b1d676bd46f8441c7e33445e366c
4
+ data.tar.gz: b811acb983e8fac641fb2b9f9340089e8fd6149b1431af7f12446cb5203c39e1
5
5
  SHA512:
6
- metadata.gz: a0226ef792ee39084f80286b886880003659bec15c62e1e98938048e6b3accb03b04330591e92d42a2d79f94fb874d80fe14395b4007d3576ac1285bb0b3ff77
7
- data.tar.gz: 48448538be205b068c3c7f01ca68c6780e7e4d2fd0db6f353455ab1462f8db587e744633cd605c7872b77f6bf6ecd353e1ba076998ebc04108e04322ab024c48
6
+ metadata.gz: b68609dbbc3eede78b640395ef59bf149f1bf00d7b55f2b03a1397430f4e8816bd6a19bdfe06151e28fb1a64a9595fe48893810b015899b00d4991af6539f5d7
7
+ data.tar.gz: 3999ab755693815c52779ca0124f6aec629a1dd639c41d33330211b0948f6f9d4aa3d79a3f20713bb99a508afa5b7e2b776a0465fe0c3c5a3c250043bbdfc0aa
@@ -0,0 +1,73 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-20.04
12
+ services:
13
+ mongodb:
14
+ image: mongo:latest
15
+ ports:
16
+ - 27017:27017
17
+ postgres:
18
+ image: postgres:12
19
+ env:
20
+ POSTGRES_USER: postgres
21
+ POSTGRES_PASSWORD: postgres
22
+ ports:
23
+ - 5432:5432
24
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
25
+ mysql:
26
+ image: mysql:5.6
27
+ env:
28
+ MYSQL_ROOT_PASSWORD: mysql
29
+ ports:
30
+ - 3306:3306
31
+ options: --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 10
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ ruby-version: ['2.7', '3.0', '3.1']
36
+ gemfile:
37
+ - Gemfile
38
+ - Gemfile.rails60
39
+ - Gemfile.rails61
40
+ - Gemfile.rails70
41
+ - Gemfile.railsmaster
42
+ - Gemfile.mongo_mapper
43
+ db:
44
+ - sqlite3
45
+ - postgresql
46
+ - mysql2
47
+ exclude:
48
+ - gemfile: Gemfile.mongo_mapper
49
+ db: postgresql
50
+ - ruby-version: '3.0'
51
+ gemfile: Gemfile
52
+ - ruby-version: '3.1'
53
+ gemfile: Gemfile
54
+ - ruby-version: '3.0'
55
+ gemfile: Gemfile.mongo_mapper
56
+ - ruby-version: '3.1'
57
+ gemfile: Gemfile.mongo_mapper
58
+ env:
59
+ BUNDLE_GEMFILE: "${{ matrix.gemfile }}"
60
+ DB: "${{ matrix.db }}"
61
+ steps:
62
+ - uses: actions/checkout@v2
63
+ - name: Set up Ruby
64
+ uses: ruby/setup-ruby@v1
65
+ with:
66
+ ruby-version: ${{ matrix.ruby-version }}
67
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
68
+ - name: Run tests
69
+ run: bundle exec rake
70
+ env:
71
+ POSTGRES_USER: postgres
72
+ POSTGRES_PASSWORD: postgres
73
+ MYSQL_ROOT_PASSWORD: mysql
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .ruby-version
5
6
  .yardoc
6
7
  .idea/
7
8
  enumerize.iml
@@ -12,6 +13,7 @@ _yardoc
12
13
  coverage
13
14
  doc/
14
15
  lib/bundler/man
16
+ log/*
15
17
  pkg
16
18
  rdoc
17
19
  spec/reports
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/CHANGELOG.md CHANGED
@@ -1,3 +1,213 @@
1
+ ## 2.6.1 (March 17, 2023)
2
+
3
+ ### bug fix
4
+
5
+ * Require rspec/matchers in enumerize matcher to fix rspec extensions load issue.
6
+ * Fix Ruby 2.7 issue with initializer without keyword args.
7
+
8
+ ## 2.6.0 (March 7, 2023)
9
+
10
+ ### enhancements
11
+
12
+ * Add `Enumerize::Attribute#value?`. This new method prevents the following breakage
13
+ when autocorrecting with Performance/InefficientHashSearch cop. (by [@koic](https://github.com/koic))
14
+ * Allow usage of kwargs with inheritance in Ruby 3.x. Support only Ruby 2.7+. (by [@mortik](https://github.com/mortik))
15
+
16
+ ## 2.5.0 (December 24, 2021)
17
+
18
+ ### enhancements
19
+
20
+ * Add support for Rails 7.0.0.alpha. (by [@f-mer](https://github.com/f-mer))
21
+ * Add support for negative shallow scopes. (by [@nashby](https://github.com/nashby))
22
+
23
+ ## 2.4.0 (December 12, 2020)
24
+
25
+ ### enhancements
26
+
27
+ * Show warning when enumerized value name conflicts with existing object's methods. (by [@aki77](https://github.com/aki77))
28
+ * Add RSpec support for shallow scopes. (by [@nashby](https://github.com/nashby))
29
+ * Drop support for Ruby older than 2.5. Support only Ruby 2.5+. (by [@nashby](https://github.com/nashby))
30
+ * Drop support for Rails 4. Support only Rails 5.2+. (by [@nashby](https://github.com/nashby))
31
+ * Add support for Rails 6.1 (by [@y-yagi](https://github.com/y-yagi))
32
+
33
+ ### bug fix
34
+
35
+ * Fix exception when using predicate methods on enumerized value transformed into invalid value. (by [@guigs](https://github.com/guigs))
36
+ * Fix issue with RSpec#with_predicates matcher when custom values are used as attribute. (by [@nashby](https://github.com/nashby))
37
+
38
+ ## 2.3.1 (May 2, 2019)
39
+
40
+ ### enhancements
41
+
42
+ * Add ability to skip validations by passing `:skip_validations` option. (by [@chumakoff](https://github.com/chumakoff))
43
+ * Add option `scope: shallow` to extend scopes based on enumerized attribute values (by [@moofkit](https://github.com/moofkit/))
44
+
45
+ ### bug fix
46
+
47
+ * 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))
48
+ * Fix issue with ActiveRecord `reload` method not working for ActiveRecord::Store attributes due to `1b776c`. (by [@rickcsong](https://github.com/rickcsong))
49
+
50
+ ## 2.2.2 (March 6, 2018)
51
+
52
+ ### bug fix
53
+
54
+ * Support non-ActiveModel objects in SimpleForm/Formtastic integration. (by [@nashby](https://github.com/nashby))
55
+
56
+ ## 2.2.1 (February 15, 2018)
57
+
58
+ ### bug fix
59
+
60
+ * Fix issue with SimpleForm/Formtastic forms without object. (by [@nashby](https://github.com/nashby))
61
+
62
+ ## 2.2.0 (February 13, 2018)
63
+
64
+ ### enhancements
65
+
66
+ * Add integration with active_interaction. (by [@runephilosof](https://github.com/runephilosof))
67
+ * Allow using `plugin :enumerize` with Sequel. (by [@jnylen](https://github.com/jnylen))
68
+ * Support ActiveModel::Attributes from Rails 5.2. (by [@troter](https://github.com/troter))
69
+ * Support Sequel 5.2.0. (by [@troter](https://github.com/troter))
70
+
71
+ ### bug fix
72
+
73
+ * Fix RailsAdmin integration when enumerated field used on edit form and enumerated value wasn't set. (by [@nashby](https://github.com/nashby))
74
+ * Fallback to a raw passed value instead of nil if AR type can't find value in the attribute. (by [@nashby](https://github.com/nashby))
75
+
76
+ ## 2.1.2 (May 18, 2017)
77
+
78
+ ### bug fix
79
+
80
+ * Support YAML serialization for the custom AR type. (by [@lest](https://github.com/lest))
81
+
82
+ ## 2.1.1 (May 1, 2017)
83
+
84
+ ### enhancements
85
+
86
+ * Run tests with multiple DBs (SQLite and PostgreSQL). (by [tkawa](https://github.com/tkawa))
87
+
88
+ ### bug fix
89
+
90
+ * Support deserialize and Rails 4.2 methods in the custom AR::Type class. (by [@lest](https://github.com/lest))
91
+ * Support dumping custom AR type to JSON. (by [@lest](https://github.com/lest))
92
+
93
+ ## 2.1.0 (March 31, 2017)
94
+
95
+ ### enhancements
96
+
97
+ * Support Active Record types serialization. (by [@lest](https://github.com/lest))
98
+
99
+ ## 2.0.1 (October 18, 2016)
100
+
101
+ ### bug fix
102
+
103
+ * Support enumerized attributes in #update_all on relation objects. (by [@lest](https://github.com/lest))
104
+
105
+ ## 2.0.0 (August 10, 2016)
106
+
107
+ ### enhancements
108
+
109
+ * Drop support for Ruby older than 2.2. Support only Ruby 2.2+. (by [@nashby](https://github.com/nashby))
110
+ * Drop support for Rails 4.0 and 4.1. Support only Rails 4.2 and newer. (by [@lest](https://github.com/lest))
111
+ * Support Rails 5.0. (by [@nashby](https://github.com/nashby) and [@lest](https://github.com/lest))
112
+ * Allow to pass enumerize values to `ActiveRecord#update_all` (by [@DmitryTsepelev](https://github.com/DmitryTsepelev) and [@ianwhite](https://github.com/ianwhite))
113
+
114
+ ```ruby
115
+ User.update_all(status: :blocked)
116
+ ```
117
+
118
+ ### bug fix
119
+
120
+ * Rescue MissingAttributeError on attribute writing. (by [@embs](https://github.com/embs))
121
+ * Fix presence validation for multiple attributes when the list contains a blank string. (by [@smoriwaki](https://github.com/smoriwaki))
122
+ * Replace deprecated alias_method_chain with Module#prepend. (by [@koenpunt](https://github.com/koenpunt) and [@akm](https://github.com/akm))
123
+ * Make it compatible with `globalize` gem. (by [@falm](https://github.com/falm))
124
+ * Prevent method getter from being called when no default_value is being set. (by [@arjan0307](https://github.com/arjan0307))
125
+
126
+ ## 1.1.1 (January 25, 2016)
127
+
128
+ ### bug fix
129
+
130
+ * Fix exception when using predicate methods and enumerized values have dash in it. (by [@nashby](https://github.com/nashby))
131
+
132
+ ## 1.1.0 (November 15, 2015)
133
+
134
+ ### enhancements
135
+ * Add Sequel support. (by [@mrbrdo](https://github.com/mrbrdo))
136
+ * Add qualifiers to RSpec matcher. (by [@maurogeorge](https://github.com/maurogeorge))
137
+ * Support hash in the RSpec matcher. (by [@maurogeorge](https://github.com/maurogeorge))
138
+
139
+ ### bug fix
140
+
141
+ ## 1.0.0 (August 2, 2015)
142
+
143
+ ### enhancements
144
+ * Add `texts` method for getting an array of text values of the enumerized field with multiple type. (by [@huynhquancam](https://github.com/huynhquancam))
145
+ * Drop Rails 3.2 support. (by [@nashby](https://github.com/nashby))
146
+
147
+ ### bug fix
148
+
149
+ * Fix conflicts when Active Record and Mongoid are used at the same time. (by [@matsu911](https://github.com/matsu911))
150
+
151
+ ## 0.11.0 (March 29, 2015) ##
152
+
153
+ ### enhancements
154
+ * Add ability to set default value for enumerized field with multiple type. (by [@nashby](https://github.com/nashby))
155
+ * Support Rails 4.2. (by [@lest](https://github.com/lest))
156
+
157
+ ### bug fix
158
+ * Use Mongoid's `:in` method for generated scopes, fix chained scopes. (by [@nashby](https://github.com/nashby))
159
+ * Use `after_initialize` callback to set default value in Mongoid documents. (by [@nashby](https://github.com/nashby))
160
+
161
+ ## 0.10.1 (March 4, 2015) ##
162
+
163
+ ### bug fix
164
+
165
+ * Use method_missing instead of defining singleton class methods to allow Marshal serialization (by [@lest](https://github.com/lest))
166
+
167
+ ## 0.10.0 (February 17, 2015) ##
168
+
169
+ ### enhancements
170
+
171
+ * Add scopes support to mongoid documents (by [@nashby](https://github.com/nashby))
172
+ * Use underscore.humanize in #text to make use of Inflector acronyms (by [@mintuhouse](https://github.com/mintuhouse))
173
+ * Raise an exception when :scope option is used together with :multiple option (by [@maurogeorge](https://github.com/maurogeorge))
174
+ * Use alias_method_chain instead of overriding Class#inherited (by [@yuroyoro](https://github.com/yuroyoro))
175
+ * Shortcut methods to retrieve enumerize values (by [@CyborgMaster](https://github.com/CyborgMaster))
176
+ * Extend equality operator to support comparing with symbols and custom values (e.g. integers) (by [@CyborgMaster](https://github.com/CyborgMaster))
177
+
178
+ ## 0.9.0 (December 11, 2014) ##
179
+
180
+ ### enhancements
181
+
182
+ * Add :value_class option (by [@lest](https://github.com/lest))
183
+ * Use 'defaults' scope in the localization file for the attributes that used across several models. This will help to avoid conflicting keys with model names and attribute names. Example:
184
+
185
+ ```yml
186
+ en:
187
+ enumerize:
188
+ defaults:
189
+ sex:
190
+ male: Male
191
+ female: Female
192
+ ```
193
+
194
+ You still can use the old solution without "default" scope:
195
+
196
+ ```yml
197
+ en:
198
+ enumerize:
199
+ sex:
200
+ male: Male
201
+ female: Female
202
+ ```
203
+ (by [@nashby](https://github.com/nashby))
204
+
205
+ ### bug fix
206
+ * Store values for validation using string keys (by [@nagyt234](https://github.com/nagyt234))
207
+ * Store custom values for multiple attributes (by [@lest](https://github.com/lest))
208
+ * Support validations after using AR#becomes (by [@lest](https://github.com/lest))
209
+ * Do not try to set attribute for not selected attributes (by [@dany1468](https://github.com/dany1468))
210
+
1
211
  ## 0.8.0 (March 4, 2014) ##
2
212
 
3
213
  ### enhancements
data/Gemfile CHANGED
@@ -1,23 +1,6 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'rake'
6
- gem 'minitest', '~> 4.1'
7
- gem 'rspec', :require => false
8
-
9
- gem 'rails', '~> 3.2.0', :require => false
10
- gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
11
- gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
12
-
13
- platforms :rbx do
14
- gem 'rubysl', '~> 2.0'
15
- gem 'psych'
16
- gem 'rubinius-developer_tools'
17
- gem 'rubysl-test-unit'
18
- end
1
+ eval_gemfile('Gemfile.global')
19
2
 
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', '~> 5.2.4', require: false
20
5
  gem 'mongoid'
21
- gem 'mongo_mapper'
22
- gem 'simple_form'
23
- gem 'formtastic'
6
+ gem 'sqlite3', '~> 1.5', :platform => [:ruby, :mswin, :mingw]
data/Gemfile.global ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rake'
6
+ gem 'rspec', :require => false
7
+
8
+ gem 'pg', '~> 1.2.3', :platform => [:ruby, :mswin, :mingw]
9
+ gem 'sequel'
10
+ gem 'simple_form'
11
+ gem 'formtastic'
12
+ gem 'mysql2'
@@ -0,0 +1,6 @@
1
+ eval_gemfile('Gemfile.global')
2
+
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', '~> 5.2.4', :require => false
5
+ gem 'mongo_mapper'
6
+ gem 'sqlite3', '~> 1.3.6', :platform => [:ruby, :mswin, :mingw]
data/Gemfile.rails60 ADDED
@@ -0,0 +1,6 @@
1
+ eval_gemfile('Gemfile.global')
2
+
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', '~> 6.0.0', require: false
5
+ gem 'mongoid', github: 'mongodb/mongoid'
6
+ gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
data/Gemfile.rails61 ADDED
@@ -0,0 +1,6 @@
1
+ eval_gemfile('Gemfile.global')
2
+
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', github: 'rails/rails', branch: '6-1-stable', require: false
5
+ gem 'mongoid', github: 'mongodb/mongoid'
6
+ gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
data/Gemfile.rails70 ADDED
@@ -0,0 +1,9 @@
1
+ eval_gemfile('Gemfile.global')
2
+
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', github: 'rails/rails', branch: '7-0-stable', require: false
5
+
6
+ # TODO: Mongoid doesn't support Rails 7 yet. Uncomment when it's fixed https://jira.mongodb.org/browse/MONGOID-5193
7
+ # gem 'mongoid', github: 'mongodb/mongoid'
8
+
9
+ gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
@@ -0,0 +1,5 @@
1
+ eval_gemfile('Gemfile.global')
2
+
3
+ gem 'minitest', '~> 5.8'
4
+ gem 'rails', github: 'rails/rails', branch: 'main', require: false
5
+ gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]