Module: Dome::ControllerClassMethods
- Defined in:
- lib/dome/controller_class_methods.rb
Instance Method Summary collapse
-
#exhibit(*names, by: nil) ⇒ Object
exhibit(:one) exhibit(:one, :two, by: SomeEx).
-
#exhibit_enum(*names, by: nil) ⇒ Object
(also: #exhibit_enums)
exhibit_enum(:ones) exhibit_enum(:ones, :twos, by: SomeEx).
-
#present(pairs, *vals) ⇒ Object
present(pair: [:one, :two], …).
-
#view_model(name, &block) ⇒ Object
TODO: view_models view_model(:dashboard) { UnitDashboard.new(@meeting) }.
Instance Method Details
#exhibit(*names, by: nil) ⇒ Object
exhibit(:one) exhibit(:one, :two, by: SomeEx)
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/dome/controller_class_methods.rb', line 69 def exhibit(*names, by: nil) names.each do |name| klass = by || begin class_name = "#{name.to_s.camelize}Exhibit" klass = class_name.safe_constantize klass || raise( Dome::ExhibitClassNotFound, "Exhibit class '#{class_name}' for '#{name}' not found." ) end define_method name do instance_variable_get("@dome_#{name}_exhibit") || begin exhibited = klass.new(instance_variable_get("@#{name}")) exhibited.instance_variable_set("@view_context", self) instance_variable_set("@dome_#{name}_exhibit", exhibited) end end _helpers.send :define_method, name do instance_variable_get("@dome_#{name}_exhibit") || begin exhibited = klass.new(instance_variable_get("@#{name}")) exhibited.instance_variable_set("@view_context", self) instance_variable_set("@dome_#{name}_exhibit", exhibited) end end end end |
#exhibit_enum(*names, by: nil) ⇒ Object Also known as: exhibit_enums
exhibit_enum(:ones) exhibit_enum(:ones, :twos, by: SomeEx)
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/dome/controller_class_methods.rb', line 99 def exhibit_enum(*names, by: nil) names.each do |name| klass = by || begin class_name = "#{name.to_s.singularize.camelize}Exhibit" klass = class_name.safe_constantize klass || raise( Dome::ExhibitClassNotFound, "Exhibit class '#{class_name}' for '#{name}' not found." ) end define_method name do instance_variable_get("@dome_#{name}_exhibit") || begin enum = instance_variable_get("@#{name}").to_a.map do |x| exhibited = klass.new(x) exhibited.instance_variable_set("@view_context", self) exhibited end instance_variable_set("@dome_#{name}_exhibit", enum) end end _helpers.send :define_method, name do instance_variable_get("@dome_#{name}_exhibit") || begin enum = instance_variable_get("@#{name}").to_a.map do |x| exhibited = klass.new(x) exhibited.instance_variable_set("@view_context", self) exhibited end instance_variable_set("@dome_#{name}_exhibit", enum) end end end end |
#present(pairs, *vals) ⇒ Object
present(pair: [:one, :two], …)
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/dome/controller_class_methods.rb', line 39 def present(pairs, *vals) pairs.each do |name, var_names| class_name = "#{name.to_s.camelize}Presenter" klass = class_name.safe_constantize klass || raise( Dome::ExhibitClassNotFound, "Exhibit class '#{class_name}' for '#{name}' not found." ) define_method name do instance_variable_get("@dome_#{name}_presenter") || begin things = var_names.map { |x| instance_variable_get("@#{x}") } presented = klass.new(*things) presented.instance_variable_set("@view_context", self) instance_variable_set("@dome_#{name}_presenter", presented) end end _helpers.send :define_method, name do instance_variable_get("@dome_#{name}_presenter") || begin things = var_names.map { |x| instance_variable_get("@#{x}") } presented = klass.new(*things) presented.instance_variable_set("@view_context", self) instance_variable_set("@dome_#{name}_presenter", presented) end end end end |
#view_model(name, &block) ⇒ Object
TODO: view_models view_model(:dashboard) { UnitDashboard.new(@meeting) }
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/dome/controller_class_methods.rb', line 12 def view_model(name, &block) if block_given? define_method name do instance_variable_get("@#{name}") || begin view_model = self.instance_eval &block view_model.instance_variable_set("@view_context", self) instance_variable_set("@#{name}", view_model) end end _helpers.send :define_method, name do instance_variable_get("@#{name}") || begin view_model = self.instance_eval &block view_model.instance_variable_set("@view_context", self) instance_variable_set("@#{name}", view_model) end end else define_method name do instance_variable_get("@#{name}") end _helpers.send :define_method, name do instance_variable_get("@#{name}") end end end |