Sha256: e0d7305ebc19e335296d4440f766a8c23161403d85334ef90a309ee2dadd9b18
Contents?: true
Size: 1.97 KB
Versions: 1
Compression:
Stored size: 1.97 KB
Contents
module MotionPrime module ScreenSectionsMixin extend ::MotionSupport::Concern include HasClassFactory include HasNormalizer def self.included(base) base.class_attribute :_section_options end attr_accessor :_action_section_options def main_section @main_section || all_sections.first end def all_sections Array.wrap(@sections.try(:values)) end def set_section(name, options = {}) self._action_section_options ||= {} self._action_section_options[name.to_sym] = options end alias_method :section, :set_section protected def add_sections @main_section ||= nil create_sections render_sections end def create_sections section_options = self.class.section_options.merge(action_section_options) return unless section_options @sections = {} section_options.map do |name, options| section = create_section(name, options.clone) @sections[name] = section if section end end def create_section(name, options) section_class = class_factory("#{name}_section") options = normalize_options(options).merge(screen: self) !options.has_key?(:if) || options[:if] ? section_class.new(options) : nil end def action_section_options _action_section_options || {} end def render_sections return unless @sections.present? if all_sections.count > 1 @main_section = MotionPrime::TableSection.new(model: all_sections, screen: self) @main_section.render else all_sections.first.render end end module ClassMethods def section_options _section_options || {} end def section(name, options = {}) self._section_options ||= {} self._section_options[name.to_sym] = options define_method name do @sections[name] end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
motion-prime-0.9.4 | motion-prime/screens/_sections_mixin.rb |