mw_dictionary_api 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71845ea8f9e79128fd3851c7e2ea05867a0bdacd
4
- data.tar.gz: 443aeee9ab04ed732822be7ccbdf4a7c858502b7
3
+ metadata.gz: 6c0a032dc9f83f3f619e4634d5e490de763ce307
4
+ data.tar.gz: dc21f9e934ba63cb7c5880661640387f7c61e3c9
5
5
  SHA512:
6
- metadata.gz: 50a33b9326cdc6ad1beb9988e4622aa92caca54288dcbbee10e9ae5ba277249378b92de05df52de00569f78f4954a235d8b025316f74df43d8220cf9e9af2721
7
- data.tar.gz: e0688e891cff8ec2d9a98634af147d8ab8875d9d23454cd3d6713769c29dfa7e1e16732d210a6a4ff9baf74eb67643e8da218c21d4d4e295bab529991882ca62
6
+ metadata.gz: df07b1c422d469841af3e73ed9500ab8f4791dc3d795ff9d56670b8658ad766530ee17500efd982f5ddd759055d17126665bcae03382e23e4c37734c1fc70bf3
7
+ data.tar.gz: 3cfb25667455592822ffb65cc5f6d8f536bfda9601fc945aa8b533e5bd07644666220f907f3d90ebe611ac60c7bbb58bfd297b9cf03f1f7ebb5b0122489d6a01
@@ -28,19 +28,31 @@ module MWDictionaryAPI
28
28
 
29
29
  rule :text do |data, opts|
30
30
  dt_without_vi = data[:dt].dup
31
- dt_without_vi.css("vi").remove
32
- dt_without_vi.content.strip
31
+ if dt_without_vi.respond_to? :css
32
+ dt_without_vi.css("vi").remove
33
+ dt_without_vi.content.strip
34
+ else
35
+ ""
36
+ end
33
37
  end
34
38
 
35
39
  rule :verbal_illustration do |data, opts|
36
- data[:dt].at_css("vi").content if data[:dt].at_css("vi")
40
+ if data[:dt].respond_to? :at_css
41
+ data[:dt].at_css("vi").content if data[:dt].at_css("vi")
42
+ else
43
+ ""
44
+ end
37
45
  end
38
46
 
39
47
  rule :cross_reference do |data, opts|
40
- data[:dt].xpath("sx").inject([]) do |xrefs, sx|
41
- xrefs << sx.content
48
+ if data[:dt].respond_to? :xpath
49
+ data[:dt].xpath("sx").inject([]) do |xrefs, sx|
50
+ xrefs << sx.content
51
+ end
52
+ else
53
+ []
42
54
  end
43
55
  end
44
56
  end
45
57
  end
46
- end
58
+ end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ require 'ostruct'
2
3
 
3
4
  module MWDictionaryAPI
4
5
  module Parsers
@@ -38,14 +39,27 @@ module MWDictionaryAPI
38
39
  end
39
40
 
40
41
  rule :definitions do |data, opts|
41
- # here we assume
42
- # 1. sense number (sn) alway appear before a definition (dt) in pairs
43
- # 2. definition (dt) appear by itself
44
- data.xpath("def//sn | def//dt").each_slice(2).inject([]) do |definitions, nodes|
45
- hash = Hash[nodes.map {|n| n.name.to_sym}.zip(nodes.map {|n| (n.name == 'sn') ? n.content : n })]
42
+ nodes = data.xpath("def//sn | def//dt")
43
+
44
+ # first step we will add dummy nodes if the list of nodes is not
45
+ # strictly sn/dt pairs
46
+ nodes = add_dumy_nodes(nodes) if nodes.count % 2 != 0
47
+
48
+ # data.xpath("def//sn | def//dt")
49
+ nodes.each_slice(2).inject([]) do |definitions, nodes|
50
+ names = nodes.map { |n| n.name.to_sym }
51
+ values = nodes.map do |node|
52
+ if node.content
53
+ (node.name == 'sn') ? node.content : node
54
+ else
55
+ nil
56
+ end
57
+ end
58
+ hash = Hash[names.zip(values)]
46
59
  hash[:prev_sn] = definitions[-1][:sense_number] if definitions[-1]
47
60
  definitions << DefinitionParser.new(parser_options(opts)).parse(hash)
48
- end
61
+ end
62
+
49
63
  end
50
64
 
51
65
  rule :inflections do |data, opts|
@@ -81,7 +95,39 @@ module MWDictionaryAPI
81
95
  def parse_entity(data, tag)
82
96
  data.at_css(tag).content if data.at_css(tag)
83
97
  end
98
+
99
+ def add_dumy_nodes(nodes)
100
+ temp = []
101
+ previous_sense_number = nil
102
+ nodes.each do |node|
103
+ if temp.count == 0
104
+ if node.name != 'sn'
105
+ temp << OpenStruct.new(name: 'sn', content: '0')
106
+ previous_sense_number = '0'
107
+ else
108
+ previous_sense_number = node.content
109
+ end
110
+ temp << node
111
+ else
112
+ if temp[-1].name == 'sn'
113
+ if node.name == 'sn'
114
+ temp << OpenStruct.new(name: 'dt', content: '')
115
+ previous_sense_number = node.content
116
+ end
117
+ temp << node
118
+ else
119
+ if node.name == 'dt'
120
+ temp << OpenStruct.new(name: 'sn', content: previous_sense_number)
121
+ else
122
+ previous_sense_number = node.content
123
+ end
124
+ temp << node
125
+ end
126
+ end
127
+ end
128
+ temp
129
+ end
84
130
  end
85
131
  end
86
132
  end
87
- end
133
+ end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mw_dictionary_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Liu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-07 00:00:00.000000000 Z
11
+ date: 2014-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.6.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.14.1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.14.1
41
41
  description: A Simple Way to Query Merriam Webster Dictionary API
@@ -48,10 +48,10 @@ files:
48
48
  - lib/mw_dictionary_api/client.rb
49
49
  - lib/mw_dictionary_api/memory_cache.rb
50
50
  - lib/mw_dictionary_api/parsable.rb
51
- - lib/mw_dictionary_api/result.rb
52
- - lib/mw_dictionary_api/parsers/result_parser.rb
53
- - lib/mw_dictionary_api/parsers/entry_parser.rb
54
51
  - lib/mw_dictionary_api/parsers/definition_parser.rb
52
+ - lib/mw_dictionary_api/parsers/entry_parser.rb
53
+ - lib/mw_dictionary_api/parsers/result_parser.rb
54
+ - lib/mw_dictionary_api/result.rb
55
55
  homepage: https://github.com/gniquil/mw_dictionary_api
56
56
  licenses:
57
57
  - MIT
@@ -62,17 +62,17 @@ require_paths:
62
62
  - lib
63
63
  required_ruby_version: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - '>='
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  requirements:
70
- - - '>='
70
+ - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: '0'
73
73
  requirements: []
74
74
  rubyforge_project:
75
- rubygems_version: 2.0.6
75
+ rubygems_version: 2.2.2
76
76
  signing_key:
77
77
  specification_version: 4
78
78
  summary: Merriam Webster Dictionary API