simpler_workflow 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - jruby-18mode # JRuby in 1.8 mode
7
+ - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in simpler_workflow.gemspec
4
4
  gemspec
5
+
6
+ platforms :jruby do
7
+ gem 'jruby-openssl'
8
+ end
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # SimplerWorkflow
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/SnuggHome/simpler_workflow.png)](http://travis-ci.org/SnuggHome/simpler_workflow)
4
+
3
5
  A wrapper around Amazon's Simple Workflow Service meant to simplify declaring and using activities and workflow. Provides some sane defaults
4
6
  and work around some idiosyncracies of the platform.
5
7
 
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+
7
+ task :default => :spec
8
+
data/ext/mkrf_conf.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'rubygems/command.rb'
3
+ require 'rubygems/dependency_installer.rb'
4
+
5
+ begin
6
+ Gem::Command.build_args = ARGV
7
+ rescue NoMethodError
8
+ end
9
+
10
+ inst = Gem::DependencyInstaller.new
11
+ begin
12
+ if RUBY_VERSION < "1.9"
13
+ inst.install "ruby-debug", "~> 0.10.3"
14
+ else
15
+ inst.install "ruby-debug19", "~> 0.11.24"
16
+ end
17
+
18
+ if RUBY_PLATFORM =~ /java/i
19
+ inst.install "jruby-openssl"
20
+ end
21
+ rescue
22
+ exit(1)
23
+ end
24
+
25
+ f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w") # create dummy rakefile to indicate success
26
+ f.write("task :default\n")
27
+ f.closeeset
@@ -1,4 +1,5 @@
1
1
  require 'aws-sdk'
2
+ require 'map'
2
3
 
3
4
  module SimplerWorkflow
4
5
  def SimplerWorkflow.domain(domain_name)
@@ -92,6 +92,15 @@ module SimplerWorkflow
92
92
  end
93
93
  end
94
94
  end
95
+
96
+ def poll_for_single_task
97
+ logger.info("Polling for single task for #{name}")
98
+ domain.activity_tasks.poll_for_single_task(name.to_s)
99
+ end
100
+
101
+ def count
102
+ domain.activity_tasks.count(name).to_i
103
+ end
95
104
 
96
105
  def self.[](name, version = nil)
97
106
  case name
@@ -1,18 +1,18 @@
1
1
  module SimplerWorkflow
2
2
  class Domain
3
- def initialize(domain_name, retention = 2, &block)
3
+ def initialize(domain_name, retention_period = 2, &block)
4
4
  domain_name = domain_name.to_s
5
5
  @domain = swf.domains[domain_name]
6
- unless swf.domains.include?(@domain)
7
- @domain = swf.domains.create(domain_name, retention) rescue @domain
6
+ unless @domain.exists?
7
+ @domain = swf.domains.create(domain_name, retention_period) rescue @domain
8
8
  end
9
9
 
10
10
  self.instance_eval(&block) if block_given?
11
11
  end
12
12
 
13
- def Domain.domains(domain_name, &block)
13
+ def Domain.domains(domain_name, retention_period = 2, &block)
14
14
  @domains ||= {}
15
- @domains[domain_name] ||= Domain.new(domain_name)
15
+ @domains[domain_name] ||= Domain.new(domain_name, retention_period)
16
16
  @domains[domain_name].instance_eval(&block) if block_given?
17
17
  @domains[domain_name]
18
18
  end
@@ -1,3 +1,3 @@
1
1
  module SimplerWorkflow
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -161,6 +161,7 @@ module SimplerWorkflow
161
161
  def scheduled_event(decision_task, event)
162
162
  decision_task.events.to_a[event.attributes.scheduled_event_id - 1]
163
163
  end
164
+
164
165
  def last_activity(decision_task, event)
165
166
  scheduled_event(decision_task, event).attributes.activity_type
166
167
  end
@@ -168,5 +169,9 @@ module SimplerWorkflow
168
169
  def last_input(decision_task, event)
169
170
  scheduled_event(decision_task, event).attributes.input
170
171
  end
172
+
173
+ def logger
174
+ $logger || Rails.logger
175
+ end
171
176
  end
172
177
  end
@@ -19,4 +19,5 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'map'
20
20
  gem.add_development_dependency 'rake'
21
21
  gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'travis-lint'
22
23
  end
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ module SimplerWorkflow
4
+ describe Domain do
5
+ let(:client) { AWS.config.simple_workflow_client }
6
+
7
+ let(:describe_domain_response) { client.stub_for(:describe_domain) }
8
+ let(:list_domains_response) { client.stub_for(:list_domains) }
9
+
10
+ let(:domain) { SimplerWorkflow.domain("test-domain") }
11
+
12
+ let(:domain_desc) {{
13
+ 'configuration' => { 'workflowExecutionRetentionPeriodInDays' => '2' },
14
+ 'domainInfo' => {
15
+ 'name' => domain.name,
16
+ 'description' => 'desc',
17
+ 'status' => 'REGISTERED',
18
+ },
19
+ }}
20
+
21
+ let(:domains_desc) {
22
+ {
23
+ 'domainInfos' => [
24
+ domain_desc['domainInfo']
25
+ ]
26
+ }
27
+ }
28
+
29
+ before :each do
30
+ describe_domain_response.stub(:data).and_return(domain_desc)
31
+ client.stub(:describe_domain).and_return(describe_domain_response)
32
+ list_domains_response.stub(:data).and_return(domains_desc)
33
+ client.stub(:list_domains).and_return(list_domains_response)
34
+ end
35
+
36
+ context "Getting a handle to the domain without a block" do
37
+ let(:domain_desc) {{
38
+ 'configuration' => { 'workflowExecutionRetentionPeriodInDays' => '2' },
39
+ 'domainInfo' => {
40
+ 'name' => domain.name,
41
+ 'description' => 'desc',
42
+ 'status' => 'REGISTERED',
43
+ },
44
+ }}
45
+
46
+ let(:domain) { SimplerWorkflow::Domain.domains('test-domain')}
47
+
48
+ it "should provide a handle to a domain" do
49
+ domain.should be_a SimplerWorkflow::Domain
50
+ end
51
+
52
+ it "should provide the name" do
53
+ domain.name.should == 'test-domain'
54
+ end
55
+
56
+ it "should have the default retention period" do
57
+ domain.retention_period.should == 2
58
+ end
59
+ end
60
+
61
+ context "Getting a handle to the domain with a custom retention period without a block" do
62
+ let(:domain_desc) {{
63
+ 'configuration' => { 'workflowExecutionRetentionPeriodInDays' => '14' },
64
+ 'domainInfo' => {
65
+ 'name' => domain.name,
66
+ 'description' => 'desc',
67
+ 'status' => 'REGISTERED',
68
+ },
69
+ }}
70
+
71
+ let(:domain) { SimplerWorkflow::Domain.domains('test-domain-14', 14)}
72
+
73
+ it "should provide the domain name" do
74
+ domain.name.should == 'test-domain-14'
75
+ end
76
+
77
+ it "should provide the specified retention period" do
78
+ domain.retention_period.should == 14
79
+ end
80
+ end
81
+
82
+ context "Getting a handle to the domain via the index operator" do
83
+ let(:domain) { SimplerWorkflow::Domain['test-domain-17']}
84
+ let(:domain_desc) {{
85
+ 'configuration' => { 'workflowExecutionRetentionPeriodInDays' => '2' },
86
+ 'domainInfo' => {
87
+ 'name' => domain.name,
88
+ 'description' => 'desc',
89
+ 'status' => 'REGISTERED',
90
+ },
91
+ }}
92
+
93
+ it "should provide the name of the domain" do
94
+ domain.name.should == 'test-domain-17'
95
+ end
96
+
97
+ it "should provide the default retention period" do
98
+ domain.retention_period.should == 2
99
+ end
100
+ end
101
+
102
+ context "Creating a new domain" do
103
+ it "should create a new domain with the default retention period." do
104
+ client.should_receive(:describe_domain).
105
+ with(:name => 'test-domain-15').
106
+ and_raise(AWS::SimpleWorkflow::Errors::UnknownResourceFault)
107
+
108
+ client.should_receive(:register_domain).with(
109
+ :name => 'test-domain-15', :workflow_execution_retention_period_in_days => '2')
110
+
111
+ domain = SimplerWorkflow::Domain.domains('test-domain-15')
112
+ domain.name.should == 'test-domain-15'
113
+ domain.retention_period.should == 2
114
+ end
115
+
116
+ it "should create a new domain with the specified retention period" do
117
+ client.should_receive(:describe_domain).
118
+ with(:name => 'test-domain-16').
119
+ and_raise(AWS::SimpleWorkflow::Errors::UnknownResourceFault)
120
+
121
+ client.should_receive(:register_domain).with(
122
+ :name => 'test-domain-16', :workflow_execution_retention_period_in_days => '7')
123
+
124
+ domain = SimplerWorkflow::Domain.domains('test-domain-16', 7)
125
+ domain.name.should == 'test-domain-16'
126
+ domain.retention_period.should == 7
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimplerWorkflow do
4
+ let(:client) { AWS.config.simple_workflow_client }
5
+
6
+ let(:describe_domain_response) { client.stub_for(:describe_domain) }
7
+ let(:list_domains_response) { client.stub_for(:list_domains) }
8
+
9
+ let(:domain) { SimplerWorkflow.domain("test-domain") }
10
+
11
+ let(:domain_desc) {{
12
+ 'configuration' => { 'workflowExecutionRetentionPeriodInDays' => '2' },
13
+ 'domainInfo' => {
14
+ 'name' => domain.name,
15
+ 'description' => 'desc',
16
+ 'status' => 'REGISTERED',
17
+ },
18
+ }}
19
+
20
+ let(:domains_desc) {
21
+ {
22
+ 'domainInfos' => [
23
+ domain_desc['domainInfo']
24
+ ]
25
+ }
26
+ }
27
+
28
+ context "Referring to a domain" do
29
+ before :each do
30
+ describe_domain_response.stub(:data).and_return(domain_desc)
31
+ client.stub(:describe_domain).and_return(describe_domain_response)
32
+ list_domains_response.stub(:data).and_return(domains_desc)
33
+ client.stub(:list_domains).and_return(list_domains_response)
34
+ end
35
+
36
+ it "should return the domain for the test" do
37
+ domain.should_not be_nil
38
+ domain.should be_a(SimplerWorkflow::Domain)
39
+ end
40
+
41
+ it "should provide the domain name" do
42
+ domain.name.should == "test-domain"
43
+ end
44
+
45
+ it "should show the default retention period" do
46
+ domain.retention_period.should == 2
47
+ end
48
+ end
49
+
50
+ context "getting a handle to the SimpleWorkflow API" do
51
+ let(:swf) { SimplerWorkflow.swf }
52
+ it "should return the SWF handle" do
53
+ swf.should be_a AWS::SimpleWorkflow
54
+ end
55
+
56
+ it "should have the same configuration as AWS" do
57
+ swf.config.should == AWS.config
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,24 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ #
8
+
9
+ require 'simpler_workflow'
10
+
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+
16
+ config.before :each do
17
+ AWS.stub!
18
+ AWS.config(:access_key_id => 'TESTKEY', :secret_access_key => 'TESTSECRET')
19
+ end
20
+ end
21
+
22
+ def stub_list_domains
23
+
24
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simpler_workflow
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Frederic Jean
@@ -15,10 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-24 00:00:00 Z
18
+ date: 2012-07-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ name: aws-sdk
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
22
24
  none: false
23
25
  requirements:
24
26
  - - ~>
@@ -29,12 +31,12 @@ dependencies:
29
31
  - 5
30
32
  - 0
31
33
  version: 1.5.0
32
- name: aws-sdk
33
34
  type: :runtime
34
- prerelease: false
35
- requirement: *id001
35
+ version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ name: map
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
38
40
  none: false
39
41
  requirements:
40
42
  - - ">="
@@ -43,12 +45,12 @@ dependencies:
43
45
  segments:
44
46
  - 0
45
47
  version: "0"
46
- name: map
47
48
  type: :runtime
48
- prerelease: false
49
- requirement: *id002
49
+ version_requirements: *id002
50
50
  - !ruby/object:Gem::Dependency
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ name: rake
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
52
54
  none: false
53
55
  requirements:
54
56
  - - ">="
@@ -57,12 +59,12 @@ dependencies:
57
59
  segments:
58
60
  - 0
59
61
  version: "0"
60
- name: rake
61
62
  type: :development
62
- prerelease: false
63
- requirement: *id003
63
+ version_requirements: *id003
64
64
  - !ruby/object:Gem::Dependency
65
- version_requirements: &id004 !ruby/object:Gem::Requirement
65
+ name: rspec
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
66
68
  none: false
67
69
  requirements:
68
70
  - - ">="
@@ -71,10 +73,22 @@ dependencies:
71
73
  segments:
72
74
  - 0
73
75
  version: "0"
74
- name: rspec
75
76
  type: :development
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: travis-lint
76
80
  prerelease: false
77
- requirement: *id004
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :development
91
+ version_requirements: *id005
78
92
  description: A wrapper around Amazon's Simple Workflow Service
79
93
  email:
80
94
  - fred@snugghome.com
@@ -86,10 +100,13 @@ extra_rdoc_files: []
86
100
 
87
101
  files:
88
102
  - .gitignore
103
+ - .rspec
104
+ - .travis.yml
89
105
  - Gemfile
90
106
  - LICENSE
91
107
  - README.md
92
108
  - Rakefile
109
+ - ext/mkrf_conf.rb
93
110
  - lib/simpler_workflow.rb
94
111
  - lib/simpler_workflow/activity.rb
95
112
  - lib/simpler_workflow/domain.rb
@@ -97,6 +114,9 @@ files:
97
114
  - lib/simpler_workflow/workflow.rb
98
115
  - lib/simpler_workflow/workflow_collection.rb
99
116
  - simpler_workflow.gemspec
117
+ - spec/domain_spec.rb
118
+ - spec/simpler_workflow_spec.rb
119
+ - spec/spec_helper.rb
100
120
  homepage: https://github.com/SnuggHome/simpler_workflow
101
121
  licenses: []
102
122
 
@@ -130,5 +150,7 @@ rubygems_version: 1.8.20
130
150
  signing_key:
131
151
  specification_version: 3
132
152
  summary: A wrapper and DSL around Amazon's Simple Workflow Service with the goal of making it almost pleasant to define workflows.
133
- test_files: []
134
-
153
+ test_files:
154
+ - spec/domain_spec.rb
155
+ - spec/simpler_workflow_spec.rb
156
+ - spec/spec_helper.rb