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 |