Class: ErbSqlTemplates
- Inherits:
-
Object
- Object
- ErbSqlTemplates
- Defined in:
- lib/erb_sql_templates.rb
Overview
Name template files as some_query.sql.erb – Use <%= h my_var %> - h helper will sanitize est = ErbSqlTemplates.new(Rails.root.to_s + ‘/db/sql’, ActiveRecord::Base.connection) est.execute(:some_sql, :my_var => ‘Foo!’) sql = est.render(:some_sql, :my_var => ‘Foo!’)
Defined Under Namespace
Classes: TemplateScope
Instance Method Summary collapse
- #execute(name, **data) ⇒ Object
-
#initialize(dir, connection) ⇒ ErbSqlTemplates
constructor
A new instance of ErbSqlTemplates.
-
#load_template(name) ⇒ Object
returns string of the template.
-
#locate_template(name) ⇒ Object
Returns string of the filename.
-
#render(template_name, **data) ⇒ Object
Returns built sql.
Constructor Details
#initialize(dir, connection) ⇒ ErbSqlTemplates
Returns a new instance of ErbSqlTemplates.
11 12 13 14 |
# File 'lib/erb_sql_templates.rb', line 11 def initialize(dir, connection) @directory = dir @connection = connection end |
Instance Method Details
#execute(name, **data) ⇒ Object
16 17 18 19 |
# File 'lib/erb_sql_templates.rb', line 16 def execute(name, **data) sql = render(name, data) @connection.execute(sql) end |
#load_template(name) ⇒ Object
returns string of the template
42 43 44 45 |
# File 'lib/erb_sql_templates.rb', line 42 def load_template(name) filename = locate_template(name) File.read(filename) end |
#locate_template(name) ⇒ Object
Returns string of the filename
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/erb_sql_templates.rb', line 30 def locate_template(name) results = Dir.glob(@directory + "/#{name}.{sql.erb,erb}") if results.length > 1 raise Exception.new("Too many templates have the name '#{name}'. ") elsif results.length == 0 raise Exception.new("Cannot find template '#{name}.erb' or '#{name}.sql.erb' in the directory '#{@directory}'.") else return results.first end end |
#render(template_name, **data) ⇒ Object
Returns built sql
22 23 24 25 26 27 |
# File 'lib/erb_sql_templates.rb', line 22 def render(template_name, **data) scope = TemplateScope.new(@connection, data) erb_string = load_template(template_name) renderer = ERB.new(erb_string, 0, '>') # thread level zero, and '>' means no new lines for <%= %> return renderer.result(scope.get_binding) end |