operators on symbols are now kinda handled

did committed Feb 24, 2015
commit 272f7185bec114dae98ad9980860486dcc9454fe
Showing 14 changed files with 95 additions and 11 deletions
locomotive/steam/adapters/concerns/key.rb b/lib/locomotive/steam/adapters/concerns/key.rb +15 -0
@@ @@ -0,0 +1,15 @@
+ module Locomotive::Steam
+ module Adapters
+ module Concerns
+
+ module Key
+
+ def key(name, operator)
+ Locomotive::Steam::Adapters::Memory::Query.key(name, operator)
+ end
+
+ end
+
+ end
+ end
+ end
locomotive/steam/adapters/filesystem.rb b/lib/locomotive/steam/adapters/filesystem.rb +1 -0
@@ @@ -15,6 +15,7 @@ module Locomotive::Steam
class FilesystemAdapter < Struct.new(:site_path)
include Morphine
+ include Locomotive::Steam::Adapters::Concerns::Key
register :cache do
Locomotive::Steam::Adapters::Filesystem::SimpleCacheStore.new
locomotive/steam/adapters/memory.rb b/lib/locomotive/steam/adapters/memory.rb +3 -0
@@ @@ -1,3 +1,4 @@
+ require_relative 'concerns/key'
require_relative 'memory/order'
require_relative 'memory/condition'
require_relative 'memory/query'
@@ @@ -7,6 +8,8 @@ module Locomotive::Steam
class MemoryAdapter < Struct.new(:collection)
+ include Locomotive::Steam::Adapters::Concerns::Key
+
def all(mapper, scope)
memoized_dataset(mapper, scope)
end
locomotive/steam/adapters/memory/query.rb b/lib/locomotive/steam/adapters/memory/query.rb +10 -0
@@ @@ -94,6 +94,16 @@ module Locomotive::Steam
end
end # filtered
+ def self.key(name, operator)
+ "#{name}.#{operator}"
+ end
+
+ def key(name, operator)
+ self.class.key(name, operator)
+ end
+
+ alias :k :key
+
end
end
end
locomotive/steam/adapters/mongodb.rb b/lib/locomotive/steam/adapters/mongodb.rb +4 -0
@@ @@ -18,6 +18,10 @@ module Locomotive::Steam
all(mapper, query)
end
+ def key(name, operator)
+ name.__send__(operator)
+ end
+
private
def query_klass
locomotive/steam/adapters/mongodb/query.rb b/lib/locomotive/steam/adapters/mongodb/query.rb +10 -0
@@ @@ -58,6 +58,16 @@ module Locomotive::Steam
where(site_id: @scope.site._id) if @scope.site
end
+ # def resolve_key(key)
+ # return key unless key.respond_to?(:include?)
+ # if key.include?('.')
+ # name, operator = key.split('.')
+ # name.to_sym.send(operator.to_sym)
+ # else
+ # key
+ # end
+ # end
+
end
end
locomotive/steam/models/repository.rb b/lib/locomotive/steam/models/repository.rb +4 -0
@@ @@ -29,6 +29,10 @@ module Locomotive::Steam
adapter.query(mapper, scope, &block).first
end
+ def k(name, operator)
+ adapter.key(name, operator)
+ end
+
alias :all :query
# def create(entity)
locomotive/steam/repositories/page_repository.rb b/lib/locomotive/steam/repositories/page_repository.rb +4 -2
@@ @@ -29,7 +29,9 @@ module Locomotive
end
def matching_fullpath(list)
- all('fullpath.in' => list)
+ # all(:fullpath.in => list)
+ # all('fullpath.in' => list) # MongoDB => fullpath.in
+ all(k(:fullpath, :in) => list)
end
# Engine: ??? [TODO]
@@ @@ -55,7 +57,7 @@ module Locomotive
# Note: Ancestors and self
def ancestors_of(page)
return [] if page.nil?
- all('_id.in' => page.parent_ids + [page._id])
+ all(k(:_id, :in) => page.parent_ids + [page._id])
end
def children_of(page)
spec/integration/mongodb_helper.rb +3 -3
@@ @@ -1,5 +1,5 @@
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
- RSpec.configure do |config|
- config.before(:all) { restore_mongodb }
- end
+ # RSpec.configure do |config|
+ # config.before(:all) { restore_mongodb }
+ # end
spec/integration/repositories/page_repository_spec.rb +5 -0
@@ @@ -31,6 +31,11 @@ describe Locomotive::Steam::PageRepository do
it { expect(subject.title[:en]).to eq 'News archive' }
end
+ # describe '#matching_fullpath' do
+ # subject { repository.matching_fullpath(['songs/content_type_template', 'content_type_template/songs', 'songs/song-number-1']) }
+ # it { expect(subject.size).to eq 2 }
+ # end
+
end
context 'MongoDB' do
spec/unit/adapters/filesystem_adapter_spec.rb +8 -0
@@ @@ -8,6 +8,14 @@ describe Locomotive::Steam::FilesystemAdapter do
let(:scope) { instance_double('Scope', site: site, locale: nil) }
let(:adapter) { Locomotive::Steam::FilesystemAdapter.new(nil) }
+ describe '#key' do
+
+ subject { adapter.key(:title, :in) }
+
+ it { is_expected.to eq 'title.in' }
+
+ end
+
describe '#query' do
let(:collection) { [OpenStruct.new(site_id: 42, name: 'Hello world')] }
spec/unit/adapters/memory_adapter_spec.rb +9 -1
@@ @@ -20,9 +20,17 @@ describe Locomotive::Steam::MemoryAdapter do
describe '#query' do
- subject { adapter.query(mapper, scope) { where(name: 'Hello world') } }
+ let(:block) { -> (_) { where(name: 'Hello world') } }
+ subject { adapter.query(mapper, scope, &block) }
it { expect(subject.size).to eq 1 }
+ context 'another syntax' do
+
+ let(:block) { -> (_) { where(k(:name, :in) => ['Hello world']) } }
+ it { expect(subject.size).to eq 1 }
+
+ end
+
end
end
query_spec.rb b/spec/unit/adapters/mongodb/query_spec.rb +2 -5
@@ @@ -5,9 +5,6 @@ require 'origin'
require_relative '../../../../lib/locomotive/steam/adapters/mongodb/origin.rb'
require_relative '../../../../lib/locomotive/steam/adapters/mongodb/query.rb'
- # require_relative '../../../../lib/locomotive/steam/adapters/memory/order.rb'
- # require_relative '../../../../lib/locomotive/steam/adapters/memory/query.rb'
-
describe Locomotive::Steam::Adapters::MongoDB::Query do
let(:site) { instance_double('Site', _id: 42) }
@@ @@ -58,11 +55,11 @@ describe Locomotive::Steam::Adapters::MongoDB::Query do
describe '#to_origin' do
- before { query.where(title: 'index').order_by(title: :asc) }
+ before { query.where(:title.in => %w(index)).order_by(title: :asc) }
subject { query.to_origin }
- it { expect(subject.selector).to eq({ 'site_id' => 42, 'title.en' => 'index' }) }
+ it { expect(subject.selector).to eq({ 'site_id' => 42, 'title.en' => { '$in' => %w(index) } }) }
it { expect(subject.options[:sort]).to eq({ 'title.en' => 1 }) }
end
spec/unit/adapters/mongodb_adapter_spec.rb +17 -0
@@ @@ -0,0 +1,17 @@
+ require 'spec_helper'
+
+ require_relative '../../../lib/locomotive/steam/adapters/mongodb.rb'
+
+ describe Locomotive::Steam::MongoDBAdapter do
+
+ let(:adapter) { described_class.new(nil) }
+
+ describe '#key' do
+
+ subject { adapter.key(:title, :in) }
+
+ it { is_expected.to eq :title.in }
+
+ end
+
+ end