From 9346e6a859056ed5a161746f604602f321fbdb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20B=C3=B6ttger?= Date: Sun, 12 Oct 2014 15:46:11 +0200 Subject: [PATCH] instance-based events inspection now returns event instances (instead of the event names as symbol) --- CHANGELOG.md | 1 + README.md | 2 +- README_FROM_VERSION_3_TO_4.md | 22 ++++++++++++++++++++++ lib/aasm/instance_base.rb | 6 +++--- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9b835e..8a78499 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ * **DSL change**: `:on_transition` renamed to `:after` * **DSL change**: `:on_transition` renamed to `:after` * **DSL change**: transition `:after` binding changed (see [issue #59](https://github.com/aasm/aasm/issues/59), thanks to [@stiff](https://github.com/stiff)) + * **DSL change**: instance-based events inspection now returns event instances (instead of the event names as symbol) ## 3.9.0 (not yet released) diff --git a/README.md b/README.md index a66d359..6e147c1 100644 --- a/README.md +++ b/README.md @@ -597,7 +597,7 @@ job.aasm.states(:permissible => true).map(&:name) => [:cleaning, :sleeping] # show all possible (triggerable) events (allowed by transitions) -job.aasm.events +job.aasm.events.map(&:name) => [:sleep] ``` diff --git a/README_FROM_VERSION_3_TO_4.md b/README_FROM_VERSION_3_TO_4.md index e288e71..192cdb2 100644 --- a/README_FROM_VERSION_3_TO_4.md +++ b/README_FROM_VERSION_3_TO_4.md @@ -104,6 +104,28 @@ class Job < ActiveRecord::Base end ``` + +### Instance-level inspection + +Listing events for the current state now returns Event objects instead of event names (as symbols). So, change from + +```ruby +job = Job.new + +job.aasm.events +# => [:run] +``` + +to + +```ruby +job = Job.new + +job.aasm.events.map(&:name) +# => [:run] +``` + + ## Could ### Triggering an event without _to_state_ diff --git a/lib/aasm/instance_base.rb b/lib/aasm/instance_base.rb index b0ee17e..ad62ed5 100644 --- a/lib/aasm/instance_base.rb +++ b/lib/aasm/instance_base.rb @@ -35,7 +35,8 @@ module AASM def states(options={}) if options[:permissible] # ugliness level 1000 - transitions = @instance.class.aasm.events.values_at(*permissible_events).compact.map {|e| e.transitions_from_state(current_state) } + permissible_event_names = permissible_events.map(&:name) + transitions = @instance.class.aasm.events.values_at(*permissible_event_names).compact.map {|e| e.transitions_from_state(current_state) } tos = transitions.map {|t| t[0] ? t[0].to : nil}.flatten.compact.map(&:to_sym).uniq @instance.class.aasm.states.select {|s| tos.include?(s.name.to_sym)} else @@ -47,14 +48,13 @@ module AASM # QUESTION: shouldn't events return objects instead of strings? def events(state=current_state) events = @instance.class.aasm.events.values.select {|e| e.transitions_from_state?(state) } - events.map {|e| e.name} end # filters the results of events_for_current_state so that only those that # are really currently possible (given transition guards) are shown. # QUESTION: what about events.permissible ? def permissible_events - events.select{ |e| @instance.send(("may_" + e.to_s + "?").to_sym) } + events.select{ |e| @instance.send("may_#{e.name}?") } end def state_object_for_name(name)