Class: Arx::Query
- Inherits:
-
Object
- Object
- Arx::Query
- Defined in:
- lib/arx/query/query.rb
Overview
Class for generating arXiv search API query strings.
Constant Summary collapse
- PARAMS =
Mapping for URL query parameters supported by the arXiv search API.
{ search_query: 'search_query', id_list: 'id_list', sort_by: 'sortBy', sort_order: 'sortOrder' }
- CONNECTIVES =
Logical connectives supported by the arXiv search API.
{ and: 'AND', or: 'OR', and_not: 'ANDNOT' }
- CONNECTIVE_METHODS =
Logical connective method names.
{ '&': :and, '!': :and_not, '|': :or }
- FIELDS =
Supported fields for the search queries made to the arXiv search API.
{ title: 'ti', # Title author: 'au', # Author abstract: 'abs', # Abstract comment: 'co', # Comment journal: 'jr', # Journal reference category: 'cat', # Subject category report: 'rn', # Report number all: 'all' # All (of the above) }
- SORT_BY =
Supported criteria for the
sortByparameter. { relevance: 'relevance', last_updated: 'lastUpdated', date_submitted: 'submittedDate' }
- SORT_ORDER =
Supported criteria for the
sortOrderparameter. { ascending: 'ascending', descending: 'descending' }
Instance Attribute Summary collapse
-
#query ⇒ String
The string representing the search query.
Instance Method Summary collapse
-
#! ⇒ self
Logical negated conjunction (
ANDNOT) of subqueries. -
#& ⇒ self
Logical conjunction (
AND) of subqueries. -
#abstract(*values, exact: false, connective: :and) ⇒ self
Search for papers by abstract.
-
#all(*values, exact: true, connective: :and) ⇒ self
Search for papers by all fields (see FIELDS).
-
#author(*values, exact: false, connective: :and) ⇒ self
Search for papers by author.
-
#category(*values, connective: :and) ⇒ self
Search for papers by category.
-
#comment(*values, exact: false, connective: :and) ⇒ self
Search for papers by comment.
-
#initialize(*ids, sort_by: :relevance, sort_order: :descending) {|_self| ... } ⇒ Query
constructor
Initializes a new Query object.
-
#journal(*values, exact: false, connective: :and) ⇒ self
Search for papers by journal reference.
-
#report(*values, connective: :and) ⇒ self
Search for papers by report number.
-
#title(*values, exact: false, connective: :and) ⇒ self
Search for papers by title.
-
#to_s ⇒ String
Returns the query string.
-
#| ⇒ self
Logical disjunction (
OR) of subqueries.
Constructor Details
#initialize(*ids, sort_by: :relevance, sort_order: :descending) {|_self| ... } ⇒ Query
Initializes a new Query object.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/arx/query/query.rb', line 68 def initialize(*ids, sort_by: :relevance, sort_order: :descending) @query = String.new Validate.sort_by sort_by, permitted: SORT_BY.keys @query << "&#{PARAMS[:sort_by]}=#{SORT_BY[sort_by]}" Validate.sort_order sort_order, permitted: SORT_ORDER.keys @query << "&#{PARAMS[:sort_order]}=#{SORT_ORDER[sort_order]}" ids.flatten! unless ids.empty? ids.map! {|id| extract_id id} Validate.ids ids @query << "&#{PARAMS[:id_list]}=#{ids * ','}" end yield self if block_given? end |
Instance Attribute Details
#query ⇒ String
The string representing the search query.
11 12 13 |
# File 'lib/arx/query/query.rb', line 11 def query @query end |
Instance Method Details
#! ⇒ self
Logical negated conjunction (ANDNOT) of subqueries.
|
|
# File 'lib/arx/query/query.rb', line 92
|
#& ⇒ self
Logical conjunction (AND) of subqueries.
|
|
# File 'lib/arx/query/query.rb', line 87
|
#abstract(*values, exact: false, connective: :and) ⇒ self
Search for papers by abstract.
|
|
# File 'lib/arx/query/query.rb', line 120
|
#all(*values, exact: true, connective: :and) ⇒ self
Search for papers by all fields (see FIELDS).
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/arx/query/query.rb', line 160 FIELDS.each do |name, field| define_method(name) do |*values, exact: true, connective: :and| return if values.empty? Validate.values values Validate.categories values if name == :category Validate.exact exact Validate.connective connective, permitted: CONNECTIVES.keys values.map! &CGI.method(:escape) # Forms a field:value pair pair = ->(value){"#{field}:#{exact ? enquote(value) : value}"} subquery = if values.size > 1 parenthesize values.map(&pair).join("+#{CONNECTIVES[connective]}+") else pair.(values.first) end add_subquery subquery self end end |
#author(*values, exact: false, connective: :and) ⇒ self
Search for papers by author.
|
|
# File 'lib/arx/query/query.rb', line 113
|
#category(*values, connective: :and) ⇒ self
Search for papers by category.
|
|
# File 'lib/arx/query/query.rb', line 141
|
#comment(*values, exact: false, connective: :and) ⇒ self
Search for papers by comment.
|
|
# File 'lib/arx/query/query.rb', line 127
|
#journal(*values, exact: false, connective: :and) ⇒ self
Search for papers by journal reference.
|
|
# File 'lib/arx/query/query.rb', line 134
|
#report(*values, connective: :and) ⇒ self
Search for papers by report number.
|
|
# File 'lib/arx/query/query.rb', line 147
|
#title(*values, exact: false, connective: :and) ⇒ self
Search for papers by title.
|
|
# File 'lib/arx/query/query.rb', line 106
|
#to_s ⇒ String
Returns the query string.
188 189 190 |
# File 'lib/arx/query/query.rb', line 188 def to_s @query end |
#| ⇒ self
Logical disjunction (OR) of subqueries.
102 103 104 |
# File 'lib/arx/query/query.rb', line 102 CONNECTIVE_METHODS.each do |symbol, connective| define_method(symbol) { add_connective connective } end |