class Navigasmic::Builder::Base
Public Class Methods
new(context, name, options, &block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 16 def initialize(context, name, options, &block) @definition = block_given? ? block : Navigasmic.configuration.definitions[name] raise ArgumentError, "Missing block or configuration" unless @definition @context, @name, @options = context, name, options @config = configuration_or_default(@options.delete(:config)) remove_excluded_options(@options) end
Public Instance Methods
group(label = nil, options = {}, &block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 25 def group(label = nil, options = {}, &block) raise "Expected subclass to implement group" end
item(label = nil, *args, &block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 29 def item(label = nil, *args, &block) raise "Expected subclass to implement item" end
render()
click to toggle source
# File lib/navigasmic/core/builder.rb, line 33 def render raise "Expected subclass to implement render" end
Private Instance Methods
capture(&block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 49 def capture(&block) (block_given? ? @context.capture(self, &block) : nil).to_s.html_safe end
configuration_or_default(config = nil)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 39 def configuration_or_default(config = nil) configurations = Navigasmic.configuration.builder_configurations[self.class.to_s] proc = configurations.present? ? configurations[config || :default] : nil self.class::Configuration.new(&proc) end
determine_link(label, link)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 97 def determine_link(label, link) if link.blank? path_helper = "#{label.to_s.underscore.gsub(/\s/, '_')}_path" @context.send(path_helper) if @context.respond_to?(path_helper) elsif link.is_a?(Proc) eval_in_context(&link) elsif link.is_a?(String) link elsif link.is_a?(Hash) link else url_for(link) end end
eval_in_context(&block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 53 def eval_in_context(&block) @context.instance_eval(&block) end
extract_and_determine_link(label, options, *args)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 83 def extract_and_determine_link(label, options, *args) determine_link(label, extract_link(options, *args)) end
extract_link(options, *args)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 87 def extract_link(options, *args) if args.length == 1 args.delete_at(0) else hash = {controller: options.delete(:controller), action: options.delete(:action)} hash = options.delete(:link) || hash hash.select{ |key, value| value.present? } end end
flatten_and_eval_options(options)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 61 def flatten_and_eval_options(options) remove_excluded_options(options) options.inject({}) do |hash, (key, value)| if value.is_a?(Array) value = value.map{ |v| v.is_a?(Proc) ? eval_in_context(&v) : v } elsif value.is_a?(Proc) value = eval_in_context(&value) end hash.update(key => value) end end
method_missing(meth, *args, &block)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 57 def method_missing(meth, *args, &block) @context.send(meth, *args, &block) end
remove_excluded_options(options)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 45 def remove_excluded_options(options) @config.excluded_keys.each { |key| options.delete(key) } end
visible?(options)
click to toggle source
# File lib/navigasmic/core/builder.rb, line 73 def visible?(options) if options[:hidden_unless].nil? true elsif options[:hidden_unless].is_a?(Proc) eval_in_context(&options[:hidden_unless]) else options[:hidden_unless] end end