Method: Jsonize#prepare_json

Defined in:
lib/jsonize.rb

#prepare_json(options = {}) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/jsonize.rb', line 66

def prepare_json options = {}
   attr_hash = [
      instance_attrs,
      JSON_ATTRS,
      embed_attrs,
      additional_attrs,
      external_attrs(options),
      options[:map] || {}
   ].reduce { |r, hash| r.merge(hash.map {|k,v| [k.to_sym, v] }.to_h) }
   except = options.fetch(:except, [])
   only = options.fetch(:only, self.attributes.keys.map(&:to_sym) | (options[:map] || {}).keys | embed_attrs.keys | external_attrs(options).keys)

   attr_hash.map do |(name_in, rule_in)|
      name = /^_(?<_name>.*)/ =~ name_in && _name || name_in.to_s

      next nil if except.include?(name.to_sym) || (only & [ name.to_sym, name_in.to_sym ].uniq).blank?

      rule = parse_rule(rule_in)
      #binding.pry
      [name, { "rule" => rule, "real_name" => name_in.to_s }]
   end.compact.to_h
end