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 +4 -4
- data/.codeclimate.yml +10 -0
- data/.travis.yml +2 -0
- data/README.md +12 -0
- data/lib/mdn_query/document.rb +20 -0
- data/lib/mdn_query/entry.rb +2 -17
- data/lib/mdn_query/search.rb +4 -17
- data/lib/mdn_query/search_result.rb +18 -3
- data/lib/mdn_query/version.rb +1 -1
- data/mdn_query.gemspec +2 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 755325c7f45bdc963b9c6aa60fdddd23be5a73f4
|
4
|
+
data.tar.gz: 103295f249a9cdb8daa01dccbcb24de5b18ffb0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 678e20a9c3157a4a9ec72fba31d5442cfd440021cc8e9a3e37f7ec5f46ae53f81c6ccfdf429858ee415bee5e0df52d9b5eec8c83ae0bcfb9e461294c553e1483
|
7
|
+
data.tar.gz: f3742027b799b16b8971bb9c1fda599e803296cce71c3a28663c0ac90aab5772f203db0d44a79ca7fb61b7f20002ede96a362c3d241504a4a842f4e4df7f18af
|
data/.codeclimate.yml
ADDED
data/.travis.yml
CHANGED
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
|
data/lib/mdn_query/document.rb
CHANGED
@@ -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
|
data/lib/mdn_query/entry.rb
CHANGED
@@ -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 =
|
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
|
data/lib/mdn_query/search.rb
CHANGED
@@ -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 =
|
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 =
|
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 =
|
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(
|
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]
|
data/lib/mdn_query/version.rb
CHANGED
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', '~>
|
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.
|
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-
|
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: '
|
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: '
|
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"
|