jeanmartin-aasm 2.1.1

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/CHANGELOG ADDED
@@ -0,0 +1,33 @@
1
+ * In AR persistence, move state column from class level variables into the StateMachine object for the class
2
+
3
+ * allowed :to array and :on_transition callback [Kevin Triplett]
4
+
5
+ * Support enter and exit actions on states
6
+
7
+ * Use named_scope in AR persistence layer, if available [Jan De Poorter]
8
+
9
+ * Incremented version number
10
+
11
+ * Cleaned up aasm_states_for_select to return the value as a string
12
+
13
+ * Specs and bug fixes for the ActiveRecordPersistence, keeping persistence columns in sync
14
+ Allowing for nil values in states for active record
15
+ Only set state to default state before_validation_on_create
16
+ New rake task to uninstall, build and reinstall the gem (useful for development)
17
+ Changed scott's email address to protect it from spambots when publishing rdocs
18
+ New non-(!) methods that allow for firing events without persisting [Jeff Dean]
19
+
20
+ * Added aasm_states_for_select that will return a select friendly collection of states.
21
+
22
+ * Add some event callbacks, #aasm_event_fired(from, to), and #aasm_event_failed(event)
23
+ Based on transition logging suggestion [Artem Vasiliev] and timestamp column suggestion [Mike Ferrier]
24
+
25
+ * Add #aasm_events_for_state and #aasm_events_for_current_state [Joao Paulo Lins]
26
+
27
+ * Ensure that a state is written for a new record even if aasm_current_state or
28
+ {state}= are never called.
29
+
30
+ * Fix AR persistence so new records have their state set. [Joao Paulo Lins]
31
+
32
+ * Make #event! methods return a boolean [Joel Chippindale]
33
+
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Scott Barron
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,122 @@
1
+ = AASM - Ruby state machines
2
+
3
+ This package contains AASM, a library for adding finite state machines to Ruby classes.
4
+
5
+ AASM started as the acts_as_state_machine plugin but has evolved into a more generic library that no longer targets only ActiveRecord models.
6
+
7
+ AASM has the following features:
8
+
9
+ * States
10
+ * Machines
11
+ * Events
12
+ * Transitions
13
+
14
+ == New Callbacks
15
+
16
+ The callback chain & order on a successful event looks like:
17
+
18
+ oldstate:exit*
19
+ event:before
20
+ __find transition, if possible__
21
+ transition:on_transition*
22
+ oldstate:before_exit
23
+ newstate:before_enter
24
+ newstate:enter*
25
+ __update state__
26
+ event:success*
27
+ oldstate:after_exit
28
+ oldstate:after_enter
29
+ event:after
30
+ obj:aasm_event_fired*
31
+
32
+ (*) marks old callbacks
33
+
34
+
35
+ == Download
36
+
37
+ The latest AASM can currently be pulled from the git repository on github.
38
+
39
+ * http://github.com/ttilley/aasm/tree/master
40
+
41
+
42
+ == Installation
43
+
44
+ === From GitHub hosted gems
45
+
46
+ % sudo gem sources -a http://gems.github.com # (you only need to do this once)
47
+ % sudo gem install ttilley-aasm
48
+
49
+ === Building your own gems
50
+
51
+ % rake gem
52
+ % sudo gem install pkg/aasm-2.1.gem
53
+
54
+
55
+ == Simple Example
56
+
57
+ Here's a quick example highlighting some of the features.
58
+
59
+ class Conversation
60
+ include AASM
61
+
62
+ aasm_initial_state :unread
63
+
64
+ aasm_state :unread
65
+ aasm_state :read
66
+ aasm_state :closed
67
+
68
+
69
+ aasm_event :view do
70
+ transitions :to => :read, :from => [:unread]
71
+ end
72
+
73
+ aasm_event :close do
74
+ transitions :to => :closed, :from => [:read, :unread]
75
+ end
76
+ end
77
+
78
+ == A Slightly More Complex Example
79
+
80
+ This example uses a few of the more complex features available.
81
+
82
+ class Relationship
83
+ include AASM
84
+
85
+ aasm_initial_state Proc.new { |relationship| relationship.strictly_for_fun? ? :intimate : :dating }
86
+
87
+ aasm_state :dating, :enter => :make_happy, :exit => :make_depressed
88
+ aasm_state :intimate, :enter => :make_very_happy, :exit => :never_speak_again
89
+ aasm_state :married, :enter => :give_up_intimacy, :exit => :buy_exotic_car_and_wear_a_combover
90
+
91
+ aasm_event :get_intimate do
92
+ transitions :to => :intimate, :from => [:dating], :guard => :drunk?
93
+ end
94
+
95
+ aasm_event :get_married do
96
+ transitions :to => :married, :from => [:dating, :intimate], :guard => :willing_to_give_up_manhood?
97
+ end
98
+
99
+ def strictly_for_fun?; end
100
+ def drunk?; end
101
+ def willing_to_give_up_manhood?; end
102
+ def make_happy; end
103
+ def make_depressed; end
104
+ def make_very_happy; end
105
+ def never_speak_again; end
106
+ def give_up_intimacy; end
107
+ def buy_exotic_car_and_wear_a_combover; end
108
+ end
109
+
110
+ = Other Stuff
111
+
112
+ Author:: Scott Barron <scott at elitists dot net>
113
+ License:: Original code Copyright 2006, 2007, 2008 by Scott Barron.
114
+ Released under an MIT-style license. See the LICENSE file
115
+ included in the distribution.
116
+
117
+ == Warranty
118
+
119
+ This software is provided "as is" and without any express or
120
+ implied warranties, including, without limitation, the implied
121
+ warranties of merchantibility and fitness for a particular
122
+ purpose.
data/Rakefile ADDED
@@ -0,0 +1,95 @@
1
+ # Copyright 2008 Scott Barron (scott@elitists.net)
2
+ # All rights reserved
3
+
4
+ # This file may be distributed under an MIT style license.
5
+ # See MIT-LICENSE for details.
6
+
7
+ begin
8
+ require 'rubygems'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/testtask'
11
+ require 'rake/rdoctask'
12
+ require 'spec/rake/spectask'
13
+ rescue Exception
14
+ nil
15
+ end
16
+
17
+ if `ruby -Ilib -raasm -e "print AASM.Version"` =~ /([0-9.]+)$/
18
+ CURRENT_VERSION = $1
19
+ else
20
+ CURRENT_VERSION = '0.0.0'
21
+ end
22
+ $package_version = CURRENT_VERSION
23
+
24
+ PKG_FILES = FileList['[A-Z]*',
25
+ 'lib/**/*.rb',
26
+ 'doc/**/*'
27
+ ]
28
+
29
+ desc 'Generate documentation for the acts as state machine plugin.'
30
+ rd = Rake::RDocTask.new(:rdoc) do |rdoc|
31
+ rdoc.rdoc_dir = 'html'
32
+ rdoc.template = 'doc/jamis.rb'
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = 'AASM'
35
+ rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README.rdoc' << '--title' << 'AASM'
36
+ rdoc.rdoc_files.include('README.rdoc', 'MIT-LICENSE', 'TODO', 'CHANGELOG')
37
+ rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
38
+ end
39
+
40
+ if !defined?(Gem)
41
+ puts "Package target requires RubyGEMs"
42
+ else
43
+ spec = Gem::Specification.new do |s|
44
+ s.name = 'aasm'
45
+ s.version = $package_version
46
+ s.summary = 'State machine mixin for Ruby objects'
47
+ s.description = <<EOF
48
+ AASM is a continuation of the acts as state machine rails plugin, built for plain Ruby objects.
49
+ EOF
50
+
51
+ s.files = PKG_FILES.to_a
52
+ s.require_path = 'lib'
53
+ s.has_rdoc = true
54
+ s.extra_rdoc_files = rd.rdoc_files.reject {|fn| fn =~ /\.rb$/}.to_a
55
+ s.rdoc_options = rd.options
56
+
57
+ s.authors = ['Scott Barron', 'Scott Petersen']
58
+ s.email = 'petersen@dunedain289.com'
59
+ s.homepage = 'http://github.com/dunedain289/aasm'
60
+ end
61
+
62
+ package_task = Rake::GemPackageTask.new(spec) do |pkg|
63
+ pkg.need_zip = true
64
+ pkg.need_tar = true
65
+ end
66
+ end
67
+
68
+ if !defined?(Spec)
69
+ puts "spec and cruise targets require RSpec"
70
+ else
71
+ desc "Run all examples with RCov"
72
+ Spec::Rake::SpecTask.new('cruise') do |t|
73
+ t.spec_files = FileList['spec/**/*.rb']
74
+ t.rcov = true
75
+ t.rcov_opts = ['--exclude', 'spec', '--exclude', 'Library', '--exclude', 'rcov.rb']
76
+ end
77
+
78
+ desc "Run all examples"
79
+ Spec::Rake::SpecTask.new('spec') do |t|
80
+ t.spec_files = FileList['spec/**/*.rb']
81
+ t.rcov = false
82
+ t.spec_opts = ['-cfs']
83
+ end
84
+ end
85
+
86
+ if !defined?(Gem)
87
+ puts "Package target requires RubyGEMs"
88
+ else
89
+ desc "sudo gem uninstall aasm && rake gem && sudo gem install pkg/aasm-3.0.0.gem"
90
+ task :reinstall do
91
+ puts `sudo gem uninstall aasm && rake gem && sudo gem install pkg/aasm-3.0.0.gem`
92
+ end
93
+ end
94
+
95
+ task :default => [:spec]
data/TODO ADDED
@@ -0,0 +1,9 @@
1
+ Before Next Release:
2
+
3
+ * Add #aasm_next_state_for_event
4
+ * Add #aasm_next_states_for_event
5
+
6
+ Cool ideas from users:
7
+
8
+ * Support multiple state machines on one object (Chris Nelson)
9
+ * http://justbarebones.blogspot.com/2007/11/actsasstatemachine-enhancements.html (Chetan Patil)