Make Sitemap metadata queryable with arel-style API
This commit is contained in:
parent
c2d816fb02
commit
45ddc0c344
12 changed files with 363 additions and 8 deletions
123
middleman-core/features/step_definitions/queryable_steps.rb
Normal file
123
middleman-core/features/step_definitions/queryable_steps.rb
Normal file
|
@ -0,0 +1,123 @@
|
|||
Then /^should initialize with an attribute and an operator$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :author, :operator => 'equal'
|
||||
:author.should == selector.attribute
|
||||
'equal'.should == selector.operator
|
||||
end
|
||||
|
||||
Then /^should raise an exception if the operator is not supported$/ do
|
||||
expect {
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :author, :operator => 'zomg'
|
||||
}.to raise_error(::Middleman::Sitemap::Queryable::OperatorNotSupportedError)
|
||||
end
|
||||
|
||||
Then /^should limit the documents to the number specified$/ do
|
||||
@server_inst.sitemap.order_by(:id).limit(2).all.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
|
||||
end
|
||||
|
||||
Then /^should offset the documents by the number specified$/ do
|
||||
@server_inst.sitemap.order_by(:id).offset(2).all.map { |r| r.raw_data[:id] }.sort.should == [3,4,5].sort
|
||||
end
|
||||
|
||||
Then /^should support offset and limit at the same time$/ do
|
||||
@server_inst.sitemap.order_by(:id).offset(1).limit(2).all.map { |r| r.raw_data[:id] }.sort.should == [2,3].sort
|
||||
end
|
||||
|
||||
Then /^should not freak out about an offset higher than the document count$/ do
|
||||
@server_inst.sitemap.order_by(:id).offset(5).all.should == []
|
||||
end
|
||||
|
||||
Then /^should return the right documents$/ do
|
||||
documents = @server_inst.sitemap.resources.select { |r| !r.raw_data.empty? }
|
||||
document_1 = documents[0]
|
||||
document_2 = documents[1]
|
||||
|
||||
found_document = @server_inst.sitemap.where(:title => document_1.raw_data[:title]).first
|
||||
document_1.should == found_document
|
||||
|
||||
found_document = @server_inst.sitemap.where(:title => document_2.raw_data[:title]).first
|
||||
document_2.should == found_document
|
||||
end
|
||||
|
||||
Then /^should be chainable$/ do
|
||||
documents = @server_inst.sitemap.resources.select { |r| !r.raw_data.empty? }
|
||||
document_1 = documents[0]
|
||||
|
||||
document_proxy = @server_inst.sitemap.where(:title => document_1.raw_data[:title])
|
||||
document_proxy.where(:id => document_1.raw_data[:id])
|
||||
document_1.should == document_proxy.first
|
||||
end
|
||||
|
||||
Then /^should not be confused by attributes not present in all documents$/ do
|
||||
result = @server_inst.sitemap.where(:seldom_attribute => 'is seldom').all
|
||||
result.map { |r| r.raw_data[:id] }.should == [4]
|
||||
end
|
||||
|
||||
Then /^with a gt operator should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gt'
|
||||
found_documents = @server_inst.sitemap.where(selector => 2).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [5,3,4].sort
|
||||
end
|
||||
|
||||
Then /^with a gte operator should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gte'
|
||||
found_documents = @server_inst.sitemap.where(selector => 2).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [2,5,3,4].sort
|
||||
end
|
||||
|
||||
Then /^with an in operator should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'in'
|
||||
found_documents = @server_inst.sitemap.where(selector => [2,3]).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [2,3].sort
|
||||
end
|
||||
|
||||
Then /^with an lt operator should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lt'
|
||||
found_documents = @server_inst.sitemap.where(selector => 2).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.should == [1]
|
||||
end
|
||||
|
||||
Then /^with an lte operator should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lte'
|
||||
found_documents = @server_inst.sitemap.where(selector => 2).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
|
||||
end
|
||||
|
||||
Then /^with an include operator include should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :tags, :operator => 'include'
|
||||
found_documents = @server_inst.sitemap.where(selector => 'ruby').all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
|
||||
end
|
||||
|
||||
Then /^with mixed operators should return the right documents$/ do
|
||||
in_selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'in'
|
||||
gt_selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gt'
|
||||
documents_proxy = @server_inst.sitemap.where(in_selector => [2,3])
|
||||
found_documents = documents_proxy.where(gt_selector => 2).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.should == [3]
|
||||
end
|
||||
|
||||
Then /^using multiple constrains in one where should return the right documents$/ do
|
||||
selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lte'
|
||||
found_documents = @server_inst.sitemap.where(selector => 2, :status => :published).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
|
||||
end
|
||||
|
||||
Then /^should support ordering by attribute ascending$/ do
|
||||
found_documents = @server_inst.sitemap.order_by(:title => :asc).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.should == [2,3,1,5,4]
|
||||
end
|
||||
|
||||
Then /^should support ordering by attribute descending$/ do
|
||||
found_documents = @server_inst.sitemap.order_by(:title => :desc).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.should == [4,5,1,3,2]
|
||||
end
|
||||
|
||||
Then /^should order by attribute ascending by default$/ do
|
||||
found_documents = @server_inst.sitemap.order_by(:title).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.should == [2,3,1,5,4]
|
||||
end
|
||||
|
||||
Then /^should exclude documents that do not own the attribute$/ do
|
||||
found_documents = @server_inst.sitemap.order_by(:status).all
|
||||
found_documents.map { |r| r.raw_data[:id] }.to_set.should == [1,2].to_set
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue