Sha256: b409371fce391f1079c3223ac38a3f3315586fdd7595a003a58e94f3dbc9d8ed

Contents?: true

Size: 1.05 KB

Versions: 6

Compression:

Stored size: 1.05 KB

Contents

module Pliny::Helpers
  module Serialize
    def self.included(base)
      base.send :extend, ClassMethods
    end

    def serialize(data, structure = :default)
      serializer_class = self.class.serializer_class

      if serializer_class.nil?
        raise <<-eos.strip
No serializer has been specified for this endpoint. Please specify one with
`serializer Serializers::ModelName` in the endpoint.
        eos
      end

      env['pliny.serializer_arity'] = data.respond_to?(:size) ? data.size : 1

      start = Time.now
      serializer_class.new(structure).serialize(data).tap do
        env['pliny.serializer_timing'] = (Time.now - start).to_f
      end
    end

    module ClassMethods
      # Provide a way to specify endpoint serializer class.
      #
      # class Endpoints::User < Base
      #   serializer Serializers::User
      #
      #   get do
      #     encode serialize(User.all)
      #   end
      # end
      def serializer(serializer_class)
        @serializer_class = serializer_class
      end

      attr_reader :serializer_class
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
pliny-0.28.0 lib/pliny/helpers/serialize.rb
pliny-0.27.1 lib/pliny/helpers/serialize.rb
pliny-0.27.0 lib/pliny/helpers/serialize.rb
pliny-0.26.2 lib/pliny/helpers/serialize.rb
pliny-0.26.1 lib/pliny/helpers/serialize.rb
pliny-0.26.0 lib/pliny/helpers/serialize.rb