class Xpose::Exposed

Attributes

conf[RW]
instance[R]

Public Class Methods

new(**args) click to toggle source
# File lib/xpose/exposed.rb, line 5
def initialize(**args)
  @conf = ::Xpose::Configuration.new(args)
end

Public Instance Methods

decorated_value(instance) click to toggle source
# File lib/xpose/exposed.rb, line 14
def decorated_value(instance)
  @instance = instance
  @decorated_value ||=
    if value(instance) && conf.decorate
      ::Xpose::Decorated.new(conf.to_h).value(instance, value(instance))
    else
      nil
    end
end
exposed_value(instance) click to toggle source
# File lib/xpose/exposed.rb, line 24
def exposed_value(instance)
  decorated_value(instance) || value(instance)
end
value(instance) click to toggle source
# File lib/xpose/exposed.rb, line 9
def value(instance)
  @instance = instance
  @value ||= interpret_value
end

Private Instance Methods

class_exists?(class_name) click to toggle source
# File lib/xpose/exposed.rb, line 75
def class_exists?(class_name)
  Module.const_get(class_name).is_a?(Class)
rescue NameError
  return false
end
infer_collection() click to toggle source
# File lib/xpose/exposed.rb, line 44
def infer_collection
  conf.model.send(conf.scope)
end
infer_record() click to toggle source
# File lib/xpose/exposed.rb, line 56
def infer_record
  if instance.respond_to?(:params, true) && instance.params.has_key?(:id)
    record_source.find(instance.params[:id])
  else
    record_source.new(params)
  end
end
infer_value() click to toggle source
# File lib/xpose/exposed.rb, line 40
def infer_value
  conf.value == :collection ? infer_collection : infer_record
end
interpret_value() click to toggle source
# File lib/xpose/exposed.rb, line 32
def interpret_value
  if conf.value.respond_to?(:call)
    instance.instance_exec &conf.value
  else
    infer_value
  end
end
params() click to toggle source
# File lib/xpose/exposed.rb, line 64
def params
  return {} unless instance.respond_to?(:params)
  [
    "#{instance.params[:action]}_#{conf.singularized_name}_params",
    "#{conf.singularized_name}_params"
  ].each do |m|
    return instance.send(m) if instance.respond_to?(m, true)
  end
  {}
end
record_source() click to toggle source
# File lib/xpose/exposed.rb, line 48
def record_source
  if instance.respond_to?(conf.pluralized_name)
    instance.class.exposed[conf.pluralized_name.to_sym].value(instance)
  else
    conf.model.send(conf.scope)
  end
end