first steps for the MongoDB create method
did
committed Jul 07, 2015
commit 2e4f054f698e53acdca0fbc36b2ad5d8e1a4f998
Showing 2
changed files with
65 additions
and 40 deletions
locomotive/steam/adapters/mongodb.rb b/lib/locomotive/steam/adapters/mongodb.rb
+13
-0
| @@ | @@ -4,6 +4,7 @@ require 'origin' |
| require_relative 'mongodb/origin' | |
| require_relative 'mongodb/query' | |
| require_relative 'mongodb/dataset' | |
| + | require_relative 'mongodb/command' |
| module Locomotive::Steam | |
| @@ | @@ -27,6 +28,10 @@ module Locomotive::Steam |
| query(mapper, scope) { where(_id: BSON::ObjectId.from_string(id)) }.first | |
| end | |
| + | def create(mapper, scope, entity) |
| + | command(mapper).insert(entity) |
| + | end |
| + | |
| def key(name, operator) | |
| name.to_sym.__send__(operator.to_sym) | |
| end | |
| @@ | @@ -50,6 +55,10 @@ module Locomotive::Steam |
| Locomotive::Steam::Adapters::MongoDB::Query | |
| end | |
| + | def command_klass |
| + | Locomotive::Steam::Adapters::MongoDB::Command |
| + | end |
| + | |
| def dataset(mapper, query) | |
| Locomotive::Steam::Adapters::MongoDB::Dataset.new do | |
| query.against(collection(mapper)).map do |attributes| | |
| @@ | @@ -58,6 +67,10 @@ module Locomotive::Steam |
| end | |
| end | |
| + | def command(mapper) |
| + | command_klass.new(collection(mapper), mapper) |
| + | end |
| + | |
| def collection(mapper) | |
| session["locomotive_#{mapper.name}"] | |
| end | |
spec/integration/repositories/content_entry_repository_spec.rb
+52
-40
| @@ | @@ -13,47 +13,59 @@ describe Locomotive::Steam::ContentEntryRepository do |
| let(:repository) { described_class.new(adapter, site, locale, type_repository).with(type) } | |
| let(:type) { type_repository.by_slug('bands') } | |
| - | describe '#all' do |
| - | subject { repository.all } |
| - | it { expect(subject.size).to eq 3 } |
| - | end |
| - | |
| - | describe '#count' do |
| - | subject { repository.count } |
| - | it { is_expected.to eq 3 } |
| - | end |
| - | |
| - | describe '#by_slug' do |
| - | subject { repository.by_slug('alice-in-chains') } |
| - | it { expect(subject.name).to eq 'Alice in Chains' } |
| - | end |
| - | |
| - | describe '#exists?' do |
| - | subject { repository.exists?(featured: true) } |
| - | it { is_expected.to eq true } |
| - | end |
| - | |
| - | describe '#find' do |
| - | subject { repository.find(entry_id) } |
| - | it { expect(subject.name).to eq 'Pearl Jam' } |
| - | end |
| - | |
| - | describe '#next' do |
| - | let(:entry) { repository.find(entry_id) } |
| - | subject { repository.next(entry) } |
| - | it { expect(subject.name).to eq 'The who' } |
| - | end |
| - | |
| - | describe '#previous' do |
| - | let(:entry) { repository.find(entry_id) } |
| - | subject { repository.previous(entry) } |
| - | it { expect(subject.name).to eq 'Alice in Chains' } |
| - | end |
| + | # describe '#all' do |
| + | # subject { repository.all } |
| + | # it { expect(subject.size).to eq 3 } |
| + | # end |
| + | |
| + | # describe '#count' do |
| + | # subject { repository.count } |
| + | # it { is_expected.to eq 3 } |
| + | # end |
| + | |
| + | # describe '#by_slug' do |
| + | # subject { repository.by_slug('alice-in-chains') } |
| + | # it { expect(subject.name).to eq 'Alice in Chains' } |
| + | # end |
| + | |
| + | # describe '#exists?' do |
| + | # subject { repository.exists?(featured: true) } |
| + | # it { is_expected.to eq true } |
| + | # end |
| + | |
| + | # describe '#find' do |
| + | # subject { repository.find(entry_id) } |
| + | # it { expect(subject.name).to eq 'Pearl Jam' } |
| + | # end |
| + | |
| + | # describe '#next' do |
| + | # let(:entry) { repository.find(entry_id) } |
| + | # subject { repository.next(entry) } |
| + | # it { expect(subject.name).to eq 'The who' } |
| + | # end |
| + | |
| + | # describe '#previous' do |
| + | # let(:entry) { repository.find(entry_id) } |
| + | # subject { repository.previous(entry) } |
| + | # it { expect(subject.name).to eq 'Alice in Chains' } |
| + | # end |
| + | |
| + | # describe '#group_by_select_option' do |
| + | # subject { repository.group_by_select_option(:kind) } |
| + | # it { expect(subject.map { |h| h[:name] }).to eq(%w(grunge rock country)) } |
| + | # it { expect(subject.map { |h| h[:entries].size }).to eq([2, 1, 0]) } |
| + | # end |
| + | |
| + | describe '#create' do |
| + | |
| + | let(:type) { type_repository.by_slug('songs') } |
| + | let(:attributes) { { title: 'Jeremy', band: 'pearl-jam', short_description: '"Jeremy" is a song by the American rock band Pearl Jam' } } |
| + | let(:entry) { repository.with(type).build(attributes) } |
| + | |
| + | subject { repository.create(entry) } |
| + | |
| + | it { expect { subject }.to change { repository.all.size } } |
| - | describe '#group_by_select_option' do |
| - | subject { repository.group_by_select_option(:kind) } |
| - | it { expect(subject.map { |h| h[:name] }).to eq(%w(grunge rock country)) } |
| - | it { expect(subject.map { |h| h[:entries].size }).to eq([2, 1, 0]) } |
| end | |
| end | |