haz_enum 0.2.0 → 0.3.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.
- data/VERSION +1 -1
- data/haz_enum.gemspec +1 -1
- data/lib/haz_enum/enum.rb +11 -2
- data/spec/enum_spec.rb +14 -10
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/haz_enum.gemspec
CHANGED
data/lib/haz_enum/enum.rb
CHANGED
@@ -18,7 +18,11 @@ module HazEnum
|
|
18
18
|
end
|
19
19
|
|
20
20
|
define_method "#{enum_name}=" do |enum_to_set|
|
21
|
-
|
21
|
+
if enum_to_set.respond_to?(:name)
|
22
|
+
self["#{enum_column}"] = enum_to_set.name
|
23
|
+
else
|
24
|
+
self["#{enum_column}"] = enum_class.const_get(enum_to_set).name
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
define_method "#{enum_name}_changed?" do
|
@@ -30,7 +34,12 @@ module HazEnum
|
|
30
34
|
begin
|
31
35
|
enum_class.const_get(self["#{enum_column}"])
|
32
36
|
rescue NameError => e
|
33
|
-
|
37
|
+
|
38
|
+
message = I18n.translate("activerecord.errors.models.#{self.class.name.underscore}.attributes.#{enum_name}.enum_value_invalid", :value => self["#{enum_column}"], :name => enum_name) ||
|
39
|
+
I18n.translate("activerecord.errors.models.#{self.class.name.underscore}.enum_value_invalid", :value => self["#{enum_column}"], :name => enum_name) ||
|
40
|
+
I18n.translate(:'activerecord.errors.messages.enum_value_invalid', :value => self["#{enum_column}"], :name => enum_name)
|
41
|
+
|
42
|
+
self.errors.add(enum_name.to_sym, message)
|
34
43
|
end
|
35
44
|
end
|
36
45
|
end
|
data/spec/enum_spec.rb
CHANGED
@@ -7,29 +7,33 @@ describe "HazEnum" do
|
|
7
7
|
before(:all) do
|
8
8
|
setup_db
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "should have class method has_enum" do
|
12
12
|
ClassWithEnum.should respond_to(:has_enum)
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "should be able to set enum-attribute via hash in initializer" do
|
16
16
|
ClassWithEnum.new(:product => Products::Silver).product.should be(Products::Silver)
|
17
17
|
ClassWithCustomNameEnum.new(:product => Products::Silver).product.should be(Products::Silver)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
|
+
it "should be able to set enum-value as string in initializer" do
|
21
|
+
ClassWithEnum.new(:product => "Silver").product.should be(Products::Silver)
|
22
|
+
end
|
23
|
+
|
20
24
|
it "should not be able to set enum-attribute by colum-name via hash in initializer" do
|
21
25
|
ClassWithCustomNameEnum.new(:custom_name => Products::Silver).product.should_not be(Products::Silver)
|
22
26
|
ClassWithCustomNameEnum.new(:custom_name => Products::Silver.name).product.should_not be(Products::Silver)
|
23
27
|
end
|
24
|
-
|
28
|
+
|
25
29
|
it "should have a enum_value attribute" do
|
26
30
|
ClassWithCustomNameEnum.new(:product => Products::Gold).custom_name.should be(Products::Gold.name)
|
27
31
|
end
|
28
|
-
|
32
|
+
|
29
33
|
it "colum_name should be configurable" do
|
30
|
-
ClassWithCustomNameEnum.new(:product => Products::Gold).
|
34
|
+
ClassWithCustomNameEnum.new(:product => Products::Gold).product.should be(Products::Gold)
|
31
35
|
end
|
32
|
-
|
36
|
+
|
33
37
|
it "should know if enum-attribute has changed" do
|
34
38
|
product_enum = ClassWithEnum.new(:product => Products::Silver)
|
35
39
|
product_enum.product_changed?.should be(true)
|
@@ -38,14 +42,14 @@ describe "HazEnum" do
|
|
38
42
|
product_enum.product = Products::Gold
|
39
43
|
product_enum.product_changed?.should be(true)
|
40
44
|
end
|
41
|
-
|
45
|
+
|
42
46
|
it "should know if enum-attribute has not really changed" do
|
43
47
|
product_enum = ClassWithEnum.new(:product => Products::Silver)
|
44
48
|
product_enum.save
|
45
49
|
product_enum.product = Products::Silver
|
46
50
|
product_enum.product_changed?.should be(false)
|
47
51
|
end
|
48
|
-
|
52
|
+
|
49
53
|
it "should validate enum-value" do
|
50
54
|
enum_mixin = ClassWithEnum.new
|
51
55
|
platin = "Platin"
|
@@ -54,7 +58,7 @@ describe "HazEnum" do
|
|
54
58
|
enum_mixin.valid?.should_not be(true)
|
55
59
|
enum_mixin.errors[:product].size.should > 0
|
56
60
|
end
|
57
|
-
|
61
|
+
|
58
62
|
after(:all) do
|
59
63
|
teardown_db
|
60
64
|
end
|