Class: XMigra::PermissionScriptWriter

Inherits:
SchemaManipulator show all
Defined in:
lib/xmigra/permission_script_writer.rb

Constant Summary

Constants inherited from SchemaManipulator

SchemaManipulator::ACCESS_SUBDIR, SchemaManipulator::DBINFO_FILE, SchemaManipulator::INDEXES_SUBDIR, SchemaManipulator::PERMISSIONS_FILE, SchemaManipulator::PLUGIN_KEY, SchemaManipulator::STRUCTURE_SUBDIR, SchemaManipulator::VERINC_FILE

Instance Attribute Summary

Attributes inherited from SchemaManipulator

#path, #plugin

Instance Method Summary collapse

Methods inherited from SchemaManipulator

#branch_upgrade_file, #load_plugin!

Constructor Details

#initialize(path) ⇒ PermissionScriptWriter

Returns a new instance of PermissionScriptWriter.

Raises:

  • (TypeError)


7
8
9
10
11
12
# 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

Instance Method Details

#ddl_block_separatorObject



18
# File 'lib/xmigra/permission_script_writer.rb', line 18

def ddl_block_separator; "\n"; end

#each_specified_grantObject



56
57
58
59
60
61
62
63
# 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_sqlObject



51
52
53
54
# 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) ⇒ Object



69
70
71
72
73
74
# 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_transactionObject



14
15
16
# File 'lib/xmigra/permission_script_writer.rb', line 14

def in_ddl_transaction
  yield
end

#line_comment(contents) ⇒ Object



65
66
67
# File 'lib/xmigra/permission_script_writer.rb', line 65

def line_comment(contents)
  "-- " + contents + " --\n"
end

#permissions_sql(options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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