enumerations 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Readme.md +128 -28
- data/enumerations.gemspec +10 -3
- data/lib/enumerations.rb +10 -7
- data/lib/enumerations/base.rb +21 -10
- data/lib/enumerations/configuration.rb +25 -0
- data/lib/enumerations/finder_methods.rb +11 -9
- data/lib/enumerations/reflection.rb +7 -1
- data/lib/enumerations/value.rb +10 -12
- data/lib/enumerations/version.rb +1 -1
- data/test/base_test.rb +2 -15
- data/test/configuration/configuration.rb +18 -0
- data/test/configuration/enumerations_test.rb +51 -0
- data/test/configuration/finder_test.rb +41 -0
- data/test/configuration_test.rb +53 -0
- data/test/enumerations_test.rb +13 -13
- data/test/finder_test.rb +1 -7
- data/test/helpers/database_helper.rb +9 -4
- data/test/{test_helper.rb → helpers/test_helper.rb} +8 -10
- data/test/reflection_test.rb +12 -12
- data/test/translation_test.rb +1 -1
- data/test/value_test.rb +12 -10
- metadata +19 -8
- data/test/version_test.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e452f81340fb7e16689b456cab621d4cd84f787
|
4
|
+
data.tar.gz: 154907cc77af681118cb5639fe0a7e68b3281525
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8070503f33e094a8344c95a5103cbd71505345efb89ee4d61e5ac84163b0f541cbbc7e1e319a695b1c39eeafd2140b0ef9d4a4895db27bf69cf7cdcb5af1e85
|
7
|
+
data.tar.gz: a45c4d87770db1b4730094acbfe20abe84cb7f92499b9b42e0eb555e9934d0513353f2ef0670c961c57f867d0d668b2c76369d122de05e6710e5fe521107142f
|
data/.gitignore
CHANGED
data/Readme.md
CHANGED
@@ -26,9 +26,9 @@ Create a model for your enumerations:
|
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
class Status < Enumerations::Base
|
29
|
-
values draft: {
|
30
|
-
review_pending: {
|
31
|
-
published: {
|
29
|
+
values draft: { name: 'Draft' },
|
30
|
+
review_pending: { name: 'Review pending' },
|
31
|
+
published: { name: 'Published' }
|
32
32
|
end
|
33
33
|
```
|
34
34
|
|
@@ -36,9 +36,9 @@ Or you can use `value` method for defining your enumerations:
|
|
36
36
|
|
37
37
|
```ruby
|
38
38
|
class Status < Enumerations::Base
|
39
|
-
value :draft,
|
40
|
-
value :review_pending,
|
41
|
-
value :published,
|
39
|
+
value :draft, name: 'Draft'
|
40
|
+
value :review_pending, name: 'Review pending'
|
41
|
+
value :published, name: 'Published'
|
42
42
|
end
|
43
43
|
```
|
44
44
|
|
@@ -48,7 +48,7 @@ Include enumerations for integer fields in other models:
|
|
48
48
|
class Post < ActiveRecord::Base
|
49
49
|
enumeration :status
|
50
50
|
|
51
|
-
validates :status, presence: true
|
51
|
+
validates :status, presence: true
|
52
52
|
end
|
53
53
|
```
|
54
54
|
|
@@ -57,8 +57,8 @@ You can pass attributes to specify which enumeration and which column to use:
|
|
57
57
|
```ruby
|
58
58
|
class Post < ActiveRecord::Base
|
59
59
|
enumeration :status,
|
60
|
-
foreign_key: :
|
61
|
-
class_name: Post::Status
|
60
|
+
foreign_key: :post_status, # specifies which column to use
|
61
|
+
class_name: Post::Status # specifies the class of the enumerator
|
62
62
|
|
63
63
|
validates :post_status, presence: true
|
64
64
|
end
|
@@ -69,18 +69,18 @@ Attribute `foreign_key` you can pass as a `String` or a `Symbol`. Attribute `cla
|
|
69
69
|
|
70
70
|
## Setting enumeration value to objects
|
71
71
|
|
72
|
-
Set enumerations
|
72
|
+
Set enumerations:
|
73
73
|
|
74
74
|
```ruby
|
75
75
|
@post = Post.first
|
76
|
-
@post.status = Status.
|
76
|
+
@post.status = Status.draft
|
77
77
|
@post.save
|
78
78
|
```
|
79
79
|
|
80
|
-
Or you can set enumerations
|
80
|
+
Or you can set enumerations by `symbol`:
|
81
81
|
|
82
82
|
```ruby
|
83
|
-
@post.status = Status.draft
|
83
|
+
@post.status = Status.find(:draft)
|
84
84
|
```
|
85
85
|
|
86
86
|
Also, you can set enumeration value like this:
|
@@ -89,7 +89,8 @@ Also, you can set enumeration value like this:
|
|
89
89
|
@post.status_draft!
|
90
90
|
```
|
91
91
|
|
92
|
-
> When you include enumerations into your model, you'll get methods for setting each enumeration value.
|
92
|
+
> When you include enumerations into your model, you'll get methods for setting each enumeration value.
|
93
|
+
Each method name is consists from enumeration name and enumeration value name with **!** at the end. Examples:
|
93
94
|
|
94
95
|
```ruby
|
95
96
|
class Post < ActiveRecord::Base
|
@@ -129,10 +130,10 @@ Find enumerations by `id`:
|
|
129
130
|
Other finding methods:
|
130
131
|
|
131
132
|
```ruby
|
132
|
-
# Find by
|
133
|
-
Status.find(
|
133
|
+
# Find by key as a Symbol
|
134
|
+
Status.find(:review_pending) # => Review pending
|
134
135
|
|
135
|
-
# Find by
|
136
|
+
# Find by key as a String
|
136
137
|
Status.find('draft') # => Draft
|
137
138
|
|
138
139
|
# Find by multiple attributes
|
@@ -143,8 +144,8 @@ Compare enumerations:
|
|
143
144
|
|
144
145
|
```ruby
|
145
146
|
@post.status == :published # => true
|
146
|
-
@post.status ==
|
147
|
-
@post.status == Status.
|
147
|
+
@post.status == 'published' # => true
|
148
|
+
@post.status == Status.published # => true
|
148
149
|
@post.status.published? # => true
|
149
150
|
```
|
150
151
|
|
@@ -206,25 +207,26 @@ Use in forms:
|
|
206
207
|
|
207
208
|
```ruby
|
208
209
|
%p
|
209
|
-
= f.label :
|
210
|
+
= f.label :status
|
210
211
|
%br
|
211
|
-
= f.collection_select :
|
212
|
+
= f.collection_select :status, Status.all, :symbol, :name
|
212
213
|
```
|
213
214
|
|
214
|
-
|
215
|
+
Advanced Usage
|
215
216
|
=====
|
216
217
|
|
217
|
-
Except `
|
218
|
+
Except `name` you can specify any other attributes to your enumerations:
|
218
219
|
|
219
220
|
```ruby
|
220
221
|
class Status < Enumerations::Base
|
221
222
|
value :draft, id: 1, name: 'Draft'
|
222
223
|
value :review_pending, id: 2, name: 'Review pending', description: 'Some description...'
|
223
|
-
value :published, id: 3, name: 'Published'
|
224
|
+
value :published, id: 3, name: 'Published', published: true
|
224
225
|
end
|
225
226
|
```
|
226
227
|
|
227
|
-
Every enumeration has `id`, `name` and `
|
228
|
+
Every enumeration has `id`, `name`, `description` and `published` methods.
|
229
|
+
If you call method that is not in attribute list for enumeration, it will return `nil`.
|
228
230
|
|
229
231
|
```ruby
|
230
232
|
Status.review_pending.description # => 'Some description...'
|
@@ -261,7 +263,105 @@ en:
|
|
261
263
|
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'enumerations', '*.yml')]
|
262
264
|
```
|
263
265
|
|
264
|
-
|
265
|
-
|
266
|
+
Configuration
|
267
|
+
=============
|
268
|
+
|
269
|
+
Basically no configuration is needed.
|
270
|
+
|
271
|
+
**Enumerations** has two configuration options.
|
272
|
+
You can customize primary key and foreign key suffix.
|
273
|
+
Just add initializer file to `config/initializers/enumerations.rb`.
|
274
|
+
|
275
|
+
Example of configuration:
|
276
|
+
|
277
|
+
```ruby
|
278
|
+
# config/initializers/enumerations.rb
|
279
|
+
|
280
|
+
Enumerations.configure do |config|
|
281
|
+
config.primary_key = :id
|
282
|
+
config.foreign_key_suffix = :id
|
283
|
+
end
|
284
|
+
```
|
285
|
+
|
286
|
+
By default, `primary_key` and `foreign_key_suffix` are set to `nil`.
|
287
|
+
|
288
|
+
By default model enumeration value is saved to column with same name as enumeration.
|
289
|
+
If you set enumeration as:
|
290
|
+
```ruby
|
291
|
+
enumeration :status
|
292
|
+
```
|
293
|
+
then model should have `status`column (as `String` type).
|
294
|
+
If you want save an `ID` to this column, you can set `foreign_key_suffix` to `id`.
|
295
|
+
Then model should have `status_id` column.
|
296
|
+
|
297
|
+
If you set `primary_key` then you need provide this attribute for all enumerations values.
|
298
|
+
Also, value from `primary_key` attribute will be stored to model as enumeration value.
|
299
|
+
|
300
|
+
For example:
|
301
|
+
|
302
|
+
```ruby
|
303
|
+
# with default configuration
|
304
|
+
|
305
|
+
post = Post.new
|
306
|
+
post.status = Status.draft # => post.status = 'draft'
|
307
|
+
|
308
|
+
# with configured primary_key and foreign_key_suffix:
|
309
|
+
|
310
|
+
Enumerations.configure do |config|
|
311
|
+
config.primary_key = :id
|
312
|
+
config.foreign_key_suffix = :id
|
313
|
+
end
|
314
|
+
|
315
|
+
class Status < Enumerations::Base
|
316
|
+
value :draft, id: 1, name: 'Draft'
|
317
|
+
value :review_pending, id: 2, name: 'Review pending',
|
318
|
+
value :published, id: 3, name: 'Published', published: true
|
319
|
+
end
|
320
|
+
|
321
|
+
post = Post.new
|
322
|
+
post.status = Status.draft # => post.status_id = 1
|
323
|
+
```
|
324
|
+
|
325
|
+
Database Enumerations
|
326
|
+
=====================
|
327
|
+
|
328
|
+
By default, enumeration values are saved to database as `String`.
|
329
|
+
If you want, you can define `Enum` type in database:
|
330
|
+
|
331
|
+
```sql
|
332
|
+
CREATE TYPE status AS ENUM ('draft', 'review_pending', 'published');
|
333
|
+
```
|
334
|
+
|
335
|
+
Then you'll have enumeration as type in database and you can use it in database migrations:
|
336
|
+
|
337
|
+
```ruby
|
338
|
+
add_column :posts, :status, :status, index: true
|
339
|
+
```
|
340
|
+
|
341
|
+
With configuration option `primary_key`, you can store any type you want (e.g. `Integer`).
|
342
|
+
|
343
|
+
Also, for performance reasons, you should add indices to enumeration column.
|
344
|
+
|
345
|
+
[Here](https://www.postgresql.org/docs/9.1/static/datatype-enum.html) you can find more informations about ENUM types.
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
Contributing
|
350
|
+
============
|
351
|
+
|
352
|
+
1. Fork it
|
353
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
354
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
355
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
356
|
+
5. Create new Pull Request
|
357
|
+
|
358
|
+
Credits
|
359
|
+
=======
|
360
|
+
**Enumerations** is maintained and sponsored by [Infinum](https://infinum.co)
|
361
|
+
|
362
|
+
Copyright © 2016 Infinum Ltd.
|
363
|
+
|
364
|
+
License
|
365
|
+
=======
|
266
366
|
|
267
|
-
|
367
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/enumerations.gemspec
CHANGED
@@ -3,13 +3,20 @@ require File.expand_path('../lib/enumerations/version', __FILE__)
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'enumerations'
|
5
5
|
s.version = Enumerations::VERSION
|
6
|
-
s.date = '2016-
|
6
|
+
s.date = '2016-09-15'
|
7
7
|
s.summary = 'Enumerations for ActiveRecord!'
|
8
8
|
s.description = 'Extends ActiveRecord with enumeration capabilites.'
|
9
|
-
s.authors = ['Tomislav Car', 'Nikica Jokic', 'Nikola Santic']
|
10
|
-
s.email = ['tomislav@infinum.hr', 'nikica.jokic@infinum.hr', 'nikola.santic@infinum.hr']
|
11
9
|
s.homepage = 'https://github.com/infinum/enumerations'
|
12
10
|
|
11
|
+
s.authors = [
|
12
|
+
'Tomislav Car', 'Nikica Jokić', 'Nikola Santić', 'Stjepan Hadjić', 'Petar Ćurković'
|
13
|
+
]
|
14
|
+
|
15
|
+
s.email = [
|
16
|
+
'tomislav@infinum.hr', 'nikica.jokic@infinum.hr', 'nikola.santic@infinum.hr',
|
17
|
+
'stjepan.hadjic@infinum.hr', 'petar.curkovic@infinum.hr'
|
18
|
+
]
|
19
|
+
|
13
20
|
s.add_dependency 'activerecord'
|
14
21
|
s.add_dependency 'activesupport'
|
15
22
|
s.add_dependency 'i18n'
|
data/lib/enumerations.rb
CHANGED
@@ -3,6 +3,7 @@ require 'active_support/concern'
|
|
3
3
|
require 'active_support/core_ext/class/attribute'
|
4
4
|
require 'active_support/core_ext/string/inflections'
|
5
5
|
|
6
|
+
require 'enumerations/configuration'
|
6
7
|
require 'enumerations/version'
|
7
8
|
require 'enumerations/base'
|
8
9
|
require 'enumerations/reflection'
|
@@ -25,11 +26,9 @@ module Enumerations
|
|
25
26
|
# enumeration :role
|
26
27
|
# end
|
27
28
|
#
|
28
|
-
# user.role_id = 1
|
29
29
|
# user.role => #<Enumerations::Value: @base=Role, @symbol=:admin...>
|
30
30
|
#
|
31
31
|
# user.role = Role.staff
|
32
|
-
# user.role_id => 2
|
33
32
|
#
|
34
33
|
def enumeration(name, options = {})
|
35
34
|
reflection = Reflection.new(name, options)
|
@@ -67,12 +66,12 @@ module Enumerations
|
|
67
66
|
#
|
68
67
|
# Example:
|
69
68
|
#
|
70
|
-
# user.
|
69
|
+
# user.role = Role.admin
|
71
70
|
# user.role => #<Enumerations::Value: @base=Role, @symbol=:admin...>
|
72
71
|
#
|
73
72
|
def define_getter_method(reflection)
|
74
73
|
define_method(reflection.name) do
|
75
|
-
reflection.enumerator_class.find(
|
74
|
+
reflection.enumerator_class.find(self[reflection.foreign_key])
|
76
75
|
end
|
77
76
|
end
|
78
77
|
|
@@ -81,11 +80,13 @@ module Enumerations
|
|
81
80
|
# Example:
|
82
81
|
#
|
83
82
|
# user.role = Role.admin
|
84
|
-
# user.role_id => 1
|
85
83
|
#
|
86
84
|
def define_setter_method(reflection)
|
87
85
|
define_method("#{reflection.name}=") do |other|
|
88
|
-
|
86
|
+
enumeration_value = reflection.enumerator_class.find(other)
|
87
|
+
|
88
|
+
self[reflection.foreign_key] =
|
89
|
+
enumeration_value.send(Enumerations.configuration.primary_key || :symbol)
|
89
90
|
end
|
90
91
|
end
|
91
92
|
|
@@ -115,8 +116,10 @@ module Enumerations
|
|
115
116
|
#
|
116
117
|
def define_scopes(reflection)
|
117
118
|
reflection.enumerator_class.all.each do |enumeration|
|
119
|
+
foreign_key = enumeration.send(Enumerations.configuration.primary_key || :symbol)
|
120
|
+
|
118
121
|
scope "with_#{reflection.name}_#{enumeration.symbol}",
|
119
|
-
-> { where(reflection.foreign_key =>
|
122
|
+
-> { where(reflection.foreign_key => foreign_key) }
|
120
123
|
end
|
121
124
|
end
|
122
125
|
end
|
data/lib/enumerations/base.rb
CHANGED
@@ -9,6 +9,7 @@ module Enumerations
|
|
9
9
|
include Enumerations::Value
|
10
10
|
|
11
11
|
class_attribute :_values, :_symbol_index
|
12
|
+
|
12
13
|
self._values = {}
|
13
14
|
self._symbol_index = {}
|
14
15
|
|
@@ -18,17 +19,13 @@ module Enumerations
|
|
18
19
|
#
|
19
20
|
# value :admin, id: 1, name: 'Admin', description: 'Some description...'
|
20
21
|
#
|
21
|
-
# Role.admin.
|
22
|
-
# Role.find(:admin).
|
23
|
-
# Role.find(1).description => # "Some description..."
|
22
|
+
# Role.find(:admin).name => # "Admin"
|
23
|
+
# Role.find(:admin).description => # "Some description..."
|
24
24
|
#
|
25
25
|
def self.value(symbol, attributes)
|
26
|
-
|
27
|
-
raise "Duplicate symbol #{symbol}" if find(symbol)
|
28
|
-
raise "Duplicate id #{attributes[:id]}" if find(attributes[:id])
|
26
|
+
validate_symbol_and_primary_key(symbol, attributes)
|
29
27
|
|
30
28
|
self._values = _values.merge(symbol => new(symbol, attributes))
|
31
|
-
self._symbol_index = _symbol_index.merge(symbol => attributes[:id])
|
32
29
|
|
33
30
|
# Adds name base finder methods
|
34
31
|
#
|
@@ -50,9 +47,9 @@ module Enumerations
|
|
50
47
|
# manager: { id: 2, name: 'Manager' },
|
51
48
|
# staff: { id: 3, name: 'Staff', description: 'Some description...' }
|
52
49
|
#
|
53
|
-
# Role.admin.id
|
54
|
-
# Role.find(:manager).name
|
55
|
-
# Role.find(
|
50
|
+
# Role.admin.id => # 1
|
51
|
+
# Role.find(:manager).name => # "Manager"
|
52
|
+
# Role.find(:manager).description => # "Some description..."
|
56
53
|
#
|
57
54
|
def self.values(values)
|
58
55
|
values.each do |symbol, attributes|
|
@@ -82,6 +79,20 @@ module Enumerations
|
|
82
79
|
_values.values
|
83
80
|
end
|
84
81
|
|
82
|
+
def self.validate_symbol_and_primary_key(symbol, attributes)
|
83
|
+
raise "Duplicate symbol #{symbol}" if find(symbol)
|
84
|
+
|
85
|
+
primary_key = Enumerations.configuration.primary_key
|
86
|
+
return if primary_key.nil?
|
87
|
+
|
88
|
+
raise 'Enumeration primary key is required' if attributes[primary_key].nil?
|
89
|
+
raise "Duplicate primary key #{attributes[primary_key]}" if find(attributes[primary_key])
|
90
|
+
|
91
|
+
self._symbol_index = _symbol_index.merge(symbol => attributes[primary_key])
|
92
|
+
end
|
93
|
+
|
94
|
+
private_class_method :validate_symbol_and_primary_key
|
95
|
+
|
85
96
|
attr_reader :symbol, :attributes
|
86
97
|
|
87
98
|
def initialize(symbol, attributes)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Enumerations
|
2
|
+
class << self
|
3
|
+
attr_accessor :configuration
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.configure
|
7
|
+
self.configuration ||= Configuration.new
|
8
|
+
yield(configuration)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.restore_default_configuration
|
12
|
+
self.configuration = nil
|
13
|
+
configure {}
|
14
|
+
end
|
15
|
+
|
16
|
+
class Configuration
|
17
|
+
attr_accessor :primary_key
|
18
|
+
attr_accessor :foreign_key_suffix
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
@primary_key = nil
|
22
|
+
@foreign_key_suffix = nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,20 +1,16 @@
|
|
1
1
|
module Enumerations
|
2
2
|
module FinderMethods
|
3
|
-
# Finds an enumeration by symbol
|
3
|
+
# Finds an enumeration by symbol or name
|
4
4
|
#
|
5
5
|
# Example:
|
6
6
|
#
|
7
7
|
# Role.find(:admin) => #<Enumerations::Value: @base=Role, @symbol=:admin...>
|
8
|
-
# Role.find(2) => #<Enumerations::Value: @base=Role, @symbol=:manager...>
|
9
|
-
# Role.find('2') => #<Enumerations::Value: @base=Role, @symbol=:manager...>
|
10
8
|
# Role.find('staff') => #<Enumerations::Value: @base=Role, @symbol=:staff...>
|
11
9
|
#
|
12
10
|
def find(key)
|
13
11
|
case key
|
14
|
-
when Symbol then find_by_key(key)
|
15
|
-
|
16
|
-
when Fixnum then find_by_id(key)
|
17
|
-
end
|
12
|
+
when Symbol, String, Enumerations::Base then find_by_key(key.to_sym)
|
13
|
+
end || find_by_primary_key(key)
|
18
14
|
end
|
19
15
|
|
20
16
|
# Finds all enumerations which meets given attributes.
|
@@ -42,8 +38,14 @@ module Enumerations
|
|
42
38
|
_values[key]
|
43
39
|
end
|
44
40
|
|
45
|
-
def
|
46
|
-
|
41
|
+
def find_by_primary_key(primary_key)
|
42
|
+
value_from_symbol_index(primary_key) || value_from_symbol_index(primary_key.to_s.to_i)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def value_from_symbol_index(key)
|
48
|
+
_values[_symbol_index.key(key)]
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
@@ -12,11 +12,17 @@ module Enumerations
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def foreign_key
|
15
|
-
@foreign_key ||= (@options[:foreign_key] ||
|
15
|
+
@foreign_key ||= (@options[:foreign_key] || default_foreign_key_name).to_sym
|
16
16
|
end
|
17
17
|
|
18
18
|
def enumerator_class
|
19
19
|
@enumerator_class ||= class_name.constantize
|
20
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def default_foreign_key_name
|
25
|
+
[name, Enumerations.configuration.foreign_key_suffix].compact.join('_')
|
26
|
+
end
|
21
27
|
end
|
22
28
|
end
|
data/lib/enumerations/value.rb
CHANGED
@@ -1,36 +1,34 @@
|
|
1
1
|
module Enumerations
|
2
2
|
module Value
|
3
3
|
def to_i
|
4
|
-
|
4
|
+
_values.keys.index(symbol) + 1
|
5
5
|
end
|
6
6
|
|
7
7
|
def to_s
|
8
|
-
|
8
|
+
symbol.to_s
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def to_param
|
12
|
+
to_s
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
|
15
|
+
def to_sym
|
16
|
+
symbol
|
17
17
|
end
|
18
18
|
|
19
|
-
# Comparison by
|
19
|
+
# Comparison by symbol or object
|
20
20
|
#
|
21
21
|
# Example:
|
22
22
|
#
|
23
|
-
# Role.admin == 1 => true
|
24
23
|
# Role.admin == :admin => true
|
25
24
|
# Role.admin == Role.admin => true
|
26
|
-
# Role.admin == 2 => false
|
27
25
|
# Role.admin == :staff => false
|
28
26
|
# Role.admin == Role.staff => false
|
29
27
|
#
|
30
28
|
# TODO: test if case..when is working with this
|
31
29
|
def ==(other)
|
32
30
|
case other
|
33
|
-
when
|
31
|
+
when String then other == to_s
|
34
32
|
when Symbol then other == symbol
|
35
33
|
else super
|
36
34
|
end
|
@@ -49,8 +47,8 @@ module Enumerations
|
|
49
47
|
#
|
50
48
|
# Role.admin => #<Enumerations::Value:0x007fff45d7ec30 @base=Role, @symbol=:admin,
|
51
49
|
# @attributes={:id=>1, :name=>"Admin", :description=>"Some description..."}>
|
52
|
-
# user.role.id
|
53
|
-
# user.role.name
|
50
|
+
# user.role.id => # 1
|
51
|
+
# user.role.name => # "Admin"
|
54
52
|
# user.role.description => # "Some description..."
|
55
53
|
#
|
56
54
|
def define_attributes_getters
|
data/lib/enumerations/version.rb
CHANGED
data/test/base_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative 'helpers/test_helper'
|
2
2
|
|
3
3
|
class BaseTest < Minitest::Test
|
4
4
|
def test_all
|
@@ -15,22 +15,9 @@ class BaseTest < Minitest::Test
|
|
15
15
|
assert_equal status_symbols.first, Status.draft.to_sym
|
16
16
|
end
|
17
17
|
|
18
|
-
def test_required_id
|
19
|
-
assert_raises 'Enumeration id is required' do
|
20
|
-
Class.new.value draft: { name: 'Draft' }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_duplicated_id
|
25
|
-
assert_raises 'Duplicate id 1' do
|
26
|
-
Class.new.values draft: { id: 1, name: 'Draft' },
|
27
|
-
test: { id: 1, name: 'Draft' }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
18
|
def test_duplicated_symbol
|
32
19
|
assert_raises 'Duplicate symbol draft' do
|
33
|
-
obj = Class.new
|
20
|
+
obj = Class.new(Enumerations::Base)
|
34
21
|
|
35
22
|
obj.value :draft, id: 1, name: 'Draft'
|
36
23
|
obj.value :draft, id: 2, name: 'Draft Again'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Configuration
|
2
|
+
Enumerations.configure do |config|
|
3
|
+
config.primary_key = :id
|
4
|
+
config.foreign_key_suffix = :id
|
5
|
+
end
|
6
|
+
|
7
|
+
::CustomEnum = Class.new(Enumerations::Base)
|
8
|
+
|
9
|
+
CustomEnum.values draft: { id: 1, name: 'Draft' },
|
10
|
+
review: { id: 2, name: 'Review' },
|
11
|
+
published: { id: 3, name: 'Published', published: true }
|
12
|
+
|
13
|
+
::CustomModel = Class.new(ActiveRecord::Base)
|
14
|
+
|
15
|
+
CustomModel.enumeration :custom_enum
|
16
|
+
|
17
|
+
Enumerations.restore_default_configuration
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../helpers/test_helper'
|
2
|
+
require_relative 'configuration'
|
3
|
+
|
4
|
+
module Configuration
|
5
|
+
class EnumerationsTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
Enumerations.configure do |config|
|
8
|
+
config.primary_key = :id
|
9
|
+
config.foreign_key_suffix = :id
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
Enumerations.restore_default_configuration
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_model_enumeration_assignment
|
18
|
+
model = CustomModel.new
|
19
|
+
model.custom_enum = CustomEnum.draft
|
20
|
+
|
21
|
+
assert_equal 'draft', model.custom_enum.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_model_bang_assignment
|
25
|
+
model = CustomModel.new
|
26
|
+
model.custom_enum_draft!
|
27
|
+
|
28
|
+
assert_equal 'draft', model.custom_enum.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_model_via_symbol_assignment
|
32
|
+
model = CustomModel.new
|
33
|
+
model.custom_enum = CustomEnum.published.symbol
|
34
|
+
|
35
|
+
assert_equal 'published', model.custom_enum.to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_model_via_foreign_key_assignment
|
39
|
+
model = CustomModel.new
|
40
|
+
model.custom_enum_id = CustomEnum.published.id
|
41
|
+
|
42
|
+
assert_equal 'published', model.custom_enum.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_enumerated_class_scope_hash_value
|
46
|
+
query_hash = CustomModel.with_custom_enum_draft.where_values_hash.symbolize_keys
|
47
|
+
|
48
|
+
assert_equal query_hash, custom_enum_id: 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative '../helpers/test_helper'
|
2
|
+
require_relative 'configuration'
|
3
|
+
|
4
|
+
module Configuration
|
5
|
+
class FinderTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
Enumerations.configure do |config|
|
8
|
+
config.primary_key = :id
|
9
|
+
config.foreign_key_suffix = :id
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
Enumerations.restore_default_configuration
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_lookup_by_key
|
18
|
+
enum = CustomEnum.find(:draft)
|
19
|
+
|
20
|
+
assert_equal :draft, enum.symbol
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_lookup_by_string_key
|
24
|
+
enum = CustomEnum.find('draft')
|
25
|
+
|
26
|
+
assert_equal :draft, enum.symbol
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_lookup_by_primary_key
|
30
|
+
enum = CustomEnum.find(1)
|
31
|
+
|
32
|
+
assert_equal :draft, enum.symbol
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_lookup_by_primary_key_as_string
|
36
|
+
enum = CustomEnum.find('1')
|
37
|
+
|
38
|
+
assert_equal :draft, enum.symbol
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative 'helpers/test_helper'
|
2
|
+
|
3
|
+
class ConfigurationTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
Enumerations.restore_default_configuration
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
Enumerations.restore_default_configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_default_configuration
|
13
|
+
assert_equal nil, Enumerations.configuration.primary_key
|
14
|
+
assert_equal nil, Enumerations.configuration.foreign_key_suffix
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_custom_configuration
|
18
|
+
Enumerations.configure do |config|
|
19
|
+
config.primary_key = :id
|
20
|
+
config.foreign_key_suffix = :id
|
21
|
+
end
|
22
|
+
|
23
|
+
assert_equal :id, Enumerations.configuration.primary_key
|
24
|
+
assert_equal :id, Enumerations.configuration.foreign_key_suffix
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_reflection_with_configured_foreign_key_suffix
|
28
|
+
Enumerations.configure { |config| config.foreign_key_suffix = :id }
|
29
|
+
|
30
|
+
reflection = Enumerations::Reflection.new(:status)
|
31
|
+
|
32
|
+
assert_equal 'Status', reflection.class_name
|
33
|
+
assert_equal ::Status, reflection.enumerator_class
|
34
|
+
assert_equal :status_id, reflection.foreign_key
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_required_primary_key_when_primary_key_configured
|
38
|
+
Enumerations.configure { |config| config.primary_key = :id }
|
39
|
+
|
40
|
+
assert_raises 'Enumeration primary key is required' do
|
41
|
+
Class.new(Enumerations::Base).value draft: { name: 'Draft' }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_duplicated_primary_key_when_primary_key_configured
|
46
|
+
Enumerations.configure { |config| config.primary_key = :id }
|
47
|
+
|
48
|
+
assert_raises 'Duplicate primary key 1' do
|
49
|
+
Class.new(Enumerations::Base).values draft: { id: 1, name: 'Draft' },
|
50
|
+
test: { id: 1, name: 'Draft' }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/test/enumerations_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative 'helpers/test_helper'
|
2
2
|
|
3
3
|
class EnumerationsTest < Minitest::Test
|
4
4
|
def test_reflect_on_all_enumerations
|
@@ -8,35 +8,35 @@ class EnumerationsTest < Minitest::Test
|
|
8
8
|
assert_equal :status, enumerations.first.name
|
9
9
|
assert_equal 'Status', enumerations.first.class_name
|
10
10
|
|
11
|
-
assert_equal :
|
11
|
+
assert_equal :some_other_status, enumerations[1].foreign_key
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_model_enumeration_assignment
|
15
15
|
p = Post.new
|
16
16
|
p.status = Status.draft
|
17
17
|
|
18
|
-
assert_equal '
|
18
|
+
assert_equal 'draft', p.status.to_s
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_model_bang_assignment
|
22
22
|
p = Post.new
|
23
23
|
p.status_draft!
|
24
24
|
|
25
|
-
assert_equal '
|
25
|
+
assert_equal 'draft', p.status.to_s
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_model_bang_assignment_with_custom_name
|
29
29
|
p = Post.new
|
30
30
|
p.different_status_draft!
|
31
31
|
|
32
|
-
assert_equal '
|
32
|
+
assert_equal 'draft', p.different_status.to_s
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
35
|
+
def test_model_via_symbol_assignment
|
36
36
|
p = Post.new
|
37
|
-
p.
|
37
|
+
p.some_other_status = Status.published.symbol
|
38
38
|
|
39
|
-
assert_equal '
|
39
|
+
assert_equal 'published', p.some_other_status.to_s
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_boolean_lookup
|
@@ -59,10 +59,10 @@ class EnumerationsTest < Minitest::Test
|
|
59
59
|
assert_equal 2, enumerations.size
|
60
60
|
|
61
61
|
assert_equal :role, enumerations.first.name
|
62
|
-
assert_equal :
|
62
|
+
assert_equal :role, enumerations.first.foreign_key
|
63
63
|
|
64
64
|
assert_equal :status, enumerations[1].name
|
65
|
-
assert_equal :
|
65
|
+
assert_equal :status, enumerations[1].foreign_key
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_multiple_enumeration_assignments_on_model
|
@@ -70,8 +70,8 @@ class EnumerationsTest < Minitest::Test
|
|
70
70
|
u.role = Role.admin
|
71
71
|
u.status = Status.published
|
72
72
|
|
73
|
-
assert_equal '
|
74
|
-
assert_equal '
|
73
|
+
assert_equal 'admin', u.role.to_s
|
74
|
+
assert_equal 'published', u.status.to_s
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_enumerated_class_has_scopes
|
@@ -83,6 +83,6 @@ class EnumerationsTest < Minitest::Test
|
|
83
83
|
def test_enumerated_class_scope_hash_value
|
84
84
|
query_hash = User.with_role_admin.where_values_hash.symbolize_keys
|
85
85
|
|
86
|
-
assert_equal query_hash,
|
86
|
+
assert_equal query_hash, role: :admin
|
87
87
|
end
|
88
88
|
end
|
data/test/finder_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative 'helpers/test_helper'
|
2
2
|
|
3
3
|
class FinderTest < Minitest::Test
|
4
4
|
def test_lookup_by_symbol
|
@@ -13,12 +13,6 @@ class FinderTest < Minitest::Test
|
|
13
13
|
refute_same :published, status.symbol
|
14
14
|
end
|
15
15
|
|
16
|
-
def test_lookup_by_string_id
|
17
|
-
status = Status.find('1')
|
18
|
-
|
19
|
-
assert_equal :draft, status.symbol
|
20
|
-
end
|
21
|
-
|
22
16
|
def test_lookup_by_string_key
|
23
17
|
status = Status.find('draft')
|
24
18
|
|
@@ -4,12 +4,17 @@ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:'
|
|
4
4
|
|
5
5
|
ActiveRecord::Schema.define do
|
6
6
|
create_table :posts, force: true do |t|
|
7
|
-
t.
|
8
|
-
t.
|
7
|
+
t.string :status
|
8
|
+
t.string :some_other_status
|
9
9
|
end
|
10
10
|
|
11
11
|
create_table :users, force: true do |t|
|
12
|
-
t.
|
13
|
-
t.string
|
12
|
+
t.string :role
|
13
|
+
t.string :status
|
14
|
+
end
|
15
|
+
|
16
|
+
create_table :custom_models, force: true do |t|
|
17
|
+
t.integer :custom_enum_id
|
18
|
+
t.integer :custom_enum
|
14
19
|
end
|
15
20
|
end
|
@@ -6,8 +6,10 @@ require 'enumerations'
|
|
6
6
|
require 'active_record'
|
7
7
|
require 'pry'
|
8
8
|
|
9
|
-
require_relative '
|
10
|
-
require_relative '
|
9
|
+
require_relative 'database_helper'
|
10
|
+
require_relative 'locale_helper'
|
11
|
+
|
12
|
+
Enumerations.configure { |_| }
|
11
13
|
|
12
14
|
class Status < Enumerations::Base
|
13
15
|
values draft: { id: 1, name: 'Draft' },
|
@@ -19,9 +21,9 @@ class Status < Enumerations::Base
|
|
19
21
|
end
|
20
22
|
|
21
23
|
class Role < Enumerations::Base
|
22
|
-
value :admin,
|
23
|
-
value :editor,
|
24
|
-
value :author,
|
24
|
+
value :admin, name: 'Admin', admin: true, active: true
|
25
|
+
value :editor, name: 'Editor', admin: true, active: false, description: 'Edits newspapers'
|
26
|
+
value :author, name: 'Author'
|
25
27
|
|
26
28
|
def my_custom_name
|
27
29
|
['user', name].join('_')
|
@@ -29,15 +31,11 @@ class Role < Enumerations::Base
|
|
29
31
|
end
|
30
32
|
|
31
33
|
class Post < ActiveRecord::Base
|
32
|
-
attr_accessor :status_id, :some_other_status_id
|
33
|
-
|
34
34
|
enumeration :status
|
35
|
-
enumeration :different_status, foreign_key: :
|
35
|
+
enumeration :different_status, foreign_key: :some_other_status, class_name: 'Status'
|
36
36
|
end
|
37
37
|
|
38
38
|
class User < ActiveRecord::Base
|
39
|
-
attr_accessor :role_id, :status_id
|
40
|
-
|
41
39
|
enumeration :role
|
42
40
|
enumeration :status
|
43
41
|
end
|
data/test/reflection_test.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative 'helpers/test_helper'
|
2
2
|
|
3
3
|
class ReflectionTest < Minitest::Test
|
4
4
|
def test_reflection_with_all_attributes
|
5
5
|
reflection = Enumerations::Reflection.new(:status, class_name: 'Status',
|
6
|
-
foreign_key: :
|
6
|
+
foreign_key: :status)
|
7
7
|
|
8
|
-
assert_equal :status,
|
8
|
+
assert_equal :status, reflection.name
|
9
9
|
assert_equal 'Status', reflection.class_name
|
10
|
-
assert_equal :
|
10
|
+
assert_equal :status, reflection.foreign_key
|
11
11
|
assert_equal ::Status, reflection.enumerator_class
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_reflection_without_class_name_and_foreign_key
|
15
15
|
reflection = Enumerations::Reflection.new(:status)
|
16
16
|
|
17
|
-
assert_equal :status,
|
18
|
-
assert_equal 'Status',
|
19
|
-
assert_equal :
|
20
|
-
assert_equal ::Status,
|
17
|
+
assert_equal :status, reflection.name
|
18
|
+
assert_equal 'Status', reflection.class_name
|
19
|
+
assert_equal :status, reflection.foreign_key
|
20
|
+
assert_equal ::Status, reflection.enumerator_class
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_reflection_with_custom_name_and_without_foreign_key
|
24
24
|
reflection = Enumerations::Reflection.new(:my_status, class_name: 'Status')
|
25
25
|
|
26
|
-
assert_equal :my_status,
|
27
|
-
assert_equal 'Status',
|
28
|
-
assert_equal :
|
29
|
-
assert_equal ::Status,
|
26
|
+
assert_equal :my_status, reflection.name
|
27
|
+
assert_equal 'Status', reflection.class_name
|
28
|
+
assert_equal :my_status, reflection.foreign_key
|
29
|
+
assert_equal ::Status, reflection.enumerator_class
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_reflection_with_class_name_as_constant
|
data/test/translation_test.rb
CHANGED
data/test/value_test.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative 'helpers/test_helper'
|
2
2
|
|
3
3
|
class ValueTest < Minitest::Test
|
4
|
-
def
|
5
|
-
status = Status.
|
4
|
+
def test_equal_by_symbol
|
5
|
+
status = Status.draft
|
6
6
|
|
7
|
-
assert_equal true, status ==
|
7
|
+
assert_equal true, status == :draft
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def test_equal_by_string
|
11
11
|
status = Status.draft
|
12
12
|
|
13
|
-
assert_equal true, status ==
|
13
|
+
assert_equal true, status == 'draft'
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_equal_by_enumeration
|
@@ -43,10 +43,12 @@ class ValueTest < Minitest::Test
|
|
43
43
|
assert_equal nil, status.visible
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
47
|
-
|
46
|
+
def test_enumeration_to_i_return_ordinal
|
47
|
+
first_status = Status.find(:draft)
|
48
|
+
second_status = Status.find(:review_pending)
|
48
49
|
|
49
|
-
assert_equal
|
50
|
+
assert_equal first_status.to_i, 1
|
51
|
+
assert_equal second_status.to_i, 2
|
50
52
|
end
|
51
53
|
|
52
54
|
def test_enumeration_to_sym
|
@@ -58,6 +60,6 @@ class ValueTest < Minitest::Test
|
|
58
60
|
def test_enumeration_to_param
|
59
61
|
status = Status.find(:draft)
|
60
62
|
|
61
|
-
assert_equal status.to_param,
|
63
|
+
assert_equal status.to_param, 'draft'
|
62
64
|
end
|
63
65
|
end
|
metadata
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumerations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomislav Car
|
8
|
-
- Nikica
|
9
|
-
- Nikola
|
8
|
+
- Nikica Jokić
|
9
|
+
- Nikola Santić
|
10
|
+
- Stjepan Hadjić
|
11
|
+
- Petar Ćurković
|
10
12
|
autorequire:
|
11
13
|
bindir: bin
|
12
14
|
cert_chain: []
|
13
|
-
date: 2016-
|
15
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
14
16
|
dependencies:
|
15
17
|
- !ruby/object:Gem::Dependency
|
16
18
|
name: activerecord
|
@@ -115,6 +117,8 @@ email:
|
|
115
117
|
- tomislav@infinum.hr
|
116
118
|
- nikica.jokic@infinum.hr
|
117
119
|
- nikola.santic@infinum.hr
|
120
|
+
- stjepan.hadjic@infinum.hr
|
121
|
+
- petar.curkovic@infinum.hr
|
118
122
|
executables: []
|
119
123
|
extensions: []
|
120
124
|
extra_rdoc_files: []
|
@@ -126,21 +130,25 @@ files:
|
|
126
130
|
- enumerations.gemspec
|
127
131
|
- lib/enumerations.rb
|
128
132
|
- lib/enumerations/base.rb
|
133
|
+
- lib/enumerations/configuration.rb
|
129
134
|
- lib/enumerations/finder_methods.rb
|
130
135
|
- lib/enumerations/reflection.rb
|
131
136
|
- lib/enumerations/value.rb
|
132
137
|
- lib/enumerations/version.rb
|
133
138
|
- test/base_test.rb
|
139
|
+
- test/configuration/configuration.rb
|
140
|
+
- test/configuration/enumerations_test.rb
|
141
|
+
- test/configuration/finder_test.rb
|
142
|
+
- test/configuration_test.rb
|
134
143
|
- test/enumerations_test.rb
|
135
144
|
- test/finder_test.rb
|
136
145
|
- test/helpers/database_helper.rb
|
137
146
|
- test/helpers/locale_helper.rb
|
147
|
+
- test/helpers/test_helper.rb
|
138
148
|
- test/locales/hr.yml
|
139
149
|
- test/reflection_test.rb
|
140
|
-
- test/test_helper.rb
|
141
150
|
- test/translation_test.rb
|
142
151
|
- test/value_test.rb
|
143
|
-
- test/version_test.rb
|
144
152
|
homepage: https://github.com/infinum/enumerations
|
145
153
|
licenses: []
|
146
154
|
metadata: {}
|
@@ -166,13 +174,16 @@ specification_version: 4
|
|
166
174
|
summary: Enumerations for ActiveRecord!
|
167
175
|
test_files:
|
168
176
|
- test/base_test.rb
|
177
|
+
- test/configuration/configuration.rb
|
178
|
+
- test/configuration/enumerations_test.rb
|
179
|
+
- test/configuration/finder_test.rb
|
180
|
+
- test/configuration_test.rb
|
169
181
|
- test/enumerations_test.rb
|
170
182
|
- test/finder_test.rb
|
171
183
|
- test/helpers/database_helper.rb
|
172
184
|
- test/helpers/locale_helper.rb
|
185
|
+
- test/helpers/test_helper.rb
|
173
186
|
- test/locales/hr.yml
|
174
187
|
- test/reflection_test.rb
|
175
|
-
- test/test_helper.rb
|
176
188
|
- test/translation_test.rb
|
177
189
|
- test/value_test.rb
|
178
|
-
- test/version_test.rb
|