Class: AdminIt::Field
- Inherits:
-
Object
- Object
- AdminIt::Field
- Extended by:
- DataBehavior, DisplayableName, ExtendIt::Base, ExtendIt::Dsl
- Includes:
- ExtendIt::Callbacks
- Defined in:
- lib/admin_it/field/field.rb
Overview
Describes any field of data
Constant Summary collapse
- TYPES =
%i(unknown integer float string date datetime time relation enum array hash range regexp symbol binary image geo_point boolean)
- EDITORS =
%i(text combo radio image hidden geo_picker boolean textarea)
Class Attribute Summary collapse
-
.display ⇒ Object
readonly
Returns the value of attribute display.
-
.options ⇒ Object
readonly
Returns the value of attribute options.
-
.partial ⇒ Object
readonly
Returns the value of attribute partial.
-
.read ⇒ Object
readonly
Returns the value of attribute read.
-
.render ⇒ Object
readonly
Returns the value of attribute render.
-
.type ⇒ Object
Returns the value of attribute type.
-
.write ⇒ Object
readonly
Returns the value of attribute write.
Instance Attribute Summary collapse
-
#readable ⇒ Object
writeonly
Sets the attribute readable.
-
#visible ⇒ Object
writeonly
Sets the attribute visible.
-
#writable ⇒ Object
writeonly
Sets the attribute writable.
Class Method Summary collapse
- .attr_checker(*names) ⇒ Object extended from ExtendIt::Base
- .call_inherited(method_name, *args, base_first: false, &block) ⇒ Object extended from ExtendIt::Base
- .class_attr_reader(*attrs) ⇒ Object extended from ExtendIt::Base
- .create(name, _entity_class, **opts) ⇒ Object
- .display_name ⇒ Object extended from DisplayableName
- .display_name=(value) ⇒ Object extended from DisplayableName
- .dsl_eval(&block) ⇒ Object extended from ExtendIt::Dsl
- .editor ⇒ Object
- .editor=(value) ⇒ Object
- .hide ⇒ Object
- .inherited_class_reader(*names) ⇒ Object extended from ExtendIt::Base
- .metaclass(&block) ⇒ Object extended from ExtendIt::Base
- .optionis ⇒ Object
- .placeholder ⇒ Object
- .readable? ⇒ Boolean
- .show ⇒ Object
- .show_label? ⇒ Boolean
- .sortable? ⇒ Boolean
- .visible? ⇒ Boolean
- .writable? ⇒ Boolean
Instance Method Summary collapse
- #hidden? ⇒ Boolean
-
#initialize(readable: nil, writable: nil, visible: nil, sortable: nil, show_label: nil, options: nil) ⇒ Field
constructor
A new instance of Field.
- #input(template, entity) ⇒ Object
- #name ⇒ Object
- #read(entity) ⇒ Object
- #readable? ⇒ Boolean
- #render(entity, instance: nil) ⇒ Object
- #run_callbacks(*names, arguments: [], original_context: false) ⇒ Object included from ExtendIt::Callbacks
- #show(entity) ⇒ Object
- #show_label? ⇒ Boolean
- #sortable? ⇒ Boolean
- #visible? ⇒ Boolean
- #writable? ⇒ Boolean
- #write(entity, value) ⇒ Object
Constructor Details
#initialize(readable: nil, writable: nil, visible: nil, sortable: nil, show_label: nil, options: nil) ⇒ Field
Returns a new instance of Field.
138 139 140 141 142 143 144 145 146 147 |
# 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 |
Class Attribute Details
.display ⇒ Object (readonly)
Returns the value of attribute display.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def display @display end |
.options ⇒ Object (readonly)
Returns the value of attribute options.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def @options end |
.partial ⇒ Object (readonly)
Returns the value of attribute partial.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def partial @partial end |
.read ⇒ Object (readonly)
Returns the value of attribute read.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def read @read end |
.render ⇒ Object (readonly)
Returns the value of attribute render.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def render @render end |
.type ⇒ Object
Returns the value of attribute type.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def type @type end |
.write ⇒ Object (readonly)
Returns the value of attribute write.
46 47 48 |
# File 'lib/admin_it/field/field.rb', line 46 def write @write end |
Instance Attribute Details
#readable=(value) ⇒ Object (writeonly)
Sets the attribute readable
136 137 138 |
# File 'lib/admin_it/field/field.rb', line 136 def readable=(value) @readable = value end |
#visible=(value) ⇒ Object (writeonly)
Sets the attribute visible
136 137 138 |
# File 'lib/admin_it/field/field.rb', line 136 def visible=(value) @visible = value end |
#writable=(value) ⇒ Object (writeonly)
Sets the attribute writable
136 137 138 |
# File 'lib/admin_it/field/field.rb', line 136 def writable=(value) @writable = value end |
Class Method Details
.attr_checker(*names) ⇒ Object Originally defined in module ExtendIt::Base
.call_inherited(method_name, *args, base_first: false, &block) ⇒ Object Originally defined in module ExtendIt::Base
.class_attr_reader(*attrs) ⇒ Object Originally defined in module ExtendIt::Base
.create(name, _entity_class, **opts) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# 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 |
.display_name ⇒ Object Originally defined in module DisplayableName
.display_name=(value) ⇒ Object Originally defined in module DisplayableName
.dsl_eval(&block) ⇒ Object Originally defined in module ExtendIt::Dsl
.editor ⇒ Object
125 126 127 128 129 130 131 132 |
# 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) ⇒ Object
101 102 103 |
# File 'lib/admin_it/field/field.rb', line 101 def self.editor=(value) @editor = value.ensure_symbol(values: EDITORS, default: EDITORS[0]) end |
.hide ⇒ Object
117 118 119 |
# File 'lib/admin_it/field/field.rb', line 117 def self.hide @visible = false end |
.inherited_class_reader(*names) ⇒ Object Originally defined in module ExtendIt::Base
.metaclass(&block) ⇒ Object Originally defined in module ExtendIt::Base
.optionis ⇒ Object
113 114 115 |
# File 'lib/admin_it/field/field.rb', line 113 def self.optionis @options ||= {} end |
.placeholder ⇒ Object
105 106 107 |
# File 'lib/admin_it/field/field.rb', line 105 def self.placeholder @placeholder ||= display_name end |
.readable? ⇒ Boolean
55 56 57 |
# File 'lib/admin_it/field/field.rb', line 55 def self.readable? @readable.nil? ? @readable = true : @readable == true end |
.show ⇒ Object
121 122 123 |
# File 'lib/admin_it/field/field.rb', line 121 def self.show @visible = true end |
.show_label? ⇒ Boolean
71 72 73 |
# File 'lib/admin_it/field/field.rb', line 71 def self.show_label? @show_label.nil? ? @show_label = true : @show_label == true end |
.sortable? ⇒ Boolean
67 68 69 |
# File 'lib/admin_it/field/field.rb', line 67 def self.sortable? @sortable.nil? ? @sortable = true : @sortable == true end |
.visible? ⇒ Boolean
63 64 65 |
# File 'lib/admin_it/field/field.rb', line 63 def self.visible? @visible.nil? ? @visible = true : @visible == true end |
.writable? ⇒ Boolean
59 60 61 |
# File 'lib/admin_it/field/field.rb', line 59 def self.writable? @writable.nil? ? @writable = true : @writable == true end |
Instance Method Details
#hidden? ⇒ Boolean
165 166 167 |
# File 'lib/admin_it/field/field.rb', line 165 def hidden? @visible != true end |
#input(template, entity) ⇒ Object
215 216 217 218 219 220 221 222 |
# 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 ⇒ Object
149 150 151 |
# File 'lib/admin_it/field/field.rb', line 149 def name @name ||= self.class.field_name end |
#read(entity) ⇒ Object
177 178 179 180 181 182 |
# 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? ⇒ Boolean
153 154 155 |
# File 'lib/admin_it/field/field.rb', line 153 def readable? @readable == true end |
#render(entity, instance: nil) ⇒ Object
203 204 205 206 207 208 209 210 211 212 213 |
# 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 |
#run_callbacks(*names, arguments: [], original_context: false) ⇒ Object Originally defined in module ExtendIt::Callbacks
#show(entity) ⇒ Object
184 185 186 187 188 189 |
# File 'lib/admin_it/field/field.rb', line 184 def show(entity) unless readable? fail FieldReadError, "Attempt to read write-only field #{name}" end self.class.display.nil? ? show_value(entity) : self.class.display.call(entity) end |
#show_label? ⇒ Boolean
173 174 175 |
# File 'lib/admin_it/field/field.rb', line 173 def show_label? @show_label == true end |
#sortable? ⇒ Boolean
169 170 171 |
# File 'lib/admin_it/field/field.rb', line 169 def sortable? @sortable == true end |
#visible? ⇒ Boolean
161 162 163 |
# File 'lib/admin_it/field/field.rb', line 161 def visible? @visible == true end |
#writable? ⇒ Boolean
157 158 159 |
# File 'lib/admin_it/field/field.rb', line 157 def writable? @writable == true end |
#write(entity, value) ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 |
# 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 |