Class: Dumbo::Extension

Inherits:
Object
  • Object
show all
Defined in:
lib/dumbo/extension.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = nil, version = nil) ⇒ Extension

Returns a new instance of Extension.



4
5
6
7
# File 'lib/dumbo/extension.rb', line 4

def initialize(name = nil, version = nil)
  @name = name || File.read('Makefile')[/EXTENSION *= *([^\s]*)/,1]
  @version = version || File.read("#{self.name}.control")[/default_version *= *'([^']*)'/,1]
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/dumbo/extension.rb', line 3

def name
  @name
end

#versionObject (readonly)

Returns the value of attribute version.



3
4
5
# File 'lib/dumbo/extension.rb', line 3

def version
  @version
end

Instance Method Details

#available_versionsObject



14
15
16
17
# File 'lib/dumbo/extension.rb', line 14

def available_versions
  versions = releases.map{|f| ExtensionVersion.new f[/#{name}--([\d\.]*?)\.sql/,1] }
  versions.sort
end

#castsObject



58
59
60
# File 'lib/dumbo/extension.rb', line 58

def casts
  objects.select{|o| o.kind_of?(Cast)}
end

#functionsObject



54
55
56
# File 'lib/dumbo/extension.rb', line 54

def functions
  objects.select{|o| o.kind_of?(Function)}
end

#installObject



19
20
21
22
23
# File 'lib/dumbo/extension.rb', line 19

def install
  execute "DROP EXTENSION IF EXISTS #{name}"
  execute "CREATE EXTENSION #{name} VERSION '#{version}'"
  self
end

#obj_idObject



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dumbo/extension.rb', line 25

def obj_id
  @obj_id ||= begin
    result = execute "      SELECT e.extname, e.oid\n      FROM pg_catalog.pg_extension e\n      WHERE e.extname ~ '^(\#{name})$'\n      ORDER BY 1;\n    sql\n    result.first['oid']\n  end\nend\n"

#objectsObject



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/dumbo/extension.rb', line 37

def objects
  @objects ||= begin
    result = execute "      SELECT classid::pg_catalog.regclass, objid\n      FROM pg_catalog.pg_depend\n      WHERE refclassid = 'pg_catalog.pg_extension'::pg_catalog.regclass AND refobjid = '\#{obj_id}' AND deptype = 'e'\n      ORDER BY 1;\n    SQL\n\n    result.map{|r| PgObject.new(r['objid']).get(r['classid'])}\n  end\nend\n"

#operatorsObject



62
63
64
# File 'lib/dumbo/extension.rb', line 62

def operators
  objects.select{|o| o.kind_of?(Operator)}
end

#releasesObject

main releases without migrations



10
11
12
# File 'lib/dumbo/extension.rb', line 10

def releases
  Dir.glob("#{name}--*.sql").reject{|f| f=~/\d--\d/}
end

#typesObject



50
51
52
# File 'lib/dumbo/extension.rb', line 50

def types
  objects.select{|o| o.kind_of?(Type)}
end