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
Constant Summary collapse
- @@did_send_deprecation_notice =
false
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
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.
12 13 14 15 |
# File 'lib/erb_sql_templates.rb', line 12 def initialize(dir, connection) @directory = dir @connection = connection end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
10 11 12 |
# File 'lib/erb_sql_templates.rb', line 10 def connection @connection end |
Instance Method Details
#execute(name, **data) ⇒ Object
17 18 19 20 |
# File 'lib/erb_sql_templates.rb', line 17 def execute(name, **data) sql = render(name, data) @connection.execute(sql) end |
#load_template(name) ⇒ Object
returns string of the template
49 50 51 52 |
# File 'lib/erb_sql_templates.rb', line 49 def load_template(name) filename = locate_template(name) File.read(filename) end |
#locate_template(name) ⇒ Object
Returns string of the filename
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/erb_sql_templates.rb', line 31 def locate_template(name) results = Dir.glob(@directory + "/#{name}.{erb.sql,sql.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.sql' in the directory '#{@directory}'.") else # Check if they are using old file extensions. Only do it once though. if @@did_send_deprecation_notice != true && results.first.match(/\.sql\.erb$/) @@did_send_deprecation_notice = true puts "Deprecation Notice: .sql.erb extensions for ERB SQL templates has been deprecated in favor of .erb.sql extensions." end return results.first end end |
#render(template_name, **data) ⇒ Object
Returns built sql
23 24 25 26 27 28 |
# File 'lib/erb_sql_templates.rb', line 23 def render(template_name, **data) scope = TemplateScope.new(self, 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 |