bumbleworks 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bumbleworks (0.0.4)
4
+ bumbleworks (0.0.6)
5
5
  ruote
6
6
 
7
7
  GEM
data/bumbleworks.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Bumbleworks::VERSION
9
9
  spec.authors = ["Maher Hawash", "Ravi Gadad", "Laurie Kemmerer", "David Miller"]
10
10
  spec.email = ["mhawash@renewfund.com", "ravi@renewfund.com", "laurie@renewfund.com", "dave.miller@renewfund.com"]
11
- spec.description = %q{Bumbleworks adds a workflow engine (via ruote[http://github.com/jmettraux/ruote] to your application.}
11
+ spec.description = %q{Bumbleworks adds a workflow engine (via ruote[http://github.com/jmettraux/ruote]) to your application.}
12
12
  spec.summary = %q{Framework around ruote[http://github.com/jmettraux/ruote] workflow engine}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
data/lib/bumbleworks.rb CHANGED
@@ -25,8 +25,10 @@ module Bumbleworks
25
25
  def_delegator Bumbleworks::ProcessDefinition, :define, :define_process
26
26
 
27
27
  # @public
28
- # Returns the global configuration, or initializes a new
29
- # configuration object if it doesn't exist yet.
28
+ # Returns the global configuration, or initializes a new configuration
29
+ # object if it doesn't exist yet. If initializing new config, also adds
30
+ # default storage adapters.
31
+ #
30
32
  def configuration
31
33
  @configuration ||= begin
32
34
  configuration = Bumbleworks::Configuration.new
@@ -42,7 +44,7 @@ module Bumbleworks
42
44
  end
43
45
 
44
46
  # @public
45
- # Yields the global configurtion to a block.
47
+ # Yields the global configuration to a block.
46
48
  # @yield [configuration] global configuration
47
49
  #
48
50
  # @example
@@ -69,8 +71,8 @@ module Bumbleworks
69
71
 
70
72
  # @public
71
73
  # Accepts a block for registering participants which
72
- # is envoked when start! is called. Notice that a
73
- # 'catchall' storage participant is always added to
74
+ # is envoked when start! is called. Note that a
75
+ # 'catchall Ruote::StorageParticipant' is always added to
74
76
  # the end of the list (unless it is defined in the block).
75
77
  #
76
78
  # @example
@@ -84,8 +86,11 @@ module Bumbleworks
84
86
  end
85
87
 
86
88
  # @public
87
- # Starts a Ruote engine, sets up the storage and registers participants
88
- # and process_definitions with the Ruote engine.
89
+ # Registers participants and process_definitions with the Ruote engine.
90
+ # Also calls Bumbleworks::Ruote.dashboard for the first time, which
91
+ # implicitly instantiates the storage, and might start a worker (if
92
+ # configuration.autostart_worker is true)
93
+ #
89
94
  def start!
90
95
  autoload_and_register_participants
91
96
  load_process_definitions
@@ -93,18 +98,18 @@ module Bumbleworks
93
98
 
94
99
  # @public
95
100
  # Resets Bumbleworks - clears configuration and setup variables, and
96
- # shuts down the dashboard.
101
+ # also resets the dashboard.
102
+ #
97
103
  def reset!
98
104
  @configuration = nil
99
105
  @participant_block = nil
100
- @registered_process_definitions = nil
101
106
  Bumbleworks::Ruote.reset!
102
107
  end
103
108
 
104
109
  # @public
105
- # Launches the workflow engine with the specified process name.
106
- # The process_definiton_name should already be registered with
107
- # Bumbleworks.
110
+ # Launches the process definition with the given process name, as long as
111
+ # that definition name is already registered with Bumbleworks.
112
+ #
108
113
  def launch!(process_definition_name, options = {})
109
114
  Bumbleworks::Ruote.launch(process_definition_name, options)
110
115
  end
@@ -1,7 +1,7 @@
1
1
  module Bumbleworks
2
- # Stores configruation information
2
+ # Stores configuration information
3
3
  #
4
- # Configruation inforamtion is loaded from a configuration block defined within
4
+ # Configuration information is loaded from a configuration block defined within
5
5
  # the client application.
6
6
  #
7
7
  # @example Standard settings
@@ -33,31 +33,29 @@ module Bumbleworks
33
33
  # /participants
34
34
  # /app/participants
35
35
  #
36
- # default: non, must be specified
36
+ # default: none, must be specified
37
37
  # Exceptions: raises Bumbleworks::UndefinedSetting if not defined by the client
38
38
  #
39
39
  define_setting :root
40
40
 
41
41
  # Path to the folder which holds the ruote definition files. Bumbleworks
42
- # will autoload all definition files by recursively traversing the directory
43
- # tree under this folder. No specific loading order is guranteed
42
+ # will load all definition files by recursively traversing the directory
43
+ # tree under this folder. No specific loading order is guaranteed
44
44
  #
45
45
  # default: ${Bumbleworks.root}/lib/process_definitions
46
46
  define_setting :definitions_directory
47
47
 
48
48
  # Path to the folder which holds the ruote participant files. Bumbleworks
49
- # will autoload all participant files by recursively traversing the directory
50
- # tree under this folder. No specific loading order is guranteed
51
- #
52
- # Bumbleworks will guarantee that these files are autoloaded before registration
53
- # of participants.
49
+ # will recursively traverse the directory tree under this folder and ensure
50
+ # that all found files are autoloaded before registration of participants.
54
51
  #
55
52
  # default: ${Bumbleworks.root}/participants then ${Bumbleworks.root}/app/participants
56
53
  define_setting :participants_directory
57
54
 
58
- # Bumbelworks requires a dedicated key-value storage for process information. Two
59
- # storage solutions are currently supported: Redis and Sequel. You can set the storage
60
- # as follows:
55
+ # Bumbleworks requires a dedicated key-value storage for process information. Three
56
+ # storage solutions are currently supported: Hash, Redis and Sequel. The latter
57
+ # two require the bumbleworks-redis and bumbleworks-sequel gems, respectively.
58
+ # You can set the storage as follows:
61
59
  #
62
60
  # @Exammple: Redis
63
61
  # Bumbleworks.storage = Redis.new(:host => '127.0.0.1', :db => 0, :thread_safe => true)
@@ -96,10 +94,10 @@ module Bumbleworks
96
94
  @participants_folder ||= default_participant_directory
97
95
  end
98
96
 
99
- # Root folder where bumbleworks looks for ruote assets (participants,
100
- # process_definitions, ..etc.) The root path must be absolute.
101
- # It can be defined throguh a configuration block:
102
- # Bumbleworks.configure {|c| c.root = '/somewhere'}
97
+ # Root folder where Bumbleworks looks for ruote assets (participants,
98
+ # process_definitions, etc.) The root path must be absolute.
99
+ # It can be defined through a configuration block:
100
+ # Bumbleworks.configure { |c| c.root = '/somewhere' }
103
101
  #
104
102
  # Or directly:
105
103
  # Bumbleworks.root = '/somewhere/else/'
@@ -126,15 +124,13 @@ module Bumbleworks
126
124
  end
127
125
 
128
126
  # Add a storage adapter to the set of possible adapters. Takes an object
129
- # that responds to `driver`, `use?(storage)`, and `display_name`.
127
+ # that responds to `driver`, `use?`, `storage_class`, and `display_name`.
130
128
  #
131
- def add_storage_adapter(storage_adapter)
132
- raise ArgumentError, "#{storage_adapter} is not a Bumbleworks storage adapter" unless
133
- storage_adapter.respond_to?(:driver) &&
134
- storage_adapter.respond_to?(:use?) &&
135
- storage_adapter.respond_to?(:display_name)
129
+ def add_storage_adapter(adapter)
130
+ raise ArgumentError, "#{adapter} is not a Bumbleworks storage adapter" unless
131
+ [:driver, :use?, :storage_class, :display_name].all? { |m| adapter.respond_to?(m) }
136
132
 
137
- @storage_adapters << storage_adapter
133
+ @storage_adapters << adapter
138
134
  @storage_adapters
139
135
  end
140
136
 
@@ -2,12 +2,14 @@ require 'bumbleworks/storage_adapter'
2
2
 
3
3
  module Bumbleworks
4
4
  class HashStorage < Bumbleworks::StorageAdapter
5
- def self.driver
6
- ::Ruote::HashStorage
7
- end
5
+ class << self
6
+ def driver
7
+ ::Ruote::HashStorage
8
+ end
8
9
 
9
- def self.display_name
10
- 'Hash'
10
+ def storage_class
11
+ Hash
12
+ end
11
13
  end
12
14
  end
13
15
  end
@@ -12,12 +12,16 @@ module Bumbleworks
12
12
  end
13
13
 
14
14
  def use?(storage)
15
- storage.class.name =~ /^#{display_name}/
15
+ storage.is_a? storage_class
16
16
  end
17
17
 
18
- def display_name
18
+ def storage_class
19
19
  raise "Subclass responsibility"
20
20
  end
21
+
22
+ def display_name
23
+ storage_class.name
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -1,3 +1,3 @@
1
1
  module Bumbleworks
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -110,7 +110,7 @@ describe Bumbleworks::Configuration do
110
110
  describe '#add_storage_adapter' do
111
111
  it 'adds storage adapter to registered list' do
112
112
  GoodForNothingStorage = OpenStruct.new(
113
- :driver => nil, :display_name => 'Dummy', :use? => true
113
+ :driver => nil, :storage_class => 'Dummy', :display_name => 'Dummy', :use? => true
114
114
  )
115
115
  configuration.storage_adapters.should be_empty
116
116
  configuration.add_storage_adapter(GoodForNothingStorage)
@@ -17,8 +17,15 @@ describe Bumbleworks::StorageAdapter do
17
17
  end
18
18
 
19
19
  describe '.display_name' do
20
+ it 'returns storage class name as a string' do
21
+ described_class.stub(:storage_class).and_return(String)
22
+ described_class.display_name.should == 'String'
23
+ end
24
+ end
25
+
26
+ describe '.storage_class' do
20
27
  it 'is a subclass responsibility' do
21
- expect { described_class.display_name }.to raise_error
28
+ expect { described_class.storage_class }.to raise_error
22
29
  end
23
30
  end
24
31
 
@@ -30,10 +37,10 @@ describe Bumbleworks::StorageAdapter do
30
37
 
31
38
  describe '.use?' do
32
39
  before :each do
33
- described_class.stub(:display_name).and_return('String')
40
+ described_class.stub(:storage_class).and_return(String)
34
41
  end
35
42
 
36
- it 'returns true if argument class name matches display name' do
43
+ it 'returns true if argument class is_a storage class' do
37
44
  described_class.use?('a string').should be_true
38
45
  described_class.use?(:not_a_string).should be_false
39
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bumbleworks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -142,7 +142,7 @@ dependencies:
142
142
  - - ! '>='
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
- description: Bumbleworks adds a workflow engine (via ruote[http://github.com/jmettraux/ruote]
145
+ description: Bumbleworks adds a workflow engine (via ruote[http://github.com/jmettraux/ruote])
146
146
  to your application.
147
147
  email:
148
148
  - mhawash@renewfund.com
@@ -217,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
217
  version: '0'
218
218
  segments:
219
219
  - 0
220
- hash: 3704003548247520954
220
+ hash: -3888661442558670334
221
221
  required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  none: false
223
223
  requirements:
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  version: '0'
227
227
  segments:
228
228
  - 0
229
- hash: 3704003548247520954
229
+ hash: -3888661442558670334
230
230
  requirements: []
231
231
  rubyforge_project:
232
232
  rubygems_version: 1.8.23