state_machines-activemodel 0.0.1 → 0.0.2
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/.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
|
+
[](https://travis-ci.org/seuros/state_machines-activemodel)
|
2
|
+
[](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
|