class Databound::Data

Public Class Methods

new(controller, json, model) click to toggle source
# File lib/databound/data.rb, line 3
def initialize(controller, json, model)
  return unless json

  @controller = controller
  @json = json
  @data = interpolated_params
  @model = model
end

Public Instance Methods

records() click to toggle source
# File lib/databound/data.rb, line 12
def records
  @model.where(@data)
end
to_h() click to toggle source
# File lib/databound/data.rb, line 16
def to_h
  @data || {}
end

Private Instance Methods

check_strict!(key, val) click to toggle source
# File lib/databound/data.rb, line 45
def check_strict!(key, val)
  return unless dsl_key(key)
  return unless strict?(key) and !dsl_block(key, val)

  raise NotPermittedError, "DSL column '#{key}' received unmatched string '#{val}'." \
    " Use 'strict: false' in DSL definition to allow everything."
end
dsl_block(key, val) click to toggle source
# File lib/databound/data.rb, line 37
def dsl_block(key, val)
  swallow_nil { dsl_key(key)[val.to_s] }
end
dsl_key(key) click to toggle source
# File lib/databound/data.rb, line 41
def dsl_key(key)
  swallow_nil { @controller.databound_config.read(:dsls)[key] }
end
interpolated_params() click to toggle source
# File lib/databound/data.rb, line 28
def interpolated_params
  params.to_h.each_with_object({}) do |(key, val), obj|
    check_strict!(key, val)

    block = dsl_block(key, val)
    obj[key] = block ? @controller.instance_exec(params, &block) : val
  end
end
params() click to toggle source
# File lib/databound/data.rb, line 22
def params
  @params ||= JSON.parse(@json) if @json.is_a?(String)
  @params ||= @json if @json.is_a?(Hash)
  OpenStruct.new(@params)
end
strict?(key) click to toggle source
# File lib/databound/data.rb, line 53
def strict?(key)
  swallow_nil { @controller.databound_config.read(:stricts)[key] }
end