Sha256: 1557d283ba1ca11af0084fe7f39284051fee8ce2f60d729d626d0b21c0072ca1

Contents?: true

Size: 1.02 KB

Versions: 5

Compression:

Stored size: 1.02 KB

Contents

module SoberSwag
  class OutputObject
    ##
    # Container to define a single output object.
    # This is the DSL used in the base of {SoberSwag::OutputObject.define}.
    class Definition
      def initialize
        @fields = []
        @views = []
      end

      attr_reader :fields, :views

      include FieldSyntax

      def add_field!(field)
        @fields << field
      end

      def view(name, inherits: nil, &block)
        initial_fields =
          if inherits.nil? || inherits == :base
            fields
          else
            find_view(inherits).fields
          end
        view = View.define(name, initial_fields, &block)

        view.identifier("#{@identifier}.#{name.to_s.classify}") if identifier

        @views << view
      end

      def identifier(arg = nil)
        @identifier = arg if arg
        @identifier
      end

      private

      def find_view(name)
        @views.find { |view| view.name == name } || (raise ArgumentError, "no view #{name.inspect} defined!")
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
sober_swag-0.19.0 lib/sober_swag/output_object/definition.rb
sober_swag-0.18.0 lib/sober_swag/output_object/definition.rb
sober_swag-0.17.0 lib/sober_swag/output_object/definition.rb
sober_swag-0.16.0 lib/sober_swag/output_object/definition.rb
sober_swag-0.15.0 lib/sober_swag/output_object/definition.rb