Module: GSectionedShower::ViewHelpers
- Defined in:
- lib/g_sectioned_shower/view_helpers.rb
Instance Method Summary collapse
-
#g_sectioned_shower(ar_obj, *args) ⇒ Object
GUIlded component.
Instance Method Details
#g_sectioned_shower(ar_obj, *args) ⇒ Object
GUIlded component.
parameters
- ar_obj
-
The ActiveRecord object containing the information.
options
- id
-
(required) The id of the element. Must be unique on the page.
- class
- title_attr
-
The attribute to use in the title.
- title_pre
-
A string to override the first part of the title. defaults to the name
of the active record object's class.
- date_format
-
A symbol representing the date format to use. Defaults to :default.
- attributes
-
A list of attributes to include in the main section.
- status
-
True to include a status section.
- namespace
-
A namespace to append onto all path helpers that are not overridden.
- sections
- title
-
The title for this section.
- attributes
-
List of attibutes to include in this section.
- associated_attribute_name_attributes
-
List of attributes from associated attribute to include.
- associated_attribute_name_max
-
The max number of associated records to show. This will load
all and display max unless you define a limited named scope on the respective model, allowing the association to be limited to the max, not returning items that will not be displayed.
- links
-
A list of fields or field => path_helper to generate links to this item in the associated
object.
- list_link
-
(Boolean, string, or symbol)
30 31 32 33 34 35 36 37 38 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 66 67 68 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/g_sectioned_shower/view_helpers.rb', line 30 def g_sectioned_shower( ar_obj, *args ) = args. raise ArgumentError, "'title_attr' option required" unless .include?( :title_attr ) raise ArgumentError, "'sections' option required" unless .include?( :sections ) .merge! :class => "shower" unless .include?( :class ) .merge! :exclude_css => true, :exclude_js => true Guilded::Guilder.instance.add( :sectioned_shower, ) html = "" html << "<div class=\"status #{[:status]}\">#{[:status].to_s.humanize}</div>" if [:status] title_pre = [:title_pre] || "#{ar_obj.class.to_s.underscore.humanize} |" html << "<h2>#{title_pre} #{ar_obj.send( [:title_attr].to_sym )}</h2>" # Resolve sections and meta data there-in sections = [:sections] reflections = ar_obj.class.inheritable_attributes[:reflections] # Resolve main section main_section = sections[0] raise ArgumentError, "'attributes' option required within main section configuration" unless main_section.include?( :attributes ) methods, titles = Guilded::Rails::Helpers.resolve_field_methods_and_titles( main_section[:attributes], ar_obj ) html << "<div class=\"infoItem tableDisplay\"><dl>" methods.each_with_index do |method, i| # Handle associative relationships if !reflections.nil? && reflections.has_key?( method.to_sym ) handle_associated( html, ar_obj, main_section, reflections, methods, i ) else # Normal attribute from this model html << "<dt>#{titles[i]}</dt>" translate_method = "translate_#{method}".to_sym val = ar_obj.send( method ) if respond_to?( translate_method ) html << "<dd>#{h( send( translate_method, val ) )}</dd>" else val = val.to_formatted_s( [:date_format] || :default ) if val.respond_to?( :to_formatted_s ) html << "<dd>#{h( val )}</dd>" end end end html << "</dl><div class=\"clear\"></div></div>" # Get rid of the main section as it was already handled sections.delete_at( 0 ) # Resolve other sections sections.each do |section| raise ArgumentError, "'attributes' option required within main section configuration" unless section.include?( :attributes ) raise ArgumentError, "'title' option required within all section configurations except the main section" unless section.include?( :title ) methods, titles = Guilded::Rails::Helpers.resolve_field_methods_and_titles( section[:attributes], ar_obj ) html << "<div class=\"infoItem tableDisplay\"><h3>#{section[:title]}</h3><dl>" methods.each_with_index do |method, i| # Handle associative relationships if !reflections.nil? && reflections.has_key?( method.to_sym ) handle_associated( html, ar_obj, section, reflections, methods, i ) else # Normal attribute from this model html << "<dt>#{titles[i]}</dt>" translate_method = "translate_#{method}".to_sym val = ar_obj.send( method ) if respond_to?( translate_method ) "<dd>#{h( send( translate_method, val ) )}</dd>" else html << "<dd>#{h( val )}</dd>" end end end html << "</dl><div class=\"clear\"></div></div>" end html end |