Class: Predefined::Query

Inherits:
Object
  • Object
show all
Includes:
AdapterInterface
Defined in:
lib/predefined/query.rb

Direct Known Subclasses

ActiveRecordQuery, SequelQuery

Defined Under Namespace

Classes: Error, MissingTemplateError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AdapterInterface

#select_all, #select_object, #select_objects, #select_one, #select_rows, #select_value, #select_values, #to_sql

Constructor Details

#initialize(name, options = {}) ⇒ Query

Returns a new instance of Query.



49
50
51
52
# File 'lib/predefined/query.rb', line 49

def initialize(name, options={})
  @name = name
  @options = options
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/predefined/query.rb', line 9

def name
  @name
end

Class Method Details

.format_query(sql) ⇒ Object



45
46
47
# File 'lib/predefined/query.rb', line 45

def self.format_query(sql)
  sql.to_s.split(/\n/).map(&:strip).join(' ')
end

.template(name) ⇒ Object



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

def self.template(name)
  @template ||= begin
    template_paths.each do |path|
      file = template_file(path, name)
      if File.exists?(file)
        return format_query(File.read(file))
      end
    end
    template_missing(name)
  end
end

.template_file(path, name) ⇒ Object



37
38
39
# File 'lib/predefined/query.rb', line 37

def self.template_file(path, name)
  File.join(path, "#{name}.sql")
end

.template_missing(name) ⇒ Object



41
42
43
# File 'lib/predefined/query.rb', line 41

def self.template_missing(name)
  raise MissingTemplateError.new("Could not find template for query #{name.inspect} in #{template_paths.inspect}")
end

.template_pathsObject



11
12
13
14
15
16
17
18
19
# File 'lib/predefined/query.rb', line 11

def self.template_paths
  if defined? @template_paths
    @template_paths
  elsif superclass.respond_to?(:template_paths)
    superclass.template_paths
  else
    @template_paths ||= []
  end
end

.template_paths=(paths) ⇒ Object



21
22
23
# File 'lib/predefined/query.rb', line 21

def self.template_paths=(paths)
  @template_paths = Array(paths)
end

Instance Method Details

#templateObject



54
55
56
# File 'lib/predefined/query.rb', line 54

def template
  self.class.template(name)
end