class XMigra::PermissionScriptWriter

Public Class Methods

new(path) click to toggle source
Calls superclass method
# File lib/xmigra/permission_script_writer.rb, line 7
def initialize(path)
  super(path)
  
  @permissions = YAML.load_file(self.path + PERMISSIONS_FILE)
  raise TypeError, "Expected Hash in #{PERMISSIONS_FILE}" unless Hash === @permissions
end

Public Instance Methods

ddl_block_separator() click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 18
def ddl_block_separator; "\n"; end
each_specified_grant() { |permissions, object, principal| ... } click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 56
def each_specified_grant
  @permissions.each_pair do |object, grants|
    grants.each_pair do |principal, permissions|
      permissions = [permissions] unless permissions.is_a? Enumerable
      yield permissions, object, principal
    end
  end
end
grant_specified_permissions_sql() click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 51
def grant_specified_permissions_sql
  granting_permissions_comment_sql +
    enum_for(:each_specified_grant).map(&method(:grant_permissions_sql)).join("\n")
end
header(content, size) click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 69
def header(content, size)
  dashes = size - content.length - 2
  l_dashes = dashes / 2
  r_dashes = dashes - l_dashes
  ('-' * l_dashes) + ' ' + content + ' ' + ('-' * r_dashes)
end
in_ddl_transaction() { || ... } click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 14
def in_ddl_transaction
  yield
end
line_comment(contents) click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 65
def line_comment(contents)
  "-- " + contents + " --\n"
end
permissions_sql(options = {}) click to toggle source
# File lib/xmigra/permission_script_writer.rb, line 20
def permissions_sql(options = {})
  "".tap do |result|
    result << @db_info.fetch('script comment', '') + "\n\n"
    
    transaction_sql = [
      # Check for blatantly incorrect application of script, e.g. running
      # on master or template database.
      check_execution_environment_sql,
      
      # Create table for recording granted permissions if it doesn't exist
      ensure_permissions_table_sql,
      
      # Revoke permissions previously granted through an XMigra permissions
      # script
      revoke_previous_permissions_sql,
      
      # Grant the permissions indicated in the source file
      grant_specified_permissions_sql,
      
    ].flatten.compact.join(ddl_block_separator).tap do |result|
      Plugin.active.amend_composed_sql(result) if Plugin.active
    end
    
    if options.fetch(:transactional, true)
      result << in_ddl_transaction {transaction_sql}
    else
      result << transaction_sql
    end
  end
end