class AdminIt::Field
Describes any field of data
@author [alexiss]
Constants
- EDITORS
- TYPES
Attributes
display[R]
options[R]
partial[R]
read[R]
render[R]
type[R]
write[R]
readable[W]
visible[W]
writable[W]
Public Class Methods
create(name, _entity_class, **opts)
click to toggle source
# File lib/admin_it/field/field.rb, line 77 def self.create(name, _entity_class, **opts) base = self Class.new(base) do @field_name, @entity_class = name, _entity_class import_data_module(base) self.type = opts[:type] @readable = opts[:readable].nil? ? true : opts[:readable] == true @writable = opts[:writable].nil? ? true : opts[:writable] == true @visible = opts[:visible].nil? ? true : opts[:visible] == true @sortable = opts[:sortable].nil? ? true : opts[:sortable] == true @options = opts[:options].is_a?(Hash) ? opts[:options] : {} if type == :image @options[:s3] = {} unless @options[:s3].is_a?(Hash) @options[:s3] = {}.merge(AdminIt.config.s3, @options[:s3]) end @show_label = opts[:show_label].nil? ? true : opts[:show_label] == true self.editor = opts[:editor] unless opts[:editor].nil? end end
editor()
click to toggle source
# File lib/admin_it/field/field.rb, line 125 def self.editor return @editor unless @editor.nil? return @editor = :image if type == :image return @editor = :combo if type == :enum return @editor = :geo_picker if type == :geo_point return @editor = :boolean if type == :boolean @editor = EDITORS[0] end
editor=(value)
click to toggle source
# File lib/admin_it/field/field.rb, line 101 def self.editor=(value) @editor = value.ensure_symbol(values: EDITORS, default: EDITORS[0]) end
hide()
click to toggle source
# File lib/admin_it/field/field.rb, line 117 def self.hide @visible = false end
new(readable: nil, writable: nil, visible: nil, sortable: nil, show_label: nil, options: nil)
click to toggle source
# File lib/admin_it/field/field.rb, line 138 def initialize(readable: nil, writable: nil, visible: nil, sortable: nil, show_label: nil, options: nil) run_callbacks :initialize do @readable = readable.nil? ? self.class.readable? : readable == true @writable = writable.nil? ? self.class.writable? : writable == true @visible = visible.nil? ? self.class.visible? : visible == true @sortable = sortable.nil? ? self.class.sortable? : sortable == true @show_label = show_label.nil? ? self.class.show_label? : show_label == true end end
optionis()
click to toggle source
# File lib/admin_it/field/field.rb, line 113 def self.optionis @options ||= {} end
placeholder()
click to toggle source
# File lib/admin_it/field/field.rb, line 105 def self.placeholder @placeholder ||= display_name end
readable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 55 def self.readable? @readable.nil? ? @readable = true : @readable == true end
show()
click to toggle source
# File lib/admin_it/field/field.rb, line 121 def self.show @visible = true end
show_label?()
click to toggle source
# File lib/admin_it/field/field.rb, line 71 def self.show_label? @show_label.nil? ? @show_label = true : @show_label == true end
sortable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 67 def self.sortable? @sortable.nil? ? @sortable = true : @sortable == true end
type=(value)
click to toggle source
# File lib/admin_it/field/field.rb, line 97 def self.type=(value) @type = value.ensure_symbol(values: TYPES, default: TYPES[0]) end
visible?()
click to toggle source
# File lib/admin_it/field/field.rb, line 63 def self.visible? @visible.nil? ? @visible = true : @visible == true end
writable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 59 def self.writable? @writable.nil? ? @writable = true : @writable == true end
Protected Class Methods
default_display_name()
click to toggle source
# File lib/admin_it/field/field.rb, line 50 def default_display_name field_name end
Public Instance Methods
hide()
click to toggle source
# File lib/admin_it/field/field.rb, line 36 def hide dsl_set(:visible, false) end
input(template, entity)
click to toggle source
# File lib/admin_it/field/field.rb, line 215 def input(template, entity) typed_method = "#{type}_input".to_sym if respond_to?(typed_method) send typed_method, template, entity else Helpers::Input.new(template, self, entity: entity) end end
name()
click to toggle source
# File lib/admin_it/field/field.rb, line 149 def name @name ||= self.class.field_name end
read(entity)
click to toggle source
# File lib/admin_it/field/field.rb, line 177 def read(entity) unless readable? fail FieldReadError, "Attempt to read write-only field #{name}" end self.class.read.nil? ? read_value(entity) : self.class.read.call(entity) end
readable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 153 def readable? @readable == true end
render(entity, instance: nil)
click to toggle source
# File lib/admin_it/field/field.rb, line 203 def render(entity, instance: nil) renderer = self.class.render return if renderer.nil? # method used as event emmiter, call block in instance or caller # context if it present if instance.nil? self.class.render.call(entity) else instance.instance_exec(entity, &renderer) end end
show()
click to toggle source
# File lib/admin_it/field/field.rb, line 40 def show dsl_set(:visible, true) end
show_label?()
click to toggle source
# File lib/admin_it/field/field.rb, line 173 def show_label? @show_label == true end
sortable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 169 def sortable? @sortable == true end
visible?()
click to toggle source
# File lib/admin_it/field/field.rb, line 161 def visible? @visible == true end
writable?()
click to toggle source
# File lib/admin_it/field/field.rb, line 157 def writable? @writable == true end
write(entity, value)
click to toggle source
# File lib/admin_it/field/field.rb, line 191 def write(entity, value) unless writable? fail FieldWriteError, "Attempt to write read-only field #{name}" end if self.class.write.nil? write_value(entity, value) else self.class.write.call(entity, value) end entity end
Protected Instance Methods
read_value(entity)
click to toggle source
# File lib/admin_it/field/field.rb, line 252 def read_value(entity) entity.send(name) end
show_value(entity)
click to toggle source
def read_value
(entity)
fail NotImplementedError, "Attempt to read field #{name} with unimplemented reader"
end
def show_value
(entity)
fail NotImplementedError, "Attempt to show field #{name} with unimplemented show method"
end
def write_value
(entity, value)
fail NotImplementedError, "Attempt to write to field #{name} with unimplemented writer"
end
# File lib/admin_it/field/field.rb, line 241 def show_value(entity) value = read(entity) if type == :enum value.text elsif type == :geo_point value.nil? ? '' : "#{value.x}, #{value.y}" else value end end
write_value(entity, value)
click to toggle source
# File lib/admin_it/field/field.rb, line 256 def write_value(entity, value) if type == :geo_point point = entity.send(name) x, y = value.split(',', 2) factory = entity_class.const_get(:FACTORY, true) point = factory.point(x.to_f, y.to_f) value = point end entity.send("#{name}=", value) end