Module: FlexiView::Serializer::ClassMethods

Defined in:
lib/flexi_view/serializer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#association_mapObject (readonly)

Returns the value of attribute association_map.



17
18
19
# File 'lib/flexi_view/serializer.rb', line 17

def association_map
  @association_map
end

#attribute_mapObject (readonly)

Returns the value of attribute attribute_map.



17
18
19
# File 'lib/flexi_view/serializer.rb', line 17

def attribute_map
  @attribute_map
end

#meta_mapObject (readonly)

Returns the value of attribute meta_map.



17
18
19
# File 'lib/flexi_view/serializer.rb', line 17

def meta_map
  @meta_map
end

#namespacesObject (readonly)

Returns the value of attribute namespaces.



17
18
19
# File 'lib/flexi_view/serializer.rb', line 17

def namespaces
  @namespaces
end

#viewsObject (readonly)

Returns the value of attribute views.



17
18
19
# File 'lib/flexi_view/serializer.rb', line 17

def views
  @views
end

Instance Method Details

#__init__Object



19
20
21
22
23
24
25
# File 'lib/flexi_view/serializer.rb', line 19

def __init__
  @attribute_map = {}
  @association_map = {}
  @meta_map = {}
  default_namespace = Namespace.new(:__default, self).tap { |ns| ns.view(:__default) }
  @namespaces = { __default: default_namespace }
end

#__schema__Object



27
28
29
# File 'lib/flexi_view/serializer.rb', line 27

def __schema__
  { attributes: @attribute_map.values }
end

#attribute(name, options = nil, &block) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/flexi_view/serializer.rb', line 39

def attribute(name, options = nil, &block)
  if options && options[:format] && FlexiView.formatters[options[:format]].nil?
    raise Error, "#{options[:format]} formatter not defined"
  end

  attr = Attribute.new(name.to_sym, options, &block)
  attribute_map[attr.name] = attr
  default_view.fields(attr.name)
end

#attributes(*names, **options) ⇒ Object

format and if params



50
51
52
# File 'lib/flexi_view/serializer.rb', line 50

def attributes(*names, **options)
  names.each { |name| attribute(name, options) }
end

#default_namespaceObject



31
32
33
# File 'lib/flexi_view/serializer.rb', line 31

def default_namespace
  @namespaces[:__default]
end

#default_viewObject



35
36
37
# File 'lib/flexi_view/serializer.rb', line 35

def default_view
  @namespaces[:__default].views[:__default]
end

#find_view(namespace, view) ⇒ Object

Raises:



85
86
87
88
89
90
91
92
93
94
95
# File 'lib/flexi_view/serializer.rb', line 85

def find_view(namespace, view)
  ns = namespace ? namespaces[namespace] : default_namespace

  raise Error, "#{namespace} is not defined" unless ns

  v = view ? ns.views[view] : ns.views[:__default]

  raise Error, "#{view} is not defined for #{namespace || "default"} namespace" unless v

  v
end

#many(name, serializer_class, options = nil, &block) ⇒ Object



54
55
56
# File 'lib/flexi_view/serializer.rb', line 54

def many(name, serializer_class, options = nil, &block)
  association(:many, name, serializer_class, options, &block)
end

#meta(name, root_key:, &block) ⇒ Object

Raises:



62
63
64
65
66
67
# File 'lib/flexi_view/serializer.rb', line 62

def meta(name, root_key:, &block)
  raise Error, "code block required for meta #{name}" unless block_given?

  m = Meta.new(name.to_sym, root_key.to_s, &block)
  meta_map[m.name] = m
end

#namespace(name, &block) ⇒ Object

Raises:



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/flexi_view/serializer.rb', line 73

def namespace(name, &block)
  raise Error, "'#{name}' namespace required code block" unless block_given?

  name = name.to_sym

  raise Error, "#{name} is already defined" if @namespaces[name]

  @namespaces[name] = Namespace.new(name, self).tap do |ns|
    ns.instance_exec(&block)
  end
end

#one(name, serializer_class, options = nil, &block) ⇒ Object



58
59
60
# File 'lib/flexi_view/serializer.rb', line 58

def one(name, serializer_class, options = nil, &block)
  association(:one, name, serializer_class, options, &block)
end

#view(name) ⇒ Object



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

def view(name)
  namespaces[:__default].view(name)
end