rom-cassandra 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.coveralls.yml +2 -0
 - data/.gitignore +9 -0
 - data/.metrics +9 -0
 - data/.rspec +2 -0
 - data/.rubocop.yml +2 -0
 - data/.travis.yml +26 -0
 - data/.yardopts +3 -0
 - data/CHANGELOG.md +3 -0
 - data/Gemfile +7 -0
 - data/Guardfile +14 -0
 - data/LICENSE +21 -0
 - data/README.md +83 -0
 - data/Rakefile +34 -0
 - data/config/metrics/STYLEGUIDE +230 -0
 - data/config/metrics/cane.yml +5 -0
 - data/config/metrics/churn.yml +6 -0
 - data/config/metrics/flay.yml +2 -0
 - data/config/metrics/metric_fu.yml +14 -0
 - data/config/metrics/reek.yml +1 -0
 - data/config/metrics/roodi.yml +24 -0
 - data/config/metrics/rubocop.yml +84 -0
 - data/config/metrics/saikuro.yml +3 -0
 - data/config/metrics/simplecov.yml +6 -0
 - data/config/metrics/yardstick.yml +37 -0
 - data/lib/rom-cassandra.rb +3 -0
 - data/lib/rom/cassandra.rb +33 -0
 - data/lib/rom/cassandra/commands.rb +53 -0
 - data/lib/rom/cassandra/commands/batch.rb +54 -0
 - data/lib/rom/cassandra/commands/create.rb +38 -0
 - data/lib/rom/cassandra/commands/delete.rb +38 -0
 - data/lib/rom/cassandra/commands/update.rb +38 -0
 - data/lib/rom/cassandra/dataset.rb +102 -0
 - data/lib/rom/cassandra/gateway.rb +115 -0
 - data/lib/rom/cassandra/migrations.rb +30 -0
 - data/lib/rom/cassandra/migrations/generator.rb +68 -0
 - data/lib/rom/cassandra/migrations/generator/migration.erb +32 -0
 - data/lib/rom/cassandra/migrations/logger.rb +28 -0
 - data/lib/rom/cassandra/migrations/migration.rb +107 -0
 - data/lib/rom/cassandra/migrations/migrator.rb +103 -0
 - data/lib/rom/cassandra/migrations/runner.rb +119 -0
 - data/lib/rom/cassandra/migrations/runner_down.rb +49 -0
 - data/lib/rom/cassandra/migrations/runner_up.rb +50 -0
 - data/lib/rom/cassandra/query.rb +43 -0
 - data/lib/rom/cassandra/relation.rb +88 -0
 - data/lib/rom/cassandra/session.rb +50 -0
 - data/lib/rom/cassandra/tasks.rb +6 -0
 - data/lib/rom/cassandra/version.rb +15 -0
 - data/lib/tasks/db.rake +16 -0
 - data/rom-cassandra.gemspec +33 -0
 - data/spec/config/reset_cluster.rb +28 -0
 - data/spec/config/rom.rb +3 -0
 - data/spec/config/test_module.rb +7 -0
 - data/spec/integration/batch_spec.rb +36 -0
 - data/spec/integration/create_spec.rb +33 -0
 - data/spec/integration/delete_spec.rb +33 -0
 - data/spec/integration/migrate/20150825142003_create_users.rb +24 -0
 - data/spec/integration/migrate/20150825142024_create_logs.rb +17 -0
 - data/spec/integration/migrate_spec.rb +47 -0
 - data/spec/integration/relation_spec.rb +27 -0
 - data/spec/integration/update_spec.rb +33 -0
 - data/spec/shared/fake_migrate_folder.rb +21 -0
 - data/spec/shared/users.rb +20 -0
 - data/spec/spec_helper.rb +17 -0
 - data/spec/unit/commands/batch_spec.rb +86 -0
 - data/spec/unit/commands/create_spec.rb +77 -0
 - data/spec/unit/commands/delete_spec.rb +77 -0
 - data/spec/unit/commands/update_spec.rb +77 -0
 - data/spec/unit/dataset_spec.rb +130 -0
 - data/spec/unit/gateway_spec.rb +140 -0
 - data/spec/unit/migrations/generator_spec.rb +31 -0
 - data/spec/unit/migrations/logger_spec.rb +21 -0
 - data/spec/unit/migrations/migration_spec.rb +59 -0
 - data/spec/unit/migrations/migrator_spec.rb +120 -0
 - data/spec/unit/migrations/runner_down_spec.rb +65 -0
 - data/spec/unit/migrations/runner_spec.rb +142 -0
 - data/spec/unit/migrations/runner_up_spec.rb +67 -0
 - data/spec/unit/query_spec.rb +21 -0
 - data/spec/unit/relation_spec.rb +142 -0
 - data/spec/unit/session_spec.rb +55 -0
 - data/spec/unit/tasks/create_migration_spec.rb +41 -0
 - metadata +242 -0
 
| 
         @@ -0,0 +1,140 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ROM::Cassandra::Gateway do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:gateway) { described_class.new(uri) }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:uri)     { { hosts: ["127.0.0.1"], port: 9042 } }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              describe ".new" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                after { described_class.new("127.0.0.2", port: 9042) }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                let(:session_class) { ROM::Cassandra::Session }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                it "creates the session with uri" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  allow(session_class).to receive(:new)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  expect(session_class).to receive(:new).with("127.0.0.2", port: 9042)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end # describe .new
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              describe "#options" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                subject { gateway.options }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                it "returns a uri" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                  expect(subject).to eql(uri)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end # describe #options
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              describe "#session" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                subject { gateway.session }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                it "is a session" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  expect(subject).to be_instance_of ROM::Cassandra::Session
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                it "has a proper uri" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  expect(subject.uri).to eql uri
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end # describe #session
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              describe "#[]" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                subject { gateway["foo.bar"] }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                context "by default" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  it { is_expected.to be_nil }
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                context "registered dataset" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  before { gateway.dataset "foo.bar" }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  it { is_expected.to be_instance_of ROM::Cassandra::Dataset }
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end # describe #[]
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              describe "#dataset?" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                subject { gateway.dataset? "foo.bar" }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                context "by default" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  it { is_expected.to eql false }
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                context "registered dataset" do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  before { gateway.dataset "foo.bar" }
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  it { is_expected.to eql true }
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
              end # describe #dataset?
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              describe "#dataset" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                subject { gateway.dataset(name) }
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                context "with valid name" do
         
     | 
| 
      
 71 
     | 
    
         
            +
                  let(:name) { :"foo.bar" }
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  it "registers the dataset for given table" do
         
     | 
| 
      
 74 
     | 
    
         
            +
                    subject
         
     | 
| 
      
 75 
     | 
    
         
            +
                    dataset = gateway["foo.bar"]
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    expect(dataset.session).to eql(gateway.session)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    expect(dataset.keyspace).to eql :foo
         
     | 
| 
      
 79 
     | 
    
         
            +
                    expect(dataset.table).to eql :bar
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                context "with a string name" do
         
     | 
| 
      
 84 
     | 
    
         
            +
                  let(:name) { "foo.bar" }
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  it "registers the dataset for given table" do
         
     | 
| 
      
 87 
     | 
    
         
            +
                    expect { subject }.to change { gateway[:"foo.bar"] }
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                context "with invalid name" do
         
     | 
| 
      
 92 
     | 
    
         
            +
                  let(:name) { "foo" }
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  it "fails" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                    expect { subject }.to raise_error do |error|
         
     | 
| 
      
 96 
     | 
    
         
            +
                      expect(error).to be_kind_of ArgumentError
         
     | 
| 
      
 97 
     | 
    
         
            +
                      expect(error.message)
         
     | 
| 
      
 98 
     | 
    
         
            +
                        .to eql "'foo' is not a valid full name of a table. " \
         
     | 
| 
      
 99 
     | 
    
         
            +
                        "Use format 'keyspace.table' with both keyspace and table parts."
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
              end # describe #dataset
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              describe "#migrate" do
         
     | 
| 
      
 106 
     | 
    
         
            +
                let(:klass)    { ROM::Cassandra::Migrations::Migrator }
         
     | 
| 
      
 107 
     | 
    
         
            +
                let(:session)  { gateway.session }
         
     | 
| 
      
 108 
     | 
    
         
            +
                let(:migrator) { double :migrator, apply: nil }
         
     | 
| 
      
 109 
     | 
    
         
            +
                let(:path)     { double :path }
         
     | 
| 
      
 110 
     | 
    
         
            +
                let(:version)  { double :version }
         
     | 
| 
      
 111 
     | 
    
         
            +
                let(:logger)   { double :logger }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                before { allow(klass).to receive(:new) { migrator } }
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                context "with options" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  after { gateway.migrate path: path, version: version, logger: logger }
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                  it "initializes the migrator" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                    expect(klass).to receive(:new).with(session, path: path, logger: logger)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                  it "runs the migrator" do
         
     | 
| 
      
 123 
     | 
    
         
            +
                    expect(migrator).to receive(:apply).with(version: version)
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                context "without options" do
         
     | 
| 
      
 128 
     | 
    
         
            +
                  after { gateway.migrate }
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                  it "initializes the migrator" do
         
     | 
| 
      
 131 
     | 
    
         
            +
                    expect(klass).to receive(:new).with(session, {})
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  it "runs the migrator" do
         
     | 
| 
      
 135 
     | 
    
         
            +
                    expect(migrator).to receive(:apply).with({})
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
              end # describe #migrate
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            end # describe ROM:Cassandra::Gateway
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "shared/fake_migrate_folder"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "timecop"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::Generator do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              include_context :fake_migrate_folder, "context"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              let(:name)    { "createFoo" }
         
     | 
| 
      
 11 
     | 
    
         
            +
              let(:time)    { Time.utc(2017, "dec", 31, 23, 59, 59) }
         
     | 
| 
      
 12 
     | 
    
         
            +
              let(:target)  { "#{path}/db/20171231235959_create_foo.rb" }
         
     | 
| 
      
 13 
     | 
    
         
            +
              let(:content) { File.read(target) }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              describe ".call" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                subject { described_class.call(name, "#{path}/db") }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                before { Timecop.freeze(time) }
         
     | 
| 
      
 19 
     | 
    
         
            +
                after  { Timecop.return }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                it "creates the migration" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 23 
     | 
    
         
            +
                  expect(content).to include "CreateFoo"
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                it "returns the name of the migration" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  expect(subject).to eql(target)
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end # describe .call
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::Generator
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::Logger do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:logger) { described_class.new }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:stdout) { StringIO.new }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              before { $stdout = stdout }
         
     | 
| 
      
 9 
     | 
    
         
            +
              after  { $stdout = STDOUT }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              describe ".new" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                subject { logger }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                it { is_expected.to be_kind_of ::Logger }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                it "sends messages to $stdout" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  expect { subject.info "text" }.to change { stdout.string }.to "text\n"
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end # describe .new
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::Logger
         
     | 
| 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::Migration do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:migration) { described_class.new session }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:session)   { double :session, call: nil, freeze: nil }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              describe "#session" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                subject { migration.session }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                it { is_expected.to eql session }
         
     | 
| 
      
 12 
     | 
    
         
            +
              end # describe #session
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              describe "#up" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                subject { migration.up }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it { is_expected.to be_nil }
         
     | 
| 
      
 18 
     | 
    
         
            +
              end # describe #up
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              describe "#down" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                subject { migration.down }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                it { is_expected.to be_nil }
         
     | 
| 
      
 24 
     | 
    
         
            +
              end # describe #down
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              describe "#call" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                subject { migration.call query }
         
     | 
| 
      
 28 
     | 
    
         
            +
                let(:query) { double :query, to_s: :foo }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                it "is delegated to #session" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  expect(session).to receive(:call).with(:foo)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end # describe #call
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              describe "#keyspace" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                subject { migration.keyspace(:foo) }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                it "starts building query" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  query = subject.create.if_not_exists.to_s
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  expect(query).to eql "CREATE KEYSPACE IF NOT EXISTS foo;"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end # describe #keyspace
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              describe ".inherited" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                subject { Class.new described_class }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                it "hides helpers" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  expect(subject.private_instance_methods)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    .to include(:call, :keyspace, :up, :down)
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                it "keeps parent class' helpers unchanged" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                  expect { subject }.not_to change { described_class.new(session).methods }
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end # describe .inherited
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::Migration
         
     | 
| 
         @@ -0,0 +1,120 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "shared/fake_migrate_folder"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::Migrator do
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              include_context :fake_migrate_folder, "context"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              let(:migrator) { described_class.new session, logger: logger, path: path }
         
     | 
| 
      
 10 
     | 
    
         
            +
              let(:logger)   { double :logger }
         
     | 
| 
      
 11 
     | 
    
         
            +
              let(:session)  { double :session, call: nil }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              describe "#session" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                subject { migrator.session }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                it "returns the session by uri" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  expect(subject).to eql(session)
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end # describe #session
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              describe "#logger" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                subject { migrator.logger }
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                context "when logger is specified" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                  it { is_expected.to eql logger }
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                context "when logger isn't specified" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  let(:migrator) { described_class.new session }
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  it { is_expected.to be_kind_of ROM::Cassandra::Migrations::Logger }
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end # describe #logger
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              describe "#root" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                subject { migrator.root }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                context "when path is specified" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                  it { is_expected.to eql path }
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                context "when path isn't specified" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  let(:migrator) { described_class.new session }
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  it { is_expected.to eql("db/migrate") }
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end # describe #root
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              describe "#paths" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                subject { migrator.paths }
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                it "returns the ordered list of migrations" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  expect(subject).to eql(files)
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end # describe #paths
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              describe "#apply" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                before { allow(ROM::Cassandra::Migrations::Runner).to receive(:apply) }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                let(:runner_up)   { ROM::Cassandra::Migrations::RunnerUp }
         
     | 
| 
      
 61 
     | 
    
         
            +
                let(:runner_down) { ROM::Cassandra::Migrations::RunnerDown }
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                context "without a version" do
         
     | 
| 
      
 64 
     | 
    
         
            +
                  after { migrator.apply }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  it "applies all migrations in direct order" do
         
     | 
| 
      
 67 
     | 
    
         
            +
                    files.each do |path|
         
     | 
| 
      
 68 
     | 
    
         
            +
                      expect(runner_up)
         
     | 
| 
      
 69 
     | 
    
         
            +
                        .to receive(:apply)
         
     | 
| 
      
 70 
     | 
    
         
            +
                        .with(session, logger, path)
         
     | 
| 
      
 71 
     | 
    
         
            +
                        .ordered
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  it "doesn't rollback migrations" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                    expect(runner_down).not_to receive(:apply)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                context "with the zero version" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                  after { migrator.apply version: 0 }
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  it "rolls back all migrations in reverse order" do
         
     | 
| 
      
 84 
     | 
    
         
            +
                    files.reverse_each do |path|
         
     | 
| 
      
 85 
     | 
    
         
            +
                      expect(runner_down)
         
     | 
| 
      
 86 
     | 
    
         
            +
                        .to receive(:apply)
         
     | 
| 
      
 87 
     | 
    
         
            +
                        .with(session, logger, path)
         
     | 
| 
      
 88 
     | 
    
         
            +
                        .ordered
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  it "doesn't apply migrations" do
         
     | 
| 
      
 93 
     | 
    
         
            +
                    expect(runner_up).not_to receive(:apply)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  end
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                context "with a non-zero version" do
         
     | 
| 
      
 98 
     | 
    
         
            +
                  after { migrator.apply version: 20160101000000 }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  it "applies migrations up to the version in direct order" do
         
     | 
| 
      
 101 
     | 
    
         
            +
                    files[0..1].each do |path|
         
     | 
| 
      
 102 
     | 
    
         
            +
                      expect(runner_up)
         
     | 
| 
      
 103 
     | 
    
         
            +
                        .to receive(:apply)
         
     | 
| 
      
 104 
     | 
    
         
            +
                        .with(session, logger, path)
         
     | 
| 
      
 105 
     | 
    
         
            +
                        .ordered
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  it "rolls back migrations with greater versions in reverse order" do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    files[2..-1].reverse_each do |path|
         
     | 
| 
      
 111 
     | 
    
         
            +
                      expect(runner_down)
         
     | 
| 
      
 112 
     | 
    
         
            +
                        .to receive(:apply)
         
     | 
| 
      
 113 
     | 
    
         
            +
                        .with(session, logger, path)
         
     | 
| 
      
 114 
     | 
    
         
            +
                        .ordered
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
                end
         
     | 
| 
      
 118 
     | 
    
         
            +
              end # describe #apply
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::Migrator
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::RunnerDown do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:klass)   { Class.new described_class }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:runner)  { klass.new session, logger, path }
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:session) { double :session, call: nil }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:logger)  { double :logger, info: nil }
         
     | 
| 
      
 9 
     | 
    
         
            +
              let(:path)    { "foo/20150824103059_add_foo.rb" }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              before do
         
     | 
| 
      
 12 
     | 
    
         
            +
                klass.send(:define_method, :require) do |_|
         
     | 
| 
      
 13 
     | 
    
         
            +
                  AddFoo = Class.new(ROM::Cassandra::Migrations::Migration)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
                klass.send(:define_method, :select_version) { [{ id: 20150824103059 }] }
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              describe "#migrate?" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                subject { runner.migrate? }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                context "when select_version isn't empty" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  it { is_expected.to eql true }
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                context "when select_version is empty" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  before { klass.send(:define_method, :select_version) { [] } }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  it { is_expected.to eql false }
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end # describe #migrate?
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe "#apply" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                after  { runner.apply }
         
     | 
| 
      
 34 
     | 
    
         
            +
                before { allow(runner).to receive(:migration) { migration } }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                let(:migration) { double :migration, down: nil }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                it "rolls back migration" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                  expect(migration).to receive(:down).once
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end # describe #apply
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              describe "#register" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                after { runner.register }
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                it "sends the DELETE query to session" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  expect(session)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    .to receive(:call)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    .with "DELETE FROM rom.migrations WHERE version = '20150824103059';"
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end # describe #register
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              describe "#log" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                after { runner.log }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                it "logs the message" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  expect(logger)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    .to receive(:info)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    .with "Roll back migration 20150824103059\n"
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end # describe #log
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              after { Object.send :remove_const, :AddFoo if Object.const_defined? :AddFoo }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::RunnerDown
         
     | 
| 
         @@ -0,0 +1,142 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe ROM::Cassandra::Migrations::Runner do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:klass)   { Class.new described_class }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:runner)  { klass.new session, logger, path }
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:session) { double :session, call: nil }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:logger)  { double :logger }
         
     | 
| 
      
 9 
     | 
    
         
            +
              let(:path)    { "foo/20150824103059_add_foo.rb" }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              before do
         
     | 
| 
      
 12 
     | 
    
         
            +
                klass.send(:define_method, :migrate?) { true }
         
     | 
| 
      
 13 
     | 
    
         
            +
                klass.send(:define_method, :require) do |name|
         
     | 
| 
      
 14 
     | 
    
         
            +
                  AddFoo = Class.new(ROM::Cassandra::Migrations::Migration) if name == path
         
     | 
| 
      
 15 
     | 
    
         
            +
                  true
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              describe "#session" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                subject { runner.session }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                it { is_expected.to eql session }
         
     | 
| 
      
 23 
     | 
    
         
            +
              end # describe #session
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              describe "#logger" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                subject { runner.logger }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                it { is_expected.to eql logger }
         
     | 
| 
      
 29 
     | 
    
         
            +
              end # describe #logger
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              describe "#path" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                subject { runner.path }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                it { is_expected.to eql path }
         
     | 
| 
      
 35 
     | 
    
         
            +
              end # describe #path
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              describe "#version" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                subject { runner.version }
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                context "from valid timestamp" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  let(:path) { "foo/12345678901234/20150824103059_add_foo.rb" }
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  it { is_expected.to eql 20150824103059 }
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                context "from invalid timestamp" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  let(:path) { "foo/2015082410305_add_foo.rb" }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  it "fails" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                    expect { subject }.to raise_error do |error|
         
     | 
| 
      
 51 
     | 
    
         
            +
                      expect(error).to be_kind_of NameError
         
     | 
| 
      
 52 
     | 
    
         
            +
                      expect(error.message)
         
     | 
| 
      
 53 
     | 
    
         
            +
                        .to eql("invalid version number: 'foo/2015082410305_add_foo.rb'")
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end # describe #version
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              describe "#migration" do
         
     | 
| 
      
 60 
     | 
    
         
            +
                subject { runner.migration }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                it "creates migration for #session" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                  expect(subject).to be_kind_of(AddFoo)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  expect(subject.session).to eql(session)
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                context "when #migrate? is falsey" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  before { klass.send(:define_method, :migrate?) { nil } }
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  it { is_expected.to eql nil }
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
              end # describe #migration
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              describe "#clear" do
         
     | 
| 
      
 75 
     | 
    
         
            +
                subject { runner.clear }
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                before { runner }
         
     | 
| 
      
 78 
     | 
    
         
            +
              end # describe #clear
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
              describe "#call" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                before do
         
     | 
| 
      
 82 
     | 
    
         
            +
                  allow(runner).to receive(:apply)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  allow(runner).to receive(:register)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  allow(runner).to receive(:log)
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                subject { runner.call }
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                it "calls commands in the right order" do
         
     | 
| 
      
 90 
     | 
    
         
            +
                  expect(runner).to receive(:apply).ordered
         
     | 
| 
      
 91 
     | 
    
         
            +
                  expect(runner).to receive(:register).ordered
         
     | 
| 
      
 92 
     | 
    
         
            +
                  expect(runner).to receive(:log).ordered
         
     | 
| 
      
 93 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                context "when #migration isn't set" do
         
     | 
| 
      
 97 
     | 
    
         
            +
                  before { allow(runner).to receive(:migration) }
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  it "skips all commands" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                    expect(runner).not_to receive(:apply)
         
     | 
| 
      
 101 
     | 
    
         
            +
                    expect(runner).not_to receive(:register)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    expect(runner).not_to receive(:log)
         
     | 
| 
      
 103 
     | 
    
         
            +
                    subject
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
              end # describe #call
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
              describe "#select_version" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                after { runner.select_version }
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                let(:queries) do
         
     | 
| 
      
 112 
     | 
    
         
            +
                  [
         
     | 
| 
      
 113 
     | 
    
         
            +
                    "CREATE KEYSPACE IF NOT EXISTS rom WITH REPLICATION =" \
         
     | 
| 
      
 114 
     | 
    
         
            +
                      " {'class': 'SimpleStrategy', 'replication_factor': 3};",
         
     | 
| 
      
 115 
     | 
    
         
            +
                    "CREATE TABLE IF NOT EXISTS rom.migrations " \
         
     | 
| 
      
 116 
     | 
    
         
            +
                      "(version text, PRIMARY KEY (version));",
         
     | 
| 
      
 117 
     | 
    
         
            +
                    "SELECT * FROM rom.migrations WHERE version = '20150824103059';"
         
     | 
| 
      
 118 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                it "sends requests to Cassandra cluster" do
         
     | 
| 
      
 122 
     | 
    
         
            +
                  queries.each do |query|
         
     | 
| 
      
 123 
     | 
    
         
            +
                    expect(session).to receive(:call).with(query).ordered
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
              end # describe #select_version
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
              describe ".apply" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                let(:runner) { double :runner, call: nil }
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                before { allow(described_class).to receive(:new) { runner } }
         
     | 
| 
      
 132 
     | 
    
         
            +
                after  { described_class.apply(session, logger, path) }
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                it "creates and calls the runner" do
         
     | 
| 
      
 135 
     | 
    
         
            +
                  expect(described_class).to receive(:new).with(session, logger, path)
         
     | 
| 
      
 136 
     | 
    
         
            +
                  expect(runner).to receive(:call)
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
              end # describe .apply
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              after { Object.send :remove_const, :AddFoo if Object.const_defined? :AddFoo }
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            end # describe ROM::Cassandra::Migrations::Runner
         
     |