state_machines-activemodel 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/.travis.yml +1 -4
- data/Appraisals +0 -15
- data/Gemfile +2 -1
- data/README.md +5 -2
- data/gemfiles/active_model_3.2.gemfile.lock +6 -6
- data/gemfiles/active_model_4.0.gemfile.lock +6 -6
- data/gemfiles/active_model_4.1.gemfile.lock +5 -5
- data/gemfiles/active_model_edge.gemfile.lock +3 -3
- data/lib/state_machines/integrations/active_model.rb +3 -70
- data/lib/state_machines/integrations/version.rb +1 -1
- data/spec/active_model_spec.rb +162 -0
- data/spec/integration_spec.rb +9 -10
- data/spec/support/helpers.rb +0 -16
- data/state_machines-activemodel.gemspec +1 -1
- metadata +3 -22
- data/.idea/.rakeTasks +0 -7
- data/.idea/cssxfire.xml +0 -9
- data/.idea/encodings.xml +0 -5
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/scopes/scope_settings.xml +0 -5
- data/.idea/state_machine2_activemodel.iml +0 -32
- data/.idea/vcs.xml +0 -7
- data/.idea/workspace.xml +0 -50
- data/gemfiles/active_model_4.0_obs.gemfile +0 -8
- data/gemfiles/active_model_4.0_obs.gemfile.lock +0 -59
- data/gemfiles/active_model_4.1_obs.gemfile +0 -8
- data/gemfiles/active_model_4.1_obs.gemfile.lock +0 -60
- data/gemfiles/active_model_edge_obs.gemfile +0 -8
- data/gemfiles/active_model_edge_obs.gemfile.lock +0 -65
- data/lib/state_machines/integrations/active_model/observer.rb +0 -33
- data/lib/state_machines/integrations/active_model/observer_update.rb +0 -42
- data/spec/observer_spec.rb +0 -519
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5e81550481dde36492aae79d59f69ee5f599927
|
4
|
+
data.tar.gz: 05248350d267f60ad3cb5ed43c89d00c2cd143d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16f73d32b72ebd5ca59bd45676281c87511f915a16968ecb6648ff3409745c49caa1fe25b46c212a742aca1cc3696ea8b0c7954029d27e7eca0af5b154e76fe8
|
7
|
+
data.tar.gz: 087afbda3cff8e922bd1e88d3858e73244ef779ada26903b5ed4f12d2f006fcafc48f4119b76c7c1e6413923c8f8cd6f5dbe33e239a19d8fde3c3c4fbc171741
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -6,14 +6,11 @@ script: bundle exec rake
|
|
6
6
|
rvm:
|
7
7
|
- 1.9.3
|
8
8
|
- 2.0.0
|
9
|
-
- 2.1.
|
9
|
+
- 2.1.2
|
10
10
|
- jruby-19mode
|
11
11
|
- rbx-2
|
12
12
|
gemfile:
|
13
13
|
- gemfiles/active_model_3.2.gemfile
|
14
|
-
- gemfiles/active_model_4.0_obs.gemfile
|
15
14
|
- gemfiles/active_model_4.0.gemfile
|
16
|
-
- gemfiles/active_model_4.1_obs.gemfile
|
17
15
|
- gemfiles/active_model_4.1.gemfile
|
18
|
-
- gemfiles/active_model_edge_obs.gemfile
|
19
16
|
- gemfiles/active_model_edge.gemfile
|
data/Appraisals
CHANGED
@@ -3,30 +3,15 @@ appraise "active_model_3.2" do
|
|
3
3
|
gem "activemodel", "~> 3.2.0"
|
4
4
|
end
|
5
5
|
|
6
|
-
appraise "active_model_4.0_obs" do
|
7
|
-
gem "activemodel", "~> 4.0.0"
|
8
|
-
gem 'rails-observers'
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
6
|
appraise "active_model_4.0" do
|
13
7
|
gem "activemodel", "~> 4.0.0"
|
14
8
|
end
|
15
9
|
|
16
|
-
appraise 'active_model_4.1_obs' do
|
17
|
-
gem 'activemodel', '~> 4.1.0'
|
18
|
-
gem 'rails-observers'
|
19
|
-
end
|
20
10
|
|
21
11
|
appraise 'active_model_4.1' do
|
22
12
|
gem 'activemodel', '~> 4.1.0'
|
23
13
|
end
|
24
14
|
|
25
|
-
appraise 'active_model_edge_obs' do
|
26
|
-
gem 'activemodel', github: 'rails/rails'
|
27
|
-
gem 'rails-observers'
|
28
|
-
end
|
29
|
-
|
30
15
|
appraise 'active_model_edge' do
|
31
16
|
gem 'activemodel', github: 'rails/rails'
|
32
17
|
end
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/seuros/state_machines-activemodel.svg?branch=master)](https://travis-ci.org/seuros/state_machines-activemodel)
|
2
|
+
[![Code Climate](https://codeclimate.com/github/seuros/state_machines-activemodel.png)](https://codeclimate.com/github/seuros/state_machines-activemodel)
|
3
|
+
|
1
4
|
# StateMachines ActiveModel Integration
|
2
5
|
|
3
6
|
The ActiveModel integration is useful for both standalone usage and for providing
|
@@ -9,7 +12,7 @@ observers.
|
|
9
12
|
|
10
13
|
Add this line to your application's Gemfile:
|
11
14
|
|
12
|
-
gem '
|
15
|
+
gem 'state_machines-activemodel'
|
13
16
|
|
14
17
|
And then execute:
|
15
18
|
|
@@ -17,7 +20,7 @@ And then execute:
|
|
17
20
|
|
18
21
|
Or install it yourself as:
|
19
22
|
|
20
|
-
$ gem install
|
23
|
+
$ gem install state_machines-activemodel
|
21
24
|
|
22
25
|
## Usage
|
23
26
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
state_machines-activemodel (0.0.
|
4
|
+
state_machines-activemodel (0.0.2)
|
5
5
|
activemodel (>= 3.2)
|
6
6
|
state_machines
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activemodel (3.2.
|
12
|
-
activesupport (= 3.2.
|
11
|
+
activemodel (3.2.18)
|
12
|
+
activesupport (= 3.2.18)
|
13
13
|
builder (~> 3.0.0)
|
14
|
-
activesupport (3.2.
|
14
|
+
activesupport (3.2.18)
|
15
15
|
i18n (~> 0.6, >= 0.6.4)
|
16
16
|
multi_json (~> 1.0)
|
17
17
|
appraisal (1.0.0)
|
@@ -21,7 +21,7 @@ GEM
|
|
21
21
|
builder (3.0.4)
|
22
22
|
diff-lcs (1.2.5)
|
23
23
|
i18n (0.6.9)
|
24
|
-
multi_json (1.
|
24
|
+
multi_json (1.10.0)
|
25
25
|
rake (10.3.1)
|
26
26
|
rspec (3.0.0.beta2)
|
27
27
|
rspec-core (= 3.0.0.beta2)
|
@@ -35,7 +35,7 @@ GEM
|
|
35
35
|
rspec-mocks (3.0.0.beta2)
|
36
36
|
rspec-support (= 3.0.0.beta2)
|
37
37
|
rspec-support (3.0.0.beta2)
|
38
|
-
state_machines (0.0.
|
38
|
+
state_machines (0.0.2)
|
39
39
|
thor (0.19.1)
|
40
40
|
|
41
41
|
PLATFORMS
|
@@ -1,17 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
state_machines-activemodel (0.0.
|
4
|
+
state_machines-activemodel (0.0.2)
|
5
5
|
activemodel (>= 3.2)
|
6
6
|
state_machines
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activemodel (4.0.
|
12
|
-
activesupport (= 4.0.
|
11
|
+
activemodel (4.0.5)
|
12
|
+
activesupport (= 4.0.5)
|
13
13
|
builder (~> 3.1.0)
|
14
|
-
activesupport (4.0.
|
14
|
+
activesupport (4.0.5)
|
15
15
|
i18n (~> 0.6, >= 0.6.9)
|
16
16
|
minitest (~> 4.2)
|
17
17
|
multi_json (~> 1.3)
|
@@ -25,7 +25,7 @@ GEM
|
|
25
25
|
diff-lcs (1.2.5)
|
26
26
|
i18n (0.6.9)
|
27
27
|
minitest (4.7.5)
|
28
|
-
multi_json (1.
|
28
|
+
multi_json (1.10.0)
|
29
29
|
rake (10.3.1)
|
30
30
|
rspec (3.0.0.beta2)
|
31
31
|
rspec-core (= 3.0.0.beta2)
|
@@ -39,7 +39,7 @@ GEM
|
|
39
39
|
rspec-mocks (3.0.0.beta2)
|
40
40
|
rspec-support (= 3.0.0.beta2)
|
41
41
|
rspec-support (3.0.0.beta2)
|
42
|
-
state_machines (0.0.
|
42
|
+
state_machines (0.0.2)
|
43
43
|
thor (0.19.1)
|
44
44
|
thread_safe (0.3.3)
|
45
45
|
tzinfo (0.3.39)
|
@@ -1,17 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
state_machines-activemodel (0.0.
|
4
|
+
state_machines-activemodel (0.0.2)
|
5
5
|
activemodel (>= 3.2)
|
6
6
|
state_machines
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activemodel (4.1.
|
12
|
-
activesupport (= 4.1.
|
11
|
+
activemodel (4.1.1)
|
12
|
+
activesupport (= 4.1.1)
|
13
13
|
builder (~> 3.1)
|
14
|
-
activesupport (4.1.
|
14
|
+
activesupport (4.1.1)
|
15
15
|
i18n (~> 0.6, >= 0.6.9)
|
16
16
|
json (~> 1.7, >= 1.7.7)
|
17
17
|
minitest (~> 5.1)
|
@@ -39,7 +39,7 @@ GEM
|
|
39
39
|
rspec-mocks (3.0.0.beta2)
|
40
40
|
rspec-support (= 3.0.0.beta2)
|
41
41
|
rspec-support (3.0.0.beta2)
|
42
|
-
state_machines (0.0.
|
42
|
+
state_machines (0.0.2)
|
43
43
|
thor (0.19.1)
|
44
44
|
thread_safe (0.3.3)
|
45
45
|
tzinfo (1.1.0)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: git://github.com/rails/rails.git
|
3
|
-
revision:
|
3
|
+
revision: 595326647405282e9edc6754019945896b1f2fc5
|
4
4
|
specs:
|
5
5
|
activemodel (4.2.0.alpha)
|
6
6
|
activesupport (= 4.2.0.alpha)
|
@@ -15,7 +15,7 @@ GIT
|
|
15
15
|
PATH
|
16
16
|
remote: ../
|
17
17
|
specs:
|
18
|
-
state_machines-activemodel (0.0.
|
18
|
+
state_machines-activemodel (0.0.2)
|
19
19
|
activemodel (>= 3.2)
|
20
20
|
state_machines
|
21
21
|
|
@@ -44,7 +44,7 @@ GEM
|
|
44
44
|
rspec-mocks (3.0.0.beta2)
|
45
45
|
rspec-support (= 3.0.0.beta2)
|
46
46
|
rspec-support (3.0.0.beta2)
|
47
|
-
state_machines (0.0.
|
47
|
+
state_machines (0.0.2)
|
48
48
|
thor (0.19.1)
|
49
49
|
thread_safe (0.3.3)
|
50
50
|
tzinfo (1.1.0)
|
@@ -367,10 +367,10 @@ module StateMachines
|
|
367
367
|
|
368
368
|
@defaults = {}
|
369
369
|
|
370
|
-
# Classes that include ActiveModel::
|
370
|
+
# Classes that include ActiveModel::Validations
|
371
371
|
# will automatically use the ActiveModel integration.
|
372
372
|
def self.matching_ancestors
|
373
|
-
%w(ActiveModel ActiveModel::
|
373
|
+
%w(ActiveModel ActiveModel::Validations)
|
374
374
|
end
|
375
375
|
|
376
376
|
# Adds a validation error to the given object
|
@@ -404,11 +404,6 @@ module StateMachines
|
|
404
404
|
end
|
405
405
|
|
406
406
|
protected
|
407
|
-
# Whether observers are supported in the integration. Only true if
|
408
|
-
# ActiveModel::Observer is available.
|
409
|
-
def supports_observers?
|
410
|
-
defined?(::ActiveModel::Observing) && owner_class <= ::ActiveModel::Observing
|
411
|
-
end
|
412
407
|
|
413
408
|
# Whether validations are supported in the integration. Only true if
|
414
409
|
# the ActiveModel feature is enabled on the owner class.
|
@@ -462,7 +457,6 @@ module StateMachines
|
|
462
457
|
# Build a list of ancestors for the given class to use when
|
463
458
|
# determining which localization key to use for a particular string.
|
464
459
|
def ancestors_for(klass)
|
465
|
-
load_observer_extensions
|
466
460
|
klass.lookup_ancestors
|
467
461
|
end
|
468
462
|
|
@@ -470,10 +464,6 @@ module StateMachines
|
|
470
464
|
def after_initialize
|
471
465
|
super()
|
472
466
|
load_locale
|
473
|
-
if supports_observers?
|
474
|
-
load_observer_extensions
|
475
|
-
add_default_callbacks
|
476
|
-
end
|
477
467
|
end
|
478
468
|
|
479
469
|
# Loads any locale files needed for translating validation errors
|
@@ -485,20 +475,6 @@ module StateMachines
|
|
485
475
|
"#{File.dirname(__FILE__)}/active_model/locale.rb"
|
486
476
|
end
|
487
477
|
|
488
|
-
# Loads extensions to ActiveModel's Observers
|
489
|
-
def load_observer_extensions
|
490
|
-
require 'state_machines/integrations/active_model/observer'
|
491
|
-
require 'state_machines/integrations/active_model/observer_update'
|
492
|
-
end
|
493
|
-
|
494
|
-
# Adds a set of default callbacks that utilize the Observer extensions
|
495
|
-
def add_default_callbacks
|
496
|
-
if supports_observers?
|
497
|
-
callbacks[:before] << Callback.new(:before) { |object, transition| notify(:before, object, transition) }
|
498
|
-
callbacks[:after] << Callback.new(:after) { |object, transition| notify(:after, object, transition) }
|
499
|
-
callbacks[:failure] << Callback.new(:failure) { |object, transition| notify(:after_failure_to, object, transition) }
|
500
|
-
end
|
501
|
-
end
|
502
478
|
|
503
479
|
# Skips defining reader/writer methods since this is done automatically
|
504
480
|
def define_state_accessor
|
@@ -527,14 +503,7 @@ module StateMachines
|
|
527
503
|
# initialization.
|
528
504
|
def add_callback(type, options, &block)
|
529
505
|
options[:terminator] = callback_terminator
|
530
|
-
|
531
|
-
if supports_observers?
|
532
|
-
@callbacks[type == :around ? :before : type].insert(-2, callback = Callback.new(type, options, &block))
|
533
|
-
add_states(callback.known_states)
|
534
|
-
callback
|
535
|
-
else
|
536
|
-
super
|
537
|
-
end
|
506
|
+
super
|
538
507
|
end
|
539
508
|
|
540
509
|
# Configures new states with the built-in humanize scheme
|
@@ -551,43 +520,7 @@ module StateMachines
|
|
551
520
|
end
|
552
521
|
end
|
553
522
|
|
554
|
-
# Notifies observers on the given object that a callback occurred
|
555
|
-
# involving the given transition. This will attempt to call the
|
556
|
-
# following methods on observers:
|
557
|
-
# * <tt>#{type}_#{qualified_event}_from_#{from}_to_#{to}</tt>
|
558
|
-
# * <tt>#{type}_#{qualified_event}_from_#{from}</tt>
|
559
|
-
# * <tt>#{type}_#{qualified_event}_to_#{to}</tt>
|
560
|
-
# * <tt>#{type}_#{qualified_event}</tt>
|
561
|
-
# * <tt>#{type}_transition_#{machine_name}_from_#{from}_to_#{to}</tt>
|
562
|
-
# * <tt>#{type}_transition_#{machine_name}_from_#{from}</tt>
|
563
|
-
# * <tt>#{type}_transition_#{machine_name}_to_#{to}</tt>
|
564
|
-
# * <tt>#{type}_transition_#{machine_name}</tt>
|
565
|
-
# * <tt>#{type}_transition</tt>
|
566
|
-
#
|
567
|
-
# This will always return true regardless of the results of the
|
568
|
-
# callbacks.
|
569
|
-
def notify(type, object, transition)
|
570
|
-
name = self.name
|
571
|
-
event = transition.qualified_event
|
572
|
-
from = transition.from_name || 'nil'
|
573
|
-
to = transition.to_name || 'nil'
|
574
|
-
|
575
|
-
# Machine-specific updates
|
576
|
-
["#{type}_#{event}", "#{type}_transition_#{name}"].each do |event_segment|
|
577
|
-
["_from_#{from}", nil].each do |from_segment|
|
578
|
-
["_to_#{to}", nil].each do |to_segment|
|
579
|
-
object.class.changed if object.class.respond_to?(:changed)
|
580
|
-
object.class.notify_observers('update_with_transition', ObserverUpdate.new([event_segment, from_segment, to_segment].join, object, transition))
|
581
|
-
end
|
582
|
-
end
|
583
|
-
end
|
584
|
-
|
585
|
-
# Generic updates
|
586
|
-
object.class.changed if object.class.respond_to?(:changed)
|
587
|
-
object.class.notify_observers('update_with_transition', ObserverUpdate.new("#{type}_transition", object, transition))
|
588
523
|
|
589
|
-
true
|
590
|
-
end
|
591
524
|
end
|
592
525
|
end
|
593
526
|
end
|
data/spec/active_model_spec.rb
CHANGED
@@ -636,4 +636,166 @@ describe StateMachines::Integrations::ActiveModel do
|
|
636
636
|
assert record.valid?
|
637
637
|
end
|
638
638
|
end
|
639
|
+
|
640
|
+
|
641
|
+
|
642
|
+
context 'WithInternationalization' do
|
643
|
+
before(:each) do
|
644
|
+
I18n.backend = I18n::Backend::Simple.new
|
645
|
+
|
646
|
+
# Initialize the backend
|
647
|
+
I18n.backend.translate(:en, 'activemodel.errors.messages.invalid_transition', :event => 'ignite', :value => 'idling')
|
648
|
+
|
649
|
+
@model = new_model { include ActiveModel::Validations }
|
650
|
+
end
|
651
|
+
|
652
|
+
it 'should_use_defaults' do
|
653
|
+
I18n.backend.store_translations(:en, {
|
654
|
+
:activemodel => {:errors => {:messages => {:invalid_transition => 'cannot %{event}'}}}
|
655
|
+
})
|
656
|
+
|
657
|
+
machine = StateMachines::Machine.new(@model, :action => :save)
|
658
|
+
machine.state :parked, :idling
|
659
|
+
machine.event :ignite
|
660
|
+
|
661
|
+
record = @model.new(:state => 'idling')
|
662
|
+
|
663
|
+
machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
|
664
|
+
assert_equal ['State cannot ignite'], record.errors.full_messages
|
665
|
+
end
|
666
|
+
|
667
|
+
it 'should_allow_customized_error_key' do
|
668
|
+
I18n.backend.store_translations(:en, {
|
669
|
+
:activemodel => {:errors => {:messages => {:bad_transition => 'cannot %{event}'}}}
|
670
|
+
})
|
671
|
+
|
672
|
+
machine = StateMachines::Machine.new(@model, :action => :save, :messages => {:invalid_transition => :bad_transition})
|
673
|
+
machine.state :parked, :idling
|
674
|
+
|
675
|
+
record = @model.new
|
676
|
+
record.state = 'idling'
|
677
|
+
|
678
|
+
machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
|
679
|
+
assert_equal ['State cannot ignite'], record.errors.full_messages
|
680
|
+
end
|
681
|
+
|
682
|
+
it 'should_allow_customized_error_string' do
|
683
|
+
machine = StateMachines::Machine.new(@model, :action => :save, :messages => {:invalid_transition => 'cannot %{event}'})
|
684
|
+
machine.state :parked, :idling
|
685
|
+
|
686
|
+
record = @model.new(:state => 'idling')
|
687
|
+
|
688
|
+
machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
|
689
|
+
assert_equal ['State cannot ignite'], record.errors.full_messages
|
690
|
+
end
|
691
|
+
|
692
|
+
it 'should_allow_customized_state_key_scoped_to_class_and_machine' do
|
693
|
+
I18n.backend.store_translations(:en, {
|
694
|
+
:activemodel => {:state_machines => {:'bar/foo' => {:state => {:states => {:parked => 'shutdown'}}}}}
|
695
|
+
})
|
696
|
+
|
697
|
+
machine = StateMachines::Machine.new(@model)
|
698
|
+
machine.state :parked
|
699
|
+
|
700
|
+
assert_equal 'shutdown', machine.state(:parked).human_name
|
701
|
+
end
|
702
|
+
|
703
|
+
it 'should_allow_customized_state_key_scoped_to_class' do
|
704
|
+
I18n.backend.store_translations(:en, {
|
705
|
+
:activemodel => {:state_machines => {:'bar/foo' => {:states => {:parked => 'shutdown'}}}}
|
706
|
+
})
|
707
|
+
|
708
|
+
machine = StateMachines::Machine.new(@model)
|
709
|
+
machine.state :parked
|
710
|
+
|
711
|
+
assert_equal 'shutdown', machine.state(:parked).human_name
|
712
|
+
end
|
713
|
+
|
714
|
+
it 'should_allow_customized_state_key_scoped_to_machine' do
|
715
|
+
I18n.backend.store_translations(:en, {
|
716
|
+
:activemodel => {:state_machines => {:state => {:states => {:parked => 'shutdown'}}}}
|
717
|
+
})
|
718
|
+
|
719
|
+
machine = StateMachines::Machine.new(@model)
|
720
|
+
machine.state :parked
|
721
|
+
|
722
|
+
assert_equal 'shutdown', machine.state(:parked).human_name
|
723
|
+
end
|
724
|
+
|
725
|
+
it 'should_allow_customized_state_key_unscoped' do
|
726
|
+
I18n.backend.store_translations(:en, {
|
727
|
+
:activemodel => {:state_machines => {:states => {:parked => 'shutdown'}}}
|
728
|
+
})
|
729
|
+
|
730
|
+
machine = StateMachines::Machine.new(@model)
|
731
|
+
machine.state :parked
|
732
|
+
|
733
|
+
assert_equal 'shutdown', machine.state(:parked).human_name
|
734
|
+
end
|
735
|
+
|
736
|
+
it 'should_support_nil_state_key' do
|
737
|
+
I18n.backend.store_translations(:en, {
|
738
|
+
:activemodel => {:state_machines => {:states => {:nil => 'empty'}}}
|
739
|
+
})
|
740
|
+
|
741
|
+
machine = StateMachines::Machine.new(@model)
|
742
|
+
|
743
|
+
assert_equal 'empty', machine.state(nil).human_name
|
744
|
+
end
|
745
|
+
|
746
|
+
it 'should_allow_customized_event_key_scoped_to_class_and_machine' do
|
747
|
+
I18n.backend.store_translations(:en, {
|
748
|
+
:activemodel => {:state_machines => {:'bar/foo' => {:state => {:events => {:park => 'stop'}}}}}
|
749
|
+
})
|
750
|
+
|
751
|
+
machine = StateMachines::Machine.new(@model)
|
752
|
+
machine.event :park
|
753
|
+
|
754
|
+
assert_equal 'stop', machine.event(:park).human_name
|
755
|
+
end
|
756
|
+
|
757
|
+
it 'should_allow_customized_event_key_scoped_to_class' do
|
758
|
+
I18n.backend.store_translations(:en, {
|
759
|
+
:activemodel => {:state_machines => {:'bar/foo' => {:events => {:park => 'stop'}}}}
|
760
|
+
})
|
761
|
+
|
762
|
+
machine = StateMachines::Machine.new(@model)
|
763
|
+
machine.event :park
|
764
|
+
|
765
|
+
assert_equal 'stop', machine.event(:park).human_name
|
766
|
+
end
|
767
|
+
|
768
|
+
it 'should_allow_customized_event_key_scoped_to_machine' do
|
769
|
+
I18n.backend.store_translations(:en, {
|
770
|
+
:activemodel => {:state_machines => {:state => {:events => {:park => 'stop'}}}}
|
771
|
+
})
|
772
|
+
|
773
|
+
machine = StateMachines::Machine.new(@model)
|
774
|
+
machine.event :park
|
775
|
+
|
776
|
+
assert_equal 'stop', machine.event(:park).human_name
|
777
|
+
end
|
778
|
+
|
779
|
+
it 'should_allow_customized_event_key_unscoped' do
|
780
|
+
I18n.backend.store_translations(:en, {
|
781
|
+
:activemodel => {:state_machines => {:events => {:park => 'stop'}}}
|
782
|
+
})
|
783
|
+
|
784
|
+
machine = StateMachines::Machine.new(@model)
|
785
|
+
machine.event :park
|
786
|
+
|
787
|
+
assert_equal 'stop', machine.event(:park).human_name
|
788
|
+
end
|
789
|
+
|
790
|
+
it 'should_only_add_locale_once_in_load_path' do
|
791
|
+
assert_equal 1, I18n.load_path.select { |path| path =~ %r{active_model/locale\.rb$} }.length
|
792
|
+
|
793
|
+
# Create another ActiveModel model that will triger the i18n feature
|
794
|
+
new_model
|
795
|
+
|
796
|
+
assert_equal 1, I18n.load_path.select { |path| path =~ %r{active_model/locale\.rb$} }.length
|
797
|
+
end
|
798
|
+
|
799
|
+
end
|
800
|
+
|
639
801
|
end
|