bpo-ruby-crowdflower 0.0.0 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -37,6 +37,12 @@ end
37
37
 
38
38
  task :default => :spec
39
39
 
40
+ task :refresh_builder => [:build] do
41
+ cp "pkg/ruby-crowdflower-#{File.read("VERSION").strip}.gem", "../builder/gems/cache/"
42
+ rm_rf "../builder/gems/gems/ruby-crowdflower-#{File.read("VERSION").strip}/"
43
+ `cd ../builder && bin/thor merb:gem:redeploy`
44
+ end
45
+
40
46
  require 'rake/rdoctask'
41
47
  Rake::RDocTask.new do |rdoc|
42
48
  if File.exist?('VERSION.yml')
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.2
@@ -1,3 +1,7 @@
1
1
  require 'httparty'
2
- require 'ruby-crowdflower/httparty'
3
- require 'ruby-crowdflower/crowdflower'
2
+ require 'ruby-crowdflower/patches/httparty'
3
+ require 'ruby-crowdflower/base'
4
+ require 'ruby-crowdflower/job'
5
+ require 'ruby-crowdflower/unit'
6
+ require 'ruby-crowdflower/judgment'
7
+ require 'ruby-crowdflower/order'
@@ -0,0 +1,27 @@
1
+ module CrowdFlower
2
+ @@key = nil
3
+ @@domain = nil
4
+
5
+ module Defaults
6
+ def self.included(base)
7
+ base.send :include, HTTParty
8
+ base.send :headers, "accept" => "application/json"
9
+ base.send :format, :json
10
+ end
11
+ end
12
+
13
+ def self.connect!(key, development = false)
14
+ @@domain = development ? "http://api.localhost:4000/v1" : "https://api.crowdflower.com/v1"
15
+ @@key = key
16
+ end
17
+
18
+ def self.with_domain(path)
19
+ raise "Please establish a connection using 'CrowdFlower.connect!'" unless @@domain
20
+ @@domain + path
21
+ end
22
+
23
+ def self.key
24
+ raise "Please establish a connection using 'CrowdFlower.connect!'" unless @@key
25
+ {:key => @@key}
26
+ end
27
+ end
@@ -0,0 +1,81 @@
1
+ module CrowdFlower
2
+ class Job
3
+ include Defaults
4
+ attr_reader :id
5
+
6
+ def initialize(job_id)
7
+ @id = job_id
8
+ Job.base_uri CrowdFlower.with_domain("/jobs")
9
+ Job.default_params CrowdFlower.key
10
+ end
11
+
12
+ def self.all
13
+ Job.get("/")
14
+ end
15
+
16
+ def get(id = nil)
17
+ Job.get("/#{@id || id}")
18
+ end
19
+
20
+ #Copies a job and optionally gold or all units.
21
+ #Parameters
22
+ # opts: Hash
23
+ # gold: when set to true copies gold units
24
+ # all_units: when set to true copies all units
25
+ def copy(opts = {})
26
+ Job.get("/#{@id}/copy", {:query => opts})
27
+ end
28
+
29
+ def status
30
+ Job.get("/#{@id}/ping")
31
+ end
32
+
33
+ def upload(file, content_type)
34
+ Job.upload(file, content_type, @id)
35
+ end
36
+
37
+ def legend
38
+ Job.get("/#{@id}/legend")
39
+ end
40
+
41
+ def self.upload(file, content_type, job_id = nil)
42
+ job_id = "/#{job_id}" unless job_id.nil?
43
+ Job.post("#{job_id}/upload",
44
+ :body => File.read(file),
45
+ :headers => custom_content_type(content_type))
46
+ end
47
+
48
+ def download_csv(full = true, filename = nil)
49
+ filename ||= "#{full ? "f" : "a"}#{@id}.csv"
50
+ res = Job.get("/#{@id}.csv", {:format => :csv, :query => {:full => full}})
51
+ puts "Status... #{res.code.inspect}"
52
+ if res.code == 202
53
+ puts "CSV Generating... Trying again in 10 seconds."
54
+ Kernel.sleep 10
55
+ download_csv
56
+ else
57
+ puts "CSV written to: #{File.expand_path(filename)}"
58
+ File.open(filename, "w") {|f| f.puts res.body }
59
+ end
60
+ end
61
+
62
+ def pause
63
+ Job.get("/#{@id}/pause")
64
+ end
65
+
66
+ def resume
67
+ Job.get("/#{@id}/resume")
68
+ end
69
+
70
+ def cancel
71
+ Job.get("/#{@id}/cancel")
72
+ end
73
+
74
+ private
75
+
76
+ def self.custom_content_type(content_type)
77
+ #To preserve the accept header we are forced to merge the defaults back in...
78
+ Job.default_options[:headers].merge({"content-type" => content_type})
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,21 @@
1
+ module CrowdFlower
2
+ class Judgment
3
+ include Defaults
4
+ attr_reader :job
5
+
6
+ def initialize(job)
7
+ @job = job
8
+ Judgment.base_uri CrowdFlower.with_domain("/jobs/#{@job.id}/judgments")
9
+ Judgment.default_params CrowdFlower.key
10
+ end
11
+
12
+ #Pull every judgment
13
+ def all(page = 1, limit = 1000)#full = true
14
+ Judgment.get("", {:query => {:limit => limit, :page => page}})
15
+ end
16
+
17
+ def get(id)
18
+ Judgment.get("/#{id}")
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ module CrowdFlower
2
+ class Order
3
+ include Defaults
4
+ attr_reader :job
5
+
6
+ def initialize(job)
7
+ @job = job
8
+ Order.base_uri CrowdFlower.with_domain("/jobs/#{@job.id}/orders")
9
+ Order.default_params CrowdFlower.key
10
+ end
11
+
12
+ def debit(percentage = 100)
13
+ Order.post("", {:query => {:percentage => percentage}})
14
+ end
15
+ end
16
+ end
@@ -5,26 +5,20 @@ module HTTParty
5
5
  when Net::HTTPRedirection
6
6
  options[:limit] -= 1
7
7
 
8
+ self.http_method = Net::HTTP::Get
8
9
  self.path = response['location']
9
- @redirect = true
10
+
11
+ #Remove post data
12
+ options[:body] = ""
13
+ options[:headers].delete('content-type')
10
14
  @message = parse_response(response.body.to_s) rescue nil
11
15
  perform
12
16
  else
13
17
  parsed_response = parse_response(response.body.to_s)
14
18
  Response.new(parsed_response, response.body.to_s, response.code, @message || response.message, response.to_hash)
15
19
  end
16
- end
17
-
18
- def uri
19
- # Don't use relative path on redirect
20
- new_uri = path.relative? && !@redirect ? URI.parse("#{options[:base_uri]}#{path}") : path
21
-
22
- # avoid double query string on redirects [#12]
23
- unless @redirect
24
- new_uri.query = query_string(new_uri)
25
- end
26
-
27
- new_uri
20
+ rescue
21
+ puts response.body.to_s
28
22
  end
29
23
  end
30
24
  end
@@ -0,0 +1,32 @@
1
+ module CrowdFlower
2
+ class Unit
3
+ include Defaults
4
+ attr_reader :job
5
+
6
+ def initialize(job)
7
+ @job = job
8
+ Unit.base_uri CrowdFlower.with_domain("/jobs/#{@job.id}/units")
9
+ Unit.default_params CrowdFlower.key
10
+ end
11
+
12
+ def all(page = 1, limit = 1000)
13
+ Unit.get("", {:query => {:limit => limit, :page => page}})
14
+ end
15
+
16
+ def get(id)
17
+ Unit.get("/#{id}")
18
+ end
19
+
20
+ def create(data, gold = nil)
21
+ Unit.post("", {:query => {:unit => {:data => data.to_json, :golden => gold}}})
22
+ end
23
+
24
+ def copy(unit_id, job_id, data = {})
25
+ Unit.get("/#{unit_id}/copy", {:query => {:unit => {:job_id => job_id, :data => data}}})
26
+ end
27
+
28
+ def split(on, with = " ")
29
+ Unit.get("/split", {:query => {:on => on, :with => with}})
30
+ end
31
+ end
32
+ end
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{ruby-crowdflower}
5
- s.version = "0.0.0"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Brian P O'Rourke", "Chris Van Pelt"]
9
- s.date = %q{2009-07-31}
9
+ s.date = %q{2009-08-07}
10
10
  s.description = %q{A toolkit for interacting with CrowdFlower via the REST API.
11
11
 
12
12
  This is alpha software in its most nascent stages, and is not
@@ -26,8 +26,12 @@ yet ready for use with the current version of CrowdFlower.
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "lib/ruby-crowdflower.rb",
29
- "lib/ruby-crowdflower/crowdflower.rb",
30
- "lib/ruby-crowdflower/httparty.rb",
29
+ "lib/ruby-crowdflower/base.rb",
30
+ "lib/ruby-crowdflower/job.rb",
31
+ "lib/ruby-crowdflower/judgment.rb",
32
+ "lib/ruby-crowdflower/order.rb",
33
+ "lib/ruby-crowdflower/patches/httparty.rb",
34
+ "lib/ruby-crowdflower/unit.rb",
31
35
  "ruby-crowdflower.gemspec",
32
36
  "spec/ruby-crowdflower_spec.rb",
33
37
  "spec/spec_helper.rb"
@@ -35,7 +39,7 @@ yet ready for use with the current version of CrowdFlower.
35
39
  s.homepage = %q{http://github.com/dolores/ruby-crowdflower}
36
40
  s.rdoc_options = ["--charset=UTF-8"]
37
41
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.3}
42
+ s.rubygems_version = %q{1.3.4}
39
43
  s.summary = %q{a toolkit for the CrowdFlower API}
40
44
  s.test_files = [
41
45
  "spec/ruby-crowdflower_spec.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bpo-ruby-crowdflower
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian P O'Rourke
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-07-31 00:00:00 -07:00
13
+ date: 2009-08-07 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -40,14 +40,17 @@ files:
40
40
  - Rakefile
41
41
  - VERSION
42
42
  - lib/ruby-crowdflower.rb
43
- - lib/ruby-crowdflower/crowdflower.rb
44
- - lib/ruby-crowdflower/httparty.rb
43
+ - lib/ruby-crowdflower/base.rb
44
+ - lib/ruby-crowdflower/job.rb
45
+ - lib/ruby-crowdflower/judgment.rb
46
+ - lib/ruby-crowdflower/order.rb
47
+ - lib/ruby-crowdflower/patches/httparty.rb
48
+ - lib/ruby-crowdflower/unit.rb
45
49
  - ruby-crowdflower.gemspec
46
50
  - spec/ruby-crowdflower_spec.rb
47
51
  - spec/spec_helper.rb
48
52
  has_rdoc: false
49
53
  homepage: http://github.com/dolores/ruby-crowdflower
50
- licenses:
51
54
  post_install_message:
52
55
  rdoc_options:
53
56
  - --charset=UTF-8
@@ -68,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
71
  requirements: []
69
72
 
70
73
  rubyforge_project:
71
- rubygems_version: 1.3.5
74
+ rubygems_version: 1.2.0
72
75
  signing_key:
73
76
  specification_version: 3
74
77
  summary: a toolkit for the CrowdFlower API
@@ -1,132 +0,0 @@
1
- module CrowdFlower
2
- def self.connect!(key)
3
- @@conn = Base.new(key)
4
- end
5
-
6
- def self.conn
7
- raise "Please establish a connection using 'CrowdFlower.connect!'" unless @@conn
8
- @@conn.class
9
- end
10
-
11
- class Base
12
- include HTTParty
13
-
14
- def initialize(key)
15
- Base.default_params(:key => key)
16
- end
17
- end
18
-
19
- module Defaults
20
- def self.included(base)
21
- base.send :include, HTTParty
22
- base.send :headers, "HTTP_ACCEPT" => "application/json"
23
- base.send :format, :json
24
- end
25
- end
26
-
27
- class Job
28
- include Defaults
29
- attr_reader :job_id
30
-
31
- def initialize(job_id)
32
- @job_id = job_id
33
- Job.base_uri "https://api.crowdflower.com/v1/jobs"
34
- Job.default_params(CrowdFlower.conn.default_params)
35
- end
36
-
37
- def self.all
38
- Job.get("/")
39
- end
40
-
41
- def get(id = nil)
42
- Job.get("/#{@job_id || id}")
43
- end
44
-
45
- #Copies a job and optionally gold or all units.
46
- #Parameters
47
- # opts: Hash
48
- # gold: when set to true copies gold units
49
- # all_units: when set to true copies all units
50
- def copy(opts = {})
51
- Job.get("/#{@job_id}/copy", {:query => opts})
52
- end
53
-
54
- def status
55
- Job.get("/#{@job_id}/ping")
56
- end
57
-
58
- def download_csv(full = true, filename = nil)
59
- filename ||= "#{full ? "f" : "a"}#{@job_id}.csv"
60
- res = Job.get("/#{@job_id}.csv", {:format => :csv, :query => {:full => full}})
61
- puts "Status... #{res.code.inspect}"
62
- if res.code == 202
63
- puts "CSV Generating... Trying again in 10 seconds."
64
- Kernel.sleep 10
65
- download_csv
66
- else
67
- puts "CSV written to: #{File.expand_path(filename)}"
68
- File.open(filename, "w") {|f| f.puts res.body }
69
- end
70
- end
71
-
72
- def pause
73
- Job.get("/#{@job_id}/pause")
74
- end
75
-
76
- def resume
77
- Job.get("/#{@job_id}/resume")
78
- end
79
-
80
- def cancel
81
- Job.get("/#{@job_id}/cancel")
82
- end
83
- end
84
-
85
- class Unit
86
- include Defaults
87
-
88
- def initialize(job)
89
- @job = job
90
- Unit.base_uri "https://api.crowdflower.com/v1/jobs/#{@job.job_id}/units"
91
- Unit.default_params(CrowdFlower.conn.default_params)
92
- end
93
-
94
- def all(page = 1, limit = 1000)
95
- Unit.get("", {:query => {:limit => limit, :page => page}})
96
- end
97
-
98
- def get(id)
99
- Unit.get("/#{id}")
100
- end
101
-
102
- def create(data, gold = nil)
103
- Unit.post("", {:query => {:unit => {:data => data.to_json, :golden => gold}}})
104
- end
105
-
106
- def copy(unit_id, job_id, data = {})
107
- Unit.get("/#{unit_id}/copy", {:query => {:unit => {:job_id => job_id, :data => data}}})
108
- end
109
-
110
- def split(on, with = " ")
111
- Unit.get("/split", {:query => {:on => on, :with => with}})
112
- end
113
- end
114
-
115
- class Judgment
116
- include Defaults
117
-
118
- def initialize(job)
119
- Judgment.base_uri "https://api.crowdflower.com/v1/jobs/#{@job.job_id}/judgments"
120
- Judgment.default_params(CrowdFlower.conn.default_params)
121
- end
122
-
123
- #Pull every judgment
124
- def all(page = 1, limit = 1000)#full = true
125
- Judgment.get("", {:query => {:limit => limit, :page => page}})
126
- end
127
-
128
- def get(id)
129
- Judgment.get("/#{id}")
130
- end
131
- end
132
- end