Class: AdminIt::Field

Inherits:
Object
  • Object
show all
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

Author:

  • [alexiss]

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

.displayObject (readonly)

Returns the value of attribute display.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def display
  @display
end

.optionsObject (readonly)

Returns the value of attribute options.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def options
  @options
end

.partialObject (readonly)

Returns the value of attribute partial.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def partial
  @partial
end

.readObject (readonly)

Returns the value of attribute read.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def read
  @read
end

.renderObject (readonly)

Returns the value of attribute render.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def render
  @render
end

.typeObject

Returns the value of attribute type.



46
47
48
# File 'lib/admin_it/field/field.rb', line 46

def type
  @type
end

.writeObject (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

Parameters:

  • value

    the value to set the attribute readable to.



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

Parameters:

  • value

    the value to set the attribute visible to.



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

Parameters:

  • value

    the value to set the attribute writable to.



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_nameObject Originally defined in module DisplayableName

.display_name=(value) ⇒ Object Originally defined in module DisplayableName

.dsl_eval(&block) ⇒ Object Originally defined in module ExtendIt::Dsl

.editorObject



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

.hideObject



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

.optionisObject



113
114
115
# File 'lib/admin_it/field/field.rb', line 113

def self.optionis
  @options ||= {}
end

.placeholderObject



105
106
107
# File 'lib/admin_it/field/field.rb', line 105

def self.placeholder
  @placeholder ||= display_name
end

.readable?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/admin_it/field/field.rb', line 55

def self.readable?
  @readable.nil? ? @readable = true : @readable == true
end

.showObject



121
122
123
# File 'lib/admin_it/field/field.rb', line 121

def self.show
  @visible = true
end

.show_label?Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

#nameObject



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

Returns:

  • (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

Returns:

  • (Boolean)


173
174
175
# File 'lib/admin_it/field/field.rb', line 173

def show_label?
  @show_label == true
end

#sortable?Boolean

Returns:

  • (Boolean)


169
170
171
# File 'lib/admin_it/field/field.rb', line 169

def sortable?
  @sortable == true
end

#visible?Boolean

Returns:

  • (Boolean)


161
162
163
# File 'lib/admin_it/field/field.rb', line 161

def visible?
  @visible == true
end

#writable?Boolean

Returns:

  • (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