dictuby 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/dictuby +5 -0
- data/lib/dictuby/args_parser.rb +19 -0
- data/lib/dictuby/config.rb +36 -0
- data/lib/dictuby/online_dictionary.rb +22 -0
- data/lib/dictuby/runner.rb +48 -0
- data/lib/dictuby/sources/slovnik_azet_sk.rb +35 -0
- data/lib/dictuby/sources/slovnik_cz.rb +29 -0
- data/lib/dictuby.rb +12 -0
- metadata +52 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f781c7716139aeec617f877c4ff93ced7f133325
|
4
|
+
data.tar.gz: b74509bb17a8e517958f36d8ec0c3f8fe792cc28
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b0fc2b5d8046e762d9c9ebc2af58ce0f1f5fac924f5dffd84e7baaf162896ab4e6c179dcfaf22c82b4d6496e7dad6c1572ed2c94d67995b2b2dc637384176c8d
|
7
|
+
data.tar.gz: 5dd23373c8aed7f632775cd2c7c7999254ffe3c84c8a4ea0072ec538c1489d017808d247fc021e079a59f5f93a1c4df42799915f3335ff3b53da298597100ab0
|
data/bin/dictuby
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class ArgsParser
|
4
|
+
def self.parse(args)
|
5
|
+
options = {}
|
6
|
+
|
7
|
+
OptionParser.new do |o|
|
8
|
+
o.on('-h') { puts o; exit }
|
9
|
+
o.on('-l') { |b| options[:list] = b }
|
10
|
+
o.on('-g') { |b| options[:get] = b }
|
11
|
+
o.on('-s DICTIONARY') { |d| options[:set] = d }
|
12
|
+
o.on('QUERY') { }
|
13
|
+
o.parse!
|
14
|
+
end
|
15
|
+
|
16
|
+
options
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class DictubyConfig
|
4
|
+
def initialize
|
5
|
+
@default_dict = 'en-sk'
|
6
|
+
@config_path = File.expand_path('~') + '/.dictuby'
|
7
|
+
@settings = nil
|
8
|
+
|
9
|
+
if File.exists?(@config_path)
|
10
|
+
File.open(@config_path, 'r') do |content|
|
11
|
+
@settings = YAML.load(content)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
if !@settings
|
16
|
+
@settings = {}
|
17
|
+
set('dictionary', @default_dict)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(key)
|
22
|
+
@settings[key]
|
23
|
+
end
|
24
|
+
|
25
|
+
def set(key, value)
|
26
|
+
@settings[key] = value
|
27
|
+
save
|
28
|
+
end
|
29
|
+
|
30
|
+
def save
|
31
|
+
f = File.new(@config_path, 'w')
|
32
|
+
f.write(YAML.dump(@settings))
|
33
|
+
f.close
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class OnlineDictionary
|
4
|
+
@url = ''
|
5
|
+
@dicts = {}
|
6
|
+
|
7
|
+
def self.lookup(dict, query)
|
8
|
+
url = @url % {
|
9
|
+
:dict => @dicts[dict],
|
10
|
+
:query => query,
|
11
|
+
}
|
12
|
+
|
13
|
+
page = Nokogiri::HTML(open(url))
|
14
|
+
|
15
|
+
self.process(page, query)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.dicts
|
19
|
+
@dicts
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class Runner
|
4
|
+
def self.execute(args)
|
5
|
+
new(args).run
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(args)
|
9
|
+
@options = ArgsParser.parse(args)
|
10
|
+
@config = DictubyConfig.new
|
11
|
+
@args = args
|
12
|
+
|
13
|
+
@sources = [SlovnikAzetSK, SlovnikCZ]
|
14
|
+
|
15
|
+
@dicts = @sources.inject([]) {|r, p| r << p.dicts.keys}
|
16
|
+
@dicts.flatten!.sort!
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
if @options[:list]
|
21
|
+
@dicts.each {|d| puts d}
|
22
|
+
elsif @options[:set]
|
23
|
+
if @dicts.include?(@options[:set])
|
24
|
+
@config.set('dictionary', @options[:set])
|
25
|
+
else
|
26
|
+
puts 'Invalid dictionary'
|
27
|
+
end
|
28
|
+
elsif @options[:get]
|
29
|
+
puts @config.get('dictionary')
|
30
|
+
else
|
31
|
+
if @args.size == 1
|
32
|
+
dict, query = @config.get('dictionary'), @args[0]
|
33
|
+
elsif @args.size == 2
|
34
|
+
dict, query = *@args
|
35
|
+
end
|
36
|
+
|
37
|
+
map = @sources.inject({}) do |r,p|
|
38
|
+
p.dicts.keys.each {|d| r[d] = p}; r
|
39
|
+
end
|
40
|
+
|
41
|
+
puts query
|
42
|
+
map[dict].lookup(dict, query).each do |word|
|
43
|
+
puts "- #{word}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class SlovnikAzetSK < OnlineDictionary
|
4
|
+
@name = 'slovnik.azet.sk'
|
5
|
+
@dicts = {
|
6
|
+
'en-sk' => 'anglicko-slovensky',
|
7
|
+
'sk-en' => 'slovensko-anglicky',
|
8
|
+
'ge-sk' => 'nemecko-slovensky',
|
9
|
+
'sk-ge' => 'slovensko-nemecky',
|
10
|
+
'fr-sk' => 'francuzsko-slovensky',
|
11
|
+
'sk-fr' => 'slovensko-francuzsky',
|
12
|
+
'sp-sk' => 'spanielsko-slovensky',
|
13
|
+
'sk-sp' => 'slovensko-spanielsky',
|
14
|
+
'hu-sk' => 'madarsko-slovensky',
|
15
|
+
'sk-hu' => 'slovensko-madarsky',
|
16
|
+
'it-sk' => 'taliansko-slovensky',
|
17
|
+
'sk-it' => 'slovensko-taliansky',
|
18
|
+
'ru-sk' => 'rusko-slovensky',
|
19
|
+
'sk-ru' => 'slovensko-rusky',
|
20
|
+
}
|
21
|
+
@url = "http://slovnik.azet.sk/preklad/%{dict}/?q=%{query}"
|
22
|
+
|
23
|
+
def self.process(page, query)
|
24
|
+
left = page.xpath('//table[1]//span')[0].text rescue nil
|
25
|
+
return [] unless left == query
|
26
|
+
right = page.xpath(
|
27
|
+
'//table[1]//tr/td[@class="do"]/span'
|
28
|
+
).inject([]) {
|
29
|
+
|r, e| r << e.text
|
30
|
+
}
|
31
|
+
|
32
|
+
right
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module Dictuby
|
3
|
+
class SlovnikCZ < OnlineDictionary
|
4
|
+
@name = 'slovnik.cz'
|
5
|
+
@dicts = {
|
6
|
+
'en-cz' => 'encz.en',
|
7
|
+
'cz-en' => 'encz.cz',
|
8
|
+
'ge-cz' => 'gecz.ge',
|
9
|
+
'cz-ge' => 'gecz.cz',
|
10
|
+
'fr-cz' => 'frcz.fr',
|
11
|
+
'cz-fr' => 'frcz.cz',
|
12
|
+
'it-cz' => 'itcz.it',
|
13
|
+
'cz-it' => 'itcz.cz',
|
14
|
+
'sp-cz' => 'spcz.sp',
|
15
|
+
'cz-sp' => 'spcz.cz',
|
16
|
+
}
|
17
|
+
@url = "http://slovnik.cz/bin/mld.fpl?vcb=%{query}&dictdir=%{dict}&lines=30&js=0"
|
18
|
+
|
19
|
+
def self.process(page, query)
|
20
|
+
pairs = page.xpath('//div[@class="pair"]')
|
21
|
+
|
22
|
+
pairs.inject([]) do |xright, pair|
|
23
|
+
left = pair.xpath('span[@class="l"]')[0].text
|
24
|
+
return xright if left != query
|
25
|
+
xright << pair.xpath('span[@class="r"]')[0].text
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/dictuby.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
require 'optparse'
|
3
|
+
require 'yaml'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
require 'dictuby/runner'
|
8
|
+
require 'dictuby/args_parser'
|
9
|
+
require 'dictuby/config'
|
10
|
+
require 'dictuby/online_dictionary'
|
11
|
+
require 'dictuby/sources/slovnik_azet_sk'
|
12
|
+
require 'dictuby/sources/slovnik_cz'
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dictuby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rene Klacan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-01 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: command line online dictionary
|
14
|
+
email: rene.klacan@gmail.com
|
15
|
+
executables:
|
16
|
+
- dictuby
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/dictuby.rb
|
21
|
+
- lib/dictuby/online_dictionary.rb
|
22
|
+
- lib/dictuby/sources/slovnik_azet_sk.rb
|
23
|
+
- lib/dictuby/sources/slovnik_cz.rb
|
24
|
+
- lib/dictuby/config.rb
|
25
|
+
- lib/dictuby/args_parser.rb
|
26
|
+
- lib/dictuby/runner.rb
|
27
|
+
- bin/dictuby
|
28
|
+
homepage: ''
|
29
|
+
licenses:
|
30
|
+
- MIT
|
31
|
+
metadata: {}
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 2.0.7
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: command line online dictionary
|
52
|
+
test_files: []
|