7878 end
7979 end
8080
81- context "when with decorator " do
82- let ( :decorator_module ) do
81+ context "when with value_decorator " do
82+ let ( :decorator ) do
8383 Module . new do
8484 def am_i_choice?
8585 self == "choice"
@@ -88,9 +88,9 @@ def am_i_choice?
8888 end
8989
9090 let ( :model_with_decorator ) do
91- decorator = decorator_module
91+ value_decorator = decorator
9292 Class . new ( TestModel ) do
93- enum_machine :state , %w[ choice in_delivery ] , decorator : decorator
93+ enum_machine :state , %w[ choice in_delivery ] , value_decorator : value_decorator
9494 end
9595 end
9696
@@ -106,6 +106,73 @@ def am_i_choice?
106106 end
107107 end
108108
109+ describe ( "#enum_decorator" ) do
110+ let ( :model ) do
111+ Class . new ( TestModel ) do
112+ enum_machine :state , %w[ choice in_delivery ]
113+ include EnumMachine [ color : { enum : %w[ red green blue ] } ]
114+ end
115+ end
116+
117+ let ( :klass ) do
118+ Class . new ( TestModel ) do
119+ enum_machine :state , %w[ choice in_delivery ]
120+ include EnumMachine [ color : { enum : %w[ red green blue ] } ]
121+ end
122+ end
123+
124+ it "decorates plain class from ar" do
125+ decorating_model = model
126+ decorated_class =
127+ Class . new do
128+ include decorating_model ::STATE . enum_decorator
129+ include decorating_model ::COLOR . enum_decorator
130+ attr_accessor :state , :color
131+ end
132+
133+ decorated_item = decorated_class . new
134+ decorated_item . state = "choice"
135+ decorated_item . color = "red"
136+
137+ expect ( decorated_item . state ) . to be_choice
138+ expect ( decorated_item . color ) . to be_red
139+ expect ( decorated_class ::STATE ::CHOICE ) . to eq "choice"
140+ expect ( decorated_class ::COLOR ::RED ) . to eq "red"
141+ end
142+
143+ it "decorates ar from plain class" do
144+ decorating_class = klass
145+ decorated_model =
146+ Class . new ( TestModel ) do
147+ include decorating_class ::STATE . enum_decorator
148+ include decorating_class ::COLOR . enum_decorator
149+ end
150+
151+ decorated_item = decorated_model . new ( state : "choice" , color : "red" )
152+
153+ expect ( decorated_item . state ) . to be_choice
154+ expect ( decorated_item . color ) . to be_red
155+ expect ( decorated_model ::STATE ::CHOICE ) . to eq "choice"
156+ expect ( decorated_model ::COLOR ::RED ) . to eq "red"
157+ end
158+
159+ it "decorates ar from ar" do
160+ decorating_model = model
161+ decorated_model =
162+ Class . new ( TestModel ) do
163+ include decorating_model ::STATE . enum_decorator
164+ include decorating_model ::COLOR . enum_decorator
165+ end
166+
167+ decorated_item = decorated_model . new ( state : "choice" , color : "red" )
168+
169+ expect ( decorated_item . state ) . to be_choice
170+ expect ( decorated_item . color ) . to be_red
171+ expect ( decorated_model ::STATE ::CHOICE ) . to eq "choice"
172+ expect ( decorated_model ::COLOR ::RED ) . to eq "red"
173+ end
174+ end
175+
109176 it "serialize model" do
110177 Object . const_set ( :TestModelSerialize , model )
111178 m = TestModelSerialize . create ( state : "choice" , color : "wrong" )
@@ -118,30 +185,6 @@ def am_i_choice?
118185 expect ( unserialized_m . color . red? ) . to be ( false )
119186 end
120187
121- it "test decorator" do
122- decorating_model =
123- Class . new ( TestModel ) do
124- enum_machine :state , %w[ choice in_delivery ]
125- include EnumMachine [ color : { enum : %w[ red green blue ] } ]
126- end
127-
128- decorated_klass =
129- Class . new do
130- include decorating_model ::STATE . decorator_module
131- include decorating_model ::COLOR . decorator_module
132- attr_accessor :state , :color
133- end
134-
135- decorated_item = decorated_klass . new
136- decorated_item . state = "choice"
137- decorated_item . color = "red"
138-
139- expect ( decorated_item . state ) . to be_choice
140- expect ( decorated_item . color ) . to be_red
141- expect ( decorated_klass ::STATE ::CHOICE ) . to eq "choice"
142- expect ( decorated_klass ::COLOR ::RED ) . to eq "red"
143- end
144-
145188 it "returns state value by []" do
146189 expect ( model ::STATE [ "in_delivery" ] ) . to eq "in_delivery"
147190 expect ( model ::STATE [ "in_delivery" ] . in_delivery? ) . to be ( true )
0 commit comments