postmodern 0.0.10 → 0.0.11
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 +4 -4
- data/bin/postmodern +2 -34
- data/lib/postmodern.rb +0 -1
- data/lib/postmodern/command.rb +37 -0
- data/lib/postmodern/dummy.rb +29 -0
- data/lib/postmodern/runner.rb +22 -0
- data/lib/postmodern/version.rb +1 -1
- data/lib/postmodern/wal.rb +0 -20
- data/lib/postmodern/wal/archive.rb +58 -2
- data/lib/postmodern/wal/restore.rb +2 -2
- data/spec/features/archive_spec.rb +80 -0
- data/spec/features/dummy_spec.rb +24 -0
- data/spec/features/restore_spec.rb +45 -0
- data/spec/postmodern/runner_spec.rb +30 -0
- data/spec/postmodern/wal/archive_spec.rb +2 -1
- data/spec/postmodern/wal/restore_spec.rb +40 -0
- metadata +15 -6
- data/lib/postmodern/errors.rb +0 -4
- data/lib/postmodern/wal/base.rb +0 -34
- data/spec/bin/postmodern_spec.rb +0 -67
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 15bd95a1daf5a24f06fcfa1645094b3bd1a76c0c
         | 
| 4 | 
            +
              data.tar.gz: 60aeb0096180e784f4e13e812075319523609823
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fac44addd806dc9688c1cf5a076c2bed5b6ebf6aa44c58d1c78357a9c4046b3735aa13317b0fa890546f6202d054c3a2971bfb7806c09b4cfa5f13a78a16b0f0
         | 
| 7 | 
            +
              data.tar.gz: bc2afb31d22804a418ed917b5bae2d1422cf4740b41ab3cdab0508a4edbaa2a12566afde2c6c445e16fc6f3e5c51504e4d211230baa59e0281c0a6be8adcb836
         | 
    
        data/bin/postmodern
    CHANGED
    
    | @@ -2,38 +2,6 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
         | 
| 4 4 |  | 
| 5 | 
            -
            require 'postmodern/ | 
| 6 | 
            -
            require 'postmodern/wal'
         | 
| 7 | 
            -
            require 'optparse'
         | 
| 5 | 
            +
            require 'postmodern/runner'
         | 
| 8 6 |  | 
| 9 | 
            -
             | 
| 10 | 
            -
            parser = OptionParser.new do |opts|
         | 
| 11 | 
            -
              opts.banner = "Usage: postmodern (archive|restore) <options>"
         | 
| 12 | 
            -
             | 
| 13 | 
            -
              opts.on('-f', '--filename FILE', 'File name to archive') do |o|
         | 
| 14 | 
            -
                options[:file] = o
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
              opts.on('-p', '--path PATH', 'Path name of file to archive') do |o|
         | 
| 18 | 
            -
                options[:path] = o
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              opts.on_tail("-h", "--help", "Show this message") do
         | 
| 22 | 
            -
                puts opts
         | 
| 23 | 
            -
                exit
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              opts.on_tail("--version", "Show version") do
         | 
| 27 | 
            -
                require 'postmodern/version'
         | 
| 28 | 
            -
                puts Postmodern::VERSION
         | 
| 29 | 
            -
                exit
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
            end
         | 
| 32 | 
            -
            parser.parse!
         | 
| 33 | 
            -
             | 
| 34 | 
            -
            begin
         | 
| 35 | 
            -
              Postmodern::WAL.run(ARGV.first, options)
         | 
| 36 | 
            -
            rescue Postmodern::Error => e
         | 
| 37 | 
            -
              puts e.message
         | 
| 38 | 
            -
              puts parser.to_s
         | 
| 39 | 
            -
            end
         | 
| 7 | 
            +
            Postmodern::Runner.run(ARGV)
         | 
    
        data/lib/postmodern.rb
    CHANGED
    
    
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require 'optparse'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Postmodern
         | 
| 4 | 
            +
              class Command
         | 
| 5 | 
            +
                def self.required_options
         | 
| 6 | 
            +
                  @required_options ||= []
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def parser
         | 
| 10 | 
            +
                  OptionParser.new
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                attr_reader :options
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def initialize(args)
         | 
| 16 | 
            +
                  @options = {}
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  parse_args(args)
         | 
| 19 | 
            +
                  validate!
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def run
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def validate!
         | 
| 26 | 
            +
                  if (self.class.required_options - self.options.keys).any?
         | 
| 27 | 
            +
                    puts parser
         | 
| 28 | 
            +
                    exit 1
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def parse_args(args)
         | 
| 33 | 
            +
                  parser.parse!(args)
         | 
| 34 | 
            +
                  self.options
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require 'postmodern/command'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Postmodern
         | 
| 4 | 
            +
              class Dummy < Command
         | 
| 5 | 
            +
                def parser
         | 
| 6 | 
            +
                  @parser ||= OptionParser.new do |opts|
         | 
| 7 | 
            +
                    opts.banner = "Usage: postmodern <command> <options>"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    opts.separator ""
         | 
| 10 | 
            +
                    opts.separator "Available commands:"
         | 
| 11 | 
            +
                    opts.separator "    archive"
         | 
| 12 | 
            +
                    opts.separator "    restore"
         | 
| 13 | 
            +
                    opts.separator ""
         | 
| 14 | 
            +
                    opts.separator "Options:"
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    opts.on_tail("-h", "--help", "Show this message") do
         | 
| 17 | 
            +
                      puts opts
         | 
| 18 | 
            +
                      exit
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    opts.on_tail("--version", "Show version") do
         | 
| 22 | 
            +
                      require 'postmodern/version'
         | 
| 23 | 
            +
                      puts Postmodern::VERSION
         | 
| 24 | 
            +
                      exit
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'postmodern/wal'
         | 
| 2 | 
            +
            require 'postmodern/dummy'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Postmodern
         | 
| 5 | 
            +
              module Runner
         | 
| 6 | 
            +
                attr_reader :argv
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                DEFAULT_COMMAND = Dummy
         | 
| 9 | 
            +
                COMMAND_MAP = {
         | 
| 10 | 
            +
                  'archive' => WAL::Archive,
         | 
| 11 | 
            +
                  'restore' => WAL::Restore
         | 
| 12 | 
            +
                }.freeze
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def self.run(args)
         | 
| 15 | 
            +
                  command_for(args.first).new(args).run
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                def self.command_for(command)
         | 
| 19 | 
            +
                  COMMAND_MAP[command] || DEFAULT_COMMAND
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/postmodern/version.rb
    CHANGED
    
    
    
        data/lib/postmodern/wal.rb
    CHANGED
    
    | @@ -1,23 +1,3 @@ | |
| 1 1 | 
             
            require 'postmodern/wal/archive'
         | 
| 2 2 | 
             
            require 'postmodern/wal/restore'
         | 
| 3 | 
            -
            require 'postmodern/errors'
         | 
| 4 3 |  | 
| 5 | 
            -
            module Postmodern
         | 
| 6 | 
            -
              module WAL
         | 
| 7 | 
            -
                COMMANDS = {
         | 
| 8 | 
            -
                  'archive' => Postmodern::WAL::Archive,
         | 
| 9 | 
            -
                  'restore' => Postmodern::WAL::Restore
         | 
| 10 | 
            -
                }
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                def self.run(command, options)
         | 
| 13 | 
            -
                  validate!(options)
         | 
| 14 | 
            -
                  COMMANDS[command].new(options[:file], options[:path]).run
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                def self.validate!(options)
         | 
| 18 | 
            -
                  unless options[:file] and options[:path]
         | 
| 19 | 
            -
                    raise Postmodern::Error.new('Missing required options')
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
            end
         | 
| @@ -1,8 +1,64 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            require 'postmodern/command'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Postmodern
         | 
| 4 4 | 
             
              module WAL
         | 
| 5 | 
            -
                class Archive <  | 
| 5 | 
            +
                class Archive < Postmodern::Command
         | 
| 6 | 
            +
                  required_options << :file
         | 
| 7 | 
            +
                  required_options << :path
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def parser
         | 
| 10 | 
            +
                    @parser ||= OptionParser.new do |opts|
         | 
| 11 | 
            +
                      opts.banner = "Usage: postmodern (archive|restore) <options>"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                      opts.on('-f', '--filename FILE', 'File name of xlog') do |o|
         | 
| 14 | 
            +
                        self.options[:file] = o
         | 
| 15 | 
            +
                      end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                      opts.on('-p', '--path PATH', 'Path of xlog file') do |o|
         | 
| 18 | 
            +
                        self.options[:path] = o
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                      opts.on_tail("-h", "--help", "Show this message") do
         | 
| 22 | 
            +
                        puts opts
         | 
| 23 | 
            +
                        exit
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      opts.on_tail("--version", "Show version") do
         | 
| 27 | 
            +
                        require 'postmodern/version'
         | 
| 28 | 
            +
                        puts Postmodern::VERSION
         | 
| 29 | 
            +
                        exit
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def run
         | 
| 35 | 
            +
                    if local_script_exists?
         | 
| 36 | 
            +
                      IO.popen("#{local_script} #{path} #{filename}",
         | 
| 37 | 
            +
                               env: {
         | 
| 38 | 
            +
                        'WAL_ARCHIVE_PATH' => path,
         | 
| 39 | 
            +
                        'WAL_ARCHIVE_FILE' => filename,
         | 
| 40 | 
            +
                        'PATH' => ENV['PATH']
         | 
| 41 | 
            +
                      }) { |f| puts f.gets }
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  private
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def path
         | 
| 48 | 
            +
                    @options[:path]
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def filename
         | 
| 52 | 
            +
                    @options[:file]
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def local_script_exists?
         | 
| 56 | 
            +
                    system({'PATH' => ENV['PATH']}, "which #{local_script} >/dev/null 2>/dev/null")
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def local_script
         | 
| 60 | 
            +
                    'postmodern_archive.local'
         | 
| 61 | 
            +
                  end
         | 
| 6 62 | 
             
                end
         | 
| 7 63 | 
             
              end
         | 
| 8 64 | 
             
            end
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'archive help' do
         | 
| 4 | 
            +
              it 'responds' do
         | 
| 5 | 
            +
                expect(`bin/postmodern archive --help`).to eq <<-END
         | 
| 6 | 
            +
            Usage: postmodern (archive|restore) <options>
         | 
| 7 | 
            +
                -f, --filename FILE              File name of xlog
         | 
| 8 | 
            +
                -p, --path PATH                  Path of xlog file
         | 
| 9 | 
            +
                -h, --help                       Show this message
         | 
| 10 | 
            +
                    --version                    Show version
         | 
| 11 | 
            +
                END
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            describe 'archive' do
         | 
| 16 | 
            +
              let(:command) { `bin/postmodern archive --path filepath --filename filename` }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              let(:usage) { <<-END
         | 
| 19 | 
            +
            Usage: postmodern (archive|restore) <options>
         | 
| 20 | 
            +
                -f, --filename FILE              File name of xlog
         | 
| 21 | 
            +
                -p, --path PATH                  Path of xlog file
         | 
| 22 | 
            +
                -h, --help                       Show this message
         | 
| 23 | 
            +
                    --version                    Show version
         | 
| 24 | 
            +
                            END
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              before do
         | 
| 28 | 
            +
                double_cmd('postmodern_archive.local', exit: 0)
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              describe 'validations' do
         | 
| 32 | 
            +
                context 'with no --path' do
         | 
| 33 | 
            +
                  let(:command) { `bin/postmodern archive --filename filename` }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it 'fails' do
         | 
| 36 | 
            +
                    expect { command }.to have_exit_status(1)
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  it 'prints usage' do
         | 
| 40 | 
            +
                    expect(command).to eq(usage)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                context 'with no --filename' do
         | 
| 45 | 
            +
                  let(:command) { `bin/postmodern archive --path path` }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  it 'fails' do
         | 
| 48 | 
            +
                    expect { command }.to have_exit_status(1)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  it 'prints usage' do
         | 
| 52 | 
            +
                    expect(command).to eq(usage)
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              context 'when local script is present' do
         | 
| 58 | 
            +
                before { double_cmd('which postmodern_archive.local', exit: 0) }
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                it 'succeeds' do
         | 
| 61 | 
            +
                  expect { command }.to have_exit_status(0)
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                it 'calls a local file with file name and path' do
         | 
| 65 | 
            +
                  expect { command }.to shellout('postmodern_archive.local filepath filename')
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              context 'when local script is not present' do
         | 
| 70 | 
            +
                before { double_cmd('which postmodern_archive.local', exit: 1) }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                it 'succeeds' do
         | 
| 73 | 
            +
                  expect { command }.to have_exit_status(0)
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                it 'does nothing' do
         | 
| 77 | 
            +
                  expect { command }.not_to shellout('pg_wal_archive.local filepath filename')
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'postmodern/version'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe 'dummy help' do
         | 
| 5 | 
            +
              it 'responds with usage info' do
         | 
| 6 | 
            +
                expect(`bin/postmodern --help`).to eq <<-END
         | 
| 7 | 
            +
            Usage: postmodern <command> <options>
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Available commands:
         | 
| 10 | 
            +
                archive
         | 
| 11 | 
            +
                restore
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Options:
         | 
| 14 | 
            +
                -h, --help                       Show this message
         | 
| 15 | 
            +
                    --version                    Show version
         | 
| 16 | 
            +
                END
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            describe 'dummy version' do
         | 
| 21 | 
            +
              it 'responds with the Postmodern version' do
         | 
| 22 | 
            +
                expect(`bin/postmodern --version`).to match(Postmodern::VERSION)
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'restore help' do
         | 
| 4 | 
            +
              it 'responds' do
         | 
| 5 | 
            +
                expect(`bin/postmodern restore --help`).to eq <<-END
         | 
| 6 | 
            +
            Usage: postmodern (archive|restore) <options>
         | 
| 7 | 
            +
                -f, --filename FILE              File name of xlog
         | 
| 8 | 
            +
                -p, --path PATH                  Path of xlog file
         | 
| 9 | 
            +
                -h, --help                       Show this message
         | 
| 10 | 
            +
                    --version                    Show version
         | 
| 11 | 
            +
                END
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            describe 'restore' do
         | 
| 16 | 
            +
              let(:command) { `bin/postmodern restore --path filepath --filename filename` }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              before do
         | 
| 19 | 
            +
                double_cmd('postmodern_restore.local')
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              context 'when local script is present' do
         | 
| 23 | 
            +
                before { double_cmd('which', exit: 0) }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                it 'succeeds' do
         | 
| 26 | 
            +
                  expect { command }.to have_exit_status(0)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'calls a local file with file name and path' do
         | 
| 30 | 
            +
                  expect { command }.to shellout('postmodern_restore.local filepath filename')
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              context 'when local script is not present' do
         | 
| 35 | 
            +
                before { double_cmd('which', exit: 1) }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                it 'succeeds' do
         | 
| 38 | 
            +
                  expect { command }.to have_exit_status(0)
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                it 'does nothing' do
         | 
| 42 | 
            +
                  expect { command }.not_to shellout('pg_wal_restore.local filepath filename')
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'postmodern/runner'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Postmodern::Runner do
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              describe '.command' do
         | 
| 7 | 
            +
                it 'chooses archiver' do
         | 
| 8 | 
            +
                  expect(Postmodern::Runner.command_for('archive')).to be Postmodern::WAL::Archive
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                it 'chooses restorer' do
         | 
| 12 | 
            +
                  expect(Postmodern::Runner.command_for('restore')).to be Postmodern::WAL::Restore
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                it 'defaults to dummy' do
         | 
| 16 | 
            +
                  expect(Postmodern::Runner.command_for('ljfaldf')).to be Postmodern::Dummy
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              describe '.run' do
         | 
| 21 | 
            +
                it 'runs the command class' do
         | 
| 22 | 
            +
                  args = ['blahrgh', 'first', 'second']
         | 
| 23 | 
            +
                  dummy_class = double
         | 
| 24 | 
            +
                  expect(Postmodern::Runner).to receive(:command_for).and_return(dummy_class)
         | 
| 25 | 
            +
                  expect(dummy_class).to receive(:new).with(args).and_return(dummy_class)
         | 
| 26 | 
            +
                  expect(dummy_class).to receive(:run)
         | 
| 27 | 
            +
                  Postmodern::Runner.run(args)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -6,8 +6,9 @@ describe Postmodern::WAL::Archive do | |
| 6 6 |  | 
| 7 7 | 
             
              let(:filename) { "some_file" }
         | 
| 8 8 | 
             
              let(:path) { "/path/to/file" }
         | 
| 9 | 
            +
              let(:arguments) { %W(--filename #{filename} --path #{path}) }
         | 
| 9 10 |  | 
| 10 | 
            -
              subject(:archiver) { Postmodern::WAL::Archive.new( | 
| 11 | 
            +
              subject(:archiver) { Postmodern::WAL::Archive.new(arguments) }
         | 
| 11 12 |  | 
| 12 13 | 
             
              describe '#run' do
         | 
| 13 14 | 
             
                let(:expected_command) { "postmodern_archive.local #{path} #{filename}" }
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'postmodern/wal/restore'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Postmodern::WAL::Restore do
         | 
| 5 | 
            +
              before { allow(IO).to receive(:popen) }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              let(:filename) { "some_file" }
         | 
| 8 | 
            +
              let(:path) { "/path/to/file" }
         | 
| 9 | 
            +
              let(:arguments) { %W(--filename #{filename} --path #{path}) }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              subject(:restorer) { Postmodern::WAL::Restore.new(arguments) }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              describe '#run' do
         | 
| 14 | 
            +
                let(:expected_command) { "postmodern_restore.local #{path} #{filename}" }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                context 'when local script exists' do
         | 
| 17 | 
            +
                  before { double_cmd('which postmodern_restore.local', exit: 0) }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  it 'executes postmodern_restore.local with filename and path' do
         | 
| 20 | 
            +
                    restorer.run
         | 
| 21 | 
            +
                    expect(IO).to have_received(:popen).with(expected_command, env:
         | 
| 22 | 
            +
                      {
         | 
| 23 | 
            +
                        'WAL_ARCHIVE_PATH' => path,
         | 
| 24 | 
            +
                        'WAL_ARCHIVE_FILE' => filename,
         | 
| 25 | 
            +
                        'PATH' => anything
         | 
| 26 | 
            +
                      }
         | 
| 27 | 
            +
                    )
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                context 'when local script does not exist' do
         | 
| 32 | 
            +
                  before { double_cmd('which postmodern_restore.local', exit: 1) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  it 'executes postmodern_restore.local with filename and path' do
         | 
| 35 | 
            +
                    restorer.run
         | 
| 36 | 
            +
                    expect(IO).not_to have_received(:popen)
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: postmodern
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eric Saxby
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-05- | 
| 11 | 
            +
            date: 2014-05-29 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -56,15 +56,20 @@ files: | |
| 56 56 | 
             
            - Rakefile
         | 
| 57 57 | 
             
            - bin/postmodern
         | 
| 58 58 | 
             
            - lib/postmodern.rb
         | 
| 59 | 
            -
            - lib/postmodern/ | 
| 59 | 
            +
            - lib/postmodern/command.rb
         | 
| 60 | 
            +
            - lib/postmodern/dummy.rb
         | 
| 61 | 
            +
            - lib/postmodern/runner.rb
         | 
| 60 62 | 
             
            - lib/postmodern/version.rb
         | 
| 61 63 | 
             
            - lib/postmodern/wal.rb
         | 
| 62 64 | 
             
            - lib/postmodern/wal/archive.rb
         | 
| 63 | 
            -
            - lib/postmodern/wal/base.rb
         | 
| 64 65 | 
             
            - lib/postmodern/wal/restore.rb
         | 
| 65 66 | 
             
            - postmodern.gemspec
         | 
| 66 | 
            -
            - spec/ | 
| 67 | 
            +
            - spec/features/archive_spec.rb
         | 
| 68 | 
            +
            - spec/features/dummy_spec.rb
         | 
| 69 | 
            +
            - spec/features/restore_spec.rb
         | 
| 70 | 
            +
            - spec/postmodern/runner_spec.rb
         | 
| 67 71 | 
             
            - spec/postmodern/wal/archive_spec.rb
         | 
| 72 | 
            +
            - spec/postmodern/wal/restore_spec.rb
         | 
| 68 73 | 
             
            - spec/spec_helper.rb
         | 
| 69 74 | 
             
            homepage: https://github.com/wanelo/postmodern
         | 
| 70 75 | 
             
            licenses:
         | 
| @@ -91,7 +96,11 @@ signing_key: | |
| 91 96 | 
             
            specification_version: 4
         | 
| 92 97 | 
             
            summary: Tools for managing PostgreSQL
         | 
| 93 98 | 
             
            test_files:
         | 
| 94 | 
            -
            - spec/ | 
| 99 | 
            +
            - spec/features/archive_spec.rb
         | 
| 100 | 
            +
            - spec/features/dummy_spec.rb
         | 
| 101 | 
            +
            - spec/features/restore_spec.rb
         | 
| 102 | 
            +
            - spec/postmodern/runner_spec.rb
         | 
| 95 103 | 
             
            - spec/postmodern/wal/archive_spec.rb
         | 
| 104 | 
            +
            - spec/postmodern/wal/restore_spec.rb
         | 
| 96 105 | 
             
            - spec/spec_helper.rb
         | 
| 97 106 | 
             
            has_rdoc: 
         | 
    
        data/lib/postmodern/errors.rb
    DELETED
    
    
    
        data/lib/postmodern/wal/base.rb
    DELETED
    
    | @@ -1,34 +0,0 @@ | |
| 1 | 
            -
            module Postmodern
         | 
| 2 | 
            -
              module WAL
         | 
| 3 | 
            -
                class Base
         | 
| 4 | 
            -
                  attr_reader :filename, :path
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                  def initialize(filename, path)
         | 
| 7 | 
            -
                    @filename = filename
         | 
| 8 | 
            -
                    @path = path
         | 
| 9 | 
            -
                  end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  def run
         | 
| 12 | 
            -
                    if local_script_exists?
         | 
| 13 | 
            -
                      IO.popen("#{local_script} #{path} #{filename}",
         | 
| 14 | 
            -
                        env: {
         | 
| 15 | 
            -
                          'WAL_ARCHIVE_PATH' => path,
         | 
| 16 | 
            -
                          'WAL_ARCHIVE_FILE' => filename,
         | 
| 17 | 
            -
                          'PATH' => ENV['PATH']
         | 
| 18 | 
            -
                        })
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  private
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                  def local_script_exists?
         | 
| 25 | 
            -
                    `which #{local_script} >/dev/null 2>/dev/null`
         | 
| 26 | 
            -
                    $?.exitstatus == 0
         | 
| 27 | 
            -
                  end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                  def local_script
         | 
| 30 | 
            -
                    'postmodern_archive.local'
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
                end
         | 
| 33 | 
            -
              end
         | 
| 34 | 
            -
            end
         | 
    
        data/spec/bin/postmodern_spec.rb
    DELETED
    
    | @@ -1,67 +0,0 @@ | |
| 1 | 
            -
            require 'spec_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe 'postmodern' do
         | 
| 4 | 
            -
              describe 'archive' do
         | 
| 5 | 
            -
                let(:command) { `bin/postmodern archive --path filepath --filename filename` }
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                before do
         | 
| 8 | 
            -
                  double_cmd('postmodern_archive.local')
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                context 'when local script is present' do
         | 
| 12 | 
            -
                  before { double_cmd('which', exit: 0) }
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  it 'succeeds' do
         | 
| 15 | 
            -
                    expect { command }.to have_exit_status(0)
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  it 'calls a local file with file name and path' do
         | 
| 19 | 
            -
                    expect { command }.to shellout('postmodern_archive.local filepath filename')
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                context 'when local script is not present' do
         | 
| 24 | 
            -
                  before { double_cmd('which', exit: 1) }
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  it 'succeeds' do
         | 
| 27 | 
            -
                    expect { command }.to have_exit_status(0)
         | 
| 28 | 
            -
                  end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                  it 'does nothing' do
         | 
| 31 | 
            -
                    expect { command }.not_to shellout('pg_wal_archive.local filepath filename')
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
              describe 'restore' do
         | 
| 37 | 
            -
                let(:command) { `bin/postmodern restore --path filepath --filename filename` }
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                before do
         | 
| 40 | 
            -
                  double_cmd('postmodern_restore.local')
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                context 'when local script is present' do
         | 
| 44 | 
            -
                  before { double_cmd('which', exit: 0) }
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                  it 'succeeds' do
         | 
| 47 | 
            -
                    expect { command }.to have_exit_status(0)
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  it 'calls a local file with file name and path' do
         | 
| 51 | 
            -
                    expect { command }.to shellout('postmodern_restore.local filepath filename')
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
                end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                context 'when local script is not present' do
         | 
| 56 | 
            -
                  before { double_cmd('which', exit: 1) }
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                  it 'succeeds' do
         | 
| 59 | 
            -
                    expect { command }.to have_exit_status(0)
         | 
| 60 | 
            -
                  end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                  it 'does nothing' do
         | 
| 63 | 
            -
                    expect { command }.not_to shellout('pg_wal_restore.local filepath filename')
         | 
| 64 | 
            -
                  end
         | 
| 65 | 
            -
                end
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
            end
         |