shared_workforce 0.2.0 → 0.2.1

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
@@ -91,11 +91,7 @@ Advanced definition options
91
91
 
92
92
  ### Task types
93
93
 
94
- SharedWorkforce currently supports 2 types of task. :tags (multiple select) and :choice (single answer from a list of options). Free-form input is planned in the near future.
95
-
96
- SharedWorkforce::Task.define |t|
97
- t.answer_type = #:tags or :choice
98
- end
94
+ SharedWorkforce currently supports 3 types of task. `:tags` (multiple select), `:choice` (single answer from a list of options), or `:edit` (edit text).
99
95
 
100
96
  ###Multiple responses
101
97
 
@@ -6,9 +6,11 @@ require 'shared_workforce/task'
6
6
  require 'shared_workforce/task_request/task_request'
7
7
  require 'shared_workforce/task_request/black_hole'
8
8
  require 'shared_workforce/task_request/http'
9
+ require 'shared_workforce/task_request/http_with_poller'
9
10
  require 'shared_workforce/task_result'
10
11
  require 'shared_workforce/task_response'
11
12
  require 'shared_workforce/end_point'
13
+ require 'shared_workforce/response_poller'
12
14
  require 'shared_workforce/frameworks/rails' if defined?(Rails)
13
15
  require 'active_support/inflector'
14
16
  require 'active_support/core_ext/hash/indifferent_access'
@@ -9,7 +9,7 @@ module SharedWorkforce
9
9
 
10
10
  def initialize
11
11
  @http_end_point = "http://api.sharedworkforce.com"
12
- @request_class = TaskRequest::Http
12
+ @request_class = default_request_class
13
13
  end
14
14
 
15
15
  def callback_url
@@ -18,7 +18,23 @@ module SharedWorkforce
18
18
 
19
19
  def callback_path
20
20
  @callback_path ||= "hci_task_result"
21
- end
21
+ end
22
+
23
+ private
24
+
25
+ def default_request_class
26
+ if defined?(Rails)
27
+ if Rails.env.development?
28
+ TaskRequest::HttpWithPoller
29
+ elsif Rails.env.test?
30
+ TaskRequest::BlackHole
31
+ else
32
+ TaskRequest::Http
33
+ end
34
+ else
35
+ TaskRequest::Http
36
+ end
37
+ end
22
38
 
23
39
  end
24
40
  end
@@ -0,0 +1,29 @@
1
+ module SharedWorkforce
2
+ class ResponsePoller
3
+ def self.start(task_id)
4
+ Thread.new do
5
+ puts "SharedWorkforce: Checking every 20 seconds for responses for task #{task_id}."
6
+ while true
7
+ sleep 20
8
+ puts "SharedWorkforce: Checking for task responses for task #{task_id} (development mode)"
9
+ task = JSON.parse(RestClient.get("#{SharedWorkforce.configuration.http_end_point}/tasks/#{task_id}", {
10
+ 'X-API-Key'=>SharedWorkforce.configuration.api_key,
11
+ :content_type => :json,
12
+ :accept => :json
13
+ }))
14
+ if task['state'] == "completed"
15
+ puts "SharedWorkforce: Task complete. Getting responses."
16
+ responses = JSON.parse(RestClient.get("#{SharedWorkforce.configuration.http_end_point}/tasks/#{task_id}/responses", {
17
+ 'X-API-Key'=>SharedWorkforce.configuration.api_key,
18
+ :content_type => :json,
19
+ :accept => :json
20
+ }))
21
+ puts "SharedWorkforce: Processing responses."
22
+ SharedWorkforce::TaskResult.new(responses).process!
23
+ break;
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ require 'rest_client'
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
+ ResponsePoller.start(task['id'])
8
+ end
9
+
10
+ def cancel
11
+ RestClient.post("#{http_end_point}/tasks/cancel", *request_params)
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
1
  module SharedWorkforce
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
 
4
4
  end
metadata CHANGED
@@ -1,83 +1,78 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shared_workforce
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
4
5
  prerelease:
5
- version: 0.2.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Sam Oliver
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-03-02 00:00:00 +00:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: rest-client
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70198918375060 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: json
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70198918375060
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ requirement: &70198918374600 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: activesupport
40
34
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70198918374600
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &70198918374120 !ruby/object:Gem::Requirement
42
39
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
47
44
  type: :runtime
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: rspec
51
45
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70198918374120
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &70198918373500 !ruby/object:Gem::Requirement
53
50
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
57
54
  version: 1.2.9
58
55
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: webmock
62
56
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70198918373500
58
+ - !ruby/object:Gem::Dependency
59
+ name: webmock
60
+ requirement: &70198918366780 !ruby/object:Gem::Requirement
64
61
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
69
66
  type: :development
70
- version_requirements: *id005
67
+ prerelease: false
68
+ version_requirements: *70198918366780
71
69
  description: Shared Workforce is a service and simple API for human intelligence tasks
72
- email:
70
+ email:
73
71
  - sam@samoliver.com
74
72
  executables: []
75
-
76
73
  extensions: []
77
-
78
74
  extra_rdoc_files: []
79
-
80
- files:
75
+ files:
81
76
  - .gitignore
82
77
  - .travis.yml
83
78
  - Gemfile
@@ -89,9 +84,11 @@ files:
89
84
  - lib/shared_workforce/end_point.rb
90
85
  - lib/shared_workforce/exceptions.rb
91
86
  - lib/shared_workforce/frameworks/rails.rb
87
+ - lib/shared_workforce/response_poller.rb
92
88
  - lib/shared_workforce/task.rb
93
89
  - lib/shared_workforce/task_request/black_hole.rb
94
90
  - lib/shared_workforce/task_request/http.rb
91
+ - lib/shared_workforce/task_request/http_with_poller.rb
95
92
  - lib/shared_workforce/task_request/task_request.rb
96
93
  - lib/shared_workforce/task_response.rb
97
94
  - lib/shared_workforce/task_result.rb
@@ -107,35 +104,31 @@ files:
107
104
  - spec/task_result_spec.rb
108
105
  - spec/task_spec.rb
109
106
  - spec/tasks/approve_photo.rb
110
- has_rdoc: true
111
107
  homepage: http://github.com/sharedworkforce/sharedworkforce
112
108
  licenses: []
113
-
114
109
  post_install_message:
115
110
  rdoc_options: []
116
-
117
- require_paths:
111
+ require_paths:
118
112
  - lib
119
- required_ruby_version: !ruby/object:Gem::Requirement
113
+ required_ruby_version: !ruby/object:Gem::Requirement
120
114
  none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: "0"
125
- required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
120
  none: false
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: "0"
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
131
125
  requirements: []
132
-
133
126
  rubyforge_project: shared_workforce
134
- rubygems_version: 1.6.2
127
+ rubygems_version: 1.8.17
135
128
  signing_key:
136
129
  specification_version: 3
137
130
  summary: Shared Workforce Client
138
- test_files:
131
+ test_files:
139
132
  - spec/client_spec.rb
140
133
  - spec/spec_helper.rb
141
134
  - spec/support/configuration_helper.rb