turkee 1.0.4 → 1.1.0

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/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