bumbleworks 0.0.4 → 0.0.6

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/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