Module: ArSerializer::Serializable::ClassMethods

Defined in:
lib/ar_serializer.rb

Instance Method Summary collapse

Instance Method Details

#_serializer_field_info(name) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/ar_serializer.rb', line 32

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



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

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



28
29
30
# File 'lib/ar_serializer.rb', line 28

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

#_serializer_orderable_field_keysObject



53
54
55
56
57
# File 'lib/ar_serializer.rb', line 53

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

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



73
74
75
# File 'lib/ar_serializer.rb', line 73

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

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



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

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



69
70
71
# File 'lib/ar_serializer.rb', line 69

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