camdict 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/camdict/client.rb +4 -3
- data/lib/camdict/definition.rb +35 -2
- data/test/itest_client.rb +2 -2
- data/test/itest_definition.rb +16 -15
- data/test/itest_explanation.rb +7 -6
- data/test/test_client.rb +4 -4
- data/test/test_common.rb +7 -5
- data/test/test_definition.rb +10 -10
- data/test/test_explanation.rb +2 -2
- data/test/test_http_client.rb +2 -2
- metadata +28 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9375049d96a36f304ae7262da7047f6c4d6e0402
|
4
|
+
data.tar.gz: a1256a02286a23bbd204bb0cd5de8a5670c5d12b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 857e3d9ee01bdf43511371ec3f1b6bf6df45185f4078e2e1e245243307322a85b9e3bda3b2a77523fa3884b14dd27c62541c1d27a02d718b447e750546bdbf02
|
7
|
+
data.tar.gz: b69da41647e14adefa47ee049df7b7967354f212479e6b3669d3c4e19e6a8385ae6222bd2df73becb745e3758af6e62df75c1652286f3cde459d5c796964f5d4
|
data/lib/camdict/client.rb
CHANGED
@@ -10,10 +10,11 @@ module Camdict
|
|
10
10
|
# are not included.
|
11
11
|
class Client
|
12
12
|
|
13
|
-
# Default dictionary is
|
14
|
-
#
|
13
|
+
# Default dictionary is english-chinese-simplified.
|
14
|
+
# Other possible +dict+ values:
|
15
|
+
# british, american-english, business-english, learner-english.
|
15
16
|
def initialize(dict=nil)
|
16
|
-
@dictionary = dict || "
|
17
|
+
@dictionary = dict || "english-chinese-simplified"
|
17
18
|
end
|
18
19
|
|
19
20
|
|
data/lib/camdict/definition.rb
CHANGED
@@ -352,7 +352,24 @@ module Camdict
|
|
352
352
|
if short[-1] == '-'
|
353
353
|
center = short[1, slen-2]
|
354
354
|
position = full.index(center[0])
|
355
|
-
# match left
|
355
|
+
# match left and right
|
356
|
+
if full.index(center[-1])
|
357
|
+
left_matched_index = position
|
358
|
+
right_matched_index = flen-1 - full.index(center[-1])
|
359
|
+
rev_number = center.length - (right_matched_index -
|
360
|
+
left_matched_index + 1)
|
361
|
+
if left_matched_index && rev_number <= 0
|
362
|
+
right_index = mix_spi(basesp, right_matched_index+1..flen-1)
|
363
|
+
rev_right_index = revise_index(right_index, rev_number)
|
364
|
+
findex = mix_spi(basesp, 0..left_matched_index-1,
|
365
|
+
ussp, left_matched_index+1,
|
366
|
+
rev_right_index, 0)
|
367
|
+
ret = full[0..left_matched_index-1] + center +
|
368
|
+
full[right_matched_index+1..flen-1]
|
369
|
+
return {baseipa: ret, sindex: findex}
|
370
|
+
end
|
371
|
+
end
|
372
|
+
# match left only
|
356
373
|
if position && (slen - 2 < flen - 1 - position)
|
357
374
|
findex = mix_spi(basesp, 0..position-1, ussp, position-1,
|
358
375
|
basesp, position+slen-2..flen-1)
|
@@ -360,7 +377,7 @@ module Camdict
|
|
360
377
|
return {baseipa: ret, sindex: findex}
|
361
378
|
end
|
362
379
|
position = full.index(center[-1])
|
363
|
-
# match right
|
380
|
+
# match right only
|
364
381
|
if position && (position + 1 > slen - 2)
|
365
382
|
findex = mix_spi(basesp, 0..position-slen+2, ussp, position-slen+2,
|
366
383
|
basesp, position+1..flen-1)
|
@@ -414,6 +431,22 @@ module Camdict
|
|
414
431
|
end
|
415
432
|
end
|
416
433
|
|
434
|
+
# +superscript_index+ is the superscript index for an IPA
|
435
|
+
# +rev_number+ is the number that is used to revise the superscript index
|
436
|
+
# after the common part of a us shorten ipa is joined with uk ipa, the
|
437
|
+
# remainding part requires to be revised as it becomes longer or shorter.
|
438
|
+
# return the revised superscript_index or nil if the passed
|
439
|
+
# +superscript_index+ is nil.
|
440
|
+
def revise_index(superscript_index, rev_number)
|
441
|
+
return nil if superscript_index.nil?
|
442
|
+
ret = []
|
443
|
+
superscript_index.each_pair { |position, len|
|
444
|
+
ret += [position+rev_number, len]
|
445
|
+
}
|
446
|
+
return nil if ret.empty?
|
447
|
+
ret
|
448
|
+
end
|
449
|
+
|
417
450
|
# Determine whether or not the range is included by the superscript index.
|
418
451
|
# Return the pair of index array when it is included by that. Or return nil.
|
419
452
|
def at_range(spindex, range)
|
data/test/itest_client.rb
CHANGED
data/test/itest_definition.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
5
|
-
class DefinitioniTest < Test
|
5
|
+
class DefinitioniTest < Minitest::Test
|
6
6
|
|
7
7
|
def test_part_of_speech
|
8
8
|
data = {'aluminium' => 'noun', 'aluminum' => 'noun',
|
9
9
|
'look at sth' => 'phrasal verb', 'plagiarist' => 'noun',
|
10
|
-
'pass water' => 'idiom', 'ruby' =>
|
10
|
+
'pass water' => 'idiom', 'ruby' => 'noun'}
|
11
|
+
# adjective for ruby exists in British dictionary
|
11
12
|
data.each_pair { |word, exp_result|
|
12
13
|
w = Camdict::Word.new(word)
|
13
14
|
defa = w.definitions
|
@@ -31,33 +32,33 @@ module Camdict
|
|
31
32
|
imaginary = {
|
32
33
|
:word => "imaginary",
|
33
34
|
:uk_utf8 => %w(26a 2c8 6d e6 64 292 2e 26a 2e 6e 259 72 2e 69),
|
34
|
-
:
|
35
|
+
:us_utf8 => %w(26a 2c8 6d e6 64 292 2e 259 2e 6e 65 72 2e 69),
|
35
36
|
:uk_inx => [10,1],
|
36
|
-
:
|
37
|
+
:us_inx => nil,
|
37
38
|
:which => 0
|
38
39
|
}
|
39
40
|
plagiarism = {
|
40
41
|
:word => "plagiarism",
|
41
42
|
:uk_utf8 => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 26a 2e 7a 259 6d),
|
42
|
-
:
|
43
|
+
:us_utf8 => %w(2c8 70 6c 65 26a 2e 64 292 25a 2e 26a 2e 7a 259 6d),
|
43
44
|
:uk_inx => [8,1,14,1],
|
44
|
-
:
|
45
|
+
:us_inx => [13,1],
|
45
46
|
:which => 0
|
46
47
|
}
|
47
48
|
aluminum = {
|
48
49
|
:word => "aluminum",
|
49
50
|
:uk_utf8 => %w(259 2c8 6c 75 2d0 2e 6d 26a 2e 6e 259 6d),
|
50
|
-
:
|
51
|
+
:us_utf8 => %w(259 2c8 6c 75 2d0 2e 6d 26a 2e 6e 259 6d),
|
51
52
|
:uk_inx => nil,
|
52
|
-
:
|
53
|
+
:us_inx => nil,
|
53
54
|
:which => 0
|
54
55
|
}
|
55
56
|
sled = {
|
56
57
|
:word => "sled",
|
57
58
|
:uk_utf8 => nil,
|
58
|
-
:
|
59
|
+
:us_utf8 => nil,
|
59
60
|
:uk_inx => nil,
|
60
|
-
:
|
61
|
+
:us_inx => nil,
|
61
62
|
:which => 1
|
62
63
|
}
|
63
64
|
data = [imaginary, plagiarism, aluminum, sled]
|
@@ -71,10 +72,10 @@ module Camdict
|
|
71
72
|
us = us.unpack('U*').map { |n| n.to_s 16 } if us
|
72
73
|
actk = defo.ipa.k
|
73
74
|
acts = defo.ipa.s
|
74
|
-
assert_equal d[:uk_utf8], uk
|
75
|
-
assert_equal d[:
|
76
|
-
assert_equal d[:uk_inx], actk
|
77
|
-
assert_equal d[:
|
75
|
+
assert_equal d[:uk_utf8], uk, "#{d[:word]} uk ipa got a problem"
|
76
|
+
assert_equal d[:us_utf8], us, "#{d[:word]} us ipa got a problem"
|
77
|
+
assert_equal d[:uk_inx], actk, "#{d[:word]} uk superscript index issue"
|
78
|
+
assert_equal d[:us_inx], acts, "#{d[:word]} us superscript index issue"
|
78
79
|
}
|
79
80
|
end
|
80
81
|
|
data/test/itest_explanation.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
5
|
-
class ExplanationiTest < Test
|
5
|
+
class ExplanationiTest < Minitest::Test
|
6
6
|
def test_explanations
|
7
7
|
w = Camdict::Word.new('correct')
|
8
8
|
defa = w.definitions
|
9
9
|
def1 = defa.first #first is adjective
|
10
10
|
e1 = def1.explanations.first
|
11
|
-
|
12
|
-
assert_equal "
|
13
|
-
assert_equal "
|
11
|
+
#todo: level info is not in english-chinese-simplied dictionary
|
12
|
+
#assert_equal "A2", e1.level
|
13
|
+
#assert_equal "B2", defa.last.explanations.first.level
|
14
|
+
assert_equal "I've got thirty exam papers to correct.",
|
14
15
|
defa.last.explanations.first.examples.last.sentence
|
15
16
|
w = Camdict::Word.new('correctly')
|
16
17
|
defa = w.definitions
|
@@ -18,7 +19,7 @@ module Camdict
|
|
18
19
|
e1 = def1.explanations
|
19
20
|
assert_equal "Have I pronounced your name correctly?",
|
20
21
|
e1[2].examples[0].sentence
|
21
|
-
assert_equal "B1", e1[2].level
|
22
|
+
#assert_equal "B1", e1[2].level
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_phrase_meaning
|
data/test/test_client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
@@ -10,11 +10,11 @@ module Camdict
|
|
10
10
|
</ul>
|
11
11
|
EoHTM
|
12
12
|
|
13
|
-
class ClientTest < Test
|
13
|
+
class ClientTest < MiniTest::Test
|
14
14
|
|
15
15
|
def test_new
|
16
16
|
c = Camdict::Client.new
|
17
|
-
assert c.instance_eval { @dictionary == "
|
17
|
+
assert c.instance_eval { @dictionary == "english-chinese-simplified" }
|
18
18
|
c = Camdict::Client.new("american-english")
|
19
19
|
assert c.instance_eval { @dictionary == "american-english" }
|
20
20
|
end
|
@@ -55,7 +55,7 @@ EoHTM
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def test_di_head
|
58
|
-
# Nokogiri version 1
|
58
|
+
# Nokogiri version 1.6.2 and later required for this test case
|
59
59
|
# but previous versions should also work with camdict
|
60
60
|
# you won't see this test case failure once
|
61
61
|
# https://github.com/sparklemotion/nokogiri/pull/1020 is released.
|
data/test/test_common.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
5
|
-
class CommonTest < Test
|
5
|
+
class CommonTest < Minitest::Test
|
6
6
|
include Camdict::Common
|
7
7
|
|
8
8
|
def test_flatten
|
@@ -39,9 +39,11 @@ module Camdict
|
|
39
39
|
'the other end of sth']
|
40
40
|
assert_equal expected, str.flatten
|
41
41
|
strs = ["20/20 vision", "public enemy number one/no. 1"]
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
# todo:
|
43
|
+
# "20/20 vision".flatten => "20/20 vision" no change expected
|
44
|
+
# public enemy number one/no. 1 =>
|
45
|
+
# public enemy number one
|
46
|
+
# public enemy no. 1
|
45
47
|
str = "the more...the more/less"
|
46
48
|
expected = ['the more...the more', 'the more...the less']
|
47
49
|
assert_equal expected, str.flatten
|
data/test/test_definition.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
@@ -13,7 +13,7 @@ module Camdict
|
|
13
13
|
'<span class="runon-info"><span class="posgram"><span class="pos">noun' +
|
14
14
|
'</span></span></span></span>'
|
15
15
|
|
16
|
-
class DefinitionTest < Test
|
16
|
+
class DefinitionTest < Minitest::Test
|
17
17
|
|
18
18
|
def test_pos
|
19
19
|
html = '<h2 class="di-title cdo-section-title-hw">favourite</h2>' +
|
@@ -141,6 +141,14 @@ module Camdict
|
|
141
141
|
:uk_inx => [10,1],
|
142
142
|
:spiexp => nil
|
143
143
|
}
|
144
|
+
plagiarism = {
|
145
|
+
:uk_utf8 => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 61 26a 7a),
|
146
|
+
:us_utf8 => %w(2d 64 292 259 72 2e 26a 2e 7a 259 6d),
|
147
|
+
:expected => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 26a 2e 7a 259 6d),
|
148
|
+
:us_inx => [3,1,9,1],
|
149
|
+
:uk_inx => [8,1],
|
150
|
+
:spiexp => [8,1,14,1]
|
151
|
+
}
|
144
152
|
# left hyphen
|
145
153
|
plagiarize = {
|
146
154
|
:uk_utf8 => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 61 26a 7a),
|
@@ -150,14 +158,6 @@ module Camdict
|
|
150
158
|
:uk_inx => [8,1],
|
151
159
|
:spiexp => nil
|
152
160
|
}
|
153
|
-
plagiarism = {
|
154
|
-
:uk_utf8 => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 61 26a 7a),
|
155
|
-
:us_utf8 => %w(2d 64 292 259 72 2e 26a 2e 7a 259 6d),
|
156
|
-
:expected => %w(2c8 70 6c 65 26a 2e 64 292 259 72 2e 26a 2e 7a 259 6d),
|
157
|
-
:us_inx => [3,1,9,1],
|
158
|
-
:uk_inx => [8,1],
|
159
|
-
:spiexp => [8,1,14,1]
|
160
|
-
}
|
161
161
|
painting = {
|
162
162
|
:uk_utf8 => %w(2c8 70 65 26a 6e 2e 74 26a 14b),
|
163
163
|
:us_utf8 => %w(2d 74 32c 26a 14b),
|
data/test/test_explanation.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
require 'camdict'
|
3
3
|
|
4
4
|
module Camdict
|
5
|
-
class ExplanationTest < Test
|
5
|
+
class ExplanationTest < Minitest::Test
|
6
6
|
|
7
7
|
def test_get_level
|
8
8
|
html = '<span class="def-info"><span class="epp-xref B1">B1</span>'
|
data/test/test_http_client.rb
CHANGED
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camdict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pan Gaoyong
|
8
|
-
- 潘高勇
|
8
|
+
- "潘高勇"
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 1.6.2
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 1.6.2
|
28
28
|
description: Get definitions, pronunciation and example sentences of a word or phrase
|
29
29
|
from the online Cambridge dictionaries.
|
30
30
|
email: pan.gaoyong@gmail.com
|
@@ -32,24 +32,24 @@ executables: []
|
|
32
32
|
extensions: []
|
33
33
|
extra_rdoc_files: []
|
34
34
|
files:
|
35
|
-
- license
|
36
|
-
- Rakefile
|
37
35
|
- README.md
|
36
|
+
- Rakefile
|
38
37
|
- lib/camdict.rb
|
39
|
-
- lib/camdict/
|
38
|
+
- lib/camdict/client.rb
|
39
|
+
- lib/camdict/common.rb
|
40
40
|
- lib/camdict/definition.rb
|
41
41
|
- lib/camdict/explanation.rb
|
42
|
-
- lib/camdict/
|
42
|
+
- lib/camdict/http_client.rb
|
43
43
|
- lib/camdict/word.rb
|
44
|
-
-
|
45
|
-
- test/itest_explanation.rb
|
46
|
-
- test/test_common.rb
|
44
|
+
- license
|
47
45
|
- test/itest_client.rb
|
48
46
|
- test/itest_definition.rb
|
49
|
-
- test/
|
50
|
-
- test/test_http_client.rb
|
47
|
+
- test/itest_explanation.rb
|
51
48
|
- test/test_client.rb
|
49
|
+
- test/test_common.rb
|
50
|
+
- test/test_definition.rb
|
52
51
|
- test/test_explanation.rb
|
52
|
+
- test/test_http_client.rb
|
53
53
|
homepage: https://github.com/pan/camdict
|
54
54
|
licenses:
|
55
55
|
- MIT
|
@@ -60,18 +60,26 @@ require_paths:
|
|
60
60
|
- lib
|
61
61
|
required_ruby_version: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- -
|
63
|
+
- - ">="
|
64
64
|
- !ruby/object:Gem::Version
|
65
65
|
version: 1.9.3
|
66
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
requirements: []
|
72
72
|
rubyforge_project:
|
73
|
-
rubygems_version: 2.
|
73
|
+
rubygems_version: 2.2.2
|
74
74
|
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: online Cambridge dictionary client
|
77
|
-
test_files:
|
77
|
+
test_files:
|
78
|
+
- test/itest_explanation.rb
|
79
|
+
- test/test_common.rb
|
80
|
+
- test/itest_client.rb
|
81
|
+
- test/itest_definition.rb
|
82
|
+
- test/test_definition.rb
|
83
|
+
- test/test_http_client.rb
|
84
|
+
- test/test_client.rb
|
85
|
+
- test/test_explanation.rb
|