Sha256: 4ea0d53043b875a3aeb8563c1e70e2321afeef23e35fac2040fe193f400d86ce

Contents?: true

Size: 1.13 KB

Versions: 40

Compression:

Stored size: 1.13 KB

Contents

module Schemacop
  module V3
    class DslScope
      EXP_NAME = /^dsl_([a-z_]+)([?!])?$/.freeze

      def initialize(node)
        @node = node
        @with_name = @node.class.supports_children_options[:name]
      end

      def method_missing(name, *args, **options, &block)
        match = EXP_NAME.match(name)
        return super unless match

        base_name, req_optional = match.captures

        if req_optional == '!'
          options[:required] = true
        elsif req_optional == '?'
          options[:required] = false
        end

        options[:parent] = @node

        if (klass = NodeRegistry.by_short_name(base_name))
          if @with_name
            options[:name] = args.shift
          end
          node = klass.create(*args, **options, &block)
          @node.add_child node
          return node
        else
          return super
        end
      end

      def respond_to_missing?(name, *args)
        match = EXP_NAME.match(name)
        return super unless match

        base_name, _req_optional = match.captures
        return NodeRegistry.by_short_name(base_name).present? || super
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
schemacop-3.0.13 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.12 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.11 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.10 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.9 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.8 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.7 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.6 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.5 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.4 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.3 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.2 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.1 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc5 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc4 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc3 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc2 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc1 lib/schemacop/v3/dsl_scope.rb
schemacop-3.0.0.rc0 lib/schemacop/v3/dsl_scope.rb