Class: Tobias::Container

Inherits:
Object
  • Object
show all
Defined in:
lib/tobias/container.rb

Defined Under Namespace

Modules: DefaultHelpers

Instance Method Summary collapse

Constructor Details

#initialize(code, database) ⇒ Container

Returns a new instance of Container.



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/tobias/container.rb', line 7

def initialize(code, database)
  @code = code
  @database = database
  @queries = Concurrent::Hash.new
  @sql = Concurrent::Hash.new
  @options = Concurrent::Hash.new
  @setup = Proc.new { }
  @teardown = Proc.new { }
  @load_data = Proc.new { }
  @helpers = Module.new

  eval(code, binding, __FILE__, __LINE__)
end

Instance Method Details

#helpers(&block) ⇒ Object



71
72
73
# File 'lib/tobias/container.rb', line 71

def helpers(&block)
  @helpers.class_eval(&block) if block_given?
end

#load_data(&block) ⇒ Object



83
84
85
# File 'lib/tobias/container.rb', line 83

def load_data(&block)
  @load_data = block
end

#option(name, default = nil, &block) ⇒ Object



67
68
69
# File 'lib/tobias/container.rb', line 67

def option(name, default = nil, &block)
  @options[name] = block || default
end

#optionsObject



48
49
50
# File 'lib/tobias/container.rb', line 48

def options
  Struct.new(*@options.keys).new(*@options.values)
end

#queriesObject



63
64
65
# File 'lib/tobias/container.rb', line 63

def queries
  @queries
end

#query(name, sql = nil, &block) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/tobias/container.rb', line 87

def query(name, sql = nil, &block)
  if sql.is_a?(String)
    @queries[name] = Proc.new { sql }
  else
    @queries[name] = block || Proc.new { raise "No SQL provided for query '#{name}'" }
  end
end

#run_action(action) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/tobias/container.rb', line 52

def run_action(action)
  helpers = @helpers

  class_eval do
    include DefaultHelpers
    include helpers
  end

  instance_eval(&action)
end

#run_query(query) ⇒ Object



40
41
42
# File 'lib/tobias/container.rb', line 40

def run_query(query)
  @database.run(run_action(query).sql)
end

#run_setupObject



35
36
37
38
# File 'lib/tobias/container.rb', line 35

def run_setup
  @database.run("CREATE EXTENSION IF NOT EXISTS pg_stat_statements")
  run_action(@setup)
end

#run_teardownObject



44
45
46
# File 'lib/tobias/container.rb', line 44

def run_teardown
  run_action(@teardown)
end

#setup(&block) ⇒ Object



75
76
77
# File 'lib/tobias/container.rb', line 75

def setup(&block)
  @setup = block
end

#teardown(&block) ⇒ Object



79
80
81
# File 'lib/tobias/container.rb', line 79

def teardown(&block)
  @teardown = block
end