aasm-bang 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ == 0.1.0
2
+ * Initial release
@@ -0,0 +1,22 @@
1
+ The MIT LICENSE
2
+
3
+ Copyright (c) 2011 Wegowise Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,7 @@
1
+ Description
2
+ ===========
3
+ Adds a bang method to aasm events!
4
+
5
+ Todo
6
+ ====
7
+ Tests!
@@ -0,0 +1,39 @@
1
+ require 'rake'
2
+ require 'fileutils'
3
+
4
+ def gemspec_name
5
+ @gemspec_name ||= Dir['*.gemspec'][0]
6
+ end
7
+
8
+ def gemspec
9
+ @gemspec ||= eval(File.read(gemspec_name), binding, gemspec_name)
10
+ end
11
+
12
+ desc "Build the gem"
13
+ task :gem=>:gemspec do
14
+ sh "gem build #{gemspec_name}"
15
+ FileUtils.mkdir_p 'pkg'
16
+ FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
17
+ end
18
+
19
+ desc "Install the gem locally"
20
+ task :install => :gem do
21
+ sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
22
+ end
23
+
24
+ desc "Generate the gemspec"
25
+ task :generate do
26
+ puts gemspec.to_ruby
27
+ end
28
+
29
+ desc "Validate the gemspec"
30
+ task :gemspec do
31
+ gemspec.validate
32
+ end
33
+
34
+ desc 'Run tests'
35
+ task :test do |t|
36
+ sh 'rspec spec'
37
+ end
38
+
39
+ task :default => :test
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'rubygems' unless defined? Gem
3
+ require File.dirname(__FILE__) + "/lib/aasm/bang"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "aasm-bang"
7
+ s.version = AASM::Bang::VERSION
8
+ s.authors = ["Gabriel Horner", "Barun Singh"]
9
+ s.email = "ghorner@wegowise.com, bsingh@wegowise.com"
10
+ s.homepage = "http://wegowise.com"
11
+ s.summary = "Adds a bang aasm event!"
12
+ s.description = "Ever wanted an aasm event with an extra bang? Well ... now you can!"
13
+ s.required_rubygems_version = ">= 1.3.5"
14
+ s.add_dependency 'aasm', '>= 2.2.0'
15
+ s.files = Dir.glob(%w[{lib,test}/**/*.rb [A-Z]*.{txt,rdoc,md}]) + %w{Rakefile aasm-bang.gemspec}
16
+ s.extra_rdoc_files = ["README.md", "LICENSE.txt"]
17
+ s.license = 'MIT'
18
+ end
@@ -0,0 +1,41 @@
1
+ require 'aasm'
2
+
3
+ module AASM
4
+ module ClassMethods; end
5
+ class TransitionFailure < RuntimeError; end
6
+
7
+ module Bang
8
+ VERSION = '0.1.0'
9
+
10
+ module ClassMethods
11
+ def aasm_bang_event(name, options = {}, &block)
12
+ aasm_event(name, options, &block)
13
+ define_aasm_bang_method(name)
14
+ end
15
+
16
+ def define_aasm_bang_method(name)
17
+ define_method("#{name}!") do |*args|
18
+ options = args[-1].is_a?(Hash) ? args.pop : {}
19
+ if options[:lifecycle] == false
20
+ if send(name)
21
+ self.class.where(:id => self.id).update_all(:updated_at => Time.now, :aasm_state => self.aasm_current_state)
22
+ else
23
+ raise(AASM::TransitionFailure, "cannot transition from '#{self.aasm_current_state}' to '#{name}'")
24
+ end
25
+ else
26
+ old_state = self.aasm_current_state
27
+ aasm_fire_event(name, true, *args) || begin
28
+ if errors.any?
29
+ raise(AASM::TransitionFailure, "record is invalid: #{errors.to_a.inspect}")
30
+ else
31
+ raise(AASM::TransitionFailure, "cannot transition from '#{old_state}' to '#{name}'")
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ ClassMethods.send :include, Bang::ClassMethods
41
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aasm-bang
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Gabriel Horner
9
+ - Barun Singh
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2011-08-12 00:00:00 -04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: aasm
19
+ prerelease: false
20
+ requirement: &id001 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.2.0
26
+ type: :runtime
27
+ version_requirements: *id001
28
+ description: Ever wanted an aasm event with an extra bang? Well ... now you can!
29
+ email: ghorner@wegowise.com, bsingh@wegowise.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files:
35
+ - README.md
36
+ - LICENSE.txt
37
+ files:
38
+ - lib/aasm/bang.rb
39
+ - CHANGELOG.txt
40
+ - LICENSE.txt
41
+ - README.md
42
+ - Rakefile
43
+ - aasm-bang.gemspec
44
+ has_rdoc: true
45
+ homepage: http://wegowise.com
46
+ licenses:
47
+ - MIT
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.3.5
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.6.2
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Adds a bang aasm event!
72
+ test_files: []
73
+