Sha256: e1569f10c3d0ac207cf4d19afab7cf3485ff6b4ab86c636678eb02fd8f46b91f
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
module Presentation extend ActiveSupport::Concern included do define_method :present do |obj, *args| klass = presenter_klass(obj, args) presenter = create_presenter(klass, obj, self, args) set_instance_variable(klass, self, presenter, obj) presenter end define_method :present_many do |objs, *args| klass = presenter_klass(objs.first, args) presenters = create_many_presenters(klass, objs, self, args) set_instance_variable(klass, self, presenters, objs, true) presenters end end private def create_presenter(klass, obj, source, args) presenter = klass.new(obj, *args) presenter.presenting_object = source presenter end def create_many_presenters(klass, objs, source, args) objs.map { |o| create_presenter(klass, o, source, args) } end def set_instance_variable(klass, source, value, obj, pluralize = false) var_name = "@#{klass.to_s.underscore}#{"s" if pluralize}".to_sym source.instance_variable_set(var_name, value) end def presenter_klass(obj, args) return args.shift if args[0].kind_of?(Class) klass_name = "#{obj.class}Presenter" begin return klass_name.constantize rescue NameError raise PresentFoo::Errors::PresenterNotFound.new("Could not find a presenter for #{obj.class}, looked for #{class_name}.") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
present_foo-0.1.0 | lib/present_foo/presentation.rb |