shared_workforce 0.2.10 → 0.2.11

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/README.markdown CHANGED
@@ -11,13 +11,11 @@ You can view a live demo sandbox app at [http://catsify.herokuapp.com](http://ca
11
11
 
12
12
  The service is currently in private beta and is available as a [Heroku add-on](https://addons.heroku.com/sharedworkforce). You can apply for an invitation at [sharedworkforce.com](http://www.sharedworkforce.com).
13
13
 
14
- Getting started with Heroku
15
- ===========================
16
14
 
17
- Getting started with [Heroku][http://www.heroku.com] takes less than 5 minutes. The best way to get started is to follow the README on the [demo app source code](https://github.com/sharedworkforce/sharedworkforce-demo-rails).
15
+ Getting started
16
+ ===============
18
17
 
19
- Getting started without Heroku
20
- ==============================
18
+ _**Note to Heroku users:** Getting started with [Heroku](http://www.heroku.com]) takes less than 5 minutes. The best way to get started is to follow the README on the [demo app source code](https://github.com/sharedworkforce/sharedworkforce-demo-rails)._
21
19
 
22
20
  ### Step 1 - get an API key
23
21
 
@@ -16,9 +16,8 @@ require 'active_support/inflector'
16
16
  require 'active_support/core_ext/hash/indifferent_access'
17
17
 
18
18
  module SharedWorkforce
19
-
20
- class << self
21
19
 
20
+ class << self
22
21
  attr_writer :configuration
23
22
 
24
23
  def configure
@@ -28,6 +27,10 @@ module SharedWorkforce
28
27
  def configuration
29
28
  @configuration ||= SharedWorkforce::Configuration.new
30
29
  end
30
+
31
+ def logger
32
+ @configuration.logger
33
+ end
31
34
  end
32
-
35
+
33
36
  end
@@ -4,6 +4,8 @@ module SharedWorkforce
4
4
  attr_writer :callback_host
5
5
  attr_writer :callback_path
6
6
  attr_writer :api_key
7
+ attr_writer :logger
8
+
7
9
  attr_accessor :http_end_point
8
10
  attr_accessor :request_class
9
11
 
@@ -28,6 +30,10 @@ module SharedWorkforce
28
30
  @callback_host ||= ENV['SHAREDWORKFORCE_CALLBACK_HOST']
29
31
  end
30
32
 
33
+ def logger
34
+ @logger ||= (rails_logger || default_logger)
35
+ end
36
+
31
37
  private
32
38
 
33
39
  def default_request_class
@@ -43,6 +49,17 @@ module SharedWorkforce
43
49
  TaskRequest::Http
44
50
  end
45
51
  end
46
-
52
+
53
+ def rails_logger
54
+ (defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger) ||
55
+ (defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER.respond_to?(:debug) && RAILS_DEFAULT_LOGGER)
56
+ end
57
+
58
+ def default_logger
59
+ require 'logger'
60
+ l = ::Logger.new($stdout)
61
+ l.level = ::Logger::INFO
62
+ l
63
+ end
47
64
  end
48
65
  end
@@ -15,8 +15,8 @@ module SharedWorkforce
15
15
 
16
16
  def process_response(body)
17
17
  body = JSON.parse(body)
18
- puts "Processing Shared Workforce task callback"
19
- puts body.inspect
18
+ SharedWorkforce.logger.info "Processing Shared Workforce task callback"
19
+ SharedWorkforce.logger.info { body.inspect }
20
20
 
21
21
  raise SecurityTransgression unless valid_api_key?(body['api_key'])
22
22
 
@@ -2,7 +2,11 @@ if defined?(ActionController::Metal)
2
2
  class Railtie < Rails::Railtie
3
3
  initializer 'shared_workforce' do |app|
4
4
  app.config.middleware.use SharedWorkforce::EndPoint
5
- SharedWorkforce::ResponsePoller.start if Rails.env.development?
5
+ if Rails.env.development?
6
+ # Stop log buffering when using Foreman in development
7
+ $stdout.sync = true
8
+ SharedWorkforce::ResponsePoller.start
9
+ end
6
10
  end
7
11
  end
8
12
  end
@@ -1,21 +1,20 @@
1
1
  module SharedWorkforce
2
2
  class ResponsePoller
3
+ # The response poller is intended for use during local development only. It
4
+ # facilitates real world task responses without needing an open socket for the
5
+ # web hooks.
3
6
 
4
7
  def self.start(interval=60)
5
8
  new.start(interval)
6
9
  end
7
10
 
8
- def initialize
9
- $stdout.sync = true
10
- end
11
-
12
11
  def start(interval)
13
12
  Thread.abort_on_exception = true
14
13
  Thread.new do
15
- puts "SharedWorkforce: Checking every #{interval} seconds for new responses."
14
+ SharedWorkforce.logger.info "SharedWorkforce: Checking every #{interval} seconds for new responses."
16
15
 
17
16
  while true
18
- puts "SharedWorkforce: Checking for new task responses."
17
+ SharedWorkforce.logger.info "SharedWorkforce: Checking for new task responses."
19
18
  process_tasks completed_tasks
20
19
  sleep interval
21
20
  end
@@ -27,7 +26,7 @@ module SharedWorkforce
27
26
  def process_tasks(tasks)
28
27
  tasks.each do |task|
29
28
  if task['state'] == "completed"
30
- puts "SharedWorkforce: Task complete. Getting responses."
29
+ SharedWorkforce.logger.info "SharedWorkforce: Task complete. Getting responses."
31
30
  responses = collect_responses(task['id'])
32
31
  SharedWorkforce::TaskResult.new(responses).process!
33
32
  end
@@ -1,6 +1,6 @@
1
1
  module SharedWorkforce
2
2
  module Task
3
-
3
+
4
4
  def self.included(base)
5
5
  base.extend(ClassMethods)
6
6
  base.default_attributes(
@@ -1,15 +1,7 @@
1
1
  require 'rest_client'
2
2
  module SharedWorkforce
3
- class TaskRequest::HttpWithPoller < TaskRequest
4
-
5
- def create
6
- task = JSON.parse(RestClient.post("#{http_end_point}/tasks", *request_params))
7
- end
8
-
9
- def cancel
10
- RestClient.post("#{http_end_point}/tasks/cancel", *request_params)
11
- end
12
-
3
+ class TaskRequest::HttpWithPoller < TaskRequest::Http
4
+ # Disable callbacks during development
13
5
  def request_params
14
6
  [{:task=>@task.to_hash.merge(@params).merge(:callback_url=>callback_url, :callback_enabled=>false), :api_key=>api_key}.to_json, {:content_type => :json, :accept => :json}]
15
7
  end
@@ -1,4 +1,4 @@
1
1
  module SharedWorkforce
2
- VERSION = "0.2.10"
2
+ VERSION = "0.2.11"
3
3
 
4
4
  end
@@ -46,5 +46,28 @@ describe "Configuration" do
46
46
  end
47
47
 
48
48
  end
49
+
50
+ describe "#logger" do
51
+ it "should default to rails logger" do
52
+ logger_double = double(:logger)
53
+ configuration.stub(:rails_logger).and_return(logger_double)
54
+ configuration.logger.should == logger_double
55
+ end
56
+
57
+ it "should fallback to a default logger" do
58
+ logger_double = double(:logger)
59
+ configuration.stub(:rails_logger).and_return(nil)
60
+ configuration.stub(:default_logger).and_return(logger_double)
61
+ configuration.logger.should == logger_double
62
+ end
63
+
64
+ it "should be overridden by a custom logger" do
65
+ logger_double = double(:logger)
66
+ configuration.stub(:rails_logger).and_return(double(:rails_logger))
67
+ configuration.logger = logger_double
68
+
69
+ configuration.logger.should == logger_double
70
+ end
71
+ end
49
72
 
50
73
  end
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "SharedWorkforce" do
4
+ describe "#logger" do
5
+ it "should return the configured logger" do
6
+ with_configuration do |c|
7
+ c.logger = logger = double(:logger)
8
+
9
+ SharedWorkforce.logger.should == logger
10
+ end
11
+ end
12
+ end
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shared_workforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-20 00:00:00.000000000 Z
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
- requirement: &70320585942740 !ruby/object:Gem::Requirement
16
+ requirement: &70125168657440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70320585942740
24
+ version_requirements: *70125168657440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70320585942320 !ruby/object:Gem::Requirement
27
+ requirement: &70125168672660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70320585942320
35
+ version_requirements: *70125168672660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activesupport
38
- requirement: &70320585941900 !ruby/object:Gem::Requirement
38
+ requirement: &70125168669900 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70320585941900
46
+ version_requirements: *70125168669900
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70320585941400 !ruby/object:Gem::Requirement
49
+ requirement: &70125168665380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.2.9
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70320585941400
57
+ version_requirements: *70125168665380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: webmock
60
- requirement: &70320585940980 !ruby/object:Gem::Requirement
60
+ requirement: &70125168676340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70320585940980
68
+ version_requirements: *70125168676340
69
69
  description: Shared Workforce is a service and simple API for human intelligence tasks
70
70
  email:
71
71
  - sam@samoliver.com
@@ -98,6 +98,7 @@ files:
98
98
  - spec/client_spec.rb
99
99
  - spec/configuration_spec.rb
100
100
  - spec/end_point_spec.rb
101
+ - spec/shared_workforce_spec.rb
101
102
  - spec/spec_helper.rb
102
103
  - spec/support/configuration_helper.rb
103
104
  - spec/task_request/black_hole_spec.rb
@@ -135,6 +136,7 @@ test_files:
135
136
  - spec/client_spec.rb
136
137
  - spec/configuration_spec.rb
137
138
  - spec/end_point_spec.rb
139
+ - spec/shared_workforce_spec.rb
138
140
  - spec/spec_helper.rb
139
141
  - spec/support/configuration_helper.rb
140
142
  - spec/task_request/black_hole_spec.rb