Class: AdminIt::Field

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

Class Method Summary collapse

Instance Method Summary collapse

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

.hideObject



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

.showObject



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

#nameObject



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