Sha256: 60ed7d0126a43c58a9b207704f79e7a9ef220280628c36f5ad92c75f9d61791c

Contents?: true

Size: 1.45 KB

Versions: 18

Compression:

Stored size: 1.45 KB

Contents

class Gratan::DSL::Context
  include Gratan::DSL::Validator
  include Gratan::Logger::Helper

  def self.eval(dsl, path, options = {})
    self.new(path, options) do
      eval(dsl, binding, path)
    end
  end

  attr_reader :result

  def initialize(path, options = {}, &block)
    @path = path
    @options = options
    @result = {}
    instance_eval(&block)
  end

  private

  def require(file)
    grantfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@path), file))

    if File.exist?(grantfile)
      instance_eval(File.read(grantfile), grantfile)
    elsif File.exist?(grantfile + '.rb')
      instance_eval(File.read(grantfile + '.rb'), grantfile + '.rb')
    else
      Kernel.require(file)
    end
  end

  def user(name, host_or_array, options = {}, &block)
    name = name.to_s
    hosts = [host_or_array].flatten.map {|i| i.to_s }

    hosts.each do |host|
      options ||= {}

      __validate("User `#{name}@#{host}` is already defined") do
        not @result.has_key?([name, host])
      end

      if @options[:enable_expired] and (expired = options.delete(:expired))
        expired = Time.parse(expired)

        if Time.new >= expired
          log(:warn, "User `#{name}@#{host}` has expired", :color => :yellow)
          return
        end
      end

      @result[[name, host]] = {
        :objects => Gratan::DSL::Context::User.new(name, host, @options, &block).result,
        :options => options,
      }
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
gratan-0.2.9 lib/gratan/dsl/context.rb
gratan-0.2.9.beta3 lib/gratan/dsl/context.rb
gratan-0.2.9.beta2 lib/gratan/dsl/context.rb
gratan-0.2.9.beta lib/gratan/dsl/context.rb
gratan-0.2.8 lib/gratan/dsl/context.rb
gratan-0.2.8.beta3 lib/gratan/dsl/context.rb
gratan-0.2.8.beta2 lib/gratan/dsl/context.rb
gratan-0.2.8.beta lib/gratan/dsl/context.rb
gratan-0.2.7 lib/gratan/dsl/context.rb
gratan-0.2.6 lib/gratan/dsl/context.rb
gratan-0.2.5 lib/gratan/dsl/context.rb
gratan-0.2.4 lib/gratan/dsl/context.rb
gratan-0.2.3 lib/gratan/dsl/context.rb
gratan-0.2.2 lib/gratan/dsl/context.rb
gratan-0.2.1 lib/gratan/dsl/context.rb
gratan-0.2.0 lib/gratan/dsl/context.rb
gratan-0.1.9 lib/gratan/dsl/context.rb
gratan-0.1.8 lib/gratan/dsl/context.rb