module SlideHero::Pluggable

Public Instance Methods

class_name_to_method_name(class_name) click to toggle source
# File lib/slide_hero/pluggable.rb, line 16
def class_name_to_method_name(class_name)
  class_name.split("::")[-1].
    gsub(/([A-Z]\w*)([A-Z]\w*)/, '\1_\2').
    downcase
end
create_plugs_for(*klasses) click to toggle source
# File lib/slide_hero/pluggable.rb, line 3
def create_plugs_for(*klasses)
  klasses.each do |klass|
    method_name = class_name_to_method_name(klass.name)
    fields = initialization_fields_from_class(klass)

    module_eval %{
      def #{method_name}(#{fields})
        points << #{klass}.new(#{fields}).compile
      end
    }
  end
end
initialization_fields_from_class(klass) click to toggle source
# File lib/slide_hero/pluggable.rb, line 22
def initialization_fields_from_class(klass)
  fields = []
  arguments = klass.instance_method(:initialize).parameters.to_h
  fields << "*args" if arguments.has_key?(:req) || arguments.has_key?(:opt)
  fields << "**kwargs" if arguments.has_key?(:key)
  fields << "&block" if arguments.has_key?(:block)
  fields.join(",")
end