lib/admin_it/field/field.rb in admin_it-1.0.11 vs lib/admin_it/field/field.rb in admin_it-1.1.0
- old
+ new
@@ -1,10 +1,13 @@
require File.join %w(extend_it base)
require File.join %w(extend_it dsl)
require File.join %w(extend_it callbacks)
+#
module AdminIt
+ using EnsureIt if EnsureIt.refined?
+
#
# Describes any field of data
#
# @author [alexiss]
#
@@ -14,11 +17,11 @@
extend ExtendIt::Dsl
extend DisplayableName
include ExtendIt::Callbacks
TYPES = %i(unknown integer float string date datetime time relation enum
- binary)
+ array hash range regexp symbol binary)
define_callbacks :initialize
dsl do
dsl_accessor :type, default: TYPES[0]
@@ -65,19 +68,11 @@
end
inherited_class_reader :field_name, :entity_class
def self.create(name, _entity_class, **opts)
-# type: :unknown,
-# readable: true,
-# writable: true,
-# visible: true,
-# sortable: true
-# )
base = self
-# _type, _readable, _writable, _visible, _sortable =
-# type, readable, writable, visible, sortable
Class.new(base) do
@field_name, @entity_class = name, _entity_class
import_data_module(base)
@readable = opts[:readable].nil? ? true : opts[:readable] == true
@writable = opts[:writable].nil? ? true : opts[:writable] == true
@@ -86,11 +81,11 @@
self.type = opts[:type]
end
end
def self.type=(value)
- @type = TYPES.include?(value) ? value : TYPES[0]
+ @type = value.ensure_symbol(values: TYPES, default: TYPES[0])
end
def self.placeholder
@placeholder ||= display_name
end
@@ -183,50 +178,44 @@
end
protected
def read_value(entity)
- raise NotImplementedError,
- "Attempt to read field #{name} with unimplemented reader"
+ fail NotImplementedError,
+ "Attempt to read field #{name} with unimplemented reader"
end
def show_value(entity)
read_value(entity)
end
def write_value(entity, value)
- raise NotImplementedError,
- "Attempt to write to field #{name} with unimplemented writer"
+ fail NotImplementedError,
+ "Attempt to write to field #{name} with unimplemented writer"
end
end
+ #
module FieldsHolder
extend ExtendIt::DslModule
dsl do
dsl_hash_of_objects :fields, single: :field do |name, **opts|
field_class = opts[:class] || opts[:field_class] || Field
- unless field_class.is_a?(Class) && field_class <= Field
- fail(
- ArgumentError,
- 'field class should be AdminIt::Field descendant'
- )
- end
+ field_class.ensure_class(Field)
field_class.create(name, entity_class)
end
def hide_fields(*names)
hash = dsl_get(:fields, {})
- names.ensure_symbols.each do |name|
- hash[name].hide if hash.key?(name)
- end
+ names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
+ names.each { |name| hash[name].hide if hash.key?(name) }
end
def show_fields(*names)
hash = dsl_get(:fields, {})
- names.ensure_symbols.each do |name|
- hash[name].show if hash.key?(name)
- end
+ names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
+ names.each { |name| hash[name].show if hash.key?(name) }
end
end
def fields(scope: :visible)
case scope