class HaveAPI::Parameters::Resource
Attributes
choices[R]
desc[R]
label[R]
name[R]
resource[R]
type[R]
value_id[R]
value_label[R]
value_params[R]
Public Class Methods
new(resource, name: nil, label: nil, desc: nil, choices: nil, value_id: :id, value_label: :label, required: nil, db_name: nil, fetch: nil)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 6 def initialize(resource, name: nil, label: nil, desc: nil, choices: nil, value_id: :id, value_label: :label, required: nil, db_name: nil, fetch: nil) @resource = resource @resource_path = build_resource_path(resource) @name = name || resource.resource_name.underscore.to_sym @label = label || (name && name.to_s.capitalize) || resource.resource_name @desc = desc @choices = choices || @resource::Index @value_id = value_id @value_label = value_label @required = required @db_name = db_name @extra = { fetch: } end
Public Instance Methods
clean(raw)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 94 def clean(raw) ::HaveAPI::ModelAdapter.for( show_action.input.layout, @resource.model ).input_clean(@resource.model, raw, @extra) end
db_name()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 24 def db_name @db_name || @name end
describe(context)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 44 def describe(context) val_path = context.path_for( @resource::Show, context.endpoint && context.action_prepare && context.layout == :object && context.call_path_params(context.action, context.action_prepare) ) val_method = @resource::Index.http_method.to_s.upcase choices_path = context.path_for( @choices, context.endpoint && context.layout == :object && context.call_path_params(context.action, context.action_prepare) ) choices_method = @choices.http_method.to_s.upcase { required: required?, label: @label, description: @desc, type: 'Resource', resource: @resource_path, value_id: @value_id, value_label: @value_label, value: context.action_prepare && { path: val_path, method: val_method, help: "#{val_path}?method=#{val_method}" }, choices: { path: choices_path, method: choices_method, help: "#{choices_path}?method=#{choices_method}" } } end
format_output(v)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 104 def format_output(v) v end
optional?()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 32 def optional? !@required end
patch(attrs)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 90 def patch(attrs) attrs.each { |k, v| instance_variable_set("@#{k}", v) } end
required?()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 28 def required? @required end
show_action()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 36 def show_action @resource::Show end
show_index()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 40 def show_index @resource::Index end
validate(v, params)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 100 def validate(v, params) true end
validate_build_output()
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 78 def validate_build_output %i[value_id value_label].each do |name| v = instance_variable_get("@#{name}") [show_action, show_index].each do |klass| next unless klass.instance_variable_get('@output')[v].nil? raise "association to '#{@resource}': value_label '#{v}' is not an output parameter of '#{klass}'" end end end
Private Instance Methods
build_resource_path(r)
click to toggle source
# File lib/haveapi/parameters/resource.rb, line 110 def build_resource_path(r) path = [] top_module = Kernel r.to_s.split('::').each do |name| top_module = top_module.const_get(name) begin top_module.obj_type rescue NoMethodError next end path << name.underscore end path end