Sha256: 5eccc48021ffd2d003b9a57f186ef65a1bc2ad569d8986b6b9100c330aa42c6b

Contents?: true

Size: 1012 Bytes

Versions: 18

Compression:

Stored size: 1012 Bytes

Contents

module SoberSwag
  class OutputObject
    ##
    # A single field in an output object.
    # Later used to make an actual serializer from this.
    class Field
      def initialize(name, serializer, from: nil, &block)
        @name = name
        @root_serializer = serializer
        @from = from
        @block = block
      end

      attr_reader :name

      def serializer
        @serializer ||= resolved_serializer.serializer.via_map(&transform_proc)
      end

      def resolved_serializer
        if @root_serializer.is_a?(Proc)
          @root_serializer.call
        else
          @root_serializer
        end
      end

      private

      def transform_proc # rubocop:disable Metrics/MethodLength
        if @block
          @block
        else
          key = @from || @name
          proc do |object, _|
            if object.respond_to?(key)
              object.public_send(key)
            else
              object[key]
            end
          end
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
sober_swag-0.19.0 lib/sober_swag/output_object/field.rb
sober_swag-0.18.0 lib/sober_swag/output_object/field.rb
sober_swag-0.17.0 lib/sober_swag/output_object/field.rb
sober_swag-0.16.0 lib/sober_swag/output_object/field.rb
sober_swag-0.15.0 lib/sober_swag/output_object/field.rb
sober_swag-0.14.0 lib/sober_swag/output_object/field.rb
sober_swag-0.13.0 lib/sober_swag/output_object/field.rb
sober_swag-0.12.0 lib/sober_swag/output_object/field.rb
sober_swag-0.11.0 lib/sober_swag/output_object/field.rb
sober_swag-0.10.0 lib/sober_swag/output_object/field.rb
sober_swag-0.9.0 lib/sober_swag/output_object/field.rb
sober_swag-0.8.0 lib/sober_swag/output_object/field.rb
sober_swag-0.7.0 lib/sober_swag/output_object/field.rb
sober_swag-0.6.0 lib/sober_swag/output_object/field.rb
sober_swag-0.5.0 lib/sober_swag/output_object/field.rb
sober_swag-0.4.0 lib/sober_swag/output_object/field.rb
sober_swag-0.3.0 lib/sober_swag/output_object/field.rb
sober_swag-0.2.0 lib/sober_swag/output_object/field.rb