Class: DataMapper::CLI

### Home Classes Methods

### In Files

- lib/dm-cli/cli.rb

### Parent

Object

### Methods

- ::configure
- ::load_models
- ::parse_args
- ::require_plugins
- ::setup_logger
- ::start
- ::usage

### Files

- LICENSE
- README.rdoc

### Class/Module Index

Quicksearch

- DataMapper
- DataMapper::CLI

No matching classes.

# DataMapper::CLI

### Attributes

config[RW]
options[RW]

### Public Class Methods

configure(args) click to toggle source

    # File lib/dm-cli/cli.rb, line 139
    def configure(args)

      parse_args(args)

      @config[:environment] ||= "development"
      if @config[:config]
        @config.merge!(YAML::load_file(@config[:config]))
        @options = @config[:options]
      elsif @config[:yaml]
        @config.merge!(YAML::load_file(@config[:yaml]))
        @options = @config[@config[:environment]] || @config[@config[:environment].to_sym]
        raise "Options for environment '#{@config[:environment]}' are missing." if @options.nil?
      else
        @options = {
          :adapter  => @config[:adapter],
          :username => @config[:username],
          :password => @config[:password],
          :host     => @config[:host],
          :database => @config[:database]
        }
      end
      if !ARGV.empty?
        @config[:connection_string] = ARGV.shift
      end

    end

load_models() click to toggle source

    # File lib/dm-cli/cli.rb, line 166
    def load_models
      Pathname.glob("#{config[:models]}/**/*.rb") { |file| load file }
    end

parse_args(argv = ARGV) click to toggle source

    # File lib/dm-cli/cli.rb, line 59
    def parse_args(argv = ARGV)
      @config ||= {}

      # Build a parser for the command line arguments
      OptionParser.new do |opt|
        opt.define_head "DataMapper CLI"
        opt.banner = usage

        opt.on("-m", "--models MODELS", "The directory to load models from.") do |models|
          @config[:models] = Pathname(models)
        end

        opt.on("-c", "--config FILE", "Entire configuration structure, useful for testing scenarios.") do |config_file|
          @config = YAML::load_file Pathname(config_file)
        end

        opt.on("--merb", "--rails", "Loads application settings: config/database.yml, app/models.") do
          @config[:models] = Pathname("app/models")
          @config[:yaml]   = Pathname("config/database.yml")
        end

        opt.on("-y", "--yaml YAML", "The database connection configuration yaml file.") do |yaml_file|
          if (yaml = Pathname(yaml_file)).file?
            @config[:yaml] = yaml
          elsif (yaml = Pathname("#{Dir.getwd}/#{yaml_file}")).file?
            @config[:yaml] = yaml
          else
            raise "yaml file was specifed as #{yaml_file} but does not exist."
          end
        end

        opt.on("-l", "--log LOGFILE", "A string representing the logfile to use. Also accepts STDERR and STDOUT") do |log_file|
          @config[:log_file] = log_file
        end

        opt.on("-e", "--environment STRING", "Run merb in the correct mode(development, production, testing)") do |environment|
          @config[:environment] = environment
        end

        opt.on("-a", "--adapter ADAPTER", "Number of merb daemons to run.") do |adapter|
          @config[:adapter] = adapter
        end

        opt.on("-u", "--username USERNAME", "The user to connect to the database as.") do |username|
          @config[:username] = username
        end

        opt.on("-p", "--password PASSWORD", "The password to connect to the database with") do |password|
          @config[:password] = password
        end

        opt.on("-h", "--host HOSTNAME", "Host to connect to.") do |host|
          @config[:host] = host
        end

        opt.on("-s", "--socket SOCKET", "The socket to connect to.") do |socket|
          @config[:socket] = socket
        end

        opt.on("-o", "--port PORT", "The port to connect to.") do |port|
          @config[:port] = port
        end

        opt.on("-d", "--database DATABASENAME", "Name of the database to connect to.") do |database_name|
          @config[:database] = database_name
        end

        opt.on("-P", "--plugins PLUGIN,PLUGIN...", "A list of dm-plugins to require", Array) do |plugins|
          @config[:plugins] = plugins
        end

        opt.on("-?", "-H", "--help", "Show this help message") do
          puts opt
          exit
        end

      end.parse!(argv)

    end

require_plugins() click to toggle source

    # File lib/dm-cli/cli.rb, line 170
    def require_plugins
      # make sure we're loading dm plugins!
      plugins = config[:plugins].map {|p| (p =~ /^dm/) ? p : "dm-" + p }
      plugins.each do |plugin|
        begin
          require plugin
          puts "required #{plugin}."
        rescue LoadError => e
          puts "couldn't load #{plugin}."
        end
      end
    end

setup_logger() click to toggle source

    # File lib/dm-cli/cli.rb, line 183
    def setup_logger
      if config[:log_file] =~ /^std(?:out|err)$/
        log = Object.full_const_get(config[:log_file].upcase)
      else
        log = Pathname(config[:log_file])
      end

      DataMapper::Logger.new(log, :debug)
    end

start(argv = ARGV) click to toggle source

    # File lib/dm-cli/cli.rb, line 193
    def start(argv = ARGV)
      if (ARGV.nil? || ARGV.empty?)
        puts DataMapper::CLI.usage
        exit 1
      end

      begin
        configure(argv)

        require_plugins if config[:plugins]

        setup_logger if config[:log_file]

        if config[:connection_string]
          DataMapper.setup(:default, config[:connection_string])
          puts "DataMapper has been loaded using '#{config[:connection_string]}'"
        else
          DataMapper.setup(:default, options.dup)
          puts "DataMapper has been loaded using the '#{options[:adapter] || options["adapter"]}' database '#{options[:database] || options["database"]}' on '#{options[:host] || options["host"]}' as '#{options[:username] || options["username"]}'"
        end
        load_models if config[:models]
        ENV["IRBRC"] ||= DataMapper::CLI::BinDir + "/.irbrc" # Do not change this please. This should NOT be DataMapper.root
        IRB.start
      rescue => error
        puts error.message
        exit
      end

    end

usage() click to toggle source

    # File lib/dm-cli/cli.rb, line 13
    def usage
      dm - Data Mapper CLI  Usage Examples\n#{'='*80}* If one argument is given the CLI assumes it is a connection string:  $ dm mysql://root@localhost/test_development  The connection string has the format:    adapter://user:password@host:port/database  Where adapter is in: {mysql, pgsql, sqlite...} and the user/password is optional  Note that if there are any non-optional arguments specified, the first is  assumed to be a database connection string which will be used instead of any  database specified by options.* Load the database by specifying cli options  $ dm -a mysql -u root -h localhost -d test_development* Load the database using a yaml config file and specifying the environment to use  $ dm --yaml config/database.yml -e development* Load everything from a config file, this example is equivalent to the above  $ dm --config config/development.yml* Load the database and some model files from a directory, specifying the environment  $ dm --yaml config/database.yml -e development --models app/models* Load an assumed structure of a typical merb application  $ dm --merb -e development  This is similar to merb -i without the merb framework being loaded.* Load the dm-validations and dm-timestamps plugins before connecting to the db  $ dm -P validations,dm-timestamps mysql://root@localhost/test_development  If dm- isn't at the start of the file, it will be prepended.
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.