active_enum 1.2.0 → 1.2.1
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 +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
|