Class: Listable::ViewManager
- Inherits:
-
Object
- Object
- Listable::ViewManager
- Defined in:
- lib/listable/view_manager.rb
Class Method Summary collapse
- .add_listable(view_name, model_name, model_scope_name) ⇒ Object
- .create_views ⇒ Object
- .drop_views ⇒ Object
- .listable_view?(name) ⇒ Boolean
- .listables ⇒ Object
- .prefix ⇒ Object
- .prefixed_view_name(name) ⇒ Object
Class Method Details
.add_listable(view_name, model_name, model_scope_name) ⇒ Object
17 18 19 20 21 |
# File 'lib/listable/view_manager.rb', line 17 def add_listable(view_name, model_name, model_scope_name) @@listables ||= {} @@listables[view_name] ||= {} @@listables[view_name][model_name] = model_scope_name end |
.create_views ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/listable/view_manager.rb', line 27 def create_views return if listables.nil? ActiveRecord::Base.transaction do drop_views # First drop all listable views to get a fresh start listables.each do |view_name, query_info| queries = [] view_name = prefixed_view_name(view_name.to_s) # Appending a prefix to views query_info.each do |model_name, scope| model_class = Kernel.const_get(model_name) query = model_class.select_as(id: :listable_id) # Always begin selection with the original model ID query = query.send(scope) # Appends selection from scope query = query.select([:created_at, :updated_at]) # Include Rails' timestamps in view query = query.select("CAST('#{model_name}' AS char(#{model_name.length})) AS listable_type") # Finish with the original model name, needed for the polymorphic relation queries << query end ActiveRecord::Base.connection.create_view view_name, queries end end end |
.drop_views ⇒ Object
48 49 50 51 52 |
# File 'lib/listable/view_manager.rb', line 48 def drop_views ActiveRecord::Base.connection.views.each do |name| ActiveRecord::Base.connection.drop_view(name) if listable_view? name end end |
.listable_view?(name) ⇒ Boolean
23 24 25 |
# File 'lib/listable/view_manager.rb', line 23 def listable_view?(name) name.start_with? prefix end |
.listables ⇒ Object
13 14 15 |
# File 'lib/listable/view_manager.rb', line 13 def listables @@listables end |
.prefix ⇒ Object
9 10 11 |
# File 'lib/listable/view_manager.rb', line 9 def prefix 'lstble_' end |
.prefixed_view_name(name) ⇒ Object
5 6 7 |
# File 'lib/listable/view_manager.rb', line 5 def prefixed_view_name(name) prefix << name.underscore.pluralize end |