Module: ForestAdminDatasourceMongoid::Parser::Column

Includes:
ForestAdminDatasourceToolkit::Components::Query::ConditionTree
Included in:
Collection, Utils::Schema::FieldsGenerator
Defined in:
lib/forest_admin_datasource_mongoid/parser/column.rb

Constant Summary collapse

TYPES =
{
  'Array' => 'Json',
  'BSON::Binary' => 'Binary',
  'BigDecimal' => 'Number',
  'Mongoid::Boolean' => 'Boolean',
  'Date' => 'Date',
  'DateTime' => 'Date',
  'Float' => 'Number',
  'Hash' => 'Json',
  'Integer' => 'Number',
  'Object' => 'Json',
  'BSON::ObjectId' => 'String',
  'Range' => 'Json',
  'Regexp' => 'String',
  'Set' => 'Json',
  'String' => 'String',
  'Mongoid::StringifiedSymbol' => 'String',
  'Symbol' => 'String',
  'Time' => 'Date',
  'ActiveSupport::TimeWithZone' => 'Date'
}.freeze

Instance Method Summary collapse

Instance Method Details

#get_column_type(column) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/forest_admin_datasource_mongoid/parser/column.rb', line 28

def get_column_type(column)
  case column
  when Mongoid::Fields::Standard
    return TYPES[column.type.to_s] || 'String'
  when Mongoid::Fields::ForeignKey
    return 'String'
  when Hash
    return [get_column_type(column['[]'])] if column.key?('[]')

    return column.reduce({}) do |memo, (name, sub_column)|
      memo.merge({ name => get_column_type(sub_column) })
    end
  end

  'String'
end

#get_default_value(column) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/forest_admin_datasource_mongoid/parser/column.rb', line 45

def get_default_value(column)
  if column.respond_to?(:options) && column.options.key?(:default)
    default = column.options[:default]

    return default.respond_to?(:call) ? default.call : default
  end

  nil
end

#get_embedded_fields(model) ⇒ Object



55
56
57
58
# File 'lib/forest_admin_datasource_mongoid/parser/column.rb', line 55

def get_embedded_fields(model)
  embedded_class = [Mongoid::Association::Embedded::EmbedsMany, Mongoid::Association::Embedded::EmbedsOne]
  model.relations.select { |_name, association| embedded_class.include?(association.class) }
end

#operators_for_column_type(type) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/forest_admin_datasource_mongoid/parser/column.rb', line 60

def operators_for_column_type(type)
  default_operators = [Operators::PRESENT, Operators::EQUAL, Operators::NOT_EQUAL]
  in_operators = [Operators::IN, Operators::NOT_IN]
  string_operators = [Operators::MATCH, Operators::NOT_CONTAINS, Operators::NOT_I_CONTAINS]
  comparison_operators = [Operators::GREATER_THAN, Operators::LESS_THAN]
  result = []

  if type.is_a? String
    case type
    when 'Boolean', 'Binary', 'Json'
      result = default_operators
    when 'Date', 'Dateonly', 'Number'
      result = default_operators + in_operators + comparison_operators
    when 'Enum'
      result = default_operators + in_operators
    when 'String'
      result = default_operators + in_operators + string_operators
    end
  end

  result = default_operators if type.is_a? Array

  result
end