nebrija 1.0.7 → 1.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f46b3cc778fe91eabc180c2133a3c162c4ddde30
4
- data.tar.gz: fc7903017f8e16fc4382c0395966b4e83e685211
3
+ metadata.gz: e88cf6582f87d79939a6875adb7fa7c577f00316
4
+ data.tar.gz: c9f8856abd41c69a0990821261f1fcc99134c52c
5
5
  SHA512:
6
- metadata.gz: c3409c22d44eb566f053be780005ac767670f3b2a0243803f2ded9af7e40660bcd5d323093e506f773ee219aa95a6ef3d0bede596346993fd97659bce65e8854
7
- data.tar.gz: e47f81c8dd599fc803877c157498d8ddbb8c211776dc3782889d4551c53f413c6c95aa355d0e04f9fb23dd347b6f6951887e6cbbf37b428c4be918879342eeb5
6
+ metadata.gz: 867a51af868ec5cd7fc8e1df3967162948b803931ea76d1c8f38fec815b4ab3abc0e9b8c02c39fa64d1dd0f86024491f643e297af740731118a06b87cbfa8305
7
+ data.tar.gz: b8d59ebecf6ccf5c7d12d0054d597408f62ecebad183d474bf71f15a6eb1b2d361aff054d13e818b4885e620398a2be541bb8230a20c1c925deea4105f332a30
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  coverage
8
8
  InstalledFiles
9
9
  lib/bundler/man
10
+ vendor/
10
11
  pkg
11
12
  rdoc
12
13
  spec/reports
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ Metrics/LineLength:
2
+ Max: 85
3
+ Metrics/MethodLength:
4
+ Max: 20
5
+ Documentation:
6
+ Enabled: false
7
+ Style/SpecialGlobalVars:
8
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,2 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ rvm:
4
+ - 2.3.1
5
+ cache: bundler
6
+
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  Nebrija: A rae parser
2
2
  =====================
3
3
 
4
-
5
4
  [![Build Status](https://travis-ci.org/javierhonduco/nebrija.svg?branch=master)](https://travis-ci.org/javierhonduco/nebrija)
6
5
  [![Code Climate](https://img.shields.io/codeclimate/github/javierhonduco/nebrija.svg)](https://codeclimate.com/github/javierhonduco/nebrija)
7
6
 
@@ -17,45 +16,36 @@ API
17
16
  ---
18
17
  ```ruby
19
18
  require 'nebrija'
20
- res = Rae.new.search('word/id')
19
+ res = Rae.new.search('word/id')
21
20
  puts res # prints the results
22
21
  ```
23
22
 
24
23
  `HTTPRae` returns a hash where the key `status` can be `error`|`success`.
25
24
 
26
- If the request is succesful, the key `type` indicates wheter the result type is a single word or multiple with `single`|`multiple`.
25
+ If the request is succesful, the key `type` indicates whether the result type is a single word or multiple with `single`|`multiple`.
27
26
 
28
- The response data can be found in the `response` key which is an array.
27
+ The response data can be found in the `response` key which holds an array.
28
+
29
+ The response data is formatted as shown in the [nebrija/cli](https://github.com/javierhonduco/nebrija/blob/master/lib/nebrija/cli.rb) file:
29
30
 
30
- The response data is formatted as shown below:
31
- * Single responses
32
- ```ruby
33
- [{:word=>"banca", :id=>"N4sDS8D9sDXX2ydchkDs"}, {:word=>"bancar", :id=>"MHpGWYJ6YDXX2bw9Ghwm"}, {:word=>"bance", :id=>"dkcRaDoJTDXX2mbtZ21J"}, {:word=>"banco", :id=>"E0yO6yORQDXX2M4zQtJ3"}]
34
- ```
35
- * Multiple responses
36
- ```ruby
37
- [{:word=>"A-1.", :etymology=>"(Del gr. ἀ-, priv.).", :meanings=>[{:meaning=>"Carece de significación precisa. Amatar. Asustar. Avenar.", :meta=>"pref."}]}, {:word=>"A1.", :etymology=> nil, :meanings=>[{:meaning=>"Primera letra del abecedario español y del orden latino internacional, que representa un fonema vocálico abierto y central.", :meta=>"f."}, {:meaning=>"Signo de la proposición universal afirmativa.", :meta=>"Fil."}]}, {:word=>"~ por ~ y b por b.", :etymology=> nil, :meanings=>[{:meaning=>"punto por punto.", :meta=>"adv."}]}, {:word=>"A-2.", :etymology=> nil, :meanings=>[{:meaning=>"Denota privación o negación. Acromático. Ateísmo. Ante vocal toma la forma an-. Anestesia. Anorexia.", :meta=>"pref."}]}]
38
- ```
39
31
  CLI searching
40
32
  ---------
41
33
  ```bash
42
34
  $ nebrija <word>
43
35
  ```
44
36
 
37
+ Maybe you are lazy and want to add an alias to `rae` or `es` like I do :)
38
+
45
39
  Friend projects/ project using this gem
46
40
  ---------------------------------------
47
41
  * [Rae downloader](https://github.com/raul/rae-downloader) by [@raul](https://github.com/raul)
48
- * [Dulcinea: a nebrija frontend](https://github.com/javierhonduco/dulcinea)
42
+ * [Dulcinea: a nebrija frontend](https://github.com/javierhonduco/dulcinea)
49
43
 
50
44
  TODO
51
45
  ----
52
- * Check it works properly.
53
- * Doc. (return, hacks...)
54
- * Improve the code.
55
- * Add bulk search.
56
- * Set a request timeout.
57
- * ~~Search by id.~~
58
- * ~~Handle errors.~~
59
- * ~~Get it working without using cURL directly.~~
60
- * ~~Improve the API.~~
61
- * ~~Add Gemfile.~~
46
+ * Improve the API.
47
+ * Update clients to use new API.
48
+ * Fix multiple responses.
49
+ * Better doc.
50
+ * Mockless testing.
51
+ * Make the parser more readable.
data/Rakefile CHANGED
@@ -1,4 +1,8 @@
1
1
  require 'rake/testtask'
2
+ require 'rubocop/rake_task'
3
+ require 'bundler/gem_tasks'
4
+
5
+ RuboCop::RakeTask.new
2
6
 
3
7
  Rake::TestTask.new do |t|
4
8
  t.libs << 'test'
@@ -6,15 +10,4 @@ Rake::TestTask.new do |t|
6
10
  end
7
11
 
8
12
  desc 'Run tests'
9
- task :default => :test
10
-
11
- desc 'Publish'
12
- task :publish do
13
- $: << 'lib' and require 'nebrija/version'
14
- version = Nebrija::VERSION
15
-
16
- `gem build nebrija.gemspec`
17
- `gem install nebrija-#{version}.gem`
18
- `gem push nebrija-#{version}.gem`
19
- `rm *.gem`
20
- end
13
+ task default: :test
data/bin/debug CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $: << 'lib'
4
-
5
3
  require 'json'
6
4
  require 'pp'
7
5
  require 'nebrija'
data/bin/nebrija CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $: << 'lib'
4
-
5
3
  require 'json'
6
4
  require 'nebrija/cli'
7
5
 
8
- Nebrija::cli(ARGV.first)
6
+ Nebrija.cli(ARGV.first)
data/lib/nebrija/cli.rb CHANGED
@@ -2,10 +2,9 @@ require 'json'
2
2
  require 'nebrija'
3
3
 
4
4
  module Nebrija
5
- def self.cli word
6
- if word.nil?
7
- abort 'Type a word `$ nebrija amor`'
8
- end
5
+ # rubocop:disable MethodLength
6
+ def self.cli(word)
7
+ abort 'Type a word `$ nebrija amor`' if word.nil?
9
8
 
10
9
  result = Rae.new.search(word)
11
10
  status = result[:status]
@@ -1,24 +1,23 @@
1
1
  require 'nokogiri'
2
2
 
3
3
  class Parser
4
-
5
4
  META_REGEX = /^([a-zA-Z]{1,4}+\.[ ]{1,2})+/
6
5
 
7
- def initialize(rae_data, word)
6
+ def initialize(rae_data, _word)
8
7
  @doc = Nokogiri::HTML(rae_data)
9
8
  end
10
9
 
11
10
  def parse
12
11
  if valid?
13
12
  {
14
- :status => 'success',
15
- :type => single? ? 'single' : 'multiple',
16
- :response => parse_single
13
+ status: 'success',
14
+ type: single? ? 'single' : 'multiple',
15
+ response: parse_single
17
16
  }
18
17
  else
19
18
  {
20
- :status => 'error',
21
- :message => 'Word/id does not exist. Sorry.'
19
+ status: 'error',
20
+ message: 'Word/id does not exist. Sorry.'
22
21
  }
23
22
  end
24
23
  end
@@ -27,13 +26,13 @@ class Parser
27
26
 
28
27
  def parse_single
29
28
  response = {
30
- :core_meanings => [],
31
- :other_meanings => []
29
+ core_meanings: [],
30
+ other_meanings: []
32
31
  }
33
32
 
34
- response[:word] = @doc.css('header').
35
- inner_text.sub('.', '').
36
- capitalize!
33
+ response[:word] = @doc.css('header')
34
+ .inner_text.sub('.', '')
35
+ .capitalize!
37
36
 
38
37
  @doc.css('body > div > article > p').each_with_index do |entry, index|
39
38
  if index.zero?
@@ -42,7 +41,7 @@ class Parser
42
41
  elsif entry['class'] =~ /j[0-9]*/
43
42
  # Parsing first meaning
44
43
  response[:core_meanings] << metadata(entry.inner_text)
45
- elsif entry['class'] == 'm' || entry['class'] =~/k[0-9]*/
44
+ elsif entry['class'] == 'm' || entry['class'] =~ /k[0-9]*/
46
45
  # Parsing other meanings
47
46
  # k: expression with 1 element
48
47
  # m: is the meaning with >= elements
@@ -54,7 +53,7 @@ class Parser
54
53
  clean! response
55
54
  end
56
55
 
57
- def clean! response
56
+ def clean!(response)
58
57
  parsed_meanings = []
59
58
  state = :EXPR
60
59
  temp = nil
@@ -62,12 +61,10 @@ class Parser
62
61
  response[:other_meanings].each do |type, text|
63
62
  state = :EXPR if type == :expression
64
63
  if state == :EXPR
65
- unless temp.nil?
66
- parsed_meanings << temp
67
- end
64
+ parsed_meanings << temp unless temp.nil?
68
65
  temp = {
69
- :expression => text,
70
- :meanings => []
66
+ expression: text,
67
+ meanings: []
71
68
  }
72
69
  state = :MEAN
73
70
  elsif state == :MEAN
@@ -87,13 +84,13 @@ class Parser
87
84
  !@doc.css('article').length.zero? # delete_pending?
88
85
  end
89
86
 
90
- def metadata text
87
+ def metadata(text)
91
88
  # TODO
92
89
  # The idea would be to split the text in metadata
93
90
  # and real text. It's seems quite tricky.
94
91
  {
95
- :meaning => text,
96
- :meta => nil
92
+ meaning: text,
93
+ meta: nil
97
94
  }
98
95
  end
99
96
 
data/lib/nebrija/rae.rb CHANGED
@@ -1,9 +1,12 @@
1
- require 'uri'
2
- require 'typhoeus'
1
+ require 'cgi'
2
+ require 'net/http'
3
3
 
4
4
  class Rae
5
- SEARCH_URL = 'http://dle.rae.es/srv/fetch'
6
- USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
5
+ SEARCH_URL = 'http://dle.rae.es/srv/fetch'.freeze
6
+ # rubocop:disable LineLength
7
+ USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'.freeze
8
+ OPEN_TIMEOUT = 2
9
+ READ_TIMEOUT = 3
7
10
 
8
11
  def search(word)
9
12
  Parser.new(query(word), word).parse
@@ -12,18 +15,15 @@ class Rae
12
15
  private
13
16
 
14
17
  def query(word)
15
- url = URI.escape("#{SEARCH_URL}?w=#{word}".encode('iso-8859-1'))
16
- headers = {
17
- 'User-Agent' => USER_AGENT,
18
- 'Cookie' => 'TS017111a7=017ccc203c0b977befd5d97f3b75b80f201991f161b0d246f45e53dac0967ac4e4acfd7161'
19
- }
18
+ uri = URI "#{SEARCH_URL}?w=#{CGI.escape(word)}".encode('iso-8859-1')
20
19
 
21
- response = Typhoeus::Request.get(
22
- url,
23
- headers: headers,
24
- accept_encoding: 'gzip',
25
- )
20
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
21
+ http.open_timeout = OPEN_TIMEOUT
22
+ http.read_timeout = READ_TIMEOUT
26
23
 
27
- response.body
24
+ request = Net::HTTP::Get.new uri
25
+ response = http.request request
26
+ response.body
27
+ end
28
28
  end
29
29
  end
@@ -1,7 +1,7 @@
1
1
  module Nebrija
2
2
  MAJOR = 1
3
3
  MINOR = 0
4
- PATCH = 7
4
+ PATCH = 8
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].join('.')
7
7
  end
data/nebrija.gemspec CHANGED
@@ -1,27 +1,27 @@
1
- $: << 'lib' and require 'nebrija/version'
1
+ $LOAD_PATH << 'lib' && require('nebrija/version')
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'nebrija'
5
5
  s.version = Nebrija::VERSION
6
6
  s.executables << 'nebrija'
7
7
 
8
- s.authors = ['@javierhonduco']
8
+ s.authors = ['javierhonduco']
9
9
  s.date = Time.now.utc.strftime('%Y-%m-%d')
10
- s.description = 'A gem to access the rae dictionary'
10
+ s.description = 'A gem to access the RAE dictionary'
11
11
  s.email = 'javierhonduco@gmail.com'
12
12
  s.files = `git ls-files`.split($/)
13
13
  s.test_files = ['test/test_rae.rb']
14
14
  s.homepage = 'http://rubygems.org/gems/nebrija'
15
15
 
16
16
  s.require_paths = ['lib']
17
- s.summary = 'This gem provides access to the rae webpage'
17
+ s.summary = 'This gem makes easy accessing RAE webpage in a programmatic way'
18
18
 
19
- s.add_dependency('nokogiri')
20
- s.add_dependency('typhoeus', '~> 0')
19
+ s.add_dependency('nokogiri', '~> 1.6.8')
21
20
 
22
- s.add_development_dependency('rake', '~> 0')
23
- s.add_development_dependency('minitest', '~> 5')
24
- s.add_development_dependency('webmock', '~> 1.18.0', '>= 1.18.0')
21
+ s.add_development_dependency('rake', '~> 11.2.2')
22
+ s.add_development_dependency('webmock', '~> 2.1.0')
23
+ s.add_development_dependency('minitest', '~> 5.9.0')
24
+ s.add_development_dependency('rubocop', '~> 0.41.1')
25
25
 
26
26
  s.license = 'MIT'
27
27
  end
data/test/test_helper.rb CHANGED
@@ -2,3 +2,4 @@ require 'rubygems'
2
2
  require 'minitest/autorun'
3
3
  require 'webmock/minitest'
4
4
  require 'nebrija'
5
+ require 'nebrija/cli'
data/test/test_rae.rb CHANGED
@@ -1,18 +1,29 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class TestRae < Minitest::Test
4
+ def test_cli_basic
5
+ word = 'amor'
6
+ stub_request(:get, "#{Rae::SEARCH_URL}?w=#{word}")
7
+ .to_return(status: 200, body: mock('single'))
8
+
9
+ out, = capture_io do
10
+ Nebrija.cli(word)
11
+ end
12
+
13
+ assert_match mock_cli.gsub(/\s+/, ''), out.gsub(/\s+/, '')
14
+ end
4
15
 
5
16
  def test_error_basic
6
- stub_request(:get, "#{Rae::SEARCH_URL}?w=wadus").
7
- to_return(:status => 200, :body => mock('error'))
17
+ stub_request(:get, "#{Rae::SEARCH_URL}?w=wadus")
18
+ .to_return(status: 200, body: mock('error'))
8
19
 
9
20
  search = Rae.new.search('wadus')
10
21
  assert_equal search[:status], 'error'
11
22
  end
12
23
 
13
24
  def test_single_basic
14
- stub_request(:get, "#{Rae::SEARCH_URL}?w=amor").
15
- to_return(:status => 200, :body => mock('single'))
25
+ stub_request(:get, "#{Rae::SEARCH_URL}?w=amor")
26
+ .to_return(status: 200, body: mock('single'))
16
27
 
17
28
  search = Rae.new.search('amor')
18
29
  assert_equal 'success', search[:status]
@@ -23,8 +34,8 @@ class TestRae < Minitest::Test
23
34
  end
24
35
 
25
36
  def test_multiple_basic
26
- stub_request(:get, "#{Rae::SEARCH_URL}?w=banco").
27
- to_return(:status => 200, :body => mock('multiple'))
37
+ stub_request(:get, "#{Rae::SEARCH_URL}?w=banco")
38
+ .to_return(status: 200, body: mock('multiple'))
28
39
 
29
40
  search = Rae.new.search('banco')
30
41
  assert_equal 'success', search[:status]
@@ -39,4 +50,10 @@ class TestRae < Minitest::Test
39
50
  def mock(mock_name)
40
51
  File.read("#{File.expand_path(File.dirname(__FILE__))}/mocks/#{mock_name}.html")
41
52
  end
53
+
54
+ def mock_cli
55
+ # rubocop:disable LineLength
56
+ 'Sentimiento hacia otra persona que naturalmente nos atrae y que, procurando reciprocidad en el deseo de unión, nos completa, alegra y da energía para convivir, comunicarnos y crear
57
+ '
58
+ end
42
59
  end
metadata CHANGED
@@ -1,92 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nebrija
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
- - "@javierhonduco"
7
+ - javierhonduco
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-24 00:00:00.000000000 Z
11
+ date: 2016-08-13 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
- version: '0'
19
+ version: 1.6.8
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
- version: '0'
26
+ version: 1.6.8
27
27
  - !ruby/object:Gem::Dependency
28
- name: typhoeus
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
33
+ version: 11.2.2
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
- version: '0'
40
+ version: 11.2.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: webmock
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 2.1.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 2.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '5'
61
+ version: 5.9.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '5'
68
+ version: 5.9.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: webmock
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.18.0
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: 1.18.0
75
+ version: 0.41.1
79
76
  type: :development
80
77
  prerelease: false
81
78
  version_requirements: !ruby/object:Gem::Requirement
82
79
  requirements:
83
80
  - - "~>"
84
81
  - !ruby/object:Gem::Version
85
- version: 1.18.0
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: 1.18.0
89
- description: A gem to access the rae dictionary
82
+ version: 0.41.1
83
+ description: A gem to access the RAE dictionary
90
84
  email: javierhonduco@gmail.com
91
85
  executables:
92
86
  - nebrija
@@ -94,6 +88,7 @@ extensions: []
94
88
  extra_rdoc_files: []
95
89
  files:
96
90
  - ".gitignore"
91
+ - ".rubocop.yml"
97
92
  - ".travis.yml"
98
93
  - Gemfile
99
94
  - README.md
@@ -132,9 +127,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
127
  version: '0'
133
128
  requirements: []
134
129
  rubyforge_project:
135
- rubygems_version: 2.4.5.1
130
+ rubygems_version: 2.5.1
136
131
  signing_key:
137
132
  specification_version: 4
138
- summary: This gem provides access to the rae webpage
133
+ summary: This gem makes easy accessing RAE webpage in a programmatic way
139
134
  test_files:
140
135
  - test/test_rae.rb