Sha256: 9862078ff775fdd036b5033751e14157077a1364e45f95f658d15418130d2e88

Contents?: true

Size: 1.26 KB

Versions: 10

Compression:

Stored size: 1.26 KB

Contents

module Toy
  module Serialization
    extend ActiveSupport::Concern
    include ActiveModel::Serializers::JSON
    include ActiveModel::Serializers::Xml

    def serializable_attributes
      attributes.keys.sort.map(&:to_sym)
    end

    def serializable_hash(options = nil)
      hash = {}
      options ||= {}
      options[:only]   = Array.wrap(options[:only]).map(&:to_sym)
      options[:except] = Array.wrap(options[:except]).map(&:to_sym)

      serializable_stuff =  serializable_attributes.map(&:to_sym)

      if options[:only].any?
        serializable_stuff &= options[:only]
      elsif options[:except].any?
        serializable_stuff -= options[:except]
      end

      serializable_stuff += Array.wrap(options[:methods]).map(&:to_sym).select do |method|
        respond_to?(method)
      end

      serializable_stuff.each do |name|
        value = send(name)
        hash[name.to_s] = if value.is_a?(Array)
                            value.map { |v| v.respond_to?(:serializable_hash) ? v.serializable_hash : v }
                          elsif value.respond_to?(:serializable_hash)
                            value.serializable_hash
                          else
                            value
                          end
      end

      hash
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
toystore-0.13.2 lib/toy/serialization.rb
toystore-0.13.1 lib/toy/serialization.rb
toystore-0.13.0 lib/toy/serialization.rb
toystore-0.12.0 lib/toy/serialization.rb
toystore-0.11.0 lib/toy/serialization.rb
toystore-0.10.4 lib/toy/serialization.rb
toystore-0.10.3 lib/toy/serialization.rb
toystore-0.10.2 lib/toy/serialization.rb
toystore-0.10.1 lib/toy/serialization.rb
toystore-0.10.0 lib/toy/serialization.rb