class Grapple::Components::BaseComponent

Base class for components

Attributes

builder[R]
columns[R]
params[R]
records[R]
template[R]

Public Class Methods

new(columns, records, template, params, builder, settings = {}) click to toggle source
# File lib/grapple/components/base_component.rb, line 22
def initialize(columns, records, template, params, builder, settings = {})
        @template = template
        @columns = columns
        @records = records
        @params = params
        @builder = builder
        merge_settings(settings).each do |name, value|
                self.send(:"#{name}=", value)
        end
end
setting(name, default = nil) click to toggle source
# File lib/grapple/components/base_component.rb, line 10
def self.setting(name, default = nil)
        attr_accessor(name)
        @@default_settings[self.name] = {} unless @@default_settings.has_key?(self.name)
        @@default_settings[self.name][name] = default
end

Public Instance Methods

render(*options, &block) click to toggle source
# File lib/grapple/components/base_component.rb, line 33
def render(*options, &block)
        raise StandardError.new("Component must override render method")
end

Protected Instance Methods

block_or_components(components, options, &block) click to toggle source

Renders a block if present, otherwise renders the components with options

# File lib/grapple/components/base_component.rb, line 81
def block_or_components(components, options, &block)
        block.nil? ? render_components(components, options, &block).join : capture_block(&block)
end
capture_block(default = '', &block) click to toggle source
# File lib/grapple/components/base_component.rb, line 75
def capture_block(default = '', &block)
        return default if block.nil?
        template.with_output_buffer(&block).html_safe
end
merge_settings(settings) click to toggle source

TODO: this is all pretty hacky

# File lib/grapple/components/base_component.rb, line 40
def merge_settings(settings)
        result = {}
        klass = self.class
        while klass && klass.name != 'BaseComponent'
                if @@default_settings[klass.name]
                        @@default_settings[klass.name].each do |name, value|
                                result[name] = value
                        end
                end
                klass = klass.superclass
        end

        settings.each do |name, value|
                result[name] = value
        end
        result
end
num_columns() click to toggle source

Number of columns in the table

# File lib/grapple/components/base_component.rb, line 71
def num_columns
        @columns.length
end
render_components(components, options, &block) click to toggle source

Render an array of components

# File lib/grapple/components/base_component.rb, line 86
def render_components(components, options, &block)
        html = []
        components.each do |component|
                if component == :body
                        html << capture_block(&block)
                elsif options[component] === false
                        next
                else
                        args = options[component] || []
                        html << self.builder.send(component, *args)
                end
        end
        html
end
t(*args) click to toggle source

Shortcut for translations Won’t try to translate strings, just symbols

# File lib/grapple/components/base_component.rb, line 60
def t(*args)
        # Don't translate strings
        return args[0] if args.length == 1 && args[0].kind_of?(String)
        begin
                return template.t(*args) if template.method_defined?(:t)
        ensure
                return I18n.translate(*args)
        end
end
url_parameter(param) click to toggle source

Returns a url parameter in the namespaced format

# File lib/grapple/components/base_component.rb, line 102
def url_parameter(param)
        @builder.namespace ? @builder.namespace + '[' + param.to_s + ']' : param.to_s
end