dict 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *~
2
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ notifications:
6
+ email:
7
+ - gozdek.aleksander@gmail.com
8
+ - grk@ragnarson.com
9
+ - jan.borwin@gmail.com
10
+ - kosmadunikowski@gmail.com
11
+ - mtczerwinski@gmail.com
12
+ - michalk@ragnarson.com
13
+ - m.podlecki@op.pl
14
+ - rafal.osko@gmail.com
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dict.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dict (0.2.1)
5
+ nokogiri (~> 1.5.5)
6
+ slop (~> 3.3.2)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ diff-lcs (1.1.3)
12
+ nokogiri (1.5.5)
13
+ rake (0.9.2.2)
14
+ rspec (2.11.0)
15
+ rspec-core (~> 2.11.0)
16
+ rspec-expectations (~> 2.11.0)
17
+ rspec-mocks (~> 2.11.0)
18
+ rspec-core (2.11.0)
19
+ rspec-expectations (2.11.1)
20
+ diff-lcs (~> 1.1.3)
21
+ rspec-mocks (2.11.1)
22
+ slop (3.3.2)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ dict!
29
+ rake
30
+ rspec (~> 2.11)
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # dict [![Build Status](https://secure.travis-ci.org/Ragnarson/dict-gem.png?branch=master)](http://travis-ci.org/Ragnarson/dict-gem)
2
+ CLI and backend for dict - an open source dictionary aggregator.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ task :default => :spec
5
+ desc "Run specs"
6
+ RSpec::Core::RakeTask.new do |t|
7
+ t.rspec_opts = %w(-fp --color)
8
+ end
data/bin/dict CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/ruby
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
- require_relative '../lib/module_main.rb'
4
+ require 'dict/cli/runner'
5
5
 
6
6
  opts = Hash.new
7
7
 
8
- Main::main(opts)
8
+ runner = Dict::CLI::Runner.new
9
+ runner.run(opts)
data/dict.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "dict/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.add_dependency 'slop', '~> 3.3.2'
6
+ s.add_dependency 'nokogiri', '~>1.5.5'
7
+ s.add_development_dependency "rspec", "~> 2.11"
8
+ s.add_development_dependency "rake"
9
+
10
+ s.name = %q{dict}
11
+ s.version = Dict::VERSION
12
+ s.authors = ['Aleksander Gozdek', 'Mateusz Czerwinski', 'Michał Podlecki','Rafał Ośko']
13
+ s.email = ['mtczerwinski@gmail.com']
14
+ s.date = Time.now.strftime('%Y-%m-%d')
15
+ s.summary = %q{Gem made for dictionary application}
16
+ s.description = <<-END
17
+ Dict is an open source dictionary aggregator.
18
+ END
19
+ s.homepage = 'https://github.com/Ragnarson/dict-gem'
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'dict/dict'
4
+ require 'slop'
5
+ require 'timeout'
6
+
7
+ module Dict
8
+ module CLI
9
+ class Runner
10
+ def parameters_valid?
11
+ not ARGV.empty?
12
+ end
13
+
14
+ def parse_parameters
15
+ available_dictionaries = Dict.available_services.join(', ')
16
+
17
+ opts = Slop.parse! do
18
+ banner <<-END
19
+ Usage: dict WORD [OPTIONS]
20
+ Search WORD in dict, an open source dictionary aggregator.
21
+ END
22
+
23
+ on '-h', :help, 'Display this help message'
24
+ on '-t', :time=, 'Set timeout in seconds. Default: 300', :as => :int
25
+ on '-d', :dict=, "Select desired dictionary. Available options: #{available_dictionaries}"
26
+ end
27
+ opts
28
+ end
29
+
30
+ def get_translations(opts, word)
31
+ Timeout::timeout(opts[:time].to_i || 300) do
32
+ if opts.dict?
33
+ Dict.get_single_dictionary_translations(word, opts[:dict])
34
+ else
35
+ Dict.get_all_dictionaries_translations(word)
36
+ end
37
+ end
38
+ rescue Timeout::Error
39
+ "Timeout for the query."
40
+ end
41
+
42
+ def run(opts)
43
+ begin
44
+ opts = parse_parameters
45
+ rescue Slop::MissingArgumentError
46
+ abort("Missing argument")
47
+ end
48
+
49
+ abort(opts.to_s) if opts.help?
50
+ parameters_valid? or abort("Please enter a word. (-h for help)")
51
+
52
+ puts get_translations(opts, ARGV[0])
53
+ end
54
+ end
55
+ end
56
+ end
57
+
data/lib/dict/dict.rb ADDED
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'dict/wiktionary'
4
+ require 'dict/dictpl'
5
+ require 'json'
6
+
7
+ module Dict
8
+ class << self
9
+ def get_all_dictionaries_translations(word)
10
+ dictionaries = Hash.new
11
+
12
+ available_services.each do |service|
13
+ dictionaries[service] = get_single_dictionary_translations(word, service)
14
+ end
15
+ dictionaries
16
+ end
17
+
18
+ def print_all_dictionaries_translations(word)
19
+ end
20
+
21
+ def get_single_dictionary_translations(word, service)
22
+ case service
23
+ when 'wiktionary'
24
+ Wiktionary.new(word, WIKI_URL).translate
25
+ when 'dictpl'
26
+ Dictpl.new(word, DICT_URL).translate
27
+ else Dictionary.message
28
+ end
29
+ rescue Dictionary::ConnectError
30
+ "Couldn't connect to the service."
31
+ end
32
+
33
+ def print_single_dictionary_translations(word, service)
34
+ obj = get_single_dictionary_translations(word, service)
35
+ hash = obj.translate
36
+ hash.each do |k, v|
37
+ puts "#{k} - #{v}"
38
+ end
39
+ end
40
+
41
+ def to_json(hash)
42
+ hash.to_json
43
+ end
44
+
45
+ def available_services
46
+ ['wiktionary', 'dictpl']
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'open-uri'
4
+
5
+ module Dict
6
+ class Dictionary
7
+ attr_accessor :translations, :examples
8
+ def initialize(word, url)
9
+ check_arguments(word)
10
+ @translations = []
11
+ @examples = []
12
+ @uri = URI(URI.escape(url + word.downcase.tr(' ', '_')))
13
+ end
14
+
15
+ def make_hash_results(arr)
16
+ hash = arr.each_slice(2).inject({}) do |h, (key, value)|
17
+ if h.has_key?(key)
18
+ h[key].push(value) ; h
19
+ else
20
+ h[key] = [value] ; h
21
+ end
22
+ end
23
+ @translations, @examples = hash.keys, hash.values
24
+ hash
25
+ end
26
+
27
+ def check_arguments(word)
28
+ raise ArgumentError.new("No given word") if word.empty?
29
+ end
30
+
31
+ def self.message
32
+ 'There\'s no such dictionary in database.'
33
+ end
34
+
35
+ class ConnectError < Exception
36
+ attr_reader :original
37
+ def initialize(original = $!)
38
+ @original = original
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'nokogiri'
4
+ require 'dict/dictionary'
5
+
6
+ DICT_URL = 'http://dict.pl/dict?word='
7
+
8
+ module Dict
9
+ class Dictpl < Dictionary
10
+ # Method returns hash with translations as keys and examples of using words as values
11
+ def translate
12
+ context_words = []
13
+ Nokogiri::HTML(open(@uri)).xpath('//td[@class="resWordCol"]/a').each do |node|
14
+ context_words << node.text
15
+ end
16
+ make_hash_results(context_words)
17
+ rescue OpenURI::HTTPError
18
+ raise Dictionary::ConnectError
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Dict
2
+ VERSION = "0.2.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'nokogiri'
4
+ require 'dict/dictionary'
5
+
6
+ WIKI_URL = 'http://en.wiktionary.org/wiki/'
7
+
8
+ module Dict
9
+ class Wiktionary < Dictionary
10
+ # Method returns hash with translations as keys and examples of using words as values
11
+ def translate
12
+ context_words = []
13
+ url = 'http://en.wiktionary.org/wiki/'
14
+ get_html(@uri).css('p + ol li a').each do |node|
15
+ get_html(url + node.text.tr(' ', '_')).css('p + ol > li dl dd').each do |example|
16
+ context_words << node.text << example.text
17
+ end
18
+ end
19
+ make_hash_results(context_words)
20
+ end
21
+
22
+ def get_html(url)
23
+ Nokogiri::HTML(open(url))
24
+ rescue OpenURI::HTTPError
25
+ raise Dictionary::ConnectError
26
+ end
27
+ end
28
+ end
data/lib/dict.rb CHANGED
@@ -1,49 +1,5 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require_relative 'wiktionary'
4
- require_relative 'dictpl'
5
- require 'json'
1
+ require 'dict/dict'
6
2
 
7
3
  module Dict
8
- class << self
9
- def get_all_dictionaries_translations(word)
10
- dictionaries = Hash.new
11
-
12
- available_services.each do |service|
13
- dictionaries[service] = get_single_dictionary_translations(word, service)
14
- end
15
- dictionaries
16
- end
17
-
18
- def print_all_dictionaries_translations(word)
19
- end
20
-
21
- def get_single_dictionary_translations(word, service)
22
- case service
23
- when 'wiktionary'
24
- Wiktionary.new(word, WIKI_URL).translate
25
- when 'dictpl'
26
- Dictpl.new(word, DICT_URL).translate
27
- else Dictionary.message
28
- end
29
- rescue Dictionary::ConnectError
30
- "Couldn't connect to the service."
31
- end
32
-
33
- def print_single_dictionary_translations(word, service)
34
- obj = get_single_dictionary_translations(word, service)
35
- hash = obj.translate
36
- hash.each do |k, v|
37
- puts "#{k} - #{v}"
38
- end
39
- end
40
-
41
- def to_json(hash)
42
- hash.to_json
43
- end
44
-
45
- def available_services
46
- ['wiktionary', 'dictpl']
47
- end
48
- end
4
+ autoload :VERSION, "dict/version"
49
5
  end
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*
2
+ require 'dict/cli/runner'
3
+
4
+ describe "parameters_valid?" do
5
+ it "should return false if ARGV is empty" do
6
+ stub_const("ARGV", [])
7
+ runner = Dict::CLI::Runner.new
8
+ runner.parameters_valid?.should == false
9
+ end
10
+
11
+ it "should return true if ARGV is not empty" do
12
+ stub_const("ARGV", ["słowik", "-t", "36", "-d"])
13
+ runner = Dict::CLI::Runner.new
14
+ runner.parameters_valid?.should == true
15
+ end
16
+ end
17
+
18
+ describe "parse_parameters" do
19
+ it "should return Hash for parameters słowik -t 36" do
20
+ stub_const("ARGV", ["słowik", "-t", "36"])
21
+ runner = Dict::CLI::Runner.new
22
+ opts = runner.parse_parameters
23
+ {:help=>nil, :time=>"36", :dict=>nil}.should == opts.to_hash
24
+ end
25
+
26
+ it "should return Hash for parameters słowik" do
27
+ stub_const("ARGV", ["słowik"])
28
+ runner = Dict::CLI::Runner.new
29
+ opts = runner.parse_parameters
30
+ {:help=>nil, :time=>nil, :dict=>nil}.should == opts.to_hash
31
+ end
32
+ end
33
+
34
+
35
+ describe "get_translations" do
36
+ # it "should return results from wiktionary and dictpl for word 'słowik'" do
37
+ # stub_const("ARGV", ["-w", "słowik"])
38
+ # opts = Main::parse_parameters
39
+ # Main::get_translations(opts).should == {"wiktionary"=>{}, "dictpl"=>{"słowik"=>["nightingale"], "słowik białobrewy; Luscinia indicus; Tarsiger indicus (gatunek ptaka)"=>["white-browed bush-robin"], "słowik białosterny; Luscinia pectoralis (gatunek ptaka)"=>["Himalayan rubythroat", "white-tailed rubythroat"], "słowik chiński; pekińczyk żółty; Leiothrix lutea"=>["Pekin robin", "red-billed leiothrix"], "słowik chiński; pekińczyk żółty; pekińczyk koralodzioby; Leiothrix lutea"=>["Peking robin"], "słowik czarnogardły; Luscinia obscura"=>["black-throated blue robin"], "słowik himalajski; Luscinia brunnea (gatunek ptaka)"=>["Indian blue chat", "Indian blue robin"], "słowik modry; Luscinia cyane"=>["Siberian blue robin"], "słowik obrożny; Luscinia johnstoniae; Tarsiger johnstoniae (gatunek ptaka)"=>["collared bush-robin"]}}
40
+ # end
41
+
42
+ it "should return timeout message for word słowik and -t 5" do
43
+ stub_const("ARGV", ["słowik","-t","5"])
44
+ runner = Dict::CLI::Runner.new
45
+ opts = runner.parse_parameters
46
+ Dict.should_receive(:get_all_dictionaries_translations).
47
+ and_return { sleep 20 }
48
+ runner.get_translations(opts, "słowik").should == "Timeout for the query."
49
+ end
50
+ end
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'dict/dict'
4
+
5
+ describe Dict do
6
+
7
+ it "should get single translation from dictionary with two arguments given" do
8
+ expect{
9
+ Dict.get_single_dictionary_translations('samochód', 'dictpl')
10
+ }.to_not raise_error
11
+ end
12
+
13
+ it "should return hash with translations from all dictionaries" do
14
+ Dict.get_all_dictionaries_translations('samochód').should be_a(Hash)
15
+ end
16
+
17
+ it "should return array of available services" do
18
+ Dict.available_services.should be_a(Array)
19
+ end
20
+
21
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*
2
+
3
+ require 'dict/dictpl'
4
+
5
+ describe Dict::Dictpl do
6
+
7
+ it "should raise no given word exception" do
8
+ expect { Dict::Dictpl.new }.to raise_error ArgumentError
9
+ end
10
+
11
+ it "should return hash for given word: 'samochód'" do
12
+ result = Dict::Dictpl.new('samochód', DICT_URL).translate
13
+ result.should be_a(Hash)
14
+ end
15
+
16
+ it "should return array with translations" do
17
+ d = Dict::Dictpl.new('samochód', DICT_URL)
18
+ d.translate
19
+ d.translations.should be_a(Array)
20
+ end
21
+
22
+ it "should return array with examples of translated words" do
23
+ d = Dict::Dictpl.new('samochód', DICT_URL)
24
+ d.translate
25
+ d.examples.should be_a(Array)
26
+ end
27
+
28
+ it "should return a hash from array of paired values" do
29
+ d = Dict::Dictpl.new('samochód', DICT_URL)
30
+ d.make_hash_results(d.translate).should be_a(Hash)
31
+ end
32
+
33
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*
2
+
3
+ require 'dict/wiktionary'
4
+
5
+ describe Dict::Wiktionary do
6
+
7
+ it "should raise no given word exception" do
8
+ expect { Dict::Wiktionary.new }.to raise_error ArgumentError
9
+ end
10
+
11
+ it "should return an two element array of translations of word samochód containing [\"car\",\"automobile\"]" do
12
+ w = Dict::Wiktionary.new('samochód', WIKI_URL)
13
+ w.translate
14
+ w.translations.should == ["car", "automobile"]
15
+ end
16
+
17
+ it "should return array with translations" do
18
+ w = Dict::Wiktionary.new('samochód', WIKI_URL)
19
+ w.translate
20
+ w.translations.should be_a(Array)
21
+ end
22
+
23
+ it "should return array with examples of translated words" do
24
+ w = Dict::Wiktionary.new('samochód', WIKI_URL)
25
+ w.translate
26
+ w.examples.should be_a(Array)
27
+ end
28
+
29
+ it "should return a hash from array of paired values" do
30
+ w = Dict::Wiktionary.new('samochód', WIKI_URL)
31
+ w.make_hash_results(w.translate).should be_a(Hash)
32
+ end
33
+
34
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
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.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -88,12 +88,27 @@ executables:
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
- - lib/dict.rb
92
- - lib/dictionary.rb
93
- - lib/wiktionary.rb
94
- - lib/dictpl.rb
95
- - lib/module_main.rb
91
+ - .gitignore
92
+ - .rspec
93
+ - .travis.yml
94
+ - Gemfile
95
+ - Gemfile.lock
96
+ - README.md
97
+ - Rakefile
96
98
  - bin/dict
99
+ - dict.gemspec
100
+ - lib/dict.rb
101
+ - lib/dict/cli/runner.rb
102
+ - lib/dict/dict.rb
103
+ - lib/dict/dictionary.rb
104
+ - lib/dict/dictpl.rb
105
+ - lib/dict/version.rb
106
+ - lib/dict/wiktionary.rb
107
+ - spec/dict/bin_translate_spec.rb
108
+ - spec/dict/lib_dict_spec.rb
109
+ - spec/dict/lib_dictpl_spec.rb
110
+ - spec/dict/lib_wiktionary_spec.rb
111
+ - spec/dict/spec_helper.rb
97
112
  homepage: https://github.com/Ragnarson/dict-gem
98
113
  licenses: []
99
114
  post_install_message:
data/lib/dictionary.rb DELETED
@@ -1,40 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'open-uri'
4
-
5
- class Dictionary
6
- attr_accessor :translations, :examples
7
- def initialize(word, url)
8
- check_arguments(word)
9
- @translations = []
10
- @examples = []
11
- @uri = URI(URI.escape(url + word.downcase.tr(' ', '_')))
12
- end
13
-
14
- def make_hash_results(arr)
15
- hash = arr.each_slice(2).inject({}) do |h, (key, value)|
16
- if h.has_key?(key)
17
- h[key].push(value) ; h
18
- else
19
- h[key] = [value] ; h
20
- end
21
- end
22
- @translations, @examples = hash.keys, hash.values
23
- hash
24
- end
25
-
26
- def check_arguments(word)
27
- raise ArgumentError.new("No given word") if word.empty?
28
- end
29
-
30
- def self.message
31
- 'There\'s no such dictionary in database.'
32
- end
33
-
34
- class ConnectError < Exception
35
- attr_reader :original
36
- def initialize(original = $!)
37
- @original = original
38
- end
39
- end
40
- end
data/lib/dictpl.rb DELETED
@@ -1,19 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'nokogiri'
4
- require_relative 'dictionary'
5
-
6
- DICT_URL = 'http://dict.pl/dict?word='
7
-
8
- class Dictpl < Dictionary
9
- # Method returns hash with translations as keys and examples of using words as values
10
- def translate
11
- context_words = []
12
- Nokogiri::HTML(open(@uri)).xpath('//td[@class="resWordCol"]/a').each do |node|
13
- context_words << node.text
14
- end
15
- make_hash_results(context_words)
16
- rescue OpenURI::HTTPError
17
- raise Dictionary::ConnectError
18
- end
19
- end
data/lib/module_main.rb DELETED
@@ -1,54 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'dict'
4
- require 'slop'
5
- require 'timeout'
6
-
7
- module Main
8
- def self.parameters_valid?
9
- not ARGV.empty?
10
- end
11
-
12
- def self.parse_parameters
13
- available_dictionaries = Dict.available_services.join(', ')
14
-
15
- opts = Slop.parse! do
16
- banner <<-END
17
- Usage: dict WORD [OPTIONS]
18
- Search WORD in dict, an open source dictionary aggregator.
19
- END
20
-
21
- on '-h', :help, 'Display this help message'
22
- on '-t', :time=, 'Set timeout in seconds. Default: 300', :as => :int
23
- on '-d', :dict=, "Select desired dictionary. Available options: #{available_dictionaries}"
24
- end
25
- opts
26
- end
27
-
28
- def self.get_translations(opts, word)
29
- Timeout::timeout(opts[:time].to_i || 300) do
30
- if opts.dict?
31
- Dict.get_single_dictionary_translations(word, opts[:dict])
32
- else
33
- Dict.get_all_dictionaries_translations(word)
34
- end
35
- end
36
- rescue Timeout::Error
37
- "Timeout for the query."
38
- end
39
-
40
- def self.main(opts)
41
- begin
42
- opts = parse_parameters
43
- rescue Slop::MissingArgumentError
44
- abort("Missing argument")
45
- end
46
-
47
- abort(opts.to_s) if opts.help?
48
- parameters_valid? or abort("Please enter a word. (-h for help)")
49
-
50
- puts get_translations(opts, ARGV[0])
51
- end
52
-
53
- end
54
-
data/lib/wiktionary.rb DELETED
@@ -1,26 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'nokogiri'
4
- require_relative 'dictionary'
5
-
6
- WIKI_URL = 'http://en.wiktionary.org/wiki/'
7
-
8
- class Wiktionary < Dictionary
9
- # Method returns hash with translations as keys and examples of using words as values
10
- def translate
11
- context_words = []
12
- url = 'http://en.wiktionary.org/wiki/'
13
- get_html(@uri).css('p + ol li a').each do |node|
14
- get_html(url + node.text.tr(' ', '_')).css('p + ol > li dl dd').each do |example|
15
- context_words << node.text << example.text
16
- end
17
- end
18
- make_hash_results(context_words)
19
- end
20
-
21
- def get_html(url)
22
- Nokogiri::HTML(open(url))
23
- rescue OpenURI::HTTPError
24
- raise Dictionary::ConnectError
25
- end
26
- end