mdn_query 0.1.0 → 0.2.0

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: 80ea4f6f65d473f50f9f4c14a06137c4c8a33231
4
- data.tar.gz: 893ee7f7c9439f46f84e27de7c44f2958b276f3b
3
+ metadata.gz: 755325c7f45bdc963b9c6aa60fdddd23be5a73f4
4
+ data.tar.gz: 103295f249a9cdb8daa01dccbcb24de5b18ffb0d
5
5
  SHA512:
6
- metadata.gz: 156b7420731927a3c003014c4fdba0628cb24ffcdb5660ae6f1bab2844b2f3228b4aa40dcd5066fdfa3c7885a92d720961c69b7db989ea0508232ad6d9d56e2d
7
- data.tar.gz: 487e05bf5a4968c63f512ec86393f8b4a8b43069d0a87f8bef4dfca6fab986cc01f0a111717044d06d57fd962ee20f43d360660ebc0442c33bad6e93e4322c45
6
+ metadata.gz: 678e20a9c3157a4a9ec72fba31d5442cfd440021cc8e9a3e37f7ec5f46ae53f81c6ccfdf429858ee415bee5e0df52d9b5eec8c83ae0bcfb9e461294c553e1483
7
+ data.tar.gz: f3742027b799b16b8971bb9c1fda599e803296cce71c3a28663c0ac90aab5772f203db0d44a79ca7fb61b7f20002ede96a362c3d241504a4a842f4e4df7f18af
data/.codeclimate.yml ADDED
@@ -0,0 +1,10 @@
1
+ engines:
2
+ fixme:
3
+ enabled: true
4
+ rubocop:
5
+ enabled: true
6
+ ratings:
7
+ paths:
8
+ - "**.rb"
9
+ exclude_paths:
10
+ - test/
data/.travis.yml CHANGED
@@ -12,5 +12,7 @@ matrix:
12
12
  allow_failures:
13
13
  - rvm: ruby-head
14
14
  fast_finish: true
15
+ after_success:
16
+ - bundle exec codeclimate-test-reporter
15
17
  notifications:
16
18
  email: false
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # MdnQuery
2
2
 
3
+ [![Gem Version][gem-badge]][gem]
3
4
  [![Build Status][travis-img]][travis]
5
+ [![Code Climate][codeclimate-badge]][codeclimate]
6
+ [![Test Coverage][coverage-badge]][coverage]
4
7
 
5
8
  Query the [Mozilla Developer Network][mdn] documentation. Unfortunately they do
6
9
  not provide an API to fetch the documentation entries, which means that all
@@ -10,6 +13,8 @@ retrieve a single entry based on a search term, which is frequently desired as
10
13
  a precise search term almost always yields the concrete entry as the first
11
14
  result.
12
15
 
16
+ [Documentation][docs]
17
+
13
18
  ## CLI
14
19
 
15
20
  The binary `mdn-query` provides an interactive command line interface to easily
@@ -142,7 +147,14 @@ Bug reports and pull requests are welcome on [GitHub][github-repo].
142
147
 
143
148
  The gem is available as open source under the terms of the [MIT License][mit].
144
149
 
150
+ [codeclimate]: https://codeclimate.com/github/jungomi/mdn_query
151
+ [codeclimate-badge]: https://codeclimate.com/github/jungomi/mdn_query/badges/gpa.svg
152
+ [coverage]: https://codeclimate.com/github/jungomi/mdn_query/coverage
153
+ [coverage-badge]: https://codeclimate.com/github/jungomi/mdn_query/badges/coverage.svg
145
154
  [demo]: screenshots/demo.gif
155
+ [docs]: http://www.rubydoc.info/gems/mdn_query
156
+ [gem]: https://badge.fury.io/rb/mdn_query
157
+ [gem-badge]: https://badge.fury.io/rb/mdn_query.svg
146
158
  [github-repo]: https://github.com/jungomi/mdn-query
147
159
  [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript
148
160
  [mit]: http://opensource.org/licenses/MIT
@@ -7,6 +7,26 @@ module MdnQuery
7
7
  # @return [MdnQuery::Section] the top level section
8
8
  attr_reader :section
9
9
 
10
+ # Creates a document filled with the content of the URL.
11
+ #
12
+ # @param url [String] the URL to the document on the web
13
+ # @return [MdnQuery::Document]
14
+ def self.from_url(url)
15
+ begin
16
+ response = RestClient::Request.execute(method: :get, url: url,
17
+ headers: { accept: 'text/html' })
18
+ rescue RestClient::Exception, SocketError => e
19
+ raise MdnQuery::HttpRequestFailed.new(url, e),
20
+ 'Could not retrieve entry'
21
+ end
22
+ dom = Nokogiri::HTML(response.body)
23
+ title = dom.css('h1').text
24
+ article = dom.css('article')
25
+ document = new(title, url)
26
+ MdnQuery::TraverseDom.fill_document(article, document)
27
+ document
28
+ end
29
+
10
30
  # Creates a new document with an initial top level section.
11
31
  #
12
32
  # @param title [String] the titel of the top level section
@@ -14,6 +14,7 @@ module MdnQuery
14
14
  @title = title
15
15
  @description = description
16
16
  @url = url
17
+ @content = nil
17
18
  end
18
19
 
19
20
  # Returns the string representation of the entry.
@@ -40,23 +41,7 @@ module MdnQuery
40
41
  # @return [MdnQuery::Document] the content of the entry
41
42
  def content
42
43
  return @content unless @content.nil?
43
- @content = retrieve(url)
44
- end
45
-
46
- private
47
-
48
- def retrieve(url)
49
- begin
50
- response = RestClient::Request.execute(method: :get, url: url,
51
- headers: { accept: 'text/html' })
52
- rescue RestClient::Exception, SocketError => e
53
- raise MdnQuery::HttpRequestFailed.new(url, e),
54
- 'Could not retrieve entry'
55
- end
56
- dom = Nokogiri::HTML(response.body)
57
- title = dom.css('h1').text
58
- article = dom.css('article')
59
- MdnQuery::TraverseDom.create_document(article, title, url)
44
+ @content = MdnQuery::Document.from_url(url)
60
45
  end
61
46
  end
62
47
  end
@@ -28,6 +28,7 @@ module MdnQuery
28
28
  @highlight = options[:highlight] || false
29
29
  @html_attributes = options[:html_attributes]
30
30
  @topics = options[:topics] || ['js']
31
+ @result = nil
31
32
  end
32
33
  # rubocop:enable Metrics/LineLength
33
34
 
@@ -51,7 +52,7 @@ module MdnQuery
51
52
  #
52
53
  # @return [MdnQuery::SearchResult] the search result
53
54
  def execute
54
- @result = retrieve(url, @query)
55
+ @result = MdnQuery::SearchResult.from_url(url)
55
56
  end
56
57
 
57
58
  # Fetches the next page of the search result.
@@ -66,7 +67,7 @@ module MdnQuery
66
67
  elsif @result.next?
67
68
  query_url = url
68
69
  query_url << "&page=#{@result.current_page + 1}"
69
- @result = retrieve(query_url, @query)
70
+ @result = MdnQuery::SearchResult.from_url(query_url)
70
71
  end
71
72
  end
72
73
 
@@ -82,7 +83,7 @@ module MdnQuery
82
83
  elsif @result.previous?
83
84
  query_url = url
84
85
  query_url << "&page=#{@result.current_page - 1}"
85
- @result = retrieve(query_url, @query)
86
+ @result = MdnQuery::SearchResult.from_url(query_url)
86
87
  end
87
88
  end
88
89
 
@@ -93,19 +94,5 @@ module MdnQuery
93
94
  html_url = url.sub('.json?', '?')
94
95
  Launchy.open(html_url)
95
96
  end
96
-
97
- private
98
-
99
- def retrieve(url, query)
100
- begin
101
- response = RestClient::Request.execute(method: :get, url: url,
102
- headers: { accept: 'json' })
103
- rescue RestClient::Exception, SocketError => e
104
- raise MdnQuery::HttpRequestFailed.new(url, e),
105
- 'Could not retrieve search result'
106
- end
107
- json = JSON.parse(response.body, symbolize_names: true)
108
- MdnQuery::SearchResult.new(query, json)
109
- end
110
97
  end
111
98
  end
@@ -13,13 +13,28 @@ module MdnQuery
13
13
  # @return [Fixnum] the total number of entries
14
14
  attr_reader :total
15
15
 
16
+ # Creates a search result with the results from the URL.
17
+ #
18
+ # @param url [String] the URL to the search result on the web
19
+ # @return [MdnQuery::SearchResult]
20
+ def self.from_url(url)
21
+ begin
22
+ response = RestClient::Request.execute(method: :get, url: url,
23
+ headers: { accept: 'json' })
24
+ rescue RestClient::Exception, SocketError => e
25
+ raise MdnQuery::HttpRequestFailed.new(url, e),
26
+ 'Could not retrieve search result'
27
+ end
28
+ json = JSON.parse(response.body, symbolize_names: true)
29
+ new(json)
30
+ end
31
+
16
32
  # Creates a new search result.
17
33
  #
18
- # @param query [String] the query that was searched for
19
34
  # @param json [Hash] the hash version of the JSON response
20
35
  # @return [MdnQuery::SearchResult]
21
- def initialize(query, json)
22
- @query = query
36
+ def initialize(json)
37
+ @query = json[:query]
23
38
  @pages = {
24
39
  count: json[:pages] || 0,
25
40
  current: json[:page]
@@ -1,4 +1,4 @@
1
1
  module MdnQuery
2
2
  # The version of the gem
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
data/mdn_query.gemspec CHANGED
@@ -29,9 +29,10 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency 'tty-prompt', '~> 0.7'
30
30
 
31
31
  spec.add_development_dependency 'bundler', '~> 1.13'
32
- spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rake', '~> 11.3'
33
33
  spec.add_development_dependency 'minitest', '~> 5.0'
34
34
  spec.add_development_dependency 'minitest-reporters', '~> 1.1'
35
35
  spec.add_development_dependency 'rubocop', '~> 0.43'
36
36
  spec.add_development_dependency 'simplecov', '~> 0.12'
37
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
37
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mdn_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Jungo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-05 00:00:00.000000000 Z
11
+ date: 2016-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: launchy
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '10.0'
117
+ version: '11.3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '10.0'
124
+ version: '11.3'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: minitest
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0.12'
181
+ - !ruby/object:Gem::Dependency
182
+ name: codeclimate-test-reporter
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.0'
181
195
  description: Query the MDN docs
182
196
  email:
183
197
  - michaeljungo92@gmail.com
@@ -186,6 +200,7 @@ executables:
186
200
  extensions: []
187
201
  extra_rdoc_files: []
188
202
  files:
203
+ - ".codeclimate.yml"
189
204
  - ".gitignore"
190
205
  - ".rubocop.yml"
191
206
  - ".travis.yml"