Sha256: 7367cf316aadd2012f91d3f8e3a1764ea6dc361f599c4f4aadfe228a97894457

Contents?: true

Size: 892 Bytes

Versions: 1

Compression:

Stored size: 892 Bytes

Contents

module SoberSwag
  class Blueprint
    class View

      def self.define(name, base_fields, &block)
        self.new(name, base_fields).tap do |view|
          view.instance_eval(&block)
        end
      end

      class NestingError < Error; end;

      include FieldSyntax

      def initialize(name, base_fields = [])
        @name = name
        @fields = base_fields.dup
      end

      attr_reader :name, :fields

      def except!(name)
        @fields.select! { |f| f.name != name }
      end

      def view(*)
        raise NestingError, 'no views in views'
      end

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

      ##
      # Get the serializer defined by this view.
      # WARNING: Don't add more fields after you call this.
      def serializer
        @serializer ||=
          SoberSwag::Serializer::FieldList.new(fields)
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sober_swag-0.1.0 lib/sober_swag/blueprint/view.rb