class Brainstem::DSL::Field

Attributes

conditionals[R]
name[R]
options[R]
type[R]

Public Class Methods

new(name, type, options) click to toggle source
# File lib/brainstem/dsl/field.rb, line 10
def initialize(name, type, options)
  @name = name.to_s
  @type = type.to_s
  @conditionals = [options[:if]].flatten.compact
  @options = options
end

Public Instance Methods

conditional?() click to toggle source
# File lib/brainstem/dsl/field.rb, line 21
def conditional?
  conditionals.length > 0
end
conditionals_match?(model, presenter_conditionals, helper_instance = Object.new, conditional_cache = { model: {}, request: {} }) click to toggle source
# File lib/brainstem/dsl/field.rb, line 70
def conditionals_match?(model, presenter_conditionals, helper_instance = Object.new, conditional_cache = { model: {}, request: {} })
  return true unless conditional?

  conditionals.all? { |conditional|
    presenter_conditionals[conditional].matches?(model, helper_instance, conditional_cache)
  }
end
description() click to toggle source
# File lib/brainstem/dsl/field.rb, line 17
def description
  options[:info].presence
end
evaluate_value_on(model, context, helper_instance = Object.new) click to toggle source
# File lib/brainstem/dsl/field.rb, line 46
def evaluate_value_on(model, context, helper_instance = Object.new)
  if options[:lookup]
    run_on_with_lookup(model, context, helper_instance)
  elsif options[:dynamic]
    proc = options[:dynamic]
    if proc.arity == 1
      helper_instance.instance_exec(model, &proc)
    else
      helper_instance.instance_exec(&proc)
    end
  else
    model.send(method_name)
  end
end
method_name() click to toggle source
# File lib/brainstem/dsl/field.rb, line 25
def method_name
  if options[:dynamic] || options[:lookup]
    nil
  else
    (options[:via].presence || name).to_s
  end
end
optional?() click to toggle source
# File lib/brainstem/dsl/field.rb, line 37
def optional?
  options[:optional]
end
optioned?(requested_optional_fields) click to toggle source
# File lib/brainstem/dsl/field.rb, line 33
def optioned?(requested_optional_fields)
  !optional? || requested_optional_fields.include?(@name)
end
presentable?(model, context) click to toggle source
# File lib/brainstem/dsl/field.rb, line 61
def presentable?(model, context)
  optioned?(context[:optional_fields]) && conditionals_match?(
    model,
    context[:conditionals],
    context[:helper_instance],
    context[:conditional_cache]
  )
end
run_on(model, context, helper_instance = Object.new) click to toggle source

Please override in sub classes to compute value of field with the given arguments.

# File lib/brainstem/dsl/field.rb, line 42
def run_on(model, context, helper_instance = Object.new)
  evaluate_value_on(model, context, helper_instance)
end

Private Instance Methods

key_for_lookup() click to toggle source
# File lib/brainstem/dsl/field.rb, line 80
def key_for_lookup
  :fields
end