turkee 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/README.rdoc CHANGED
@@ -4,41 +4,47 @@ Seamlessly convert your Rails forms for use on Mechanical Turk. Then, easily im
4
4
 
5
5
  External forms are created using a simple form helper. HITs are created by issuing a rake command. Retrieving submitted response data and importing that data into your model(s) requires just one more rake command.
6
6
 
7
- == Examples
8
7
 
9
- If you'd like to jump straight into code, check out the {Turkee Iterator}[https://github.com/aantix/Turkee-Iterator] example.
8
+ == Rails 2
10
9
 
11
- == Dependencies
10
+ I'm no longer supporting Rails 2.x. If you have Rails 2 changes, message me and we can look to maintaing a Rails 2.x branch.
12
11
 
13
- Make sure that the rturk gem is installed configured with your Amazon Turk credentials. I created a config/initializers/turk_task_config.rb file with the following in it:
14
12
 
15
- TURKTASK_AWSACCESSKEYID = 'XXXXXXXXXXXXXXXXXX'
16
- TURKTASK_AWSACCESSKEY = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY'
13
+ == Mechanical Turk API Changes
17
14
 
18
- RTurk::logger.level = Logger::DEBUG
19
- RTurk.setup(AWSACCESSKEYID, AWSACCESSKEY, :sandbox => (Rails.env == 'production' ? false : true))
20
-
21
- == Install
22
-
23
- Install the Turkee gem:
15
+ Mechanical Turk is now requiring that the hitId, workerId, and the turkSubmitTo parameters be passed in along with the assignmentId and form parameters.
24
16
 
25
- sudo gem install turkee
17
+ What does this mean for you? Not much besides the fact that now when you construct your forms using turkee_form_for, you'll be passing in your entire params hash instead of just the assignment_id. The code snippet below reflect this change.
26
18
 
27
- For Rails 2, add it to your environment.rb configuration as a gem dependency:
28
19
 
29
- config.gem 'turkee'
20
+ == Install
30
21
 
31
- For Rails 3, add it to your Gemfile as a gem dependency, then do a 'bundle install':
22
+ Add turkee to your Gemfile as a gem dependency, then do a 'bundle install':
32
23
 
33
24
  gem 'turkee'
34
25
 
35
26
  To access the Turkee rake tasks, add the following to your application's Rakefile:
36
27
  require 'tasks/turkee'
37
28
 
38
- Run the turkee generator from your application directory to copy the needed migrations into your application:
29
+ Run the turkee generator from your application directory to copy the needed migrations and config/initializer into your application:
30
+
31
+ rails g turkee
32
+
33
+ If you haven't created a Mechanical Turk account, surf on over to {Amazon's Web Services}[http://aws.amazon.com/] and create an AWS account.
34
+
35
+ Once you have your account created, you can access your AWS access key and secret access key from {here.}[https://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key]
36
+
37
+
38
+ == Configuration
39
+
40
+ Inside the config/initializers directory, you'll see the file turkee.rb. Edit that file with your Amazon credenti.
41
+
42
+ AWSACCESSKEYID = 'XXXXXXXXXXXXXXXXXX'
43
+ AWSSECRETACCESSKEY = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY'
44
+
45
+ RTurk::logger.level = Logger::DEBUG
46
+ RTurk.setup(AWSACCESSKEYID, AWSSECRETACCESSKEY, :sandbox => (Rails.env == 'production' ? false : true))
39
47
 
40
- ./script/generate turkee # Rails 2
41
- rails g turkee # Rails 3
42
48
 
43
49
  == Use
44
50
 
@@ -50,8 +56,7 @@ Run the turkee generator from your application directory to copy the needed migr
50
56
  class SurveysController < ApplicationController
51
57
 
52
58
  def new
53
- @assignment_id = params[:assignmentId]
54
- @disabled = Turkee::TurkeeFormHelper::disable_form_fields?(@assignment_id)
59
+ @disabled = Turkee::TurkeeFormHelper::disable_form_fields?(params)
55
60
 
56
61
  # If you wanted to find the associated turkee_task, you could do a find by hitId
57
62
  # Not necessary in a simple example.
@@ -62,7 +67,8 @@ Run the turkee generator from your application directory to copy the needed migr
62
67
  end
63
68
 
64
69
  3) Change your forms to use the form helper.
65
- <% turkee_form_for(@survey, @assignment_id) do |f| %>
70
+
71
+ <% turkee_form_for(@survey, params) do |f| %>
66
72
  <p><%= f.text_area :value, :disabled => @disabled %></p>
67
73
  <p><%= f.submit 'Create', :disabled => @disabled %></p>
68
74
  <% end %>
data/Rakefile CHANGED
@@ -28,11 +28,12 @@ begin
28
28
  gem.email = "jjones@aantix.com"
29
29
  gem.homepage = "http://github.com/aantix/turkee"
30
30
  gem.authors = ["Jim Jones"]
31
- gem.add_development_dependency "rturk", ">= 2.3.0"
32
- gem.add_development_dependency "lockfile", ">= 1.4.3"
31
+ gem.add_dependency(%q<rails>, [">= 3.0.7"])
32
+ gem.add_dependency(%q<rturk>, [">= 2.3.0"])
33
+ gem.add_dependency(%q<lockfile>, [">= 1.4.3"])
33
34
  gem.post_install_message = INSTALL_MESSAGE
34
35
  gem.require_path = 'lib'
35
- gem.files = %w(MIT-LICENSE README.textile Rakefile init.rb) + Dir.glob("{generators,lib,spec}/**/*")
36
+ gem.files = %w(MIT-LICENSE README.textile Gemfile Rakefile init.rb) + Dir.glob("{lib,spec}/**/*")
36
37
 
37
38
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
38
39
  end
@@ -0,0 +1,8 @@
1
+ # Go to this page https://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
2
+ # to retrieve your AWS/Mechanical Turk access keys.
3
+
4
+ AWSACCESSKEYID = 'XXXXXXXXXXXXXXXXXX'
5
+ AWSSECRETACCESSKEY = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY'
6
+
7
+ RTurk::logger.level = Logger::DEBUG
8
+ RTurk.setup(AWSACCESSKEYID, AWSSECRETACCESSKEY, :sandbox => (Rails.env == 'production' ? false : true))
@@ -0,0 +1,29 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ class TurkeeGenerator < Rails::Generators::Base
5
+ include Rails::Generators::Migration
6
+
7
+ # Implement the required interface for Rails::Generators::Migration.
8
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
9
+ def self.next_migration_number(dirname)
10
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
11
+ end
12
+
13
+ source_root File.expand_path("../templates", __FILE__)
14
+
15
+ desc "Creates initializer and migrations."
16
+
17
+ def create_initializer
18
+ template "turkee.rb", "config/initializers/turkee.rb"
19
+ end
20
+
21
+ def create_migrations
22
+ migration_template "turkee_migration.rb.erb", "db/migrate/create_turkee_tasks.rb"
23
+
24
+ # Need this sleep so that we don't get the same migration timestamp for both migrations
25
+ sleep 1
26
+
27
+ migration_template "turkee_imported_assignments.rb.erb", "db/migrate/create_turkee_imported_assignments.rb"
28
+ end
29
+ end
data/lib/tasks/turkee.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'rake'
2
2
  require 'turkee'
3
3
 
4
- include ActionController::PolymorphicRoutes
5
- include ActionView::Helpers::UrlHelper
4
+ #include ActionController::PolymorphicRoutes
5
+ #include ActionView::Helpers::UrlHelper
6
6
 
7
7
  # clear && rake turkee:post_hit['Test title','Test desc','Joke',3,0.05,1] --trace
8
8
 
data/lib/turkee.rb CHANGED
@@ -17,7 +17,7 @@ module Turkee
17
17
  # belongs_to :task, :polymorphic => true
18
18
  HIT_FRAMEHEIGHT = 1000
19
19
 
20
- named_scope :unprocessed_hits, :conditions => ['complete = ?', false]
20
+ scope :unprocessed_hits, :conditions => ['complete = ?', false]
21
21
 
22
22
  # Use this method to go out and retrieve the data for all of the posted Turk Tasks.
23
23
  # Each specific TurkeeTask object (determined by task_type field) is in charge of
@@ -159,9 +159,11 @@ module Turkee
159
159
  end
160
160
 
161
161
  def self.form_url(host, typ)
162
- @app ||= ActionController::Integration::Session.new
162
+ @app ||= ActionController::Integration::Session.new(Rails.application)
163
163
  #@app.send("new_#{typ.to_s.underscore}_url(:host => '#{host}')") # Not sure why app does respond when :host is passed...
164
- (host + @app.send("new_#{typ.to_s.underscore}_path")) # Workaround for now. :(
164
+ url = (host + @app.send("new_#{typ.to_s.underscore}_path")) # Workaround for now. :(
165
+ puts "form_url = #{url}"
166
+ url
165
167
  end
166
168
 
167
169
  end
@@ -169,35 +171,42 @@ module Turkee
169
171
 
170
172
  module TurkeeFormHelper
171
173
 
172
- # Rails 2.3.8 form_for implementation with the exception of the form action url
174
+ # Rails 3.0.7 form_for implementation with the exception of the form action url
173
175
  # will always point to the Amazon externalSubmit interface and you must pass in the
174
176
  # assignment_id parameter.
175
- def turkee_form_for(record_or_name_or_array, assignment_id, *args, &proc)
177
+ def turkee_form_for(record_or_name_or_array, params, *args, &proc)
176
178
  raise ArgumentError, "Missing block" unless block_given?
179
+ raise ArgumentError, "turkee_form_for now requires that you pass in the entire params hash, instead of just the assignmentId value. " unless params.is_a?(Hash)
177
180
 
178
181
  options = args.extract_options!
179
182
 
180
183
  case record_or_name_or_array
181
- when String, Symbol
182
- object_name = record_or_name_or_array
183
- when Array
184
- object = record_or_name_or_array.last
185
- object_name = ActionController::RecordIdentifier.singular_class_name(object)
186
- apply_form_for_options!(record_or_name_or_array, options)
187
- args.unshift object
188
- else
189
- object = record_or_name_or_array
190
- object_name = ActionController::RecordIdentifier.singular_class_name(object)
191
- apply_form_for_options!([object], options)
192
- args.unshift object
184
+ when String, Symbol
185
+ ActiveSupport::Deprecation.warn("Using form_for(:name, @resource) is deprecated. Please use form_for(@resource, :as => :name) instead.", caller) unless args.empty?
186
+ object_name = record_or_name_or_array
187
+ when Array
188
+ object = record_or_name_or_array.last
189
+ object_name = options[:as] || ActiveModel::Naming.singular(object)
190
+ apply_form_for_options!(record_or_name_or_array, options)
191
+ args.unshift object
192
+ else
193
+ object = record_or_name_or_array
194
+ object_name = options[:as] || ActiveModel::Naming.singular(object)
195
+ apply_form_for_options!([object], options)
196
+ args.unshift object
193
197
  end
194
198
 
195
- # concat(form_tag(options.delete(:url) || {}, options.delete(:html) || {}))
196
- concat(form_tag(mturk_url, options.delete(:html) || {}))
197
- concat("<input type=\"hidden\" id=\"assignmentId\" name=\"assignmentId\" value=\"#{assignment_id}\"/>")
198
- fields_for(object_name, *(args << options), &proc)
199
- concat('</form>'.html_safe)
200
- self
199
+ (options[:html] ||= {})[:remote] = true if options.delete(:remote)
200
+
201
+ output = form_tag(mturk_url, options.delete(:html) || {})
202
+ params.each do |k,v|
203
+ unless k =~ /^action$/i || k =~ /^controller$/i
204
+ output.safe_concat("<input type=\"hidden\" id=\"#{k}\" name=\"#{CGI.escape(k)}\" value=\"#{CGI.escape(v)}\"/>")
205
+ end
206
+ end
207
+ options[:disabled] = true if params[:assignmentId].nil? || Turkee::TurkeeFormHelper::disable_form_fields?(params[:assignmentId])
208
+ output << fields_for(object_name, *(args << options), &proc)
209
+ output.safe_concat('</form>')
201
210
  end
202
211
 
203
212
  # Returns the external Mechanical Turk url used to post form data based on whether RTurk is cofigured
@@ -207,10 +216,10 @@ module Turkee
207
216
  end
208
217
 
209
218
  # Returns whether the form fields should be disabled or not (based on the assignment_id)
210
- def self.disable_form_fields?(assignment_id)
219
+ def self.disable_form_fields?(assignment)
220
+ assignment_id = assignment.is_a?(Hash) ? assignment[:assignmentId] : assignment
211
221
  (assignment_id.nil? || assignment_id == 'ASSIGNMENT_ID_NOT_AVAILABLE')
212
222
  end
213
-
214
223
  end
215
224
 
216
225
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turkee
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 0
9
- - 4
10
- version: 1.0.4
4
+ prerelease:
5
+ version: 1.1.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Jim Jones
@@ -15,41 +10,52 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-03 00:00:00 -08:00
19
- default_executable:
13
+ date: 2011-05-16 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
- name: rturk
23
- prerelease: false
16
+ name: turkee
24
17
  requirement: &id001 !ruby/object:Gem::Requirement
25
18
  none: false
26
19
  requirements:
27
20
  - - ">="
28
21
  - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 2
32
- - 3
33
- - 0
34
- version: 2.3.0
35
- type: :development
22
+ version: "0"
23
+ type: :runtime
24
+ prerelease: false
36
25
  version_requirements: *id001
37
26
  - !ruby/object:Gem::Dependency
38
- name: lockfile
39
- prerelease: false
27
+ name: rails
40
28
  requirement: &id002 !ruby/object:Gem::Requirement
41
29
  none: false
42
30
  requirements:
43
31
  - - ">="
44
32
  - !ruby/object:Gem::Version
45
- hash: 1
46
- segments:
47
- - 1
48
- - 4
49
- - 3
50
- version: 1.4.3
51
- type: :development
33
+ version: 3.0.7
34
+ type: :runtime
35
+ prerelease: false
52
36
  version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rturk
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 2.3.0
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: lockfile
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.4.3
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *id004
53
59
  description: Turkee will help you to create your Rails forms, post the HITs, and retrieve the user entered values from Mechanical Turk.
54
60
  email: jjones@aantix.com
55
61
  executables: []
@@ -60,10 +66,12 @@ extra_rdoc_files:
60
66
  - LICENSE
61
67
  - README.rdoc
62
68
  files:
69
+ - Gemfile
63
70
  - Rakefile
64
- - generators/turkee/templates/turkee_imported_assignments.rb.erb
65
- - generators/turkee/templates/turkee_migration.rb.erb
66
- - generators/turkee/turkee_generator.rb
71
+ - lib/generators/turkee/templates/turkee.rb
72
+ - lib/generators/turkee/templates/turkee_imported_assignments.rb.erb
73
+ - lib/generators/turkee/templates/turkee_migration.rb.erb
74
+ - lib/generators/turkee/turkee_generator.rb
67
75
  - lib/tasks/turkee.rb
68
76
  - lib/turkee.rb
69
77
  - spec/spec.opts
@@ -71,13 +79,12 @@ files:
71
79
  - spec/turkee_spec.rb
72
80
  - LICENSE
73
81
  - README.rdoc
74
- has_rdoc: true
75
82
  homepage: http://github.com/aantix/turkee
76
83
  licenses: []
77
84
 
78
85
  post_install_message: "\n ========================================================================\n Turkee Installation Complete.\n ------------------------------------------------------------------------\n\n For instructions on gem usage, visit:\n http://github.com/aantix/turkee#readme\n\n ** If you like the Turkee gem, please click the \"watch\" button on the\n Github project page. You'll make me smile and feel appreciated. :)\n http://github.com/aantix/turkee\n\n ========================================================================\n -- Gobble, gobble.\n "
79
- rdoc_options:
80
- - --charset=UTF-8
86
+ rdoc_options: []
87
+
81
88
  require_paths:
82
89
  - lib
83
90
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -85,26 +92,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
92
  requirements:
86
93
  - - ">="
87
94
  - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
95
  version: "0"
92
96
  required_rubygems_version: !ruby/object:Gem::Requirement
93
97
  none: false
94
98
  requirements:
95
99
  - - ">="
96
100
  - !ruby/object:Gem::Version
97
- hash: 3
98
- segments:
99
- - 0
100
101
  version: "0"
101
102
  requirements: []
102
103
 
103
104
  rubyforge_project:
104
- rubygems_version: 1.3.7
105
+ rubygems_version: 1.8.1
105
106
  signing_key:
106
107
  specification_version: 3
107
108
  summary: Turkee makes dealing with Amazon's Mechnical Turk a breeze.
108
- test_files:
109
- - spec/spec_helper.rb
110
- - spec/turkee_spec.rb
109
+ test_files: []
110
+
@@ -1,15 +0,0 @@
1
- class TurkeeGenerator < Rails::Generator::Base
2
-
3
- def manifest
4
- record do |m|
5
- m.migration_template "turkee_migration.rb.erb", File.join('db', 'migrate'), :migration_file_name => 'create_turkee_tasks'
6
- m.sleep 1 # Need this sleep so that we don't get the same migration timestamp for both migrations
7
- m.migration_template "turkee_imported_assignments.rb.erb", File.join('db', 'migrate'), :migration_file_name => 'create_turkee_imported_assignments'
8
- end
9
- end
10
-
11
- def banner
12
- %{Usage: #{$0} #{spec.name}\nCopies needed migrations to project.}
13
- end
14
-
15
- end