Sha256: 7066fd1ebf45e1eaf18f4d49529d7d8044ae146ec27deb0b9db8a0a164b25821
Contents?: true
Size: 1.97 KB
Versions: 2
Compression:
Stored size: 1.97 KB
Contents
module Fortnox module API module Mapper module ToJSON def self.included(base) base.instance_eval do # PUBLIC def call( entity, keys_to_filter = {} ) entity_hash = entity.to_hash clean_entity_hash = sanitise( entity_hash, keys_to_filter ) clean_entity_hash = convert_hash_keys_to_json_format( clean_entity_hash ) Registry[:hash].call( clean_entity_hash ) end # PRIVATE def convert_hash_keys_to_json_format( hash ) hash.each_with_object( {} ) do |(key, value), json_hash| json_hash[ convert_key_to_json( key ) ] = value end end def convert_key_to_json( key ) self::KEY_MAP.fetch( key ){ default_key_to_json_transform( key ) } end def default_key_to_json_transform( key ) key.to_s.split('_').map(&:capitalize).join('') end def sanitise( hash, keys_to_filter ) hash.select do |key, value| next false if keys_to_filter.include?( key ) value != nil end end private_class_method :convert_hash_keys_to_json_format, :convert_key_to_json, :default_key_to_json_transform, :sanitise end end def entity_to_hash( entity, keys_to_filter ) entity_json_hash = Registry[ mapper_name_for( entity ) ] .call( entity, keys_to_filter ) wrapp_entity_json_hash( entity_json_hash ) end def wrapp_entity_json_hash( entity_json_hash ) { self.class::JSON_ENTITY_WRAPPER => entity_json_hash } end private def mapper_name_for( value ) value.class.name.split('::').last.downcase.to_sym end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fortnox-api-0.3.0 | lib/fortnox/api/mappers/base/to_json.rb |
fortnox-api-0.2.0 | lib/fortnox/api/mappers/base/to_json.rb |