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