typingpool 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/typingpool.rb +3 -3
- data/lib/typingpool/test.rb +2 -6
- data/lib/typingpool/test/script.rb +2 -2
- data/lib/typingpool/version.rb +1 -1
- data/test/test_integration_script_1_tp_config.rb +9 -9
- data/test/test_integration_script_2_tp_make.rb +3 -3
- data/test/test_integration_script_3_tp_assign.rb +4 -4
- data/test/test_integration_script_4_tp_review.rb +21 -26
- data/test/test_integration_script_5_tp_collect.rb +3 -9
- data/test/test_integration_script_6_tp_finish.rb +5 -9
- data/test/test_unit_amazon.rb +15 -15
- data/test/test_unit_config.rb +11 -11
- data/test/test_unit_filer.rb +6 -6
- data/test/test_unit_project.rb +2 -2
- data/test/test_unit_project_local.rb +1 -1
- data/test/test_unit_project_remote.rb +1 -1
- data/test/test_unit_template.rb +17 -17
- data/test/test_unit_transcript.rb +3 -3
- data/typingpool.gemspec +3 -2
- metadata +33 -35
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eb6abdc9b9f07ff9c24adaa0304a9aed90619e3b
|
4
|
+
data.tar.gz: a6d2d4f6de6ea82bec54e8a026b899257979d2d8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 75c33b151d88e38bfb12b37751c3a8a8deaa9de91ed40971927e5d095a56d905c1841f160148b9f4f55000921e860436b198dd07240c7ca850ebe64b20ab12cd
|
7
|
+
data.tar.gz: c1593d3a0aeb1755723bf4d8f1289a8803b69d985f7675a1eeef74d568f8acabdffa37e754bbb6e275923889c07049e2ff53ed4a79174cab2d723aa17095164f
|
data/lib/typingpool.rb
CHANGED
@@ -487,13 +487,13 @@
|
|
487
487
|
# license. See LICENSE for details.
|
488
488
|
|
489
489
|
module Typingpool
|
490
|
+
require 'typingpool/utility'
|
491
|
+
require 'typingpool/filer'
|
492
|
+
require 'typingpool/project'
|
490
493
|
require 'typingpool/version'
|
491
494
|
require 'typingpool/error'
|
492
|
-
require 'typingpool/utility'
|
493
495
|
require 'typingpool/config'
|
494
|
-
require 'typingpool/filer'
|
495
496
|
require 'typingpool/amazon'
|
496
|
-
require 'typingpool/project'
|
497
497
|
require 'typingpool/transcript'
|
498
498
|
require 'typingpool/template'
|
499
499
|
require 'typingpool/app'
|
data/lib/typingpool/test.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
module Typingpool
|
2
|
-
require '
|
2
|
+
require 'minitest/autorun'
|
3
3
|
|
4
|
-
class Test < ::Test
|
4
|
+
class Test < Minitest::Test
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'fileutils'
|
7
7
|
|
8
|
-
def MiniTest.filter_backtrace(bt)
|
9
|
-
bt
|
10
|
-
end
|
11
|
-
|
12
8
|
def self.app_dir
|
13
9
|
File.dirname(File.dirname(File.dirname(__FILE__)))
|
14
10
|
end
|
@@ -284,10 +284,10 @@ module Typingpool
|
|
284
284
|
end
|
285
285
|
|
286
286
|
def assert_shell_error_match(regex)
|
287
|
-
exception =
|
287
|
+
exception = assert_raises(Typingpool::Error::Shell) do
|
288
288
|
yield
|
289
289
|
end
|
290
|
-
assert_match(exception.message
|
290
|
+
assert_match(regex, exception.message)
|
291
291
|
end
|
292
292
|
|
293
293
|
def assert_script_abort_match(args, regex)
|
data/lib/typingpool/version.rb
CHANGED
@@ -8,34 +8,34 @@ require 'typingpool/test'
|
|
8
8
|
class TestTpConfig < Typingpool::Test::Script
|
9
9
|
|
10
10
|
def test_abort_with_invalid_file
|
11
|
-
exception =
|
11
|
+
exception = assert_raises(Typingpool::Error::Shell) do
|
12
12
|
tp_config(File.join(fixtures_dir, 'not_yaml.txt'))
|
13
13
|
end
|
14
|
-
assert_match(
|
14
|
+
assert_match(/not valid yaml/i, exception.message)
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_abort_with_directory_path
|
18
18
|
dir = File.join(fixtures_dir, 'vcr')
|
19
19
|
assert(File.exists? dir)
|
20
20
|
assert(File.directory? dir)
|
21
|
-
exception =
|
21
|
+
exception = assert_raises(Typingpool::Error::Shell) do
|
22
22
|
tp_config(dir)
|
23
23
|
end
|
24
|
-
assert_match(
|
24
|
+
assert_match(/not a file/i, exception.message)
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_abort_with_invalid_path
|
28
28
|
path = '/jksdljs/euwiroeuw'
|
29
29
|
refute(File.exists? path)
|
30
|
-
exception =
|
30
|
+
exception = assert_raises(Typingpool::Error::Shell) do
|
31
31
|
tp_config(path)
|
32
32
|
end
|
33
|
-
assert_match(
|
33
|
+
assert_match(/valid path/i, exception.message)
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_usage_message
|
37
37
|
assert(output = tp_config('--help'))
|
38
|
-
assert_match(
|
38
|
+
assert_match(/\bUSAGE:/, output)
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_new_config_creation
|
@@ -46,7 +46,7 @@ def test_new_config_creation
|
|
46
46
|
}
|
47
47
|
path.values.each{|path| refute(File.exists? path) }
|
48
48
|
assert(output = tp_config_with_input([path[:config], '--test'], ['keykey', 'secretsecret', path[:transcript_dir]]))
|
49
|
-
assert_match(
|
49
|
+
assert_match(/wrote config to/i, output[:err])
|
50
50
|
path.values.each{|path| assert(File.exists? path) }
|
51
51
|
assert(File.file? path[:config] )
|
52
52
|
assert(File.directory? path[:transcript_dir] )
|
@@ -99,7 +99,7 @@ def test_skips_bucket_when_sftp_params_exist
|
|
99
99
|
assert(original_config = Typingpool::Config.file(path[:config]))
|
100
100
|
assert_empty(original_config.amazon.bucket.to_s)
|
101
101
|
assert(output = tp_config_with_input([path[:config], '--test'], ['keykey', 'secretsecret', path[:transcript_dir]]))
|
102
|
-
assert_match(
|
102
|
+
assert_match(/wrote config to/i, output[:err])
|
103
103
|
assert(edited_config = Typingpool::Config.file(path[:config]))
|
104
104
|
assert_empty(edited_config.amazon.bucket.to_s)
|
105
105
|
end #in_temp_dir do |dir|
|
@@ -34,8 +34,8 @@ class TestTpMake < Typingpool::Test::Script
|
|
34
34
|
begin
|
35
35
|
tp_make(dir, config_path, subdir)
|
36
36
|
assert(project = temp_tp_dir_project(dir, Typingpool::Config.file(config_path)))
|
37
|
-
|
38
|
-
|
37
|
+
assert(project.local)
|
38
|
+
assert(project.local.id)
|
39
39
|
assert(project.local.subdir('audio','chunks').to_a.size <= 7)
|
40
40
|
assert(project.local.subdir('audio','chunks').to_a.size >= 6)
|
41
41
|
assert_equal(project_default[:subtitle], project.local.subtitle)
|
@@ -44,7 +44,7 @@ class TestTpMake < Typingpool::Test::Script
|
|
44
44
|
assert_all_assets_have_upload_status(assignments, ['audio'], 'yes')
|
45
45
|
sleep 4 #pause before checking URLs so remote server has time to fully upload
|
46
46
|
assignments.each do |assignment|
|
47
|
-
|
47
|
+
assert(assignment['audio_url'])
|
48
48
|
assert(working_url? assignment['audio_url'])
|
49
49
|
assert_equal(assignment['project_id'], project.local.id)
|
50
50
|
assert_equal(assignment['unusual'].split(/\s*,\s*/), project_default[:unusual])
|
@@ -10,7 +10,7 @@ class TestTpAssign < Typingpool::Test::Script
|
|
10
10
|
#(or at least some xml parsing) since rturk doesn't provide an
|
11
11
|
#easy way to look at HIT qualifications)
|
12
12
|
def test_abort_with_no_input
|
13
|
-
|
13
|
+
assert_raises(Typingpool::Error::Shell){call_tp_assign}
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_abort_with_no_template
|
@@ -59,7 +59,7 @@ class TestTpAssign < Typingpool::Test::Script
|
|
59
59
|
sandbox_csv = project.local.file('data', 'sandbox-assignment.csv').as(:csv)
|
60
60
|
refute_empty(assignment_urls = sandbox_csv.map{|assignment| assignment['assignment_url'] })
|
61
61
|
assert(assignment_html = fetch_url(assignment_urls.first).body)
|
62
|
-
assert_match(
|
62
|
+
assert_match(/\b20[\s-]+second\b/, assignment_html)
|
63
63
|
assert_all_assets_have_upload_status(sandbox_csv, ['assignment'], 'yes')
|
64
64
|
ensure
|
65
65
|
tp_finish(dir)
|
@@ -111,7 +111,7 @@ def test_fixing_failed_assignment_html_upload
|
|
111
111
|
exception = assert_raises(Typingpool::Error::Shell) do
|
112
112
|
tp_assign(dir, bad_config_path)
|
113
113
|
end #assert_raises...
|
114
|
-
assert_match(
|
114
|
+
assert_match(/s3 operation fail/i, exception.message)
|
115
115
|
sandbox_csv = project.local.file('data', 'sandbox-assignment.csv').as(:csv)
|
116
116
|
refute_empty(get_assignment_urls.call(sandbox_csv))
|
117
117
|
check_assignment_urls = lambda{ get_assignment_urls.call(sandbox_csv).map{|url| Typingpool::Utility.working_url? url } }
|
@@ -142,7 +142,7 @@ def test_abort_on_config_mismatch
|
|
142
142
|
exception = assert_raises(Typingpool::Error::Shell) do
|
143
143
|
tp_assign(dir, bad_config_path)
|
144
144
|
end #assert_raises...
|
145
|
-
assert_match(
|
145
|
+
assert_match(/\burls don't look right\b/i, exception.message)
|
146
146
|
ensure
|
147
147
|
tp_finish(dir, good_config_path)
|
148
148
|
end #begin
|
@@ -18,43 +18,38 @@ class TestTpReview < Typingpool::Test::Script
|
|
18
18
|
assert_equal(7, project.local.file('data','sandbox-assignment.csv').as(:csv).reject{|assignment| assignment['hit_id'].to_s.empty? }.count)
|
19
19
|
begin
|
20
20
|
output = nil
|
21
|
-
|
22
|
-
output = tp_review_with_fixture(dir, File.join(fixtures_dir, 'vcr', 'tp-review-1'), %w(a r a r s q))
|
23
|
-
end
|
21
|
+
output = tp_review_with_fixture(dir, File.join(fixtures_dir, 'vcr', 'tp-review-1'), %w(a r a r s q))
|
24
22
|
assert_equal(0, output[:status].to_i, "Bad exit code: #{output[:status]} err: #{output[:err]}")
|
25
23
|
assert_equal(5, project.local.file('data','sandbox-assignment.csv').as(:csv).reject{|assignment| assignment['hit_id'].to_s.empty? }.count)
|
26
24
|
reviews = split_reviews(output[:out])
|
27
|
-
assert_match(
|
25
|
+
assert_match(/Interview\.00\.00/, reviews[1])
|
28
26
|
#we can't specify leading \b boundaries because the ansi
|
29
27
|
#escape sequences mess that up
|
30
|
-
assert_match(
|
31
|
-
assert_match(
|
32
|
-
assert_match(
|
33
|
-
assert_match(
|
34
|
-
assert_match(
|
35
|
-
assert_match(
|
36
|
-
assert_match(
|
37
|
-
assert_match(
|
38
|
-
assert_match(
|
39
|
-
assert_match(
|
40
|
-
assert_match(
|
41
|
-
assert_match(
|
42
|
-
assert_match(
|
28
|
+
assert_match(/Approved\b/i, reviews[1])
|
29
|
+
assert_match(/Interview\.00\.20/, reviews[2])
|
30
|
+
assert_match(/reason\b/i, reviews[2])
|
31
|
+
assert_match(/Rejected\b/i, reviews[2])
|
32
|
+
assert_match(/Interview\.00\.40/, reviews[3])
|
33
|
+
assert_match(/Approved\b/i, reviews[3])
|
34
|
+
assert_match(/Interview\.01\.00/, reviews[4])
|
35
|
+
assert_match(/reason\b/i, reviews[4])
|
36
|
+
assert_match(/Rejected\b/i, reviews[4])
|
37
|
+
assert_match(/Interview\.01\.20/, reviews[5])
|
38
|
+
assert_match(/Skipping\b/i, reviews[5])
|
39
|
+
assert_match(/Interview\.02\.00/, reviews[6])
|
40
|
+
assert_match(/Quitting\b/i, reviews[6])
|
43
41
|
transcript = assert_has_partial_transcript(dir)
|
44
42
|
assert_html_has_audio_count(2, transcript)
|
45
43
|
assert_assignment_csv_has_transcription_count(2, project, 'sandbox-assignment.csv')
|
46
|
-
|
47
|
-
assert_nothing_raised do
|
48
|
-
output = tp_review_with_fixture(dir, File.join(fixtures_dir, 'vcr', 'tp-review-2'), %w(a r))
|
49
|
-
end
|
44
|
+
output = tp_review_with_fixture(dir, File.join(fixtures_dir, 'vcr', 'tp-review-2'), %w(a r))
|
50
45
|
assert_equal(0, output[:status].to_i, "Bad exit code: #{output[:status]} err: #{output[:err]}")
|
51
46
|
assert_equal(4, project.local.file('data','sandbox-assignment.csv').as(:csv).reject{|assignment| assignment['hit_id'].to_s.empty? }.count)
|
52
47
|
reviews = split_reviews(output[:out])
|
53
|
-
assert_match(
|
54
|
-
assert_match(
|
55
|
-
assert_match(
|
56
|
-
assert_match(
|
57
|
-
assert_match(
|
48
|
+
assert_match(/Interview\.01\.20/, reviews[1])
|
49
|
+
assert_match(/Approved\b/i, reviews[1])
|
50
|
+
assert_match(/Interview\.02\.00/, reviews[2])
|
51
|
+
assert_match(/reason\b/i, reviews[2])
|
52
|
+
assert_match(/Rejected\b/i, reviews[2])
|
58
53
|
transcript = assert_has_partial_transcript(dir)
|
59
54
|
assert_html_has_audio_count(3, transcript)
|
60
55
|
assert_assignment_csv_has_transcription_count(3, project, 'sandbox-assignment.csv')
|
@@ -16,21 +16,15 @@ class TestTpCollect < Typingpool::Test::Script
|
|
16
16
|
copy_fixtures_to_temp_tp_dir(dir, 'tp_collect_')
|
17
17
|
begin
|
18
18
|
project = temp_tp_dir_project(dir)
|
19
|
-
|
20
|
-
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-1'))
|
21
|
-
end
|
19
|
+
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-1'))
|
22
20
|
transcript = assert_has_partial_transcript(dir)
|
23
21
|
assert_html_has_audio_count(2, transcript)
|
24
22
|
assert_assignment_csv_has_transcription_count(2, project, 'sandbox-assignment.csv')
|
25
|
-
|
26
|
-
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-2'))
|
27
|
-
end
|
23
|
+
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-2'))
|
28
24
|
transcript = assert_has_partial_transcript(dir)
|
29
25
|
assert_html_has_audio_count(4, transcript)
|
30
26
|
assert_assignment_csv_has_transcription_count(4, project, 'sandbox-assignment.csv')
|
31
|
-
|
32
|
-
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-3'))
|
33
|
-
end
|
27
|
+
tp_collect_with_fixture(dir, File.join(vcr_dir, 'tp-collect-3'))
|
34
28
|
# transcript = assert_has_transcript(dir) || assert_has_partial_transcript(dir)
|
35
29
|
# assert_html_has_audio_count(7, transcript)
|
36
30
|
# assert_assignment_csv_has_transcription_count(7, project, 'sandbox-assignment.csv')
|
@@ -17,9 +17,7 @@ class TestTpFinish < Typingpool::Test::Script
|
|
17
17
|
assert_all_assets_have_upload_status(csv, ['audio'], 'yes')
|
18
18
|
sleep 3 #pause before checking URLs so remote server has time to fully upload
|
19
19
|
assert_equal(urls.size, urls.select{|url| working_url? url}.size)
|
20
|
-
|
21
|
-
tp_finish_outside_sandbox(dir, config_path)
|
22
|
-
end
|
20
|
+
tp_finish_outside_sandbox(dir, config_path)
|
23
21
|
sleep 3 #pause before checking URLs so remote server has time to fully delete
|
24
22
|
assert_empty(urls.select{|url| working_url? url })
|
25
23
|
assert_all_assets_have_upload_status(csv, ['audio'], 'no')
|
@@ -55,9 +53,7 @@ class TestTpFinish < Typingpool::Test::Script
|
|
55
53
|
setup_amazon(dir)
|
56
54
|
results = Typingpool::Amazon::HIT.all_for_project(project.local.id)
|
57
55
|
refute_empty(results)
|
58
|
-
|
59
|
-
tp_finish(dir)
|
60
|
-
end
|
56
|
+
tp_finish(dir)
|
61
57
|
assert_empty(Typingpool::Amazon::HIT.all_for_project(project.local.id))
|
62
58
|
results.each do |result|
|
63
59
|
#The original HIT might be gone, or there and marked
|
@@ -65,9 +61,9 @@ class TestTpFinish < Typingpool::Test::Script
|
|
65
61
|
#dead HITs yet
|
66
62
|
begin
|
67
63
|
hit = RTurk::Hit.find(result.id)
|
68
|
-
assert_match(
|
64
|
+
assert_match(/^dispos/i, hit.status)
|
69
65
|
rescue RTurk::InvalidRequest => exception
|
70
|
-
assert_match(
|
66
|
+
assert_match(/HITDoesNotExist/i, exception.message)
|
71
67
|
end #begin
|
72
68
|
end #results.each...
|
73
69
|
refute(File.exists? sandbox_csv)
|
@@ -116,7 +112,7 @@ def test_abort_on_config_mismatch
|
|
116
112
|
exception = assert_raises(Typingpool::Error::Shell) do
|
117
113
|
tp_finish_outside_sandbox(dir, bad_config_path)
|
118
114
|
end #assert_raises...
|
119
|
-
assert_match(
|
115
|
+
assert_match(/\burls don't look right\b/i, exception.message)
|
120
116
|
ensure
|
121
117
|
tp_finish_outside_sandbox(dir, good_config_path)
|
122
118
|
end #begin
|
data/test/test_unit_amazon.rb
CHANGED
@@ -11,7 +11,7 @@ class TestAmazon < Typingpool::Test
|
|
11
11
|
|
12
12
|
def test_amazon_base
|
13
13
|
setup_result = Typingpool::Amazon.setup(:sandbox => true, :config => dummy_config)
|
14
|
-
assert_match(
|
14
|
+
assert_match(/amazonaws/, setup_result)
|
15
15
|
assert(Typingpool::Amazon.cache)
|
16
16
|
assert_instance_of(PStore, Typingpool::Amazon.cache)
|
17
17
|
assert_equal(dummy_config.cache, Typingpool::Amazon.cache.path)
|
@@ -24,13 +24,13 @@ class TestAmazon < Typingpool::Test
|
|
24
24
|
assert_instance_of(Typingpool::Amazon::Question, question)
|
25
25
|
assert_equal(question_url, question.url)
|
26
26
|
assert_equal(question_html, question.html)
|
27
|
-
assert_match(
|
28
|
-
assert_match(
|
29
|
-
assert_match(question.annotation
|
27
|
+
assert_match(/Transcribe MP3 of/i, question.title)
|
28
|
+
assert_match(/telephone conversation/i, question.description)
|
29
|
+
assert_match(/\S/, question.annotation)
|
30
30
|
assert(decoded_annotation = URI.decode_www_form(CGI.unescapeHTML(question.annotation)))
|
31
31
|
decoded_annotation = Hash[*decoded_annotation.flatten]
|
32
|
-
assert_match(decoded_annotation[Typingpool::Amazon::HIT.url_at]
|
33
|
-
assert_match(decoded_annotation[Typingpool::Amazon::HIT.id_at]
|
32
|
+
assert_match(/^http/i, decoded_annotation[Typingpool::Amazon::HIT.url_at])
|
33
|
+
assert_match(/\S/, decoded_annotation[Typingpool::Amazon::HIT.id_at])
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_amazon_hit_create
|
@@ -67,10 +67,10 @@ class TestAmazon < Typingpool::Test
|
|
67
67
|
def test_amazon_hit_base
|
68
68
|
with_dummy_hit_or_skip('test_amazon_hit_base') do |hit, config|
|
69
69
|
assert_instance_of(Typingpool::Amazon::HIT, hit)
|
70
|
-
assert_match(hit.id
|
71
|
-
assert_match(
|
72
|
-
assert_match(hit.project_id
|
73
|
-
assert_match(hit.project_title_from_url
|
70
|
+
assert_match(/\S/, hit.id)
|
71
|
+
assert_match(/^http/i, hit.url)
|
72
|
+
assert_match(/\S/, hit.project_id)
|
73
|
+
assert_match(/\S/, hit.project_title_from_url)
|
74
74
|
assert(not(hit.approved?))
|
75
75
|
assert(not(hit.rejected?))
|
76
76
|
assert(not(hit.submitted?))
|
@@ -87,16 +87,16 @@ class TestAmazon < Typingpool::Test
|
|
87
87
|
with_dummy_hit_or_skip('test_amazon_hit_full') do |hit, config|
|
88
88
|
assert(full = hit.full)
|
89
89
|
assert_instance_of(Typingpool::Amazon::HIT::Full, full)
|
90
|
-
[:id, :type_id].each{|attr| assert_match(full.send(attr)
|
90
|
+
[:id, :type_id].each{|attr| assert_match(/\S/, full.send(attr)) }
|
91
91
|
assert(not(full.expired?))
|
92
92
|
assert(not(full.expired_and_overdue?))
|
93
93
|
assert_equal('Assignable', full.status)
|
94
|
-
assert_match(
|
95
|
-
[:assignments_completed, :assignments_pending].each{|attr| assert_match(full.send(attr).to_s
|
94
|
+
assert_match(/^http/i, full.external_question_url)
|
95
|
+
[:assignments_completed, :assignments_pending].each{|attr| assert_match(/^\d+$/, full.send(attr).to_s) }
|
96
96
|
assert_kind_of(Time, full.expires_at)
|
97
97
|
assert_instance_of(Hash, full.annotation)
|
98
|
-
assert_match(full.annotation[Typingpool::Amazon::HIT.url_at]
|
99
|
-
assert_match(full.annotation[Typingpool::Amazon::HIT.id_at]
|
98
|
+
assert_match(/^http/i, full.annotation[Typingpool::Amazon::HIT.url_at])
|
99
|
+
assert_match(/\S/, full.annotation[Typingpool::Amazon::HIT.id_at])
|
100
100
|
end #with_dummy_hit_or_skip
|
101
101
|
end
|
102
102
|
|
data/test/test_unit_config.rb
CHANGED
@@ -10,13 +10,13 @@ class TestConfig < Typingpool::Test
|
|
10
10
|
def test_config_regular_file
|
11
11
|
assert(config = Typingpool::Config.file(File.join(fixtures_dir, 'config-1')))
|
12
12
|
assert_equal('~/Documents/Transcripts/', config['transcripts'])
|
13
|
-
assert_match(config.transcripts
|
14
|
-
refute_match(config.transcripts
|
13
|
+
assert_match(/Transcripts$/, config.transcripts)
|
14
|
+
refute_match(/~/, config.transcripts)
|
15
15
|
%w(key secret).each do |param|
|
16
16
|
regex = /test101010/
|
17
|
-
assert_match(config.amazon.send(param)
|
18
|
-
assert_match(config.amazon[param]
|
19
|
-
assert_match(config.amazon.to_hash[param]
|
17
|
+
assert_match(regex, config.amazon.send(param))
|
18
|
+
assert_match(regex, config.amazon[param])
|
19
|
+
assert_match(regex, config.amazon.to_hash[param])
|
20
20
|
end
|
21
21
|
assert_equal(0.75, config.assign.reward.to_f)
|
22
22
|
assert_equal(3*60*60, config.assign.deadline.to_i)
|
@@ -45,25 +45,25 @@ class TestConfig < Typingpool::Test
|
|
45
45
|
exception = assert_raises(Typingpool::Error::Argument) do
|
46
46
|
config.assign.qualify
|
47
47
|
end
|
48
|
-
assert_match(
|
48
|
+
assert_match(/Unknown qualification type/i, exception.message)
|
49
49
|
|
50
50
|
config.assign['qualify'] = [config.assign['qualify'].pop]
|
51
51
|
exception = assert_raises(Typingpool::Error::Argument) do
|
52
52
|
config.assign.qualify
|
53
53
|
end
|
54
|
-
assert_match(
|
54
|
+
assert_match(/Unknown comparator/i, exception.message)
|
55
55
|
|
56
56
|
assert_equal('3z', config.assign['deadline'])
|
57
57
|
exception = assert_raises(Typingpool::Error::Argument::Format) do
|
58
58
|
config.assign.deadline
|
59
59
|
end
|
60
|
-
assert_match(
|
60
|
+
assert_match(/can't convert/i, exception.message)
|
61
61
|
|
62
62
|
config.assign['reward'] = 'foo'
|
63
63
|
exception = assert_raises(Typingpool::Error::Argument::Format) do
|
64
64
|
config.assign.reward
|
65
65
|
end
|
66
|
-
assert_match(
|
66
|
+
assert_match(/\bformat should\b/i, exception.message)
|
67
67
|
end
|
68
68
|
|
69
69
|
def test_config_regular_input
|
@@ -83,12 +83,12 @@ class TestConfig < Typingpool::Test
|
|
83
83
|
exception = assert_raises(Typingpool::Error::Argument::Format) do
|
84
84
|
config.assign.reward = 'foo'
|
85
85
|
end
|
86
|
-
assert_match(
|
86
|
+
assert_match(/\bformat should\b/i, exception.message)
|
87
87
|
|
88
88
|
exception = assert_raises(Typingpool::Error::Argument::Format) do
|
89
89
|
config.assign.approval = '11f'
|
90
90
|
end
|
91
|
-
assert_match(
|
91
|
+
assert_match(/can't convert/i, exception.message)
|
92
92
|
|
93
93
|
end
|
94
94
|
end #TestConfig
|
data/test/test_unit_filer.rb
CHANGED
@@ -13,9 +13,9 @@ class TestFiler < Typingpool::Test
|
|
13
13
|
assert(filer = Typingpool::Filer.new(path))
|
14
14
|
assert_equal(path, "#{filer}")
|
15
15
|
assert(text = filer.read)
|
16
|
-
assert_match(
|
17
|
-
assert_match(
|
18
|
-
assert_match(
|
16
|
+
assert_match(/^amazon:\n/, text)
|
17
|
+
assert_match(/transcripts: ~\/Documents\/Transcripts\//, text)
|
18
|
+
assert_match(/- mp3\s*$/, text)
|
19
19
|
assert_equal(fixtures_dir, filer.dir.path)
|
20
20
|
in_temp_dir do |dir|
|
21
21
|
path = File.join(dir, 'filer-temp')
|
@@ -43,7 +43,7 @@ class TestFiler < Typingpool::Test
|
|
43
43
|
assert_respond_to(filer, :map)
|
44
44
|
assert_respond_to(filer, :select)
|
45
45
|
assert(data.first['audio_url'])
|
46
|
-
assert_match(data.first['audio_url']
|
46
|
+
assert_match(/^https?:\/\/\w/, data.first['audio_url'])
|
47
47
|
assert(filer.select{|r| r['audio_url'] }.count > 0)
|
48
48
|
in_temp_dir do |dir|
|
49
49
|
path = File.join(dir, 'filer-temp')
|
@@ -111,8 +111,8 @@ class TestFiler < Typingpool::Test
|
|
111
111
|
assert_equal(3, chunks.count)
|
112
112
|
chunks.each{|chunk| assert(File.exists? chunk) }
|
113
113
|
assert(chunks.first.offset)
|
114
|
-
assert_match(
|
115
|
-
assert_match(chunks.to_a[1].offset
|
114
|
+
assert_match(/0\.00\b/, chunks.first.offset)
|
115
|
+
assert_match(/0\.25\b/, chunks.to_a[1].offset)
|
116
116
|
end #in_temp_dir
|
117
117
|
end
|
118
118
|
|
data/test/test_unit_project.rb
CHANGED
@@ -14,7 +14,7 @@ class TestProject < Typingpool::Test
|
|
14
14
|
assert_instance_of(Typingpool::Project, project)
|
15
15
|
assert_equal(project_default[:title], project.name)
|
16
16
|
assert_equal(dummy_config.to_hash.to_s, project.config.to_hash.to_s)
|
17
|
-
|
17
|
+
assert_raises(Typingpool::Error::Argument::Format) do
|
18
18
|
Typingpool::Project.new('one/two', dummy_config)
|
19
19
|
end #assert_raise...
|
20
20
|
end
|
@@ -152,7 +152,7 @@ class TestProject < Typingpool::Test
|
|
152
152
|
|
153
153
|
def test_local_basename_from_url
|
154
154
|
url = ['http://example.com/dir/', URI.escape('Example Title With Spaces & Ampersand.html')].join
|
155
|
-
assert_match(
|
155
|
+
assert_match(/%20/, url)
|
156
156
|
#assert(basename = Typingpool::Project.local_basename_from_url.u)
|
157
157
|
end
|
158
158
|
|
@@ -38,7 +38,7 @@ class TestProjectLocal < Typingpool::Test
|
|
38
38
|
in_temp_dir do |dir|
|
39
39
|
assert(local = create_project_local(dir))
|
40
40
|
refute_nil(local.id)
|
41
|
-
|
41
|
+
assert_raises(Typingpool::Error) do
|
42
42
|
local.create_id
|
43
43
|
end
|
44
44
|
assert_nil(local.subtitle)
|
@@ -39,7 +39,7 @@ class TestProjectRemote < Typingpool::Test
|
|
39
39
|
assert_equal(21,Typingpool::Project::Remote::S3.random_bucket_name(10).size)
|
40
40
|
assert_equal(28,Typingpool::Project::Remote::S3.random_bucket_name(10, 'testing-typingpool').size)
|
41
41
|
assert_equal(34,Typingpool::Project::Remote::S3.random_bucket_name(16, 'testing-typingpool').size)
|
42
|
-
assert_match(Typingpool::Project::Remote::S3.random_bucket_name(16, '')
|
42
|
+
assert_match(/^[a-z]/, Typingpool::Project::Remote::S3.random_bucket_name(16, ''))
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_project_remote_s3_networked
|
data/test/test_unit_template.rb
CHANGED
@@ -13,9 +13,9 @@ class TestTemplate < Typingpool::Test
|
|
13
13
|
assert(template2 = Typingpool::Template.new('template.html.erb', [fixtures_dir]))
|
14
14
|
has_template_in_fixtures_dir_test(template2)
|
15
15
|
signature = 'ffffffffff'
|
16
|
-
assert_match(template1.render({:title => signature})
|
17
|
-
refute_match(
|
18
|
-
assert_match(
|
16
|
+
assert_match(/#{signature}/, template1.render({:title => signature}))
|
17
|
+
refute_match(/#{signature}/, template1.read)
|
18
|
+
assert_match(/<h1><%= title/i, template1.read)
|
19
19
|
in_temp_dir do |dir1|
|
20
20
|
assert(template = Typingpool::Template.new('template', [dir1, fixtures_dir]))
|
21
21
|
assert(template.look_in.detect{|path| path == dir1})
|
@@ -24,9 +24,9 @@ class TestTemplate < Typingpool::Test
|
|
24
24
|
copy_template_fixture_into(dir2, '-2') do |path|
|
25
25
|
assert(template = Typingpool::Template.new('template', [dir1, dir2, fixtures_dir]))
|
26
26
|
assert_equal(path, template.full_path)
|
27
|
-
assert_match(template.render({:title => signature})
|
28
|
-
refute_match(
|
29
|
-
assert_match(
|
27
|
+
assert_match(/#{signature}/, template.render({:title => signature}))
|
28
|
+
refute_match(/#{signature}/, template.read)
|
29
|
+
assert_match(/<h2><%= title/i, template.read)
|
30
30
|
end #copy_template_fixture_into do...
|
31
31
|
end #in_temp_dir do |dir2|
|
32
32
|
end #in_temp_dir do |dir1|
|
@@ -40,12 +40,12 @@ class TestTemplate < Typingpool::Test
|
|
40
40
|
config.templates = dir2
|
41
41
|
assert(template = Typingpool::Template.from_config('template', config))
|
42
42
|
assert_equal(path, template.full_path)
|
43
|
-
assert_match(
|
43
|
+
assert_match(/<h2><%= title/i, template.read)
|
44
44
|
config.templates = dir1
|
45
|
-
exception =
|
45
|
+
exception = assert_raises(Typingpool::Error) do
|
46
46
|
template = Typingpool::Template.from_config('template', config)
|
47
47
|
end #assert_raises() do...
|
48
|
-
assert_match(
|
48
|
+
assert_match(/could not find/i, exception.message)
|
49
49
|
end #copy_template_into do...
|
50
50
|
end #in_temp_dir do |dir2|
|
51
51
|
end #in_temp_dir do |dir1|
|
@@ -61,7 +61,7 @@ class TestTemplate < Typingpool::Test
|
|
61
61
|
config.templates = dir
|
62
62
|
assert(template = Typingpool::Template::Assignment.from_config('template', config))
|
63
63
|
assert_equal(assignment_path, template.full_path)
|
64
|
-
assert_match(
|
64
|
+
assert_match(/<h2><%= title/i, template.read)
|
65
65
|
end #copy_template_fixture_into(assignment_subdir) do...
|
66
66
|
end #copy_template_fixture_into(dir, '') do...
|
67
67
|
end #in_temp_dir do...
|
@@ -71,9 +71,9 @@ class TestTemplate < Typingpool::Test
|
|
71
71
|
assert(template = Typingpool::Template.new('template-3', [fixtures_dir]))
|
72
72
|
signatures = [('g' * 9), ('h' * 11)]
|
73
73
|
assert(rendered = template.render(:title => signatures[0], :new_title => signatures[1]))
|
74
|
-
assert_match(
|
75
|
-
assert_match(
|
76
|
-
assert_match(
|
74
|
+
assert_match(/<h1><%= title/i, rendered)
|
75
|
+
assert_match(/<h1>#{signatures[0]}/i, rendered)
|
76
|
+
assert_match(/<h1>#{signatures[1]}/i, rendered)
|
77
77
|
in_temp_dir do |dir|
|
78
78
|
copy_template_fixture_into(dir) do |template_path|
|
79
79
|
subdir = File.join(dir, 'closer')
|
@@ -83,12 +83,12 @@ class TestTemplate < Typingpool::Test
|
|
83
83
|
FileUtils.cp(File.join(fixtures_dir, 'template-2.html.erb'), subdir)
|
84
84
|
look_in = [dir, subdir]
|
85
85
|
assert(template = Typingpool::Template.new('template', look_in))
|
86
|
-
assert_match(
|
87
|
-
refute_match(
|
86
|
+
assert_match(/<h1><%= title/i, template.read)
|
87
|
+
refute_match(/<h2><%= title/i, template.read)
|
88
88
|
assert(calling_template = Typingpool::Template.new('template-3', look_in))
|
89
89
|
assert(rendered = calling_template.render(:title => signatures[0], :new_title => signatures[1]))
|
90
|
-
assert_match(
|
91
|
-
refute_match(
|
90
|
+
assert_match(/<h2>/, rendered)
|
91
|
+
refute_match(/<h1>/, rendered)
|
92
92
|
end #copy_template_fixture_into do...
|
93
93
|
end #copy_template_fixture_into do...
|
94
94
|
end #in_temp_dir do...
|
@@ -49,12 +49,12 @@ class TestTranscript < Typingpool::Test
|
|
49
49
|
refute_equal(chunk.filename, chunk.filename_local)
|
50
50
|
original_newline_count = chunk.body_as_text.scan(/\n/).count
|
51
51
|
chunk.body = chunk.body + "\n\r\f" + ('foo bar baz' * 100)
|
52
|
-
refute_match(chunk.body_as_text
|
52
|
+
refute_match(/\r/, chunk.body_as_text) unless $/.match(/\r/)
|
53
53
|
assert_equal(original_newline_count + 2, chunk.body_as_text.scan(/\n/).count)
|
54
54
|
original_p_count = chunk.body_as_html.scan(/<p>/i).count
|
55
55
|
chunk.body = chunk.body + "One & two\n\n...and 3 < 4."
|
56
|
-
refute_match(
|
57
|
-
refute_match(
|
56
|
+
refute_match(/\s&\s/, chunk.body_as_html)
|
57
|
+
refute_match(/\s<\s/, chunk.body_as_html)
|
58
58
|
assert_equal(original_p_count + 1, chunk.body_as_html.scan(/<p>/i).count)
|
59
59
|
end
|
60
60
|
end
|
data/typingpool.gemspec
CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_runtime_dependency('nokogiri', '>= 1.5')
|
20
20
|
s.add_runtime_dependency('aws-sdk', '~> 1.8.0')
|
21
21
|
s.add_runtime_dependency('net-sftp', '>= 2.0.5')
|
22
|
-
s.
|
23
|
-
s.
|
22
|
+
s.add_development_dependency('minitest', '~> 5.0')
|
23
|
+
s.add_development_dependency('vcr')
|
24
|
+
s.add_development_dependency('webmock')
|
24
25
|
s.require_path = 'lib'
|
25
26
|
s.executables = ['tp-config',
|
26
27
|
'tp-make',
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typingpool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ryan Tate
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rturk
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,39 +27,34 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: highline
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '1.6'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '1.6'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: nokogiri
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.5'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.5'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: aws-sdk
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,49 +69,57 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: net-sftp
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: 2.0.5
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: 2.0.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5.0'
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
name: vcr
|
96
99
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
100
|
requirements:
|
99
|
-
- -
|
101
|
+
- - '>='
|
100
102
|
- !ruby/object:Gem::Version
|
101
103
|
version: '0'
|
102
|
-
type: :
|
104
|
+
type: :development
|
103
105
|
prerelease: false
|
104
106
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
107
|
requirements:
|
107
|
-
- -
|
108
|
+
- - '>='
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
- !ruby/object:Gem::Dependency
|
111
112
|
name: webmock
|
112
113
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
|
-
type: :
|
118
|
+
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
121
|
requirements:
|
123
|
-
- -
|
122
|
+
- - '>='
|
124
123
|
- !ruby/object:Gem::Version
|
125
124
|
version: '0'
|
126
125
|
description: An app for transcribing audio using Mechanical Turk
|
@@ -256,20 +255,19 @@ files:
|
|
256
255
|
- typingpool.gemspec
|
257
256
|
homepage: http://github.com/ryantate/typingpool
|
258
257
|
licenses: []
|
258
|
+
metadata: {}
|
259
259
|
post_install_message:
|
260
260
|
rdoc_options: []
|
261
261
|
require_paths:
|
262
262
|
- lib
|
263
263
|
required_ruby_version: !ruby/object:Gem::Requirement
|
264
|
-
none: false
|
265
264
|
requirements:
|
266
|
-
- -
|
265
|
+
- - '>='
|
267
266
|
- !ruby/object:Gem::Version
|
268
267
|
version: 1.9.2
|
269
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
|
-
none: false
|
271
269
|
requirements:
|
272
|
-
- -
|
270
|
+
- - '>='
|
273
271
|
- !ruby/object:Gem::Version
|
274
272
|
version: '0'
|
275
273
|
requirements:
|
@@ -277,9 +275,9 @@ requirements:
|
|
277
275
|
- mp3splt
|
278
276
|
- mp3wrap
|
279
277
|
rubyforge_project:
|
280
|
-
rubygems_version:
|
278
|
+
rubygems_version: 2.0.3
|
281
279
|
signing_key:
|
282
|
-
specification_version:
|
280
|
+
specification_version: 4
|
283
281
|
summary: An app for transcribing audio using Mechanical Turk
|
284
282
|
test_files:
|
285
283
|
- test/test_unit_amazon.rb
|