module Glipper::Descedants::ClassMethods

Public Instance Methods

decorates(*object_classes) click to toggle source
# File lib/glipper/descedants.rb, line 65
def decorates(*object_classes)
  @object_classes = object_classes
end
descendant_file_mask() click to toggle source
# File lib/glipper/descedants.rb, line 57
def descendant_file_mask
  '*_glipper.rb'
end
descendant_files() click to toggle source
# File lib/glipper/descedants.rb, line 45
def descendant_files
  Dir[descendant_path]
end
descendant_folder_name() click to toggle source
# File lib/glipper/descedants.rb, line 53
def descendant_folder_name
  'glippers'
end
descendant_path() click to toggle source
# File lib/glipper/descedants.rb, line 61
def descendant_path
  descendant_root.join('**', descendant_file_mask)
end
descendant_root() click to toggle source
# File lib/glipper/descedants.rb, line 49
def descendant_root
  engine_root.join('app', descendant_folder_name)
end
descendants() click to toggle source
# File lib/glipper/descedants.rb, line 6
def descendants
  descendant_files
    .map { |i| Pathname.new(i).relative_path_from(descendant_root) }
    .map(&:to_s)
    .map { |i| i.gsub(/\.rb\z/, '') }
    .map(&:classify)
    .map(&:constantize)
    .select { |k| k < self } + [self]
end
descendants_with_targets() click to toggle source
# File lib/glipper/descedants.rb, line 16
def descendants_with_targets
  result = []

  self.descendants.each do |d|
    d.object_classes.each do |object_class|
      result.push [object_class, d]
    end
  end

  Hash[result]
end
engine_root() click to toggle source
# File lib/glipper/descedants.rb, line 41
def engine_root
  Rails.root
end
find_drapper_for(resource) click to toggle source
# File lib/glipper/descedants.rb, line 28
def find_drapper_for(resource)
  object_klasses = ->(klass) {
    return [klass] if self.root_classes.include? klass
    Array.wrap(klass) + object_klasses[klass.superclass]
  }
  key = object_klasses[resource.class].find { |klass| self.descendants_with_targets.key?(klass) }
  self.descendants_with_targets[key]
end
object_classes() click to toggle source
# File lib/glipper/descedants.rb, line 69
def object_classes
  @object_classes
end
root_classes() click to toggle source
# File lib/glipper/descedants.rb, line 37
def root_classes
  [ActiveRecord::Base, ActiveRecord::Relation, Array]
end