active_enum 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_enum/acts_as_enum.rb +11 -6
- data/lib/active_enum/base.rb +3 -3
- data/lib/active_enum/version.rb +1 -1
- data/spec/active_enum/acts_as_enum_spec.rb +26 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66c4c41a89eb9ab6b433bd74195b5da31f5e6f77ffd2bf6e4d71152f6f37ff43
|
4
|
+
data.tar.gz: 78f1bfd4039e743136f0258c84a042f13397f89629fd7fb324e501db15068b3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb0f30bd0ea8655166dc74c44f7e8748d49c131676fb5ebea4e5529d2c2117a305f806601a770fc659bef3254a9f9b324e0eac89f94738dd2221c4a80def2707
|
7
|
+
data.tar.gz: 91ed0d9875049d3453ea00e745f4e594c0fb7e7c36cb018d2e170da24e4b4a00007e856d2146d0fa07840d81941a34a830832817269e2f69ca55753ce72b1778
|
@@ -6,7 +6,7 @@ module ActiveEnum
|
|
6
6
|
def acts_as_enum(options={})
|
7
7
|
extend ClassMethods
|
8
8
|
class_attribute :active_enum_options
|
9
|
-
self.active_enum_options = options.reverse_merge(:
|
9
|
+
self.active_enum_options = options.reverse_merge(name_column: 'name')
|
10
10
|
scope :enum_values, proc { select(Arel.sql("#{primary_key}, #{active_enum_options[:name_column]}")).
|
11
11
|
where(active_enum_options[:conditions]).
|
12
12
|
order(Arel.sql("#{primary_key} #{active_enum_options[:order]}")) }
|
@@ -33,14 +33,19 @@ module ActiveEnum
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def [](index)
|
36
|
-
|
36
|
+
get(index)
|
37
|
+
end
|
38
|
+
|
39
|
+
def get(index, raise_on_not_found: ActiveEnum.raise_on_not_found)
|
40
|
+
row = get_value(index, raise_on_not_found)
|
37
41
|
return if row.nil?
|
38
42
|
index.is_a?(Integer) ? row.send(active_enum_options[:name_column]) : row.id
|
39
43
|
end
|
40
44
|
|
41
45
|
# Access any meta data defined for a given id or name. Returns a hash.
|
42
|
-
def meta(index)
|
46
|
+
def meta(index, raise_on_not_found: ActiveEnum.raise_on_not_found)
|
43
47
|
row = lookup_relation(index).unscope(:select).first
|
48
|
+
raise(ActiveEnum::NotFound, "#{self} value for '#{index}' was not found") if raise_on_not_found
|
44
49
|
row&.attributes.except(primary_key.to_s, active_enum_options[:name_column].to_s)
|
45
50
|
end
|
46
51
|
|
@@ -53,12 +58,12 @@ module ActiveEnum
|
|
53
58
|
|
54
59
|
private
|
55
60
|
|
56
|
-
def get_value(index)
|
61
|
+
def get_value(index, raise_on_not_found = ActiveEnum.raise_on_not_found)
|
57
62
|
lookup_relation(index).first || begin
|
58
|
-
raise(ActiveEnum::NotFound, "#{self} value for '#{index}' was not found") if
|
63
|
+
raise(ActiveEnum::NotFound, "#{self} value for '#{index}' was not found") if raise_on_not_found
|
59
64
|
end
|
60
65
|
end
|
61
|
-
|
66
|
+
|
62
67
|
def lookup_relation(index)
|
63
68
|
if index.is_a?(Integer)
|
64
69
|
enum_values.where(id: index)
|
data/lib/active_enum/base.rb
CHANGED
@@ -26,6 +26,8 @@ module ActiveEnum
|
|
26
26
|
# Allowed values are :asc, :desc or :natural
|
27
27
|
#
|
28
28
|
def order(order)
|
29
|
+
raise "Invalid order '#{order}' in #{self}" unless order.in?([:asc, :desc, :as_defined, :natural])
|
30
|
+
|
29
31
|
if order == :as_defined
|
30
32
|
ActiveSupport::Deprecation.warn("You are using the order :as_defined which has been deprecated. Use :natural.")
|
31
33
|
order = :natural
|
@@ -87,9 +89,7 @@ module ActiveEnum
|
|
87
89
|
end
|
88
90
|
|
89
91
|
def [](index)
|
90
|
-
|
91
|
-
return if row.nil?
|
92
|
-
index.is_a?(Integer) ? row[1] : row[0]
|
92
|
+
get(index)
|
93
93
|
end
|
94
94
|
|
95
95
|
def include?(value)
|
data/lib/active_enum/version.rb
CHANGED
@@ -31,20 +31,43 @@ describe ActiveEnum::ActsAsEnum do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
context "#[]" do
|
34
|
-
it "should return name column value when
|
34
|
+
it "should return name column value when passed id" do
|
35
35
|
expect(Person[1]).to eq('Dave')
|
36
36
|
end
|
37
37
|
|
38
|
-
it "should return id column value when
|
38
|
+
it "should return id column value when passed string name" do
|
39
39
|
expect(Person['Dave']).to eq(1)
|
40
40
|
expect(Person['dave']).to eq(1)
|
41
41
|
end
|
42
42
|
|
43
|
-
it "should return id column value when
|
43
|
+
it "should return id column value when passed symbol name" do
|
44
44
|
expect(Person[:dave]).to eq(1)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
context '#get' do
|
49
|
+
it "should return name column value when passed id" do
|
50
|
+
expect(Person.get(1)).to eq('Dave')
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should return id column value when passed string name" do
|
54
|
+
expect(Person.get('Dave')).to eq(1)
|
55
|
+
expect(Person.get('dave')).to eq(1)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return id column value when passed symbol name" do
|
59
|
+
expect(Person.get(:dave)).to eq(1)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should not raise for missing id when raise_on_not_found is false" do
|
63
|
+
expect { Person.get(0, raise_on_not_found: false) }.to_not raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should raise for missing id when raise_on_not_found is true" do
|
67
|
+
expect { Person.get(0, raise_on_not_found: true) }.to raise_error(ActiveEnum::NotFound)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
48
71
|
context '#values' do
|
49
72
|
it "should return array of arrays containing id and name column values" do
|
50
73
|
expect(Person.values).to eq([[1, 'Dave'], [2, 'John']])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Meehan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|