Class: PgBundle::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/pgbundle/definition.rb

Overview

The Definition class collects all objects defined in a PgFile

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDefinition

Returns a new instance of Definition.



6
7
8
9
# File 'lib/pgbundle/definition.rb', line 6

def initialize
  @extensions = {}
  @errors = []
end

Instance Attribute Details

#databaseObject

Returns the value of attribute database.



5
6
7
# File 'lib/pgbundle/definition.rb', line 5

def database
  @database
end

#errorsObject

Returns the value of attribute errors.



5
6
7
# File 'lib/pgbundle/definition.rb', line 5

def errors
  @errors
end

#extensionsObject

Returns the value of attribute extensions.



5
6
7
# File 'lib/pgbundle/definition.rb', line 5

def extensions
  @extensions
end

Instance Method Details

#available_extensionsObject

returns an Array of already available Extensions



18
19
20
21
# File 'lib/pgbundle/definition.rb', line 18

def available_extensions
  link_dependencies
  extensions.select { |_, dep| dep.available?(database) }.values
end

#checkObject

returns an array of hashes with dependency information

{name: ‘foo’, installed: true, created: false }


62
63
64
65
66
67
68
69
70
71
# File 'lib/pgbundle/definition.rb', line 62

def check
  link_dependencies
  extensions.map do |_,ext|
    {
      name: ext.name,
      installed: ext.installed?(database),
      created: ext.created?(database)
    }
  end
end

#createObject

create all required extensions



44
45
46
47
48
49
# File 'lib/pgbundle/definition.rb', line 44

def create
  extensions.map do |_, dep|
    dep.create_with_dependencies(database)
    dep
  end
end

#initObject



51
52
53
54
55
56
57
58
# File 'lib/pgbundle/definition.rb', line 51

def init
  ["database '#{database.name}', host: '#{database.host}', user: '#{database.user}', system_user: '#{database.system_user}', use_sudo: #{database.use_sudo}"] +
  database.current_definition.map do |r|
    name, version = r['name'], r['version']
    requires = r['requires'] ? ", requires: " + r['requires'].gsub(/[{},]/,{'{' => '%w(', '}' =>')', ','=> ' '}) : ''
    "pgx '#{name}', '#{version}'#{requires}"
  end
end

#installObject

installs missing extensions returns all successfully installed Extensions



24
25
26
27
28
29
30
31
# File 'lib/pgbundle/definition.rb', line 24

def install
  installed = missing_extensions.map do |dep|
    dep.install(database)
    dep
  end

  installed.select { |dep| dep.available?(database) }
end

#install!Object

installs all required extensions



34
35
36
37
38
39
40
41
# File 'lib/pgbundle/definition.rb', line 34

def install!
  installed = extensions.map do |_, dep|
    dep.install(database, true)
    dep
  end

  installed.select { |dep| dep.available?(database) }
end

links extension dependencies to each other



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/pgbundle/definition.rb', line 74

def link_dependencies
  extensions.each do |_, ex|
    undefined_dependencies = ex.dependencies.select { |k, v| v.source.nil? }.keys
    undefined_dependencies.each do |name|
      if extensions[name]
        ex.dependencies[name] = extensions[name]
      else
        ex.dependencies[name] = PgBundle::Extension.new(name)
      end
    end
  end
  self
end

#missing_extensionsObject

returns an Array of missing Extensions



12
13
14
15
# File 'lib/pgbundle/definition.rb', line 12

def missing_extensions
  link_dependencies
  extensions.select { |_, dep| !dep.available?(database) }.values
end