Skip to content

Commit

Permalink
Renamed search_facets and exclude_facets to only/except
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacob Harris committed Feb 18, 2009
1 parent 92aedc7 commit 76d50db
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 28 deletions.
24 changes: 12 additions & 12 deletions lib/nytimes_articles/article.rb
Expand Up @@ -159,8 +159,8 @@ def self.init_from_api(params)
# * <tt>Facet::NYTD_WORKS_MENTIONED</tt> - Literary works mentioned (titles formatted for use on NYTimes.com)
#
# The following two search fields are used for facet searching:
# * <tt>:search_facets</tt> - takes a single value or array of facets to search. Facets can either be specified as array pairs (like <tt>[Facet::GEOGRAPHIC, 'CALIFORNIA']</tt>) or facets returned from a previous search can be passed directly. A single string can be passed as well if you have hand-crafted string.
# * <tt>:exclude_facets</tt> - similar to <tt>:search_facets</tt> but is used to specify a list of facets to exclude.
# * <tt>:only_facets</tt> - takes a single value or array of facets to search. Facets can either be specified as array pairs (like <tt>[Facet::GEOGRAPHIC, 'CALIFORNIA']</tt>) or facets returned from a previous search can be passed directly. A single string can be passed as well if you have hand-crafted string.
# * <tt>:except_facets</tt> - similar to <tt>:only_facets</tt> but is used to specify a list of facets to exclude.
#
# == OTHER SEARCH FIELDS
# * <tt>:fee</tt> - to be implemented
Expand Down Expand Up @@ -200,7 +200,7 @@ def self.search(query, params={})
api_params = {}

add_query_params(api_params, params)
add_search_facets_param(api_params, params)
add_facet_conditions_params(api_params, params)
add_boolean_params(api_params, params)
add_facets_param(api_params, params)
add_fields_param(api_params, params)
Expand Down Expand Up @@ -304,15 +304,15 @@ def self.facet_argument(name, value, exclude = false)
end

def self.parse_facet_params(facets, exclude = false)
search_facets = []
facet_args = []

case facets
when nil
# do nothing
when String
search_facets = [facets]
facet_args = [facets]
when Facet
search_facets = [facet_argument(facets.facet_type, facets.term, exclude)]
facet_args = [facet_argument(facets.facet_type, facets.term, exclude)]
when Array
unless facets.all? {|f| f.is_a? Facet }
raise ArgumentError, "Only Facet instances can be passed in as an array; use Hash for Facet::Name => values input"
Expand All @@ -328,22 +328,22 @@ def self.parse_facet_params(facets, exclude = false)
end

facet_hash.each_pair do |k,v|
search_facets << facet_argument(k, v, exclude)
facet_args << facet_argument(k, v, exclude)
end
when Hash
facets.each_pair do |k,v|
search_facets << facet_argument(k, v, exclude)
facet_args << facet_argument(k, v, exclude)
end
end

search_facets
facet_args
end

def self.add_search_facets_param(out_params, in_params)
def self.add_facet_conditions_params(out_params, in_params)
query = out_params['query']

search_facets = parse_facet_params(in_params[:search_facets])
exclude_facets = parse_facet_params(in_params[:exclude_facets], true)
search_facets = parse_facet_params(in_params[:only_facets])
exclude_facets = parse_facet_params(in_params[:except_facets], true)

unless search_facets.empty? && exclude_facets.empty?
out_params['query'] = ([query] + search_facets + exclude_facets).compact.join(' ')
Expand Down
32 changes: 16 additions & 16 deletions test/nytimes/articles/test_article.rb
Expand Up @@ -81,91 +81,91 @@ def setup
end
end

context "search_facets" do
context "only_facets" do
should "accept a String" do
Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA]"))
Article.search :search_facets => "#{Facet::GEO}:[CALIFORNIA]"
Article.search :only_facets => "#{Facet::GEO}:[CALIFORNIA]"
end

should "accept a single hash value Facet string to a term" do
Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA]"))
Article.search :search_facets => {Facet::GEO => 'CALIFORNIA'}
Article.search :only_facets => {Facet::GEO => 'CALIFORNIA'}
end

should "accept an Facet string hashed to an array terms" do
Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA,GREAT BRITAIN]"))
Article.search :search_facets => {Facet::GEO => ['CALIFORNIA', 'GREAT BRITAIN']}
Article.search :only_facets => {Facet::GEO => ['CALIFORNIA', 'GREAT BRITAIN']}
end

should "accept a single Facet object" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA]"))
Article.search :search_facets => f
Article.search :only_facets => f
end

should "accept an array of Facet objects" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
f2 = Facet.new(Facet::NYTD_ORGANIZATION, 'University Of California', 12)

Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA] #{Facet::NYTD_ORGANIZATION}:[University Of California]"))
Article.search :search_facets => [f, f2]
Article.search :only_facets => [f, f2]
end

should "merge multiple Facets objects in the array of the same type into one array" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
f2 = Facet.new(Facet::GEO, 'IOWA', 12)

Article.expects(:invoke).with(has_entry("query", "#{Facet::GEO}:[CALIFORNIA,IOWA]"))
Article.search :search_facets => [f, f2]
Article.search :only_facets => [f, f2]
end

should "not stomp on an existing query string" do
Article.expects(:invoke).with(has_entry("query", "ice cream #{Facet::GEO}:[CALIFORNIA]"))
Article.search "ice cream", :search_facets => {Facet::GEO => "CALIFORNIA"}
Article.search "ice cream", :only_facets => {Facet::GEO => "CALIFORNIA"}
end
end

context "exclude_facets" do
context "except_facets" do
should "accept a String" do
Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA]"))
Article.search :exclude_facets => "-#{Facet::GEO}:[CALIFORNIA]"
Article.search :except_facets => "-#{Facet::GEO}:[CALIFORNIA]"
end

should "accept a single hash value Facet string to a term" do
Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA]"))
Article.search :exclude_facets => {Facet::GEO => 'CALIFORNIA'}
Article.search :except_facets => {Facet::GEO => 'CALIFORNIA'}
end

should "accept an Facet string hashed to an array terms" do
Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA,GREAT BRITAIN]"))
Article.search :exclude_facets => {Facet::GEO => ['CALIFORNIA', 'GREAT BRITAIN']}
Article.search :except_facets => {Facet::GEO => ['CALIFORNIA', 'GREAT BRITAIN']}
end

should "accept a single Facet object" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA]"))
Article.search :exclude_facets => f
Article.search :except_facets => f
end

should "accept an array of Facet objects" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
f2 = Facet.new(Facet::NYTD_ORGANIZATION, 'University Of California', 12)

Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA] -#{Facet::NYTD_ORGANIZATION}:[University Of California]"))
Article.search :exclude_facets => [f, f2]
Article.search :except_facets => [f, f2]
end

should "merge multiple Facets objects in the array of the same type into one array" do
f = Facet.new(Facet::GEO, 'CALIFORNIA', 2394)
f2 = Facet.new(Facet::GEO, 'IOWA', 12)

Article.expects(:invoke).with(has_entry("query", "-#{Facet::GEO}:[CALIFORNIA,IOWA]"))
Article.search :exclude_facets => [f, f2]
Article.search :except_facets => [f, f2]
end

should "not stomp on an existing query string" do
Article.expects(:invoke).with(has_entry("query", "ice cream -#{Facet::GEO}:[CALIFORNIA]"))
Article.search "ice cream", :exclude_facets => {Facet::GEO => "CALIFORNIA"}
Article.search "ice cream", :except_facets => {Facet::GEO => "CALIFORNIA"}
end
end

Expand Down

0 comments on commit 76d50db

Please sign in to comment.