nebrija 1.0.7 → 1.0.8

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: 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