typingpool 0.7.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.
Files changed (90) hide show
  1. data/Rakefile +23 -0
  2. data/bin/tp-assign +240 -0
  3. data/bin/tp-collect +50 -0
  4. data/bin/tp-config +114 -0
  5. data/bin/tp-finish +101 -0
  6. data/bin/tp-make +169 -0
  7. data/bin/tp-review +175 -0
  8. data/lib/typingpool/amazon.rb +732 -0
  9. data/lib/typingpool/app.rb +634 -0
  10. data/lib/typingpool/config.rb +344 -0
  11. data/lib/typingpool/error.rb +22 -0
  12. data/lib/typingpool/filer.rb +396 -0
  13. data/lib/typingpool/project.rb +593 -0
  14. data/lib/typingpool/template.rb +175 -0
  15. data/lib/typingpool/templates/assignment/amazon-init.js +38 -0
  16. data/lib/typingpool/templates/assignment/interview/nameless.html.erb +13 -0
  17. data/lib/typingpool/templates/assignment/interview/noisy.html.erb +12 -0
  18. data/lib/typingpool/templates/assignment/interview/partials/voices.html.erb +10 -0
  19. data/lib/typingpool/templates/assignment/interview/phone.html.erb +12 -0
  20. data/lib/typingpool/templates/assignment/interview.html.erb +11 -0
  21. data/lib/typingpool/templates/assignment/main.css +20 -0
  22. data/lib/typingpool/templates/assignment/partials/entry.html.erb +19 -0
  23. data/lib/typingpool/templates/assignment/partials/footer.html.erb +3 -0
  24. data/lib/typingpool/templates/assignment/partials/header.html.erb +11 -0
  25. data/lib/typingpool/templates/assignment/partials/labeling-example.html.erb +4 -0
  26. data/lib/typingpool/templates/assignment/partials/labeling.html.erb +5 -0
  27. data/lib/typingpool/templates/assignment/partials/length-description.html.erb +6 -0
  28. data/lib/typingpool/templates/assignment/partials/voices.html.erb +10 -0
  29. data/lib/typingpool/templates/assignment/speech.html.erb +11 -0
  30. data/lib/typingpool/templates/config.yml +21 -0
  31. data/lib/typingpool/templates/project/audio/chunks/.empty_directory +0 -0
  32. data/lib/typingpool/templates/project/audio/originals/.empty_directory +0 -0
  33. data/lib/typingpool/templates/project/data/.empty_directory +0 -0
  34. data/lib/typingpool/templates/project/etc/ About these files - read me.txt +8 -0
  35. data/lib/typingpool/templates/project/etc/audio-compat.js +25 -0
  36. data/lib/typingpool/templates/project/etc/player/audio-player.js +4 -0
  37. data/lib/typingpool/templates/project/etc/player/license.txt +19 -0
  38. data/lib/typingpool/templates/project/etc/player/player.swf +0 -0
  39. data/lib/typingpool/templates/project/etc/transcript.css +49 -0
  40. data/lib/typingpool/templates/transcript.html.erb +23 -0
  41. data/lib/typingpool/test/fixtures/amazon-question-html.html +95 -0
  42. data/lib/typingpool/test/fixtures/amazon-question-url.txt +1 -0
  43. data/lib/typingpool/test/fixtures/audio/mp3/interview.1.mp3 +0 -0
  44. data/lib/typingpool/test/fixtures/audio/mp3/interview.2.mp3 +0 -0
  45. data/lib/typingpool/test/fixtures/audio/wma/VN620007.WMA +0 -0
  46. data/lib/typingpool/test/fixtures/audio/wma/VN620052.WMA +0 -0
  47. data/lib/typingpool/test/fixtures/config-1 +20 -0
  48. data/lib/typingpool/test/fixtures/config-2 +25 -0
  49. data/lib/typingpool/test/fixtures/not_yaml.txt +4 -0
  50. data/lib/typingpool/test/fixtures/template-2.html.erb +10 -0
  51. data/lib/typingpool/test/fixtures/template-3.html.erb +22 -0
  52. data/lib/typingpool/test/fixtures/template.html.erb +10 -0
  53. data/lib/typingpool/test/fixtures/tp_collect_id.txt +1 -0
  54. data/lib/typingpool/test/fixtures/tp_collect_sandbox-assignment.csv +8 -0
  55. data/lib/typingpool/test/fixtures/tp_review_id.txt +1 -0
  56. data/lib/typingpool/test/fixtures/tp_review_sandbox-assignment.csv +8 -0
  57. data/lib/typingpool/test/fixtures/transcript-chunks.csv +226 -0
  58. data/lib/typingpool/test/fixtures/utf8_transcript.txt +7 -0
  59. data/lib/typingpool/test/fixtures/vcr/tp-collect-1.yml +2712 -0
  60. data/lib/typingpool/test/fixtures/vcr/tp-collect-2.yml +2718 -0
  61. data/lib/typingpool/test/fixtures/vcr/tp-collect-3.yml +2768 -0
  62. data/lib/typingpool/test/fixtures/vcr/tp-review-1.yml +570 -0
  63. data/lib/typingpool/test/fixtures/vcr/tp-review-2.yml +351 -0
  64. data/lib/typingpool/test.rb +418 -0
  65. data/lib/typingpool/transcript.rb +181 -0
  66. data/lib/typingpool/utility.rb +272 -0
  67. data/lib/typingpool.rb +500 -0
  68. data/test/make_amazon_question_fixture.rb +24 -0
  69. data/test/make_tp_collect_fixture_1.rb +26 -0
  70. data/test/make_tp_collect_fixture_2.rb +16 -0
  71. data/test/make_tp_collect_fixture_3.rb +15 -0
  72. data/test/make_tp_collect_fixture_4.rb +17 -0
  73. data/test/make_tp_review_fixture_1.rb +26 -0
  74. data/test/make_tp_review_fixture_2.rb +30 -0
  75. data/test/make_transcript_chunks_fixture.rb +53 -0
  76. data/test/test_integration_script_1_tp_config.rb +108 -0
  77. data/test/test_integration_script_2_tp_make.rb +119 -0
  78. data/test/test_integration_script_3_tp_assign.rb +152 -0
  79. data/test/test_integration_script_4_tp_review.rb +72 -0
  80. data/test/test_integration_script_5_tp_collect.rb +44 -0
  81. data/test/test_integration_script_6_tp_finish.rb +123 -0
  82. data/test/test_unit_amazon.rb +153 -0
  83. data/test/test_unit_config.rb +94 -0
  84. data/test/test_unit_filer.rb +202 -0
  85. data/test/test_unit_project.rb +168 -0
  86. data/test/test_unit_project_local.rb +68 -0
  87. data/test/test_unit_project_remote.rb +157 -0
  88. data/test/test_unit_template.rb +111 -0
  89. data/test/test_unit_transcript.rb +77 -0
  90. metadata +234 -0
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(File.dirname($0)), 'lib')
4
+
5
+ require 'typingpool'
6
+ require 'typingpool/test'
7
+ require 'stringio'
8
+
9
+ class TestProjectRemote < Typingpool::Test
10
+ def test_project_remote_from_config
11
+ assert(remote = Typingpool::Project::Remote.from_config(project_default[:title], dummy_config(1)))
12
+ assert_instance_of(Typingpool::Project::Remote::S3, remote)
13
+ assert(remote = Typingpool::Project::Remote.from_config(project_default[:title], dummy_config(2)))
14
+ assert_instance_of(Typingpool::Project::Remote::SFTP, remote)
15
+ config = dummy_config(2)
16
+ config.to_hash.delete('sftp')
17
+ assert_raises(Typingpool::Error) do
18
+ Typingpool::Project::Remote.from_config(project_default[:title], config)
19
+ end #assert_raises
20
+ end
21
+
22
+ def test_project_remote_s3_base
23
+ config = dummy_config(1)
24
+ assert(remote = Typingpool::Project::Remote::S3.new(project_default[:title], config.amazon))
25
+ %w(key secret bucket).each do |param|
26
+ refute_nil(remote.send(param.to_sym))
27
+ assert_equal(config.amazon.send(param.to_sym), remote.send(param.to_sym))
28
+ end #%w().each do...
29
+ assert_nil(config.amazon.url)
30
+ assert_includes(remote.url, config.amazon.bucket)
31
+ custom_url = 'http://tp.example.com/tp-test/1/2/3'
32
+ config.amazon.url = custom_url
33
+ assert(remote = Typingpool::Project::Remote::S3.new(project_default[:title], config.amazon))
34
+ refute_nil(remote.url)
35
+ refute_includes(remote.url, config.amazon.bucket)
36
+ assert_includes(remote.url, custom_url)
37
+ assert_equal('tp.example.com', remote.host)
38
+ assert_equal('/tp-test/1/2/3', remote.path)
39
+ end
40
+
41
+ def test_project_remote_s3_networked
42
+ assert(config = self.config)
43
+ skip_if_no_s3_credentials('Project::Remote::S3 upload and delete tests', config)
44
+ config.to_hash.delete('sftp')
45
+ assert(project = Typingpool::Project.new(project_default[:title], config))
46
+ assert_instance_of(Typingpool::Project::Remote::S3, remote = project.remote)
47
+ standard_put_remove_tests(remote)
48
+ end
49
+
50
+ def test_project_remote_sftp_base
51
+ config = dummy_config(2)
52
+ assert(remote = Typingpool::Project::Remote::SFTP.new(project_default[:title], config.sftp))
53
+ %w(host path user url).each do |param|
54
+ refute_nil(remote.send(param.to_sym))
55
+ assert_equal(config.sftp.send(param.to_sym), remote.send(param.to_sym))
56
+ end #%w().each do...
57
+ assert_equal('example.com', remote.host)
58
+ assert_equal('public_html/transfer', remote.path)
59
+ end
60
+
61
+ def test_project_remote_sftp_networked
62
+ assert(config = self.config)
63
+ skip_if_no_sftp_credentials('Project::Remote::SFTP upload and delete tests', config)
64
+ assert(project = Typingpool::Project.new(project_default[:title], config))
65
+ assert_instance_of(Typingpool::Project::Remote::SFTP, remote = project.remote)
66
+ standard_put_remove_tests(remote)
67
+ end
68
+
69
+ def standard_put_remove_tests(remote)
70
+ basenames = ['amazon-question-html.html', 'amazon-question-url.txt']
71
+ local_files = basenames.map{|basename| File.join(fixtures_dir, basename) }
72
+ local_files.each{|path| assert(File.exists? path) }
73
+ strings = local_files.map{|path| File.read(path) }
74
+ strings.each{|string| refute_empty(string) }
75
+
76
+ #with default basenames
77
+ put_remove_test(
78
+ :remote => remote,
79
+ :streams => local_files.map{|path| File.new(path) },
80
+ :test_with => lambda{|urls| urls.each_with_index{|url, i| assert_includes(url, basenames[i]) } }
81
+ )
82
+
83
+ #now with different basenames
84
+ remote_basenames = basenames.map{|name| [File.basename(name, '.*'), pseudo_random_chars, File.extname(name)].join }
85
+ base_args = {
86
+ :remote => remote,
87
+ :as => remote_basenames,
88
+ :test_with => lambda{|urls| urls.each_with_index{|url, i| assert_includes(url, remote_basenames[i]) }}
89
+ }
90
+
91
+ put_remove_test(
92
+ base_args.merge(
93
+ :streams => local_files.map{|path| File.new(path) },
94
+ )
95
+ )
96
+
97
+ #now using remove_urls for removal
98
+ put_remove_test(
99
+ base_args.merge(
100
+ :streams => local_files.map{|path| File.new(path) },
101
+ :remove_with => lambda{|urls| base_args[:remote].remove_urls(urls) }
102
+ )
103
+ )
104
+
105
+ #now with stringio streams
106
+ put_remove_test(
107
+ base_args.merge(
108
+ :streams => strings.map{|string| StringIO.new(string) },
109
+ )
110
+ )
111
+
112
+
113
+ end
114
+
115
+ #Uploads and then deletes streams to a remote server, running some
116
+ #basic tests along the way, along with some optional lambdas.
117
+ # ==== Params
118
+ # args[:remote] Required. A Project::Remote instance to use for
119
+ # putting and removing.
120
+ # args[:streams] Required. An enumerable collection of IO streams to
121
+ # put and remove.
122
+ # args[:as] Optional. An array of basenames to use to name the
123
+ # streams remotely. Default is to call
124
+ # Project::Remote#put with no 'as' param.
125
+ # args[:test_with] Optional. Lambda to call after putting the
126
+ # streams and after running the standard tests.
127
+ # args[:remove_with] Optional. Lambda to call to remove the remote
128
+ # files. Default lambda calls
129
+ # args[:remote].remove(args[:as])
130
+ # ==== Returns
131
+ #URLs of the former remote files (non functioning/404)
132
+ def put_remove_test(args)
133
+ args[:remote] or raise Error::Argument, "Must supply a Project::Remote instance as :remote"
134
+ args[:streams] or raise Error::Argument, "Must supply an array of IO streams as :streams"
135
+ args[:remove_with] ||= lambda do |urls|
136
+ args[:remote].remove(urls.map{|url| Typingpool::Utility.url_basename(url) })
137
+ end #lambda do...
138
+ put_args = [args[:streams]]
139
+ put_args.push(args[:as]) if args[:as]
140
+ assert(urls = args[:remote].put(*put_args))
141
+ begin
142
+ assert_equal(args[:streams].count, urls.count)
143
+ urls.each{|url| assert(working_url?(url)) }
144
+ args[:test_with].call(urls) if args[:test_with]
145
+ ensure
146
+ args[:remove_with].call(urls)
147
+ end #begin
148
+ urls.each{|url| refute(working_url?(url)) }
149
+ urls
150
+ end
151
+
152
+ #Copy-pasted from Project::Remote so we don't have to make that a public method
153
+ def pseudo_random_chars(length=6)
154
+ (0...length).map{(65 + rand(25)).chr}.join
155
+ end
156
+
157
+ end #TestProjectRemote
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(File.dirname($0)), 'lib')
4
+
5
+ require 'typingpool'
6
+ require 'typingpool/test'
7
+ require 'fileutils'
8
+
9
+ class TestTemplate < Typingpool::Test
10
+ def test_template_base
11
+ assert(template1 = Typingpool::Template.new('template', [fixtures_dir]))
12
+ has_template_in_fixtures_dir_test(template1)
13
+ assert(template2 = Typingpool::Template.new('template.html.erb', [fixtures_dir]))
14
+ has_template_in_fixtures_dir_test(template2)
15
+ signature = 'ffffffffff'
16
+ assert_match(template1.render({:title => signature}), /#{signature}/)
17
+ refute_match(template1.read, /#{signature}/)
18
+ assert_match(template1.read, /<h1><%= title/i)
19
+ in_temp_dir do |dir1|
20
+ assert(template = Typingpool::Template.new('template', [dir1, fixtures_dir]))
21
+ assert(template.look_in.detect{|path| path == dir1})
22
+ has_template_in_fixtures_dir_test(template)
23
+ in_temp_dir do |dir2|
24
+ copy_template_fixture_into(dir2, '-2') do |path|
25
+ assert(template = Typingpool::Template.new('template', [dir1, dir2, fixtures_dir]))
26
+ assert_equal(path, template.full_path)
27
+ assert_match(template.render({:title => signature}), /#{signature}/)
28
+ refute_match(template.read, /#{signature}/)
29
+ assert_match(template.read, /<h2><%= title/i)
30
+ end #copy_template_fixture_into do...
31
+ end #in_temp_dir do |dir2|
32
+ end #in_temp_dir do |dir1|
33
+ end
34
+
35
+ def test_template_from_config
36
+ in_temp_dir do |dir1|
37
+ in_temp_dir do |dir2|
38
+ copy_template_fixture_into(dir2, '-2') do |path|
39
+ config = dummy_config
40
+ config.templates = dir2
41
+ assert(template = Typingpool::Template.from_config('template', config))
42
+ assert_equal(path, template.full_path)
43
+ assert_match(template.read, /<h2><%= title/i)
44
+ config.templates = dir1
45
+ exception = assert_raise(Typingpool::Error) do
46
+ template = Typingpool::Template.from_config('template', config)
47
+ end #assert_raises() do...
48
+ assert_match(exception.message, /could not find/i)
49
+ end #copy_template_into do...
50
+ end #in_temp_dir do |dir2|
51
+ end #in_temp_dir do |dir1|
52
+ end
53
+
54
+ def test_template_assignment
55
+ in_temp_dir do |dir|
56
+ copy_template_fixture_into(dir) do |path|
57
+ assignment_subdir = File.join(dir, 'assignment')
58
+ FileUtils.mkdir(assignment_subdir)
59
+ copy_template_fixture_into(assignment_subdir, '-2') do |assignment_path|
60
+ config = dummy_config
61
+ config.templates = dir
62
+ assert(template = Typingpool::Template::Assignment.from_config('template', config))
63
+ assert_equal(assignment_path, template.full_path)
64
+ assert_match(template.read, /<h2><%= title/i)
65
+ end #copy_template_fixture_into(assignment_subdir) do...
66
+ end #copy_template_fixture_into(dir, '') do...
67
+ end #in_temp_dir do...
68
+ end
69
+
70
+ def test_template_env
71
+ assert(template = Typingpool::Template.new('template-3', [fixtures_dir]))
72
+ signatures = [('g' * 9), ('h' * 11)]
73
+ assert(rendered = template.render(:title => signatures[0], :new_title => signatures[1]))
74
+ assert_match(rendered, /<h1><%= title/i)
75
+ assert_match(rendered, /<h1>#{signatures[0]}/i)
76
+ assert_match(rendered, /<h1>#{signatures[1]}/i)
77
+ in_temp_dir do |dir|
78
+ copy_template_fixture_into(dir) do |template_path|
79
+ subdir = File.join(dir, 'closer')
80
+ FileUtils.mkdir(subdir)
81
+ copy_template_fixture_into(subdir, '-2') do |closer_template_oath|
82
+ FileUtils.cp(File.join(fixtures_dir, 'template-3.html.erb'), subdir)
83
+ FileUtils.cp(File.join(fixtures_dir, 'template-2.html.erb'), subdir)
84
+ look_in = [dir, subdir]
85
+ assert(template = Typingpool::Template.new('template', look_in))
86
+ assert_match(template.read, /<h1><%= title/i)
87
+ refute_match(template.read, /<h2><%= title/i)
88
+ assert(calling_template = Typingpool::Template.new('template-3', look_in))
89
+ assert(rendered = calling_template.render(:title => signatures[0], :new_title => signatures[1]))
90
+ assert_match(rendered, /<h2>/)
91
+ refute_match(rendered, /<h1>/)
92
+ end #copy_template_fixture_into do...
93
+ end #copy_template_fixture_into do...
94
+ end #in_temp_dir do...
95
+ end
96
+
97
+ def copy_template_fixture_into(dir, which_fixture='')
98
+ dest = File.join(dir, 'template.html.erb')
99
+ FileUtils.cp(File.join(fixtures_dir, "template#{which_fixture}.html.erb"), dest)
100
+ begin
101
+ yield(dest)
102
+ ensure
103
+ File.delete(dest)
104
+ end #begin
105
+ end
106
+
107
+ def has_template_in_fixtures_dir_test(template)
108
+ assert_equal(File.join(fixtures_dir, 'template.html.erb'), template.full_path)
109
+ end
110
+
111
+ end #TestTemplate
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(File.dirname($0)), 'lib')
4
+
5
+ require 'typingpool'
6
+ require 'typingpool/test'
7
+
8
+ class TestTranscript < Typingpool::Test
9
+
10
+ def test_transcript_base
11
+ assert(transcript = Typingpool::Transcript.new(project_default[:title]))
12
+ assert_equal(project_default[:title], transcript.title)
13
+ assert_equal(0, transcript.count)
14
+ dummy_chunks = self.dummy_chunks
15
+ assert(transcript = Typingpool::Transcript.new(project_default[:title], dummy_chunks))
16
+ assert_equal(dummy_chunks.count, transcript.count)
17
+ assert_respond_to(transcript, :each)
18
+ transcript.each_with_index do |chunk, i|
19
+ assert_respond_to(chunk, :body)
20
+ assert_equal(dummy_chunks[i].body, chunk.body)
21
+ assert_equal(chunk.body, transcript[i].body)
22
+ end #transcript.each_with_index do...
23
+ assert(transcript = Typingpool::Transcript.new(project_default[:title]))
24
+ assert_equal(0, transcript.count)
25
+ assert_respond_to(transcript, :add_chunk)
26
+ dummy_chunks.each{|chunk| transcript.add_chunk(chunk) }
27
+ assert_equal(dummy_chunks.count, transcript.count)
28
+ random_index = rand(dummy_chunks.count)
29
+ assert_equal(dummy_chunks[random_index].body, transcript[random_index].body)
30
+ end
31
+
32
+ def test_transcript_chunks
33
+ dummy_assignments.each do |assignment|
34
+ assert(chunk = Typingpool::Transcript::Chunk.new(assignment['transcript']))
35
+ assert_equal(assignment['transcript'], chunk.body)
36
+ chunk.worker = assignment['worker']
37
+ assert_equal(assignment['worker'], chunk.worker)
38
+ chunk.project = assignment['project_id']
39
+ assert_equal(assignment['project_id'], chunk.project)
40
+ chunk.hit = assignment['hit_id']
41
+ assert_equal(assignment['hit_id'], chunk.hit)
42
+ url_populated = %w(offset offset_seconds filename filename_local)
43
+ url_populated.each{|attr| assert_nil(chunk.send(attr.to_sym)) }
44
+ chunk.url = assignment['audio_url']
45
+ assert_equal(assignment['audio_url'], chunk.url)
46
+ url_populated.each{|attr| refute_nil(chunk.send(attr.to_sym)) }
47
+ matches = chunk.offset.match(/^(\d+):(\d+)$/)
48
+ assert_equal(((matches[1].to_i * 60) + matches[2].to_i), chunk.offset_seconds)
49
+ refute_equal(chunk.filename, chunk.filename_local)
50
+ original_newline_count = chunk.body_as_text.scan(/\n/).count
51
+ chunk.body = chunk.body + "\n\r\f" + ('foo bar baz' * 100)
52
+ refute_match(chunk.body_as_text, /\r/) unless $/.match(/\r/)
53
+ assert_equal(original_newline_count + 2, chunk.body_as_text.scan(/\n/).count)
54
+ original_p_count = chunk.body_as_html.scan(/<p>/i).count
55
+ chunk.body = chunk.body + "One & two\n\n...and 3 < 4."
56
+ refute_match(chunk.body_as_html, /\s&\s/)
57
+ refute_match(chunk.body_as_html, /\s<\s/)
58
+ assert_equal(original_p_count + 1, chunk.body_as_html.scan(/<p>/i).count)
59
+ end
60
+ end
61
+
62
+ def dummy_chunks
63
+ dummy_assignments.map do |assignment|
64
+ chunk = Typingpool::Transcript::Chunk.new(assignment['transcript'])
65
+ chunk.worker = assignment['worker']
66
+ chunk.project = assignment['project_id']
67
+ chunk.hit = assignment['hit_id']
68
+ chunk.url = assignment['audio_url']
69
+ chunk
70
+ end #dummy_assignments.map do...
71
+ end
72
+
73
+ def dummy_assignments
74
+ Typingpool::Filer::CSV.new(File.join(fixtures_dir, 'transcript-chunks.csv')).read
75
+ end
76
+
77
+ end #TestTranscript
metadata ADDED
@@ -0,0 +1,234 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: typingpool
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.7.0
6
+ platform: ruby
7
+ authors:
8
+ - Ryan Tate
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-09-09 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rturk
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "2.9"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: highline
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "1.6"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: nokogiri
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "1.5"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: aws-s3
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: "0.6"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: net-sftp
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 2.0.5
69
+ type: :runtime
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: vcr
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :runtime
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: webmock
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :runtime
92
+ version_requirements: *id007
93
+ description: An app for transcribing audio using Mechanical Turk
94
+ email: ryantate@ryantate.com
95
+ executables:
96
+ - tp-config
97
+ - tp-make
98
+ - tp-assign
99
+ - tp-review
100
+ - tp-collect
101
+ - tp-finish
102
+ extensions: []
103
+
104
+ extra_rdoc_files: []
105
+
106
+ files:
107
+ - Rakefile
108
+ - bin/tp-config
109
+ - bin/tp-make
110
+ - bin/tp-assign
111
+ - bin/tp-review
112
+ - bin/tp-collect
113
+ - bin/tp-finish
114
+ - lib/typingpool.rb
115
+ - lib/typingpool/amazon.rb
116
+ - lib/typingpool/app.rb
117
+ - lib/typingpool/config.rb
118
+ - lib/typingpool/error.rb
119
+ - lib/typingpool/filer.rb
120
+ - lib/typingpool/project.rb
121
+ - lib/typingpool/template.rb
122
+ - lib/typingpool/test.rb
123
+ - lib/typingpool/transcript.rb
124
+ - lib/typingpool/utility.rb
125
+ - lib/typingpool/templates/assignment/amazon-init.js
126
+ - lib/typingpool/templates/assignment/interview.html.erb
127
+ - lib/typingpool/templates/assignment/interview/nameless.html.erb
128
+ - lib/typingpool/templates/assignment/interview/noisy.html.erb
129
+ - lib/typingpool/templates/assignment/interview/partials/voices.html.erb
130
+ - lib/typingpool/templates/assignment/interview/phone.html.erb
131
+ - lib/typingpool/templates/assignment/main.css
132
+ - lib/typingpool/templates/assignment/partials/entry.html.erb
133
+ - lib/typingpool/templates/assignment/partials/footer.html.erb
134
+ - lib/typingpool/templates/assignment/partials/header.html.erb
135
+ - lib/typingpool/templates/assignment/partials/labeling-example.html.erb
136
+ - lib/typingpool/templates/assignment/partials/labeling.html.erb
137
+ - lib/typingpool/templates/assignment/partials/length-description.html.erb
138
+ - lib/typingpool/templates/assignment/partials/voices.html.erb
139
+ - lib/typingpool/templates/assignment/speech.html.erb
140
+ - lib/typingpool/templates/config.yml
141
+ - lib/typingpool/templates/project/audio/chunks/.empty_directory
142
+ - lib/typingpool/templates/project/audio/originals/.empty_directory
143
+ - lib/typingpool/templates/project/data/.empty_directory
144
+ - lib/typingpool/templates/project/etc/ About these files - read me.txt
145
+ - lib/typingpool/templates/project/etc/audio-compat.js
146
+ - lib/typingpool/templates/project/etc/player/audio-player.js
147
+ - lib/typingpool/templates/project/etc/player/license.txt
148
+ - lib/typingpool/templates/project/etc/player/player.swf
149
+ - lib/typingpool/templates/project/etc/transcript.css
150
+ - lib/typingpool/templates/transcript.html.erb
151
+ - lib/typingpool/test/fixtures/amazon-question-html.html
152
+ - lib/typingpool/test/fixtures/amazon-question-url.txt
153
+ - lib/typingpool/test/fixtures/audio/mp3/interview.1.mp3
154
+ - lib/typingpool/test/fixtures/audio/mp3/interview.2.mp3
155
+ - lib/typingpool/test/fixtures/audio/wma/VN620007.WMA
156
+ - lib/typingpool/test/fixtures/audio/wma/VN620052.WMA
157
+ - lib/typingpool/test/fixtures/config-1
158
+ - lib/typingpool/test/fixtures/config-2
159
+ - lib/typingpool/test/fixtures/not_yaml.txt
160
+ - lib/typingpool/test/fixtures/template-2.html.erb
161
+ - lib/typingpool/test/fixtures/template-3.html.erb
162
+ - lib/typingpool/test/fixtures/template.html.erb
163
+ - lib/typingpool/test/fixtures/tp_collect_id.txt
164
+ - lib/typingpool/test/fixtures/tp_collect_sandbox-assignment.csv
165
+ - lib/typingpool/test/fixtures/tp_review_id.txt
166
+ - lib/typingpool/test/fixtures/tp_review_sandbox-assignment.csv
167
+ - lib/typingpool/test/fixtures/transcript-chunks.csv
168
+ - lib/typingpool/test/fixtures/utf8_transcript.txt
169
+ - lib/typingpool/test/fixtures/vcr/tp-collect-1.yml
170
+ - lib/typingpool/test/fixtures/vcr/tp-collect-2.yml
171
+ - lib/typingpool/test/fixtures/vcr/tp-collect-3.yml
172
+ - lib/typingpool/test/fixtures/vcr/tp-review-1.yml
173
+ - lib/typingpool/test/fixtures/vcr/tp-review-2.yml
174
+ - test/make_amazon_question_fixture.rb
175
+ - test/make_tp_collect_fixture_1.rb
176
+ - test/make_tp_collect_fixture_2.rb
177
+ - test/make_tp_collect_fixture_3.rb
178
+ - test/make_tp_collect_fixture_4.rb
179
+ - test/make_tp_review_fixture_1.rb
180
+ - test/make_tp_review_fixture_2.rb
181
+ - test/make_transcript_chunks_fixture.rb
182
+ - test/test_integration_script_1_tp_config.rb
183
+ - test/test_integration_script_2_tp_make.rb
184
+ - test/test_integration_script_3_tp_assign.rb
185
+ - test/test_integration_script_4_tp_review.rb
186
+ - test/test_integration_script_5_tp_collect.rb
187
+ - test/test_integration_script_6_tp_finish.rb
188
+ - test/test_unit_amazon.rb
189
+ - test/test_unit_config.rb
190
+ - test/test_unit_filer.rb
191
+ - test/test_unit_project.rb
192
+ - test/test_unit_project_local.rb
193
+ - test/test_unit_project_remote.rb
194
+ - test/test_unit_template.rb
195
+ - test/test_unit_transcript.rb
196
+ has_rdoc: true
197
+ homepage: http://github.com/ryantate/typingpool
198
+ licenses: []
199
+
200
+ post_install_message:
201
+ rdoc_options: []
202
+
203
+ require_paths:
204
+ - lib
205
+ required_ruby_version: !ruby/object:Gem::Requirement
206
+ none: false
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: 1.9.2
211
+ required_rubygems_version: !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: "0"
217
+ requirements:
218
+ - ffmpeg
219
+ - mp3splt
220
+ - mp3wrap
221
+ rubyforge_project:
222
+ rubygems_version: 1.5.0
223
+ signing_key:
224
+ specification_version: 3
225
+ summary: An app for transcribing audio using Mechanical Turk
226
+ test_files:
227
+ - test/test_unit_amazon.rb
228
+ - test/test_unit_config.rb
229
+ - test/test_unit_filer.rb
230
+ - test/test_unit_project.rb
231
+ - test/test_unit_project_local.rb
232
+ - test/test_unit_project_remote.rb
233
+ - test/test_unit_template.rb
234
+ - test/test_unit_transcript.rb