Module: ArSerializer::Serializable::ClassMethods

Defined in:
lib/ar_serializer.rb

Instance Method Summary collapse

Instance Method Details

#_serializer_field_info(name) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/ar_serializer.rb', line 30

def _serializer_field_info(name)
  ArSerializer::Serializer.current_namespaces.each do |ns|
    field = _serializer_namespace(ns)[name.to_s]
    return field if field
  end
  superclass._serializer_field_info name if superclass < ArSerializer::Serializable
end

#_serializer_field_keys(public_only = true) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/ar_serializer.rb', line 38

def _serializer_field_keys(public_only = true)
  keys = ArSerializer::Serializer.current_namespaces.map do |ns|
    if public_only
      fields = _serializer_namespace(ns)
      fields.keys.reject { |key| fields[key].private? }
    else
      _serializer_namespace(ns).keys
    end
  end.inject(:|)
  keys |= superclass._serializer_field_keys(public_only) if superclass < ArSerializer::Serializable
  keys
end

#_serializer_namespace(ns) ⇒ Object



26
27
28
# File 'lib/ar_serializer.rb', line 26

def _serializer_namespace(ns)
  (@_serializer_field_info ||= {})[ns] ||= {}
end

#_serializer_orderable_field_keysObject



51
52
53
54
55
# File 'lib/ar_serializer.rb', line 51

def _serializer_orderable_field_keys
  _serializer_field_keys.select do |name|
    _serializer_field_info(name).orderable?
  end
end

#serializer_defaults(**args, &block) ⇒ Object



71
72
73
# File 'lib/ar_serializer.rb', line 71

def serializer_defaults(**args, &block)
  serializer_field(:defaults, **args, private: true, &block)
end

#serializer_field(*names, namespace: nil, association: nil, **option, &data_block) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/ar_serializer.rb', line 57

def serializer_field(*names, namespace: nil, association: nil, **option, &data_block)
  namespaces = namespace.is_a?(Array) ? namespace : [namespace]
  namespaces.each do |ns|
    names.each do |name|
      field = ArSerializer::Field.create(self, association || name, **option, &data_block)
      _serializer_namespace(ns)[name.to_s] = field
    end
  end
end

#serializer_permission(**args, &data_block) ⇒ Object



67
68
69
# File 'lib/ar_serializer.rb', line 67

def serializer_permission(**args, &data_block)
  serializer_field(:permission, **args, private: true, &data_block)
end