class SequelRails::Storage::Abstract

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 6
def initialize(config)
  @config = config
  parse_url
end

Public Instance Methods

charset() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 67
def charset
  @charset ||= config['charset'] || ENV['CHARSET'] || 'utf8'
end
close_connections() click to toggle source

To be overriden by subclasses

# File lib/sequel_rails/storage/abstract.rb, line 39
def close_connections
  true
end
collation() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 71
def collation
  @collation ||= config['collation'] || ENV['COLLATION']
end
create() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 11
def create
  res = _create
  warn "[sequel] Created database '#{database}'" if res
  res
end
database() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 43
def database
  @database ||= config['database'] || config['path']
end
drop() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 17
def drop
  return if ::Sequel::DATABASES.size == 0

  ::Sequel::Model.db.disconnect
  res = _drop
  warn "[sequel] Dropped database '#{database}'" if res
  res
end
dump(filename) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 26
def dump(filename)
  res = _dump filename
  warn "[sequel] Dumped structure of database '#{database}' to '#{filename}'" if res
  res
end
host() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 55
def host
  @host ||= config['host'] || ''
end
load(filename) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 32
def load(filename)
  res = _load filename
  warn "[sequel] Loaded structure of database '#{database}' from '#{filename}'" if res
  res
end
owner() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 63
def owner
  @owner ||= config['owner'] || ''
end
password() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 51
def password
  @password ||= config['password'] || ''
end
port() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 59
def port
  @port ||= config['port'] || ''
end
schema_information_dump(migrator, sql_dump) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 79
      def schema_information_dump(migrator, sql_dump)
        res = ''
        inserts = schema_information_inserts(migrator, sql_dump)
        if inserts.any?
          res = inserts.join("\n")
          unless sql_dump
            res = <<-RUBY.strip_heredoc
              Sequel.migration do
                change do
                  #{res}
                end
              end
            RUBY
          end
        end
        res
      end
search_path() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 75
def search_path
  @search_path ||= config['search_path'] || '"$user", public'
end
username() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 47
def username
  @username ||= config['username'] || config['user'] || ''
end

Private Instance Methods

add_flag(commands, flag) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 120
def add_flag(commands, flag)
  commands << flag
end
add_option(commands, name, value) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 114
def add_option(commands, name, value)
  return unless value.present?
  separator = name[0, 2] == '--' ? '=' : ' '
  commands << "#{name}#{separator}#{value}"
end
exec(escaped_command) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 124
def exec(escaped_command)
  `#{escaped_command}`

  # Evaluate command status as a boolean like `system` does.
  $CHILD_STATUS.exitstatus == 0
end
parse_url() click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 99
def parse_url
  return unless @config['url'].present?

  url = URI(@config['url'])

  username, password = url.userinfo.to_s.split(':')
  @config.reverse_merge!(
    'database' => url.path.to_s[1..-1],
    'username' => username,
    'password' => password,
    'host' => url.host,
    'port' => url.port
  )
end
safe_exec(args) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 131
def safe_exec(args)
  if !Gem.win_platform?
    exec SequelRails::Shellwords.join(Array(args))
  else
    jarg = args.map do |arg|
      str = arg.to_s
      return "''" if str.empty?
      str = str.dup
      str.gsub!(%r{([^A-Za-z0-9_\-.,:/@\n])}, '\\1')
      str.gsub!(/\n/, "'\n'")
      str
    end
    exec jarg.join(' ')
  end
end
schema_information_dump_with_search_path(migrator, sql_dump) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 154
      def schema_information_dump_with_search_path(migrator, sql_dump)
        res = ''
        inserts = schema_information_inserts(migrator, sql_dump)
        if inserts.any?
          set_search_path_sql = "SET search_path TO #{search_path}"
          res = inserts.join("\n")
          if sql_dump
            res = "#{set_search_path_sql};\n#{res}"
          else
            res = <<-RUBY.strip_heredoc
              Sequel.migration do
                change do
                  self << #{set_search_path_sql.inspect}
                  #{res}
                end
              end
            RUBY
          end
        end
        res
      end
schema_information_inserts(migrator, sql_dump) click to toggle source
# File lib/sequel_rails/storage/abstract.rb, line 147
def schema_information_inserts(migrator, sql_dump)
  migrator.ds.map do |hash|
    insert = migrator.ds.insert_sql(hash)
    sql_dump ? "#{insert};" : "self << #{insert.inspect}"
  end
end