crowdflower 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 76063401ad10a5f00f6eef25ce35321d57b0ac62
4
+ data.tar.gz: 4e9b04672d27280fdfde741f63ec4217731dd7f0
5
+ SHA512:
6
+ metadata.gz: 82241d2fd4dfe9df428181d8ca11edb0d830dcdfe253c4eff9b2e989bfdd83f4379af59f414b08a02316823e0ada074c5867d5f34c6b80418a6348e53dc67df2
7
+ data.tar.gz: 93914eb90b7c1fa4f044e536e7bd027fef710bc6c9378801ab84bb16e92e9299b0326b9a2959d7f5d8da725f6306069a4f0c6fb143718e61407d197444a18cd4
data/README.md CHANGED
@@ -40,7 +40,7 @@ CrowdFlower.connect!( 'CrowdFlower.yaml' )
40
40
  ```
41
41
 
42
42
  ## Usage and Examples
43
- #####[Example Job](https://api.crowdflower.com/v1/jobs/418404/) - referenced throught the following examples (must be signed in to view).
43
+ #####This [job](https://api.crowdflower.com/v1/jobs/418404/) is referenced throughout the following examples (must be signed in to view).
44
44
 
45
45
  ### Access Job Info
46
46
 
@@ -76,17 +76,17 @@ require 'crowdflower'
76
76
 
77
77
  API_KEY = "YOUR_API_KEY"
78
78
  DOMAIN_BASE = "https://api.crowdflower.com"
79
- JOB_ID = 418404
80
79
 
81
80
  CrowdFlower::Job.connect! API_KEY, DOMAIN_BASE
82
81
 
82
+ job_id = 418404
83
83
  job_one = CrowdFlower::Job.new(job_id)
84
84
  job_two = job_one.copy
85
85
  ```
86
86
 
87
87
  ### Available Features (Methods)
88
88
 
89
- #####GET - https://crowdflower.com/jobs/418404.json
89
+ #####GET: Example job's JSON, which the GET method has access to: https://crowdflower.com/jobs/418404.json
90
90
 
91
91
  ```ruby
92
92
  job.get["css"]
@@ -141,22 +141,33 @@ job.get["custom_key"]
141
141
  job.get["options"]
142
142
  ```
143
143
 
144
- #####UPLOAD (data to create units)
144
+ #####UPLOAD: upload a file to create the data (or units) in your job.
145
145
 
146
146
  ```ruby
147
+ # opts can be used to force an upload
147
148
  job.upload(filename, type, opts)
148
149
  job.upload("crowdshopping.csv", "text/csv")
149
150
  ```
150
151
 
151
- #####CHANNELS - http://api.crowdflower.com/v1/jobs/418404/channels
152
+ #####CHANNELS: http://api.crowdflower.com/v1/jobs/418404/channels
152
153
 
153
154
  ```ruby
154
- job.channels
155
+ # view all enabled channels and available channels:
156
+ job.channels
157
+
158
+ # view only the enabled ones:
159
+ job.channels["enabled_channels"]
160
+
161
+ # turn on specific channels:
155
162
  job.enable_channels(channels)
156
- job.enable_channels("cf_internal")
163
+ job.enable_channels(["4x4bux_com", "abitback", "aceinnovations"])
164
+
165
+ # turn off a specific channel (does not take an array like enable_chanels):
166
+ job.disable_channel(channel_name)
167
+ job.disable_channel("4x4bux_com")
157
168
  ```
158
169
 
159
- #####TAGS - https://api.crowdflower.com/jobs/418404/tags
170
+ #####TAGS: https://api.crowdflower.com/jobs/418404/tags
160
171
 
161
172
  ```ruby
162
173
  tags = "shoes", "shopping", "fashion"
@@ -199,8 +210,13 @@ unit.judgments(444154130)
199
210
  #####UNIT.CREATE: Create a new unit.
200
211
 
201
212
  ```ruby
213
+ unit.create(data, gold = false)
214
+
215
+ # normal unit
202
216
  unit.create("glitter_color"=>"blue")
203
- unit.create("glitter_color"=>"blue", gold: true)
217
+
218
+ # test question (gold) unit
219
+ unit.create("glitter_color"=>"blue", true)
204
220
  ```
205
221
 
206
222
  #####UNIT.COPY: Copy an existing unit.
@@ -213,7 +229,7 @@ unit.copy(444154130, 418404, "glitter_color"=>"blue")
213
229
  #####UNIT.SPLIT: In cases where multiple values are stored in the cells of the same column, you can use the Split Column function to parse the data into two or more columns by specifying a delimiter (most typically a newline character).
214
230
 
215
231
  ```ruby
216
- unit.split(on, with = " ")
232
+ unit.split(on, with = ", ")
217
233
  ```
218
234
 
219
235
  #####UNIT.UPDATE: Update the value of a unit's key.
@@ -241,7 +257,7 @@ unit.cancel(unit_id)
241
257
  unit.delete(unit_id)
242
258
  ```
243
259
 
244
- #####UNIT.REQUEST_MORE_JUDGMENTS: Get more answers (judgments) for a specific unit by using this method with the unit's id and the amount of requested judgments passed as params.
260
+ #####UNIT.REQUEST_MORE_JUDGMENTS: Pass in the unit id and the number of additional judgments needed.
245
261
 
246
262
  ```ruby
247
263
  unit.request_more_judgments(unit_id, nb_judgments = 1)
@@ -253,29 +269,26 @@ unit.request_more_judgments(unit_id, nb_judgments = 1)
253
269
  order = CrowdFlower::Order.new(job)
254
270
  ```
255
271
 
256
- #####ORDER.DEBIT: When a job has data (units) and properly working cml, it is ready to launch. The launch tab on the job dashboard is the same as calling order.debit.
272
+ #####ORDER.DEBIT: This is the same as clicking launch from the job dashboard; your job must have at least 5 units and CML form elements for this to work.
257
273
 
258
274
  ```ruby
259
- # defaults to on_demand channels
260
- order.debit(units_count, channels = ["on_demand"])
261
-
262
- # pass in specific channel name to launch job w/ that channel
275
+ order.debit(units_count, channels)
263
276
  order.debit(6, "cf_internal")
264
277
  ```
265
278
 
266
- #####PAUSE: Only can be called on running jobs.
279
+ #####PAUSE: Can only be called on running jobs.
267
280
 
268
281
  ```ruby
269
282
  job.pause
270
283
  ```
271
284
 
272
- #####RESUME: Only can be called on paused or completed jobs.
285
+ #####RESUME: Can only be called on paused or completed jobs.
273
286
 
274
287
  ```ruby
275
288
  job.resume
276
289
  ```
277
290
 
278
- #####CANCEL: Only can be called on paused jobs.
291
+ #####CANCEL: Can only be called on paused jobs.
279
292
 
280
293
  ```ruby
281
294
  job.cancel
@@ -300,60 +313,64 @@ job.delete
300
313
  worker = CrowdFlower::Worker.new(job)
301
314
  ```
302
315
 
303
- #####WORKER.BONUS: Award a bonus in cents, 200 for $2.00 and (optionally) add a message
316
+ #####WORKER.BONUS: Award a bonus in cents, 200 for $2.00 and optionally, add a message.
304
317
 
305
318
  ```ruby
306
319
  worker.bonus(worker_id, amount, reason=nil)
307
- worker.bonus(23542619, 200, "You shoe shop like a pro! Thanks for the awesome answers!")
320
+ worker.bonus(99999999, 200, "You shoe shop like a pro! Here's a bonus for the awesome answers!")
308
321
  ```
309
322
 
310
- #####WORKER.REJECT: Stops contributors from completing tasks, and removes the contributors judgments from a job. Try to only use when a job is running, otherwise the completed job will lose judgments and be unable to collect replacement ones.
323
+ #####WORKER.REJECT: This method is only available to Pro and Enterprise users. Calling worker.reject stops a contributor from completing tasks and removes the contributor's judgments. It is best used when a job is still running as a completed job cannot collect new judgments to replace the rejected ones.
311
324
 
312
325
  ```ruby
313
326
  worker.reject(worker_id)
314
- worker.reject(14952322)
327
+ worker.reject(99999999)
315
328
  ```
316
329
 
317
- #####WORKER.NOTIFY: Sends a notification to a specific contributor. The contributor will see the message under their notifications.
330
+ #####WORKER.NOTIFY: Sends a message to the specified contributor; appears in the contributor's dashboard notifications.
318
331
 
319
332
  ```ruby
320
- worker.notify(worker_id, subject, message)
321
- worker.notify(23542619, "you earned a bonus!", "good job!")
333
+ worker.notify(worker_id, message)
334
+ worker.notify(99999999, "Thanks for working on this task!")
322
335
  ```
323
336
 
324
- #####WORKER.FLAG: Stops contributors from completing tasks. Their judgments remain in their current state of tainted or non-tainted and will not be thrown away.
337
+ #####WORKER.FLAG: Prevents a contributor from completing a task; judgments remain in their current state and will not be thrown away.
325
338
 
326
339
  ```ruby
327
- worker.flag(worker_id, reason=nil)
328
- worker.flag(14952322, "testing")
340
+ worker.flag(worker_id, reason = nil, persist = false)
341
+ worker.flag(99999999, "Flagging worker from this job.")
342
+
343
+ # persist = true flags the contributor from all of your jobs
344
+ worker.flag(worker_id, reason = nil, persist = true)
345
+ worker.flag(99999999, "Flaging worker from all my jobs.")
329
346
  ```
330
347
 
331
- #####WORKER.DEFLAG: Allows a flagged contributor to continue completing tasks.
348
+ #####WORKER.DEFLAG: Removes flag and allows contributor to continue work.
332
349
  ```ruby
333
- worker.deflag(worker_id)
334
- worker.deflag(14952322)
350
+ worker.deflag(worker_id, reason)
351
+ worker.deflag(99999999, "Worker was mistakenly flagged.")
335
352
  ```
336
353
 
337
- #####JUDGMENTS - http://api.crowdflower.com/v1/jobs/418404/units/judgments
354
+ #####JUDGMENTS: http://api.crowdflower.com/v1/jobs/418404/units/judgments
338
355
 
339
356
  ```ruby
340
357
  judgment = CrowdFlower::Judgment.new(job)
341
358
  judgment.all
342
359
  judgment.get(judgment_id)
343
- judgment.get(1239592918)
360
+ judgment.get(9999999999)
344
361
 
345
362
  # Return every judgment for the given unit
346
363
  job.units.judgments(unit_id_number)
347
- job.units.judgments(444154130)
364
+ job.units.judgments(9999999999)
348
365
  ```
349
366
 
350
- #####LEGEND: Returns all of the cml in a job; shows all questions and available answers, see example: http://api.crowdflower.com/v1/jobs/418404/legend.
367
+ #####LEGEND: Returns all the job's CML - http://api.crowdflower.com/v1/jobs/418404/legend
351
368
 
352
369
  ```ruby
353
370
  job.legend
354
371
  ```
355
372
 
356
- #####STATUS: parsed JSON response or access attributes like GET
373
+ #####STATUS: Returns a list of JSON unit and judgment attributes.
357
374
 
358
375
  ```ruby
359
376
  job.status
@@ -368,11 +385,16 @@ job.status["completed_gold_estimate"]
368
385
  job.status["ordered_units"]
369
386
  ```
370
387
 
371
- #####DOWNLOAD_CSV: Downloads a CSV of the job with results, sometimes as csv and sometimes as a zip containing the CSV.
388
+ #####DOWNLOAD_CSV: Download a zip file containing a CSV or JSON report, depending which one you specify. Below are examples of the available reports:
372
389
 
373
390
  ```ruby
374
- job.download_csv(type, filename, opts)
375
- job.download_csv(full, nil, force:true)
391
+ job.download_csv(type, filename)
392
+ job.download_csv(:full, 'full_report.zip')
393
+ job.download_csv(:aggregated, 'aggregated_report.zip')
394
+ job.download_csv(:source, 'source_report.zip')
395
+ job.download_csv(:gold_report, 'gold_report.zip')
396
+ job.download_csv(:workset, 'workset_report.zip')
397
+ job.download_csv(:json, 'json_report.zip')
376
398
  ```
377
399
 
378
400
  ## Helpful Documentation Links
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0
1
+ 0.12.0
@@ -0,0 +1,5 @@
1
+ # This file can be used for running your job and for running the integration tests
2
+ # Rename this yaml template to "account_info.yml" or update the .gitignore file so it will not be pushed to github
3
+
4
+ API_KEY: add your api key here
5
+ PROJECT_NUM: add your project number here
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: crowdflower 0.12.0 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "crowdflower"
8
- s.version = "0.11.0"
9
+ s.version = "0.12.0"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Brian P O'Rourke", "Chris Van Pelt"]
12
- s.date = "2014-05-02"
14
+ s.date = "2014-05-05"
13
15
  s.description = "A toolkit for interacting with CrowdFlower via the REST API.\n\nThis is alpha software. Have fun!\n\n"
14
16
  s.email = "brian@crowdflower.com"
15
17
  s.extra_rdoc_files = [
@@ -26,6 +28,7 @@ Gem::Specification.new do |s|
26
28
  "VERSION",
27
29
  "bindev/cl_skel.rb",
28
30
  "bindev/crowdflower.rb",
31
+ "config/account_info.sample.yml",
29
32
  "crowdflower.gemspec",
30
33
  "lib/crowdflower.rb",
31
34
  "lib/crowdflower/base.rb",
@@ -34,16 +37,15 @@ Gem::Specification.new do |s|
34
37
  "lib/crowdflower/order.rb",
35
38
  "lib/crowdflower/unit.rb",
36
39
  "lib/crowdflower/worker.rb",
37
- "test/integration_tests.rb",
38
- "test/sample.csv"
40
+ "test/crowdshopping.csv",
41
+ "test/integration_tests.rb"
39
42
  ]
40
43
  s.homepage = "http://github.com/dolores/ruby-crowdflower"
41
- s.require_paths = ["lib"]
42
- s.rubygems_version = "1.8.23"
44
+ s.rubygems_version = "2.2.0"
43
45
  s.summary = "a toolkit for the CrowdFlower API"
44
46
 
45
47
  if s.respond_to? :specification_version then
46
- s.specification_version = 3
48
+ s.specification_version = 4
47
49
 
48
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
51
  s.add_runtime_dependency(%q<httparty>, [">= 0.7.4"])
@@ -127,6 +127,10 @@ module CrowdFlower
127
127
  connection.post("#{resource_uri}/#{@id}/channels", {:body => { :channels => channels } } )
128
128
  end
129
129
 
130
+ def disable_channel(channel_name)
131
+ connection.post("#{resource_uri}/#{@id}/disable_channel", {:body => { :channel_name => channel_name } } )
132
+ end
133
+
130
134
  def tags
131
135
  connection.get("#{resource_uri}/#{@id}/tags")
132
136
  end
@@ -0,0 +1,7 @@
1
+ Brand Name,Shoe Style,Shoe Type,Glitter Color,Image,Retailer Name,Retailer URL
2
+ Jeffery Campbell,Lita,Booties,Red,"data:image/jpeg;base64,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",,
3
+ Jeffery Campbell,Lita,Booties,Gold,"data:image/jpeg;base64,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",,
4
+ Jeffery Campbell,Lita,Booties,Multi,https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTocPVxYbL4Jeb6vQy-D3fPMXFHStsjYp43fMWb_ocHsgEMQQfGww,,
5
+ Jeffery Campbell,Lita,Booties,Silver,"data:image/jpeg;base64,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",,
6
+ Jeffery Campbell,Lita,Booties,Black,"data:image/jpeg;base64,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",,
7
+ Jeffery Campbell,Lita,Booties,Other,"data:image/jpeg;base64,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",,
@@ -1,11 +1,12 @@
1
1
  $: << File.dirname(__FILE__) + "/../lib"
2
2
 
3
- require 'rubygems'
4
3
  require 'crowdflower'
5
4
  require 'json'
6
5
 
7
- API_KEY = ENV["API_KEY"]
8
- DOMAIN_BASE = ENV["DOMAIN_BASE"] || "https://api.localdev.crowdflower.com:8443"
6
+ CONFIG = YAML::load(File.read("config/account_info.yml"))
7
+ API_KEY = CONFIG["API_KEY"]
8
+ PROJECT_NUM = CONFIG["PROJECT_NUM"]
9
+ DOMAIN_BASE = "https://api.crowdflower.com" || "https://api.localdev.crowdflower.com:8443"
9
10
 
10
11
  CrowdFlower::Job.connect! API_KEY, DOMAIN_BASE
11
12
  unless API_KEY && API_KEY.size > 3
@@ -23,14 +24,10 @@ EOF
23
24
  exit 1
24
25
  end
25
26
 
26
- # If you turn this on, tasks will be posted on CrowdFlower and your
27
- # account will be charged. This is inadvisable for anyone other than
28
- # CrowdFlower employees.
29
- I_AM_RICH = ENV["CF_LIVE_TRANSACTIONS"] == "true"
27
+ RUNNING_TESTS = ENV["CF_LIVE_TRANSACTIONS"] == "true"
30
28
 
31
- if I_AM_RICH
32
- puts "*** LIVE TRANSACTIONS ENABLED - THIS TEST RUN WILL BE CHARGED ***"
33
- puts
29
+ if RUNNING_TESTS
30
+ puts "*** LIVE TRANSACTIONS ENABLED - THIS TEST RUN WILL BE CHARGED TO YOUR ACCOUNT ***"
34
31
  end
35
32
 
36
33
  def wait_until
@@ -62,111 +59,253 @@ def say(msg)
62
59
  $stdout.puts msg
63
60
  end
64
61
 
62
+ #################################################
63
+ # API CONNECTION
64
+ #################################################
65
+ say "Connecting to the API"
66
+ CrowdFlower.connect! API_KEY, DOMAIN_BASE
65
67
 
66
- say "defining multiple api keys"
67
- (job_subclass_with_valid_custom_key = Class.new(CrowdFlower::Job)).connect! API_KEY, DOMAIN_BASE
68
- (job_subclass_with_invalid_custom_key = Class.new(CrowdFlower::Job)).connect! 'invalid api key', DOMAIN_BASE
69
- job_subclass_with_no_custom_key = Class.new(CrowdFlower::Job)
68
+ #################################################
69
+ # CREATE JOB
70
+ #################################################
71
+ say "Creating a blank job."
72
+ job_1 = CrowdFlower::Job.create("Job_1: Connection Check")
73
+ p "job_1 id: #{job_1.get["id"]}"
74
+ p "job_1 units_count: #{job_1.get["units_count"]}"
75
+
76
+ #################################################
77
+ # CHECK/ ENABLE CHANNELS
78
+ #################################################
79
+ say "Checking that job_1 does not have any enabled channels."
80
+ assert job_1.channels["enabled_channels"].empty?
81
+
82
+ say "Enabling the cf_internal channel."
83
+ job_1.enable_channels("cf_internal")
84
+ assert job_1.channels["enabled_channels"] == ["cf_internal"]
85
+
86
+ #################################################
87
+ # UPLOAD DATA/ CREATE NEW JOB
88
+ #################################################
89
+ say "Uploading CSV to create job_2."
90
+ job_2 = CrowdFlower::Job.upload(File.dirname(__FILE__) + "/crowdshopping.csv", "text/csv")
91
+ job_2_id = job_2.get["id"]
92
+ p "job_2 id: #{job_2_id}"
93
+
94
+ #################################################
95
+ # ADD UNITS
96
+ #################################################
97
+ say "-- Waiting for CrowdFlower to process the data."
98
+ wait_until { job_2.get["units_count"] == 6 }
99
+
100
+ say "Adding some more data."
101
+ job_2.upload(File.dirname(__FILE__) + "/crowdshopping.csv", "text/csv")
102
+
103
+ say "-- Waiting for CrowdFlower to process the data."
104
+ wait_until { job_2.get["units_count"] == 12 }
105
+
106
+ #################################################
107
+ # PING UNITS
108
+ #################################################
109
+ say "Pinging job_2 units."
110
+ assert job_2.units.ping['count'] == 12
111
+ assert job_2.units.ping['done'] == true
112
+
113
+ #################################################
114
+ # COUNT UNITS
115
+ #################################################
116
+ say "Checking for 12 units in job_2."
117
+ assert job_2.units.all.size == 12
118
+
119
+ #################################################
120
+ # UPDATE JOB_2
121
+ #################################################
122
+ say "Adding title, project number, instructions, CML"
123
+ job_2.update({:title => 'Job_2: CrowdShopping',
124
+ :project_number => PROJECT_NUM,
125
+ :instructions => '<p>There are six questions to this task. In this order, the questions ask if you were able to find a pair of Lita shoes for sale in red glitter, gold glitter, multi glitter, silver glitter, black glitter, or other color of glitter.</p><p>There is a photo of the shoe in correlating color as the question right below the question. It will give you a better idea of what to look for.</p>',
126
+ :cml => '<cml:radios label="Were you able to find an online retailer selling Jeffery Campbell Lita Booties in {{glitter_color}}?" validates="required" name="color_found" instructions="If you found the shoes we are looking for, click yes to fill in the website url."><p class="shoe-img">Example Photo: <img src="{{image}}" width="100" /></p><cml:radio label="Yes, I found an online retailer selling Lita shoes in {{glitter_color}}." value="yes"></cml:radio><cml:radio label="No, I could not find an online retailer selling Lita shoes in {{glitter_color}}." value="no"></cml:radio></cml:radios><br /><cml:text label="Please enter the name of the online retailer." default="Example: Karmaloop" validates="required" only-if="color_found:[yes]" name="please_enter_the_name_of_the_online_retailer"></cml:text><br /><cml:text label="Please enter the url to the shoes you found." default="Example: www.karmaloop.com/jeffery-campbell-litas-multiglitter" validates="required url" only-if="color_found:[yes]" name="please_enter_the_url_to_the_shoes_you_found"></cml:text>'})
127
+
128
+ #################################################
129
+ # ADD/ UPDATE/ REMOVE TAGS
130
+ #################################################
131
+ say "Checking if tags exist."
132
+ assert job_2.tags.empty?
133
+
134
+ say "Adding 'shoes' and 'glitter' to tags."
135
+ job_2.add_tags ["shoes", "glitter"]
136
+ assert job_2.tags.map{|t| t["name"]}.sort == ["glitter", "shoes"]
137
+
138
+ say "Removing 'shoes' tag."
139
+ job_2.remove_tags ["shoes"]
140
+ assert job_2.tags.map{|t| t["name"]} == ["glitter"]
141
+
142
+ say "Updating tags to 'fashion' 'fun' and 'glitter'."
143
+ job_2.update_tags ["fashion", "fun", "glitter"]
144
+ assert job_2.tags.map{|t| t["name"]} == ["fashion", "fun", "glitter"]
145
+
146
+ #################################################
147
+ # CHECK JOB_2 CHANNELS
148
+ #################################################
149
+ say "Checking that channels are turned on."
150
+ assert !job_2.channels["enabled_channels"].empty?
151
+ p "job_2 enabled_channels: #{job_2.channels["enabled_channels"]}"
152
+
153
+ #################################################
154
+ # ORDER JOB
155
+ #################################################
156
+ say "Ordering (launching) job_2 with 12 units."
157
+ order = CrowdFlower::Order.new(job_2)
158
+ order.debit(12, ["4x4bux_com", "bitcoinget", "cf_internal"])
159
+ wait_until { job_2.get["state"].casecmp('running') == 0}
160
+ # turning channels from on_demand work force adds "on_demand" to enabled_channels
161
+ assert job_2.channels["enabled_channels"] == ["4x4bux_com", "bitcoinget", "cf_internal", "on_demand"]
162
+
163
+ #################################################
164
+ # DISABLE A CHANNEL
165
+ #################################################
166
+ say "Disabling 'bitcoinget' channel."
167
+ job_2.disable_channel("bitcoinget")
168
+ assert job_2.channels["enabled_channels"] == ["4x4bux_com", "cf_internal", "on_demand"]
169
+
170
+ #################################################
171
+ # UNIT METHODS
172
+ #################################################
173
+ say "Setting up units."
174
+ unit_1 = job_2.units.all.to_a[0][0]
175
+ unit_2 = job_2.units.all.to_a[1][0]
176
+
177
+ unit = CrowdFlower::Unit.new(job_2)
178
+ wait_until { unit.get(unit_1)["state"] == "judgable" }
179
+ p "unit_1 id: #{unit_1}"
180
+ wait_until { unit.get(unit_1)["state"] == "judgable" }
181
+ p "unit_2 id: #{unit_2}"
182
+
183
+ say "Making unit_1 a test question (gold)."
184
+ unit.make_gold(unit_1)
185
+ assert unit.get(unit_1)["state"] == "golden"
186
+
187
+ say "Copying unit_2."
188
+ unit.copy(unit_2, job_2_id, "glitter_color"=>"blue")
189
+ assert job_2.get["units_count"] == 13
190
+
191
+ say "Creating a new test question unit."
192
+ unit.create({"glitter_color"=>"white"}, true)
193
+ assert job_2.get["units_count"] == 14
194
+ assert job_2.get["golds_count"] == 2
195
+
196
+ say "Canceling unit_2."
197
+ unit.cancel(unit_2)
198
+ assert unit.get(unit_2)["state"] == "canceled"
199
+
200
+ #################################################
201
+ # PAUSE/ RESUME/ CANCEL JOB
202
+ #################################################
203
+ say "Pausing job_2."
204
+ job_2.pause
205
+ assert job_2.get["state"] == "paused"
206
+ p "job_2 state: #{job_2.get["state"]}"
207
+
208
+ say "Resuming job_2."
209
+ job_2.resume
210
+ assert job_2.get["state"] == "running"
211
+ p "job_2 state: #{job_2.get["state"]}"
212
+
213
+ say "Canceling job_2."
214
+ job_2.cancel
215
+ assert job_2.get["state"] == "canceled"
216
+ p "job_2 state: #{job_2.get["state"]}"
217
+
218
+ say "Deleting job_1."
219
+ job_1.delete
220
+ assert job_1.get["state"] == "unordered"
221
+
222
+ #################################################
223
+ # JOB LEGEND
224
+ #################################################
225
+ say "Checking job_2 legend."
226
+ assert !job_2.legend.empty?
227
+
228
+ #################################################
229
+ # COPY JOB_2
230
+ #################################################
231
+ say "Copying job_2."
232
+ job_3 = job_2.copy(:all_units => true)
233
+
234
+ say "Updating job_3 title."
235
+ job_3.update(:title => 'Job_3: Copy of Job_2')
236
+ assert job_3.get["title"] == "Job_3: Copy of Job_2"
237
+
238
+ say "-- Waiting for CrowdFlower to process the data."
239
+ wait_until { job_3.get["units_count"] == 14 }
240
+ assert job_3.get["units_count"] == 14
241
+
242
+ #################################################
243
+ # WORKER METHODS
244
+ #################################################
245
+ # Worker tests run against an existing job with an internal CF worker_id number
246
+ say "Starting Worker tests for job #422830."
247
+ job = CrowdFlower::Job.new(422830)
248
+ worker = CrowdFlower::Worker.new(job)
249
+ worker_id = 23542619
250
+
251
+ say "Notifying worker."
252
+ worker.notify(worker_id, "Testing notify method.")
253
+
254
+ say "Bonusing a worker."
255
+ worker.bonus(worker_id, 1, "Here's a bonus for your awesome work!")
256
+
257
+ say "Flagging worker from one of my jobs."
258
+ worker.flag(worker_id, "Testing flag method.", :persist => false)
259
+
260
+ say "Flagging worker from all my jobs."
261
+ worker.flag(worker_id, "Testing flag method across all jobs.", :persist => true)
262
+
263
+ say "Deflagging worker."
264
+ worker.deflag(worker_id, "Testing deflag method.")
265
+
266
+ #################################################
267
+ # JUDGMENT METHODS
268
+ #################################################
269
+ # Judgment tests run against the same job as Worker tests
270
+ say "Starting Judgment tests for job #422830."
271
+ judgment = CrowdFlower::Judgment.new(job)
272
+ unit = CrowdFlower::Unit.new(job)
70
273
 
71
- say "no default api key"
72
- assert_exception_raised(CrowdFlower::UsageError) {CrowdFlower::Job.create("job creation should fail")}
73
- assert_exception_raised(CrowdFlower::UsageError) {job_subclass_with_no_custom_key.create("job creation should fail")}
74
- assert_exception_raised(CrowdFlower::APIError) {job_subclass_with_invalid_custom_key.create("job creation should fail")}
75
- assert job_subclass_with_valid_custom_key.create("should be ok").units.ping['count']
274
+ say "Getting all judgments."
275
+ assert judgment.all.count == job.get["judgments_count"]
76
276
 
77
- say "invalid default api key"
78
- CrowdFlower.connect! "invalid default api key", DOMAIN_BASE
79
- assert_exception_raised(CrowdFlower::APIError) {CrowdFlower::Job.create("job creation should fail")}
80
- assert_exception_raised(CrowdFlower::APIError) {job_subclass_with_no_custom_key.create("job creation should fail")}
81
- assert_exception_raised(CrowdFlower::APIError) {job_subclass_with_invalid_custom_key.create("job creation should fail")}
82
- assert job_subclass_with_valid_custom_key.create("should be ok").units.ping['count']
277
+ say "Checking the judgment number to test judgment.get method."
278
+ assert judgment.get(1243027889)["judgment"] == 1
83
279
 
84
- say "Connecting to the API"
85
- CrowdFlower.connect! API_KEY, DOMAIN_BASE
280
+ say "Checking the number of judgments for a unit to see if a unit's judgment info can be returned."
281
+ assert job.units.judgments(447664267).count == unit.get(447664267)["judgments_count"]
86
282
 
87
- assert CrowdFlower::Job.create("should be ok").units.ping['count']
88
- assert job_subclass_with_no_custom_key.create("should be ok").units.ping['count']
89
- assert job_subclass_with_valid_custom_key.create("should be ok").units.ping['count']
90
- assert_exception_raised(CrowdFlower::APIError) {job_subclass_with_invalid_custom_key.create("job creation should fail")}
91
- # Add this test to check your URL
92
- #assert CrowdFlower::Base.connection.public_url == "localdev.crowdflower.com:80"
93
-
94
- say "Uploading a test CSV"
95
- job = CrowdFlower::Job.upload(File.dirname(__FILE__) + "/sample.csv", "text/csv")
96
-
97
- say "Trying to get all jobs"
98
- assert CrowdFlower::Job.all.first["id"] == job.id
99
-
100
- say "-- Waiting for CrowdFlower to process the data"
101
- wait_until { job.get["units_count"] == 4 }
102
-
103
- say "Adding some more data"
104
- job.upload(File.dirname(__FILE__) + "/sample.csv", "text/csv")
105
-
106
- say "-- Waiting for CrowdFlower to process the data"
107
- # You could also register a webhook to have CrowdFlower notify your
108
- # server.
109
- wait_until { job.get["units_count"] == 8 }
110
-
111
- say "Checking ping."
112
- assert job.units.ping['count'] == 8
113
- assert job.units.ping['done'] == true
114
-
115
- say "Getting the units for this job."
116
- assert job.units.all.size == 8
117
-
118
- say "Checking the status of the job."
119
- assert job.status["tainted_judgments"] == 0
120
-
121
- say "Adding title, instructions, and problem to the job."
122
- job.update({:title => 'testtt',
123
- :instructions => 'testttt fdsf sfds fsdfs fesfsdf',
124
- :cml => '<cml:text label="Text" class="unmodified" validates="required"/>'})
125
-
126
- say "Registering a webhook."
127
- job.update :webhook_uri => "http://localhost:8080/crowdflower"
128
-
129
- say "Tags"
130
- assert job.tags.empty?
131
- job.update_tags ["testing_123", "testing_456"]
132
- assert job.tags.map{|t| t["name"]}.sort == ["testing_123", "testing_456"]
133
- job.remove_tags ["testing_123"]
134
- assert job.tags.map{|t| t["name"]} == ["testing_456"]
135
- job.add_tags ["testing_789"]
136
- assert job.tags.map{|t| t["name"]} == ["testing_456", "testing_789"]
137
-
138
- say "Copying the existing job to a new one."
139
- job2 = job.copy :all_units => true
140
-
141
- say "-- Waiting for CrowdFlower to finish copying the job."
142
- # You could also register a webhook to have CrowdFlower notify your
143
- # server.
144
- wait_until { job2.get["units_count"] == 8 }
145
-
146
- say "Ordering the job."
147
- order = CrowdFlower::Order.new(job)
148
- unit_count = 8
149
- order.debit(8)
150
- wait_until { job.get["state"].casecmp('running') == 0}
151
-
152
- say "Checking enabled_channels."
153
- assert !job.channels["enabled_channels"].empty?
154
- # To see exact list of enabled jobs:
155
- # p job.channels["enabled_channels"]
156
-
157
- say "Order job2 to check channels when specifying channel parameter."
158
- order = CrowdFlower::Order.new(job2)
159
- order.debit(8, "channel"=>"cf_internal")
160
- assert job2.channels["enabled_channels"] == ["cf_internal"]
161
-
162
- say "Canceling the unit."
163
- unit_id = job.units.all.to_a[0][0]
164
- unit = CrowdFlower::Unit.new(job)
165
- wait_until { unit.get(unit_id)['state'] == 'judgable' }
166
- puts unit.cancel(unit_id).inspect
167
- assert unit.get(unit_id)['state'] == 'canceled'
283
+ #################################################
284
+ # DOWNLOAD REPORTS - missing assetions
285
+ #################################################
286
+ # These run against the completed job from readme examples; they print status codes as they go
287
+ say "Startiing report tests for job #418404."
288
+ job = CrowdFlower::Job.new(418404)
289
+
290
+ say "Downloading Full CSV"
291
+ job.download_csv(:full, "full_report.zip")
292
+
293
+ say "Downloading Aggregated CSV"
294
+ job.download_csv(:aggregated, "agg_report.zip")
295
+
296
+ say "Downloading Source CSV"
297
+ job.download_csv(:source, "source_report.zip")
298
+
299
+ say "Downloading Test Questions CSV"
300
+ job.download_csv(:gold_report, "gold_report.zip")
301
+
302
+ say "Downloading Worker CSV"
303
+ job.download_csv(:workset, "workset_report.zip")
168
304
 
169
- say "Webhook test needs to be written."
170
- #job.test_webhook
305
+ say "Downloading JSON"
306
+ job.download_csv(:json, "json_report.zip")
171
307
 
308
+ #################################################
309
+ # END OF TESTS
310
+ #################################################
172
311
  say ">-< Tests complete. >-<"
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crowdflower
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
5
- prerelease:
4
+ version: 0.12.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian P O'Rourke
@@ -10,31 +9,27 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-05-02 00:00:00.000000000 Z
12
+ date: 2014-05-05 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: httparty
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - ">="
21
19
  - !ruby/object:Gem::Version
22
20
  version: 0.7.4
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - ">="
29
26
  - !ruby/object:Gem::Version
30
27
  version: 0.7.4
31
- description: ! 'A toolkit for interacting with CrowdFlower via the REST API.
32
-
28
+ description: |+
29
+ A toolkit for interacting with CrowdFlower via the REST API.
33
30
 
34
31
  This is alpha software. Have fun!
35
32
 
36
-
37
- '
38
33
  email: brian@crowdflower.com
39
34
  executables: []
40
35
  extensions: []
@@ -42,7 +37,7 @@ extra_rdoc_files:
42
37
  - LICENSE
43
38
  - README.md
44
39
  files:
45
- - .document
40
+ - ".document"
46
41
  - CONTRIBUTORS
47
42
  - HISTORY.md
48
43
  - LICENSE
@@ -51,6 +46,7 @@ files:
51
46
  - VERSION
52
47
  - bindev/cl_skel.rb
53
48
  - bindev/crowdflower.rb
49
+ - config/account_info.sample.yml
54
50
  - crowdflower.gemspec
55
51
  - lib/crowdflower.rb
56
52
  - lib/crowdflower/base.rb
@@ -59,30 +55,29 @@ files:
59
55
  - lib/crowdflower/order.rb
60
56
  - lib/crowdflower/unit.rb
61
57
  - lib/crowdflower/worker.rb
58
+ - test/crowdshopping.csv
62
59
  - test/integration_tests.rb
63
- - test/sample.csv
64
60
  homepage: http://github.com/dolores/ruby-crowdflower
65
61
  licenses: []
62
+ metadata: {}
66
63
  post_install_message:
67
64
  rdoc_options: []
68
65
  require_paths:
69
66
  - lib
70
67
  required_ruby_version: !ruby/object:Gem::Requirement
71
- none: false
72
68
  requirements:
73
- - - ! '>='
69
+ - - ">="
74
70
  - !ruby/object:Gem::Version
75
71
  version: '0'
76
72
  required_rubygems_version: !ruby/object:Gem::Requirement
77
- none: false
78
73
  requirements:
79
- - - ! '>='
74
+ - - ">="
80
75
  - !ruby/object:Gem::Version
81
76
  version: '0'
82
77
  requirements: []
83
78
  rubyforge_project:
84
- rubygems_version: 1.8.23
79
+ rubygems_version: 2.2.0
85
80
  signing_key:
86
- specification_version: 3
81
+ specification_version: 4
87
82
  summary: a toolkit for the CrowdFlower API
88
83
  test_files: []
@@ -1,5 +0,0 @@
1
- "created_at","from_user","text"
2
- "Sat, 10 Oct 2009 01:00:07 +0000","sogowave","CrowdFlower easily connects you with thousands of people online, around the clock. http://ow.ly/rpaT"
3
- "Sat, 10 Oct 2009 01:00:05 +0000","SogoPR","CrowdFlower easily connects you with thousands of people online, around the clock. http://ow.ly/rpaS"
4
- "Fri, 09 Oct 2009 15:00:07 +0000","SIIA_Software","...and don't forget: @CloudTrigger @businessobjects @longjump @CrowdFlower http://bit.ly/397y72"
5
- "Fri, 02 Oct 2009 19:49:50 +0000","julzie","RT @rev2 CrowdFlower - Labor as a Service in a New Concept | Rev2.org http://retwt.me/v80H - GO LaaS!!"