arx 1.0.1 → 1.1.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
  SHA256:
3
- metadata.gz: e14a14b55d1c42c5804102ce84826f404ec7e91505a0cd2eacf6e92e05f17cee
4
- data.tar.gz: d15151e01710261ef194ec5175a4151b5df6e0d336528c24d15b6d1764dc6901
3
+ metadata.gz: 71eb1bee2ff468ea9327736e613e40b414c2b630d4f21b148da648500af3a47e
4
+ data.tar.gz: 8592a476d3abbeedfe2bef11637498b551fd478d643c5985a7c6a119aa79ca80
5
5
  SHA512:
6
- metadata.gz: 10e7463175ceaf3b32d15527247b8e8c9f6e54a3f8c56338c060696c6f919907baf19cfbb8a010e59cd1606037b30a1d46ca8da10bdf5a4a094ef0fa0ecb9f60
7
- data.tar.gz: 2b82185ac4299a4541b7d8701abf3e2c8e6fd31811efb888273d665362f7ba9bfd35b45c9cfe6d0991c867e44ed1ac3b8362ed8e5f5d5ac6717cb5c3ff9b0161
6
+ metadata.gz: c9d708bd3f7d244f8557da0c9dba42d66c9a344a8f0316463879e76cc385fcf895c4c4089a5340543e166d771958d975fac685d27908755be0575e97f70625c2
7
+ data.tar.gz: 382f4ec892499c9e3b062693755aaa4af6c86790a830aaee39a2435d8af902d7e6bdcfc91712eaa539ef3e066c6a6ae04c151327951477194b0ca722848b0d2c
@@ -1,3 +1,28 @@
1
+ # 1.1.0
2
+
3
+ #### Major changes
4
+
5
+ - Change `bundler` requirement to `>= 1.17` in `arx.gemspec`. ([#53](https://github.com/eonu/arx/pull/53))
6
+ - Remove `Arx.find` alias of `Arx.search`. ([#57](https://github.com/eonu/arx/pull/57))
7
+ - Add `Query#group` for subquery grouping support. ([#59](https://github.com/eonu/arx/pull/59))
8
+
9
+ #### Minor changes
10
+
11
+ - Add contributing guidelines (`CONTRIBUTING.md`). ([#48](https://github.com/eonu/arx/pull/48))
12
+ - Add issue templates to `./github/ISSUE_TEMPLATE` for ([#49](https://github.com/eonu/arx/pull/49), [#54](https://github.com/eonu/arx/pull/54), [#55](https://github.com/eonu/arx/pull/55)):
13
+ - **Error or warning**<br>For reporting an error or warning generated by Arx.
14
+ - **Unexpected or incorrect functionality**<br>For reporting something that doesn't seem to be working correctly or is unexpected.
15
+ - **Improvement to an existing feature**<br>For suggesting an improvement to a feature already offered by Arx.
16
+ - **Suggesting a new feature**<br>For proposing a new feature to Arx that would be beneficial.
17
+ - Add a pull request template at `./github/PULL_REQUEST_TEMPLATE.md`. ([#49](https://github.com/eonu/arx/pull/49))
18
+ - Remove issue templates from `CONTRIBUTING.md`. ([#49](https://github.com/eonu/arx/pull/49))
19
+ - Remove `LICENSE` from YARD documentation (remove from `.yardopts`). ([#50](https://github.com/eonu/arx/pull/50))
20
+ - Add RVM ruby version `2.6` to `.travis.yml`. ([#53](https://github.com/eonu/arx/pull/53))
21
+ - Add contributor code-of-conduct (`CODE_OF_CONDUCT.md`). ([#56](https://github.com/eonu/arx/pull/56))
22
+ - Thank Scholastica in `README.md`. ([#58](https://github.com/eonu/arx/pull/58))
23
+ - Add `bin/console` for gem debugging. ([#60](https://github.com/eonu/arx/pull/60))
24
+ - Modify `gem:debug` rake task to run `bin/console`. ([#60](https://github.com/eonu/arx/pull/60))
25
+
1
26
  # 1.0.1
2
27
 
3
28
  #### Major changes
data/README.md CHANGED
@@ -60,6 +60,10 @@ $ gem install arx
60
60
 
61
61
  The documentation for Arx is hosted on [![rubydoc.info](https://img.shields.io/badge/docs-rubydoc.info-blue.svg)](https://www.rubydoc.info/github/eonu/arx/master/toplevel).
62
62
 
63
+ ## Contributing
64
+
65
+ All contributions to Arx are greatly appreciated. Contribution guidelines can be found [here](/CONTRIBUTING.md).
66
+
63
67
  ## Usage
64
68
 
65
69
  Before you start using Arx, you'll have to ensure that the gem is required (either in your current working file, or shell such as [IRB](https://en.wikipedia.org/wiki/Interactive_Ruby_Shell)):
@@ -205,6 +209,39 @@ q.and_not
205
209
  q.category('math.NA', 'math.CO', connective: :or)
206
210
  ```
207
211
 
212
+ #### Grouping subqueries
213
+
214
+ Sometimes you'll have a query that requires nested or grouped logic, using parentheses. This can be done using the `Arx::Query#group` method.
215
+
216
+ This method accepts a block and basically parenthesises the result of whichever methods were called within the block.
217
+
218
+ For example, this will allow the last query from the previous section to be written as:
219
+
220
+ ```ruby
221
+ # Papers authored by "Eleonora Andreotti" in neither the "Numerical Analysis" (math.NA) or "Combinatorics (math.CO)" categories.
222
+ q = Arx::Query.new
223
+ q.author('Eleonora Andreotti')
224
+ q.and_not
225
+ q.group do
226
+ q.category('math.NA').or.category('math.CO')
227
+ end
228
+ ```
229
+
230
+ Another more complicated example with two grouped subqueries:
231
+
232
+ ```ruby
233
+ # Papers whose title contains "Buchi Automata", either authored by "Tomáš Babiak", or in the "Formal Languages and Automata Theory (cs.FL)" category and not the "Computational Complexity (cs.CC)" category.
234
+ q = Arx::Query.new
235
+ q.title('Buchi Automata')
236
+ q.group do
237
+ q.author('Tomáš Babiak')
238
+ q.or
239
+ q.group do
240
+ q.category('cs.FL').and_not.category('cs.CC')
241
+ end
242
+ end
243
+ ```
244
+
208
245
  ### Running search queries
209
246
 
210
247
  Search queries can be executed with the `Arx()` method (alias of `Arx.search`). This method contains the same parameters as the `Arx::Query` initializer - including the list of IDs.
@@ -359,4 +396,14 @@ category.name
359
396
  #=> "cond-mat"
360
397
  category.full_name
361
398
  #=> "Condensed Matter"
362
- ```
399
+ ```
400
+
401
+ # Thanks
402
+
403
+ A large portion of this library is based on the brilliant work done by [Scholastica](https://github.com/scholastica) in their [`arxiv`](https://github.com/scholastica/arxiv) gem for retrieving individual papers from arXiv through the search API.
404
+
405
+ Arx was created mostly due to the seemingly inactive nature of Scholastica's repository. Additionally, it would have been infeasible to contribute such large changes to an already well-established gem, especially since https://scholasticahq.com/ appears to be dependent upon this gem.
406
+
407
+ ---
408
+
409
+ Nevertheless, a special thanks goes out to Scholastica for providing the influence for Arx.
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ namespace :gem do
13
13
 
14
14
  desc 'Debug the gem (load into IRB)'
15
15
  task :debug do
16
- exec 'bundle exec rake install && irb -I lib/arx.rb -r arx'
16
+ exec 'bin/console'
17
17
  end
18
18
 
19
19
  desc 'Prepare a new gem release'
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_runtime_dependency 'nokogiri', '~> 1.10'
22
22
  spec.add_runtime_dependency 'nokogiri-happymapper', '~> 0.8'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 2.0'
24
+ spec.add_development_dependency 'bundler', '>= 1.17'
25
25
  spec.add_development_dependency 'rake', '~> 12.3'
26
26
  spec.add_development_dependency 'thor', '~> 0.19.4'
27
27
  spec.add_development_dependency 'rspec', '~> 3.7'
data/lib/arx.rb CHANGED
@@ -76,7 +76,6 @@ module Arx
76
76
  results
77
77
  end
78
78
 
79
- alias_method :find, :search
80
79
  alias_method :get, :search
81
80
  end
82
81
  end
@@ -173,6 +173,20 @@ module Arx
173
173
  end
174
174
  end
175
175
 
176
+ # Creates a nested subquery (grouped statements with parentheses).
177
+ #
178
+ # @return [self]
179
+ def group
180
+ add_connective :and unless end_with_connective?
181
+ @query << (search_query? ? '+' : "&#{PARAMS[:search_query]}=")
182
+
183
+ @query << CGI.escape('(')
184
+ yield
185
+ @query << CGI.escape(')')
186
+
187
+ self
188
+ end
189
+
176
190
  # Returns the query string.
177
191
  #
178
192
  # @return [String]
@@ -189,7 +203,7 @@ module Arx
189
203
  # @return [self]
190
204
  def add_connective(connective)
191
205
  if search_query?
192
- @query << "+#{CONNECTIVES[connective]}" unless end_with_connective?
206
+ @query << "+#{CONNECTIVES[connective]}" unless end_with_connective? || start_of_group?
193
207
  end
194
208
  self
195
209
  end
@@ -198,9 +212,10 @@ module Arx
198
212
  #
199
213
  # @param subquery [String] The subquery to add.
200
214
  def add_subquery(subquery)
215
+ add_connective :and unless end_with_connective?
216
+
201
217
  if search_query?
202
- add_connective :and unless end_with_connective?
203
- @query << "+#{subquery}"
218
+ @query << (start_of_group? ? "#{subquery}" : "+#{subquery}")
204
219
  else
205
220
  @query << "&#{PARAMS[:search_query]}=#{subquery}"
206
221
  end
@@ -222,6 +237,13 @@ module Arx
222
237
  CONNECTIVES.values.any? &@query.method(:end_with?)
223
238
  end
224
239
 
240
+ # Whether the query string ends in a start-of-group character '('.
241
+ #
242
+ # @return [Boolean]
243
+ def start_of_group?
244
+ @query.end_with? CGI.escape('(')
245
+ end
246
+
225
247
  # Parenthesizes a string with CGI-escaped parentheses.
226
248
  #
227
249
  # @param string [String] The string to parenthesize.
@@ -5,8 +5,8 @@ module Arx
5
5
  # The current version of Arx.
6
6
  VERSION = {
7
7
  major: 1,
8
- minor: 0,
9
- patch: 1,
8
+ minor: 1,
9
+ patch: 0,
10
10
  meta: nil,
11
11
  }.compact.values.join('.').freeze
12
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edwin Onuonga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-14 00:00:00.000000000 Z
11
+ date: 2019-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '1.17'
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: '2.0'
54
+ version: '1.17'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement