Class: AdminIt::Field
- Inherits:
-
Object
- Object
- AdminIt::Field
- Extended by:
- DataBehavior, ExtendIt::Class, 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 relation enum)
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
- .call_inherited(method_name, *args, base_first: false, &block) ⇒ Object extended from ExtendIt::Class
- .class_attr_reader(*attrs) ⇒ Object extended from ExtendIt::Class
- .create(name, _entity_class, type: :unknown, readable: true, writable: true, visible: true, sortable: true) ⇒ Object
- .dsl_accessor(*names, default: nil, &setter) ⇒ Object extended from ExtendIt::Dsl
- .dsl_block(*names) ⇒ Object extended from ExtendIt::Dsl
- .dsl_boolean(*names, default: true) ⇒ Object extended from ExtendIt::Dsl
- .dsl_use_hash(hash_name) ⇒ Object extended from ExtendIt::Dsl
- .hide ⇒ Object
- .inherited_class_reader(*names) ⇒ Object extended from ExtendIt::Class
- .show ⇒ Object
Instance Method Summary collapse
-
#initialize(readable: nil, writable: nil, visible: nil, sortable: 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
- #sortable? ⇒ Boolean
- #visible? ⇒ Boolean
- #writable? ⇒ Boolean
- #write(entity, value) ⇒ Object
Constructor Details
#initialize(readable: nil, writable: nil, visible: nil, sortable: nil) ⇒ Field
82 83 84 85 86 87 88 89 |
# File 'lib/admin_it/field/field.rb', line 82 def initialize(readable: nil, writable: nil, visible: nil, sortable: 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 end end |
Instance Attribute Details
#readable=(value) ⇒ Object (writeonly)
Sets the attribute readable
80 81 82 |
# File 'lib/admin_it/field/field.rb', line 80 def readable=(value) @readable = value end |
#visible=(value) ⇒ Object (writeonly)
Sets the attribute visible
80 81 82 |
# File 'lib/admin_it/field/field.rb', line 80 def visible=(value) @visible = value end |
#writable=(value) ⇒ Object (writeonly)
Sets the attribute writable
80 81 82 |
# File 'lib/admin_it/field/field.rb', line 80 def writable=(value) @writable = value end |
Class Method Details
.call_inherited(method_name, *args, base_first: false, &block) ⇒ Object Originally defined in module ExtendIt::Class
.class_attr_reader(*attrs) ⇒ Object Originally defined in module ExtendIt::Class
.create(name, _entity_class, type: :unknown, readable: true, writable: true, visible: true, sortable: true) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/admin_it/field/field.rb', line 50 def self.create(name, _entity_class, type: :unknown, readable: true, writable: true, visible: true, sortable: true ) base = self Class.new(base) do #run_callbacks :configure do @field_name, @entity_class = name, _entity_class import_data_module(base) self.readable = readable self.writable = writable self.visible = visible self.sortable = sortable self.type = type #end end end |
.dsl_accessor(*names, default: nil, &setter) ⇒ Object Originally defined in module ExtendIt::Dsl
.dsl_block(*names) ⇒ Object Originally defined in module ExtendIt::Dsl
.dsl_boolean(*names, default: true) ⇒ Object Originally defined in module ExtendIt::Dsl
.dsl_use_hash(hash_name) ⇒ Object Originally defined in module ExtendIt::Dsl
.hide ⇒ Object
71 72 73 |
# File 'lib/admin_it/field/field.rb', line 71 def self.hide @visible = false end |
.inherited_class_reader(*names) ⇒ Object Originally defined in module ExtendIt::Class
.show ⇒ Object
75 76 77 |
# File 'lib/admin_it/field/field.rb', line 75 def self.show @visible = true end |
Instance Method Details
#input(template, entity) ⇒ Object
149 150 151 152 153 154 155 156 |
# File 'lib/admin_it/field/field.rb', line 149 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
91 92 93 |
# File 'lib/admin_it/field/field.rb', line 91 def name @name ||= self.class.field_name end |
#read(entity) ⇒ Object
111 112 113 114 115 116 |
# File 'lib/admin_it/field/field.rb', line 111 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
95 96 97 |
# File 'lib/admin_it/field/field.rb', line 95 def readable? @readable == true end |
#render(entity, instance: nil) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/admin_it/field/field.rb', line 137 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
118 119 120 121 122 123 |
# File 'lib/admin_it/field/field.rb', line 118 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 |
#sortable? ⇒ Boolean
107 108 109 |
# File 'lib/admin_it/field/field.rb', line 107 def sortable? @sortable == true end |
#visible? ⇒ Boolean
103 104 105 |
# File 'lib/admin_it/field/field.rb', line 103 def visible? @visible == true end |
#writable? ⇒ Boolean
99 100 101 |
# File 'lib/admin_it/field/field.rb', line 99 def writable? @writable == true end |
#write(entity, value) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/admin_it/field/field.rb', line 125 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 |