Sha256: 084b8fdd52c3df20d1503d88dedf26d1fad5037deb4280b5d0832757d06a5537

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

class Gratan::Exporter
  def self.export(driver, options = {}, &block)
    self.new(driver, options).export(&block)
  end

  def initialize(driver, options = {})
    @driver = driver
    @options = options
  end

  def export
    grants = []

    @driver.each_user do |user, host|
      next if user =~ @options[:ignore_user]

      if @options[:target_user]
        next unless user =~ @options[:target_user]
      end

      @driver.show_grants(user, host) do |stmt|
        grants << Gratan::GrantParser.parse(stmt)
      end
    end

    pack(grants)
  end

  private

  def pack(grants)
    packed = {}

    grants.each do |grant|
      user = grant.delete(:user)
      host = grant.delete(:host)
      user_host = [user, host]
      object = grant.delete(:object)
      identified = grant.delete(:identified)
      required = grant.delete(:require)

      packed[user_host] ||= {:objects => {}, :options => {}}
      packed[user_host][:objects][object] = grant
      packed[user_host][:options][:required] = required if required

      if @options[:with_identifier] and identified
        packed[user_host][:options][:identified] = identified
      end
    end

    packed
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gratan-0.2.6 lib/gratan/exporter.rb
gratan-0.2.5 lib/gratan/exporter.rb
gratan-0.2.4 lib/gratan/exporter.rb
gratan-0.2.3 lib/gratan/exporter.rb