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
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 |