Sha256: 32a9f742e3872af952d0ea822aefb42893b2c9da195c2a440fe99ff782c1a641
Contents?: true
Size: 1.36 KB
Versions: 2
Compression:
Stored size: 1.36 KB
Contents
# frozen_string_literal: true require 'as_json/version' require 'as_json/json_encoder' require 'as_json/scoped_json_mapper' require 'active_support/concern' require 'active_support/json' require 'active_support/core_ext/object' module AsJson extend ActiveSupport::Concern class_methods do def default_json_attributes @default_json_attributes end def json_with(*attributes, **kargs) if @default_json_attributes.blank? kargs = { _base: attributes }.merge(kargs) @default_json_attributes = kargs else @default_json_attributes[:_base] += attributes @default_json_attributes = AsJson.merge_default_attributes( @default_json_attributes, kargs ) end ScopedJsonMapper.new self end end def self.merge_default_attributes(existing, new_attributes) existing.deep_merge(new_attributes) do |_k, oldval, newval| if [oldval, newval].all? { |value| value.is_a?(Array) } oldval + newval elsif oldval.is_a?(Array) && newval.is_a?(Hash) oldval = oldval.map { |k| [k, true] }.to_h oldval.deep_merge newval elsif newval.is_a?(Array) && oldval.is_a?(Hash) newval = newval.map { |k| [k, true] }.to_h oldval.deep_merge newval else newval end end end def as_json(opts = {}) JsonEncoder.new(self, opts).json end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
as_json-0.1.1 | lib/as_json.rb |
as_json-0.1.0 | lib/as_json.rb |