Module: ViewSomething

Defined in:
lib/view_something.rb,
lib/view_something/version.rb

Constant Summary collapse

VERSION =
'0.0.1'

Class Method Summary collapse

Class Method Details

.ensure_view_exists(digest, sql) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/view_something.rb', line 18

def self.ensure_view_exists(digest, sql)
  unless has_known_view?(digest)
    connection_klass = ActiveRecord::Base.connection.class
    adapter = connection_klass.name.split('::')[-1]
    if ['SQLite3Adapter'].include?(adapter)
      ActiveRecord::Base.connection.execute "DROP VIEW IF EXISTS '#{digest}'"
      ActiveRecord::Base.connection.execute "CREATE VIEW '#{digest}' AS #{sql}"
    elsif ['MysqlAdapter', 'Mysql2Adapter'].include?(adapter)
      ActiveRecord::Base.connection.execute "CREATE OR REPLACE VIEW #{digest} AS #{sql}"
    else
      raise "Database type #{connection_klass.name} not supported by ViewSomething"
    end
  end
end

.has_known_view?(digest) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
10
# File 'lib/view_something.rb', line 7

def self.has_known_view?(digest)
  @known_views ||= []
  @known_views.include?(digest)
end

.view(query) ⇒ Object



12
13
14
15
16
# File 'lib/view_something.rb', line 12

def self.view(query)
  digest = Digest::MD5.hexdigest(sql = query.to_sql)
  ensure_view_exists(digest, sql)
  query.klass.find_by_sql "SELECT * FROM `#{digest}`;"
end