dict 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/dict/cli/runner.rb +1 -1
- data/lib/dict/dictionary.rb +7 -1
- data/lib/dict/version.rb +1 -1
- data/lib/dict/wiktionary.rb +32 -6
- data/spec/dict/lib_wiktionary_spec.rb +17 -0
- data/spec/dict/vcr_cassettes/slowik_runner_cassette.yml +2558 -716
- data/spec/dict/vcr_cassettes/translations_slownik_cassette.yml +2604 -744
- data/spec/dict/vcr_cassettes/wiktionary_translations_samochod_cassette.yml +4909 -36
- metadata +3 -16
data/Gemfile.lock
CHANGED
data/lib/dict/cli/runner.rb
CHANGED
@@ -54,7 +54,7 @@ Search WORD in dict, an open source dictionary aggregator.
|
|
54
54
|
end
|
55
55
|
|
56
56
|
MSG = "Usage: dict WORD [OPTIONS]\nTry `dict --help for more information.\n"
|
57
|
-
VERSION = "dict version #{Dict::VERSION}\nSearch WORD in dict, an open source dictionary aggregator.\nCopyright (C) 2012 by Mateusz Czerwiński
|
57
|
+
VERSION = "dict version #{Dict::VERSION}\nSearch WORD in dict, an open source dictionary aggregator.\nCopyright (C) 2012 by\nTrainees:\n Jan Borwin\n Mateusz Czerwiński\n Kosma Dunikowski\n Aleksander Gozdek\n Rafał Ośko\n Michał Podlecki\nMentors:\n Grzegorz Kołodziejski\n Michał Kwiatkowski\nLicense: MIT\nMade during intership at Ragnarson : http://ragnarson.com/\nHosted by Shelly Cloud : http://shellycloud.com/\nHomepage: http://github.com/Ragnarson/dict-gem/\nSources of dictionaries: http://wiktionary.org/\n http://glosbe.com/\n"
|
58
58
|
|
59
59
|
# Returns only translations of the given word, without example sentences.
|
60
60
|
def clean_translation(opts, word)
|
data/lib/dict/dictionary.rb
CHANGED
@@ -13,7 +13,7 @@ module Dict
|
|
13
13
|
check_arguments(word)
|
14
14
|
@translations = []
|
15
15
|
@examples = []
|
16
|
-
@word = word
|
16
|
+
@word = downcase_word(word)
|
17
17
|
@result = Dict::Result.new(@word)
|
18
18
|
end
|
19
19
|
|
@@ -52,5 +52,11 @@ module Dict
|
|
52
52
|
@original = original
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
private
|
57
|
+
# Returns a word with all downcased letters, including polish
|
58
|
+
def downcase_word(word)
|
59
|
+
word.downcase.gsub(/[ĄĆĘŁŃÓŚŹŻ]/, 'Ą' => 'ą', 'Ć' => 'ć', 'Ę' => 'ę', 'Ł' => 'ł', 'Ń' => 'ń', 'Ó' => 'ó', 'Ś' => 'ś', 'Ź' => 'ź', 'Ż' => 'ż')
|
60
|
+
end
|
55
61
|
end
|
56
62
|
end
|
data/lib/dict/version.rb
CHANGED
data/lib/dict/wiktionary.rb
CHANGED
@@ -10,15 +10,20 @@ module Dict
|
|
10
10
|
|
11
11
|
# Returns an Dict::Result object.
|
12
12
|
def translate
|
13
|
-
translations.each
|
13
|
+
translations.each do |translation|
|
14
|
+
@result.add_translation(@result.term, translation.gsub(/(\s[^|\s]+\|)/,' '))
|
15
|
+
examples(translation).each { |example| @result.add_example(translation, example) }
|
16
|
+
end
|
14
17
|
|
15
18
|
@result
|
16
19
|
end
|
17
20
|
|
18
21
|
def get_html(url)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
+
begin
|
23
|
+
Nokogiri::HTML(open(URI.encode(url)))
|
24
|
+
rescue OpenURI::HTTPError
|
25
|
+
raise Dictionary::ConnectError
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
private
|
@@ -33,8 +38,10 @@ module Dict
|
|
33
38
|
|
34
39
|
content_pl = get_html(url_pl).css('textarea#wpTextbox1').first
|
35
40
|
if polish?(content_pl)
|
41
|
+
@is_polish = true
|
36
42
|
extract_polish_translations(content_pl)
|
37
43
|
else
|
44
|
+
@is_polish = false
|
38
45
|
extract_english_translations(get_html(url_en).css('textarea#wpTextbox1').first.content)
|
39
46
|
end
|
40
47
|
end
|
@@ -58,8 +65,27 @@ module Dict
|
|
58
65
|
translations ||= []
|
59
66
|
end
|
60
67
|
|
61
|
-
def
|
62
|
-
|
68
|
+
def examples(word)
|
69
|
+
url_pl = "http://pl.wiktionary.org/w/index.php?title=#{word}&action=edit"
|
70
|
+
|
71
|
+
if @is_polish
|
72
|
+
extract_english_examples(word)
|
73
|
+
else
|
74
|
+
[]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Returns an array containing usage examples of translated polish word to english.
|
79
|
+
def extract_english_examples(word)
|
80
|
+
word = word.gsub(/\s+\(.+$/,'') || ''
|
81
|
+
url_en = "http://en.wiktionary.org/w/index.php?title=#{word}&action=edit"
|
82
|
+
examples = /Noun[^\{]+\{\{en\-noun[^=]+/.match(get_html(url_en.gsub('{word}',word)).css('textarea#wpTextbox1').first)
|
83
|
+
return [] unless examples.instance_of?(MatchData)
|
84
|
+
examples = examples[0].scan(/#: ''([^\n]+)\n/)
|
85
|
+
examples.map! do |translation|
|
86
|
+
translation[0].gsub(/'{2,}/,'')
|
87
|
+
end
|
88
|
+
examples
|
63
89
|
end
|
64
90
|
end
|
65
91
|
end
|
@@ -42,4 +42,21 @@ describe Dict::Wiktionary do
|
|
42
42
|
Dict::Wiktionary.new("dragon").translate.translations.should eq({'dragon' => ['smok']})
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
it "should return translations for word written with uppercase letters" do
|
47
|
+
result = Dict::Wiktionary.new('SaMoCHÓd').translate.translations
|
48
|
+
result.should eq({"samochód"=>["car", "automobile"]})
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#examples" do
|
52
|
+
it "should return a empty hash of usage examples to 'assdd' word" do
|
53
|
+
result = Dict::Wiktionary.new('field').translate.examples
|
54
|
+
result.should eq({})
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return a hash containing usage examples to 'kot' word" do
|
58
|
+
result = Dict::Wiktionary.new('kot').translate.examples
|
59
|
+
result.should eq({"cat" => ["No room to swing a cat."]})
|
60
|
+
end
|
61
|
+
end
|
45
62
|
end
|