stonepath 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.
Files changed (54) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +26 -0
  3. data/PostInstall.txt +2 -0
  4. data/README.rdoc +58 -0
  5. data/Rakefile +44 -0
  6. data/VERSION +1 -0
  7. data/lib/stonepath/acl/controller.rb +86 -0
  8. data/lib/stonepath/acl/role.rb +53 -0
  9. data/lib/stonepath/acl/state.rb +20 -0
  10. data/lib/stonepath/acl.rb +3 -0
  11. data/lib/stonepath/config.rb +6 -0
  12. data/lib/stonepath/controller_hooks.rb +11 -0
  13. data/lib/stonepath/extensions/activerecordbase.rb +7 -0
  14. data/lib/stonepath/group.rb +9 -0
  15. data/lib/stonepath/role.rb +9 -0
  16. data/lib/stonepath/task.rb +76 -0
  17. data/lib/stonepath/work_bench.rb +11 -0
  18. data/lib/stonepath/work_item.rb +52 -0
  19. data/lib/stonepath/work_owner.rb +11 -0
  20. data/lib/stonepath.rb +50 -0
  21. data/rails_generators/stonepath/stonepath_audit_table_generator.rb +3 -0
  22. data/rails_generators/stonepath/stonepath_task_generator.rb +3 -0
  23. data/script/console +10 -0
  24. data/script/destroy +14 -0
  25. data/script/generate +14 -0
  26. data/stonepath.gemspec +117 -0
  27. data/test/acl_test.rb +17 -0
  28. data/test/app_root/app/controllers/application_controller.rb +2 -0
  29. data/test/app_root/app/models/assignment.rb +11 -0
  30. data/test/app_root/app/models/case.rb +67 -0
  31. data/test/app_root/app/models/user.rb +10 -0
  32. data/test/app_root/config/boot.rb +114 -0
  33. data/test/app_root/config/database.yml +21 -0
  34. data/test/app_root/config/environment.rb +14 -0
  35. data/test/app_root/config/environments/in_memory.rb +0 -0
  36. data/test/app_root/config/environments/mysql.rb +0 -0
  37. data/test/app_root/config/environments/postgresql.rb +0 -0
  38. data/test/app_root/config/environments/sqlite.rb +0 -0
  39. data/test/app_root/config/environments/sqlite3.rb +0 -0
  40. data/test/app_root/config/routes.rb +4 -0
  41. data/test/app_root/db/migrate/01_create_users.rb +15 -0
  42. data/test/app_root/db/migrate/02_create_assignments.rb +13 -0
  43. data/test/app_root/db/migrate/03_create_cases.rb +15 -0
  44. data/test/app_root/lib/console_with_fixtures.rb +4 -0
  45. data/test/app_root/log/.gitignore +1 -0
  46. data/test/app_root/script/console +9 -0
  47. data/test/fixtures/users.yml +7 -0
  48. data/test/group_test.rb +20 -0
  49. data/test/role_test.rb +20 -0
  50. data/test/stonepath_test.rb +11 -0
  51. data/test/test_helper.rb +31 -0
  52. data/test/workitem_test.rb +11 -0
  53. data/test/workowner_test.rb +25 -0
  54. metadata +138 -0
data/stonepath.gemspec ADDED
@@ -0,0 +1,117 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{stonepath}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["David Bock"]
12
+ s.date = %q{2009-12-17}
13
+ s.description = %q{Stateful workflow modeling for Rails}
14
+ s.email = %q{dbock@codesherpas.com}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ "History.txt",
20
+ "Manifest.txt",
21
+ "PostInstall.txt",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/stonepath.rb",
26
+ "lib/stonepath/acl.rb",
27
+ "lib/stonepath/acl/controller.rb",
28
+ "lib/stonepath/acl/role.rb",
29
+ "lib/stonepath/acl/state.rb",
30
+ "lib/stonepath/config.rb",
31
+ "lib/stonepath/controller_hooks.rb",
32
+ "lib/stonepath/extensions/activerecordbase.rb",
33
+ "lib/stonepath/group.rb",
34
+ "lib/stonepath/role.rb",
35
+ "lib/stonepath/task.rb",
36
+ "lib/stonepath/work_bench.rb",
37
+ "lib/stonepath/work_item.rb",
38
+ "lib/stonepath/work_owner.rb",
39
+ "rails_generators/stonepath/stonepath_audit_table_generator.rb",
40
+ "rails_generators/stonepath/stonepath_task_generator.rb",
41
+ "script/console",
42
+ "script/destroy",
43
+ "script/generate",
44
+ "stonepath.gemspec",
45
+ "test/acl_test.rb",
46
+ "test/app_root/app/controllers/application_controller.rb",
47
+ "test/app_root/app/models/assignment.rb",
48
+ "test/app_root/app/models/case.rb",
49
+ "test/app_root/app/models/user.rb",
50
+ "test/app_root/config/boot.rb",
51
+ "test/app_root/config/database.yml",
52
+ "test/app_root/config/environment.rb",
53
+ "test/app_root/config/environments/in_memory.rb",
54
+ "test/app_root/config/environments/mysql.rb",
55
+ "test/app_root/config/environments/postgresql.rb",
56
+ "test/app_root/config/environments/sqlite.rb",
57
+ "test/app_root/config/environments/sqlite3.rb",
58
+ "test/app_root/config/routes.rb",
59
+ "test/app_root/db/migrate/01_create_users.rb",
60
+ "test/app_root/db/migrate/02_create_assignments.rb",
61
+ "test/app_root/db/migrate/03_create_cases.rb",
62
+ "test/app_root/lib/console_with_fixtures.rb",
63
+ "test/app_root/log/.gitignore",
64
+ "test/app_root/script/console",
65
+ "test/fixtures/users.yml",
66
+ "test/group_test.rb",
67
+ "test/role_test.rb",
68
+ "test/stonepath_test.rb",
69
+ "test/test_helper.rb",
70
+ "test/workitem_test.rb",
71
+ "test/workowner_test.rb"
72
+ ]
73
+ s.homepage = %q{http://github.com/bokmann/stonepath}
74
+ s.rdoc_options = ["--charset=UTF-8"]
75
+ s.require_paths = ["lib"]
76
+ s.rubygems_version = %q{1.3.5}
77
+ s.summary = %q{Stonepath: stateful workflow modeling for rails}
78
+ s.test_files = [
79
+ "test/acl_test.rb",
80
+ "test/app_root/app/controllers/application_controller.rb",
81
+ "test/app_root/app/models/assignment.rb",
82
+ "test/app_root/app/models/case.rb",
83
+ "test/app_root/app/models/user.rb",
84
+ "test/app_root/config/boot.rb",
85
+ "test/app_root/config/environment.rb",
86
+ "test/app_root/config/environments/in_memory.rb",
87
+ "test/app_root/config/environments/mysql.rb",
88
+ "test/app_root/config/environments/postgresql.rb",
89
+ "test/app_root/config/environments/sqlite.rb",
90
+ "test/app_root/config/environments/sqlite3.rb",
91
+ "test/app_root/config/routes.rb",
92
+ "test/app_root/db/migrate/01_create_users.rb",
93
+ "test/app_root/db/migrate/02_create_assignments.rb",
94
+ "test/app_root/db/migrate/03_create_cases.rb",
95
+ "test/app_root/lib/console_with_fixtures.rb",
96
+ "test/group_test.rb",
97
+ "test/role_test.rb",
98
+ "test/stonepath_test.rb",
99
+ "test/test_helper.rb",
100
+ "test/workitem_test.rb",
101
+ "test/workowner_test.rb"
102
+ ]
103
+
104
+ if s.respond_to? :specification_version then
105
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
106
+ s.specification_version = 3
107
+
108
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
109
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.0.0"])
110
+ else
111
+ s.add_dependency(%q<activerecord>, [">= 2.0.0"])
112
+ end
113
+ else
114
+ s.add_dependency(%q<activerecord>, [">= 2.0.0"])
115
+ end
116
+ end
117
+
data/test/acl_test.rb ADDED
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+
4
+
5
+ class TestACL < Test::Unit::TestCase
6
+
7
+ def setup
8
+ end
9
+
10
+ context "our sample rails app" do
11
+
12
+ should "include the Group module when declared as a stonepath_group" do
13
+ assert true
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class Assignment < ActiveRecord::Base
2
+ include StonePath
3
+
4
+ stonepath_task
5
+
6
+ task_for :case
7
+ assigns_to :user
8
+
9
+ audits_transitions
10
+
11
+ end
@@ -0,0 +1,67 @@
1
+ class Case < ActiveRecord::Base
2
+ include StonePath
3
+
4
+ stonepath_workitem
5
+
6
+ aasm_initial_state :pending
7
+
8
+ aasm_state :pending
9
+ aasm_state :in_process
10
+ aasm_state :completed
11
+
12
+ aasm_event :complete do
13
+ transitions :to => :completed, :from => :in_process
14
+ end
15
+
16
+ aasm_event :activate do
17
+ transitions :to => :in_process, :from => :pending
18
+ end
19
+
20
+ owned_by :user
21
+ subject_of :assignment
22
+
23
+
24
+
25
+ stonepath_acl do |acl|
26
+
27
+ acl.guard_method :save
28
+ acl.guard_method :name=
29
+ acl.guard_method :name
30
+ acl.guard_method :regarding=
31
+ acl.guard_method :regarding
32
+
33
+ acl.method_group :modifiers, [:save, :name=, :regarding=]
34
+ acl.method_group :accessors, [:name, :regarding]
35
+
36
+ acl.for_state :in_process do |state|
37
+ state.access_for_role :manager do |role|
38
+ role.allow_method :name
39
+ end
40
+
41
+ state.access_for_role :peon do |role|
42
+ role.deny_method :name=
43
+ role.deny_method :regarding=
44
+ end
45
+
46
+ state.access_for_role :assistant_manager do |role|
47
+ role.check_method_access :method_symbol do
48
+ return false
49
+ end
50
+ end
51
+ end
52
+
53
+ acl.for_state :completed do |state|
54
+ state.access_for_role :manager do |role|
55
+ role.deny_method_group :modifiers
56
+ end
57
+
58
+ state.access_for_role :peon do |role|
59
+ role.deny_method_group :modifiers
60
+ role.deny_method_group :accessors
61
+ end
62
+
63
+ end
64
+ end
65
+
66
+
67
+ end
@@ -0,0 +1,10 @@
1
+ class User < ActiveRecord::Base
2
+ include StonePath
3
+
4
+ stonepath_workowner
5
+ workowner_for :case
6
+
7
+ stonepath_workbench
8
+ workbench_for :assignments
9
+
10
+ end
@@ -0,0 +1,114 @@
1
+ # Allow customization of the rails framework path
2
+ RAILS_FRAMEWORK_ROOT = (ENV['RAILS_FRAMEWORK_ROOT'] || "#{File.dirname(__FILE__)}/../../../../../../vendor/rails") unless defined?(RAILS_FRAMEWORK_ROOT)
3
+
4
+ # Don't change this file!
5
+ # Configure your app in config/environment.rb and config/environments/*.rb
6
+
7
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
8
+
9
+ module Rails
10
+ class << self
11
+ def boot!
12
+ unless booted?
13
+ preinitialize
14
+ pick_boot.run
15
+ end
16
+ end
17
+
18
+ def booted?
19
+ defined? Rails::Initializer
20
+ end
21
+
22
+ def pick_boot
23
+ (vendor_rails? ? VendorBoot : GemBoot).new
24
+ end
25
+
26
+ def vendor_rails?
27
+ File.exist?(RAILS_FRAMEWORK_ROOT)
28
+ end
29
+
30
+ def preinitialize
31
+ load(preinitializer_path) if File.exist?(preinitializer_path)
32
+ end
33
+
34
+ def preinitializer_path
35
+ "#{RAILS_ROOT}/config/preinitializer.rb"
36
+ end
37
+ end
38
+
39
+ class Boot
40
+ def run
41
+ load_initializer
42
+ Rails::Initializer.run(:set_load_path)
43
+ end
44
+ end
45
+
46
+ class VendorBoot < Boot
47
+ def load_initializer
48
+ require "#{RAILS_FRAMEWORK_ROOT}/railties/lib/initializer"
49
+ Rails::Initializer.run(:install_gem_spec_stubs)
50
+ end
51
+ end
52
+
53
+ class GemBoot < Boot
54
+ def load_initializer
55
+ self.class.load_rubygems
56
+ load_rails_gem
57
+ require 'initializer'
58
+ end
59
+
60
+ def load_rails_gem
61
+ if version = self.class.gem_version
62
+ gem 'rails', version
63
+ else
64
+ gem 'rails'
65
+ end
66
+ rescue Gem::LoadError => load_error
67
+ $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
68
+ exit 1
69
+ end
70
+
71
+ class << self
72
+ def rubygems_version
73
+ Gem::RubyGemsVersion rescue nil
74
+ end
75
+
76
+ def gem_version
77
+ if defined? RAILS_GEM_VERSION
78
+ RAILS_GEM_VERSION
79
+ elsif ENV.include?('RAILS_GEM_VERSION')
80
+ ENV['RAILS_GEM_VERSION']
81
+ else
82
+ parse_gem_version(read_environment_rb)
83
+ end
84
+ end
85
+
86
+ def load_rubygems
87
+ require 'rubygems'
88
+ min_version = '1.1.1'
89
+ unless rubygems_version >= min_version
90
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
91
+ exit 1
92
+ end
93
+
94
+ rescue LoadError
95
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
96
+ exit 1
97
+ end
98
+
99
+ def parse_gem_version(text)
100
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
101
+ end
102
+
103
+ private
104
+ def read_environment_rb
105
+ environment_rb = "#{RAILS_ROOT}/config/environment.rb"
106
+ environment_rb = "#{HELPER_RAILS_ROOT}/config/environment.rb" unless File.exists?(environment_rb)
107
+ File.read(environment_rb)
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ # All that for this:
114
+ Rails.boot!
@@ -0,0 +1,21 @@
1
+ in_memory:
2
+ adapter: sqlite3
3
+ database: ":memory:"
4
+ verbosity: quiet
5
+ sqlite:
6
+ adapter: sqlite
7
+ dbfile: plugin_test.sqlite.db
8
+ sqlite3:
9
+ adapter: sqlite3
10
+ dbfile: plugin_test.sqlite3.db
11
+ postgresql:
12
+ adapter: postgresql
13
+ username: postgres
14
+ password: postgres
15
+ database: plugin_test
16
+ mysql:
17
+ adapter: mysql
18
+ host: localhost
19
+ username: root
20
+ password:
21
+ database: plugin_test
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), 'boot')
2
+
3
+ Rails::Initializer.run do |config|
4
+ config.cache_classes = false
5
+ config.whiny_nils = true
6
+ config.action_controller.session = { :key => "_myapp_session", :secret => "gwirofjweroijger8924rt2zfwehfuiwehb1378rifowenfoqwphf23" }
7
+ config.plugin_locators.unshift(
8
+ Class.new(Rails::Plugin::Locator) do
9
+ def plugins
10
+ [Rails::Plugin.new(File.expand_path('.'))]
11
+ end
12
+ end
13
+ ) unless defined?(PluginTestHelper::PluginLocator)
14
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.connect ':controller/:action/:id'
3
+ map.connect ':controller/:action/:id.:format'
4
+ end
@@ -0,0 +1,15 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :users do |t|
5
+ t.string :name
6
+ t.string :role
7
+ t.timestamps
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :users
13
+ end
14
+
15
+ end
@@ -0,0 +1,13 @@
1
+ class CreateAssignments < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :assignments do |t|
5
+ t.timestamps
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ drop_table :assignments
11
+ end
12
+
13
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCases < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :cases do |t|
5
+ t.string :name
6
+ t.string :regarding
7
+ t.timestamps
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :cases
13
+ end
14
+
15
+ end
@@ -0,0 +1,4 @@
1
+ # Loads fixtures into the database when running the test app via the console
2
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(Rails.root, '../fixtures/*.{yml,csv}'))).each do |fixture_file|
3
+ Fixtures.create_fixtures(File.join(Rails.root, '../fixtures'), File.basename(fixture_file, '.*'))
4
+ end
@@ -0,0 +1 @@
1
+ *.log
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ irb = 'irb'
4
+ libs = " -r irb/completion"
5
+ libs << " -r test/test_helper"
6
+ libs << " -r console_app"
7
+ libs << " -r console_with_helpers"
8
+ libs << " -r console_with_fixtures"
9
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,7 @@
1
+ Dave:
2
+ name: David Bock
3
+ role: peon
4
+
5
+ Kim:
6
+ name: Kim MacCormack
7
+ role: manager
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+
4
+
5
+ class GroupTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ end
9
+
10
+ should "include the Group module when declared as a stonepath_group" do
11
+ assert Group.included_modules.include?(StonePath::Group)
12
+ end
13
+ end
14
+
15
+
16
+ class Group
17
+ include StonePath
18
+
19
+ stonepath_group
20
+ end
data/test/role_test.rb ADDED
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+
4
+
5
+ class RoleTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ end
9
+
10
+ should "include the Role module when declared as a stonepath_role" do
11
+ assert Role.included_modules.include?(StonePath::Role)
12
+ end
13
+ end
14
+
15
+
16
+ class Role
17
+ include StonePath
18
+
19
+ stonepath_role
20
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class StonepathTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ should "pass without hassle" do
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ # Set the default environment to sqlite3's in_memory database
2
+ ENV['RAILS_ENV'] ||= 'in_memory'
3
+
4
+ require 'rubygems'
5
+ require 'stringio'
6
+ require 'test/unit'
7
+ require 'flexmock/test_unit'
8
+ require 'AASM'
9
+ require File.dirname(__FILE__) + '/../lib/stonepath'
10
+
11
+
12
+ # Load the Rails environment and testing framework
13
+ require "#{File.dirname(__FILE__)}/app_root/config/environment"
14
+ require 'test_help'
15
+ require 'action_view/test_case' # Load additional test classes not done automatically by < Rails 2.2.2
16
+
17
+ require "shoulda"
18
+
19
+ # Undo changes to RAILS_ENV
20
+ silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
21
+
22
+ # Run the migrations
23
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
24
+
25
+ # Set default fixture loading properties
26
+ ActiveSupport::TestCase.class_eval do
27
+ self.use_transactional_fixtures = true
28
+ self.use_instantiated_fixtures = false
29
+ self.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
30
+ end
31
+
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class WorkitemTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ should "not do much of anything yet" do
9
+ c = Case.new
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class WorkownerTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ should "include the WorkOwner module when declared as a stonepath_workowner" do
9
+ assert Workowner.included_modules.include?(StonePath::WorkOwner)
10
+ end
11
+
12
+ should "create a new user successfully" do
13
+ u = User.create
14
+ end
15
+ end
16
+
17
+
18
+ class Workowner < ActiveRecord::Base
19
+ include StonePath
20
+
21
+ stonepath_workowner
22
+
23
+ workowner_for :work_items
24
+
25
+ end