Class: Tobias::Container
- Inherits:
-
Object
- Object
- Tobias::Container
- Defined in:
- lib/tobias/container.rb
Defined Under Namespace
Modules: DefaultHelpers
Instance Method Summary collapse
- #helpers(&block) ⇒ Object
-
#initialize(code, database) ⇒ Container
constructor
A new instance of Container.
- #load_data(&block) ⇒ Object
- #option(name, default = nil, &block) ⇒ Object
- #options ⇒ Object
- #queries ⇒ Object
- #query(name, sql = nil, &block) ⇒ Object
- #run_action(action) ⇒ Object
- #run_query(query) ⇒ Object
- #run_setup ⇒ Object
- #run_teardown ⇒ Object
- #setup(&block) ⇒ Object
- #teardown(&block) ⇒ Object
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 |
#options ⇒ Object
48 49 50 |
# File 'lib/tobias/container.rb', line 48 def Struct.new(*@options.keys).new(*@options.values) end |
#queries ⇒ Object
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_setup ⇒ Object
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_teardown ⇒ Object
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 |