dict 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/lib/dictpl.rb +24 -11
  2. data/lib/result.rb +4 -0
  3. data/lib/wiktionary.rb +40 -17
  4. metadata +3 -3
data/lib/dictpl.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'open-uri'
2
3
  require 'nokogiri'
3
4
  require_relative 'result'
@@ -6,11 +7,9 @@ require_relative 'result'
6
7
  class Dictpl
7
8
 
8
9
  DICT_URL = "http://dict.pl/dict?word="
9
- def initialize(word)
10
- raise ArgumentError, "No given word" if word.empty?
11
- @word = word
12
- @uri = URI(URI.escape(DICT_URL + @word + "&lang=EN"))
13
- @result = Result.new(word)
10
+ def initialize(word)
11
+ check_arguments(word)
12
+ initialize_instance_arguments(word)
14
13
  end
15
14
 
16
15
  #
@@ -19,22 +18,36 @@ class Dictpl
19
18
  # {"krowa"=>["cow"], "krowa bliska wycielenia"=>["freshen of cow"], ... }
20
19
  #
21
20
  def translate
21
+
22
+ # Array contatining all words alternately
23
+ # Example: ["krowa", "cow", "krowa bliska wycielenia", "freshen of cow", ... ]
22
24
  @context_words = []
23
25
 
24
- doc = Nokogiri::HTML(open(@uri))
26
+ doc = get_html(@uri)
25
27
  doc.xpath('//td[@class="resWordCol"]/a').each do |node|
26
28
  @context_words << node.text
27
29
  end
28
-
30
+
29
31
  @mapped_words = {} # hash containing words with matched translations
30
32
 
31
33
  @context_words.each_slice(2) do |word|
32
34
  @mapped_words[word.first] = word.last
33
35
  @result.add_translation(word.first, word.last)
34
- end
35
-
36
+ end
36
37
  @result
37
38
  end
38
-
39
- end
40
39
 
40
+ def check_arguments(word)
41
+ raise ArgumentError.new("No given word") if word.empty?
42
+ end
43
+
44
+ def initialize_instance_arguments(word)
45
+ @uri = URI(URI.escape(DICT_URL + word + "&lang=EN"))
46
+ @result = Result.new(word)
47
+ end
48
+
49
+ def get_html(uri)
50
+ Nokogiri::HTML(open(uri))
51
+ end
52
+
53
+ end
data/lib/result.rb CHANGED
@@ -20,6 +20,10 @@ class Result
20
20
  yield term, translation
21
21
  end
22
22
  end
23
+
24
+ def to_s
25
+ "#{@term}\n#{@dictionaries}\n#{@translations}\n#{@examples}\n"
26
+ end
23
27
 
24
28
  private
25
29
  def add_result(hash, key, value)
data/lib/wiktionary.rb CHANGED
@@ -21,31 +21,45 @@ require 'nokogiri'
21
21
  require_relative 'result'
22
22
 
23
23
  class Wiktionary
24
- WIKI_URL = "http://en.wiktionary.org/wiki/"
24
+ WIKI_EN = "http://en.wiktionary.org/wiki/"
25
+ WIKI_PL = "http://pl.wiktionary.org/wiki/"
25
26
  def initialize(word)
26
27
  check_arguments(word)
27
28
  initialize_instance_arguments(word)
28
29
  end
29
30
 
30
31
  def translate
31
- translations = []
32
-
32
+ translations = []
33
+ @uri = URI.parse(URI.escape("#{WIKI_EN}#{@word}"))
33
34
  doc = get_html(@uri)
34
-
35
- return @result unless is_polish?(doc)
36
35
 
37
- doc.css('div#mw-content-text[lang=en] ol > li a').each do |link|
38
- @result.add_translation(@result.term, link.content)
39
- end
36
+ if is_polish?(doc)
37
+ doc.css('div#mw-content-text[lang=en] ol > li a').each do |link|
38
+ @result.add_translation(@result.term, link.content)
39
+ end
40
40
 
41
-
42
- doc.css('div#mw-content-text[lang=en] ol > li a').each do |link|
43
- translations.push(link.content)
44
- end
41
+ doc.css('div#mw-content-text[lang=en] ol > li a').each do |link|
42
+ translations.push(link.content)
43
+ end
45
44
 
46
- examples_of_translations(@result, translations)
45
+ get_examples_of_translations_en(@result, translations, WIKI_EN)
47
46
 
48
- @result
47
+ @result
48
+ else
49
+ @uri = URI.parse(URI.escape("#{WIKI_PL}#{@word}"))
50
+ doc = get_html(@uri)
51
+
52
+ doc.css('div#mw-content-text dfn a').each do |link|
53
+ @result.add_translation(@result.term, link.content)
54
+ end
55
+
56
+ doc.css('div#mw-content-text dfn a').each do |link|
57
+ translations.push(link.content)
58
+ end
59
+
60
+ get_examples_of_translations_pl(@result, translations, WIKI_PL)
61
+ @result
62
+ end
49
63
  end
50
64
 
51
65
  private
@@ -54,18 +68,27 @@ class Wiktionary
54
68
  Nokogiri::HTML(Net::HTTP.get(uri))
55
69
  end
56
70
 
57
- def examples_of_translations(result, translations)
71
+ def get_examples_of_translations_en(result, translations, adres)
58
72
  translations.each do |item|
59
- example = Nokogiri::HTML(Net::HTTP.get(URI(WIKI_URL + item.tr(' ', '_'))))
73
+ example = Nokogiri::HTML(Net::HTTP.get(URI(adres + item.tr(' ', '_'))))
60
74
  example.css('div#mw-content-text[lang=en] ol:first > li dl dd i').each do |s|
61
75
  result.add_example(result.term, s.content)
62
76
  end
63
77
  end
64
78
  end
79
+
80
+ def get_examples_of_translations_pl(result, translations, adres)
81
+ translations.each do |item|
82
+ example = Nokogiri::HTML(Net::HTTP.get(adres + item))
83
+ example.css('div#mw-content-text[lang=pl] dl dd').each do |s|
84
+ result.add_example(result.term, s.content)
85
+ end
86
+ end
87
+ end
65
88
 
66
89
  def initialize_instance_arguments(word)
67
90
  @result = Result.new(word.downcase.tr(' ', '_'))
68
- @uri = URI(URI.escape(WIKI_URL + word.downcase.tr(' ', '_')))
91
+ @word = word
69
92
  end
70
93
 
71
94
  def check_arguments(word)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dict
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-07-06 00:00:00.000000000 Z
15
+ date: 2012-07-08 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: slop
@@ -55,9 +55,9 @@ executables:
55
55
  extensions: []
56
56
  extra_rdoc_files: []
57
57
  files:
58
- - lib/dict.rb
59
58
  - lib/result.rb
60
59
  - lib/wiktionary.rb
60
+ - lib/dict.rb
61
61
  - lib/dictpl.rb
62
62
  - bin/translate
63
63
  homepage: https://github.com/Ragnarson/dict-gem