Sha256: f6605aeb27de01569707b3134c1b82f990ad4bace9a64efa82586cfc8efe9a42

Contents?: true

Size: 853 Bytes

Versions: 2

Compression:

Stored size: 853 Bytes

Contents

require "inflecto"

module Formalist
  class Element
    class PermittedChildren
      All = Class.new do
        def permitted?(*)
          true
        end
      end.new

      None = Class.new do
        def permitted?(*)
          false
        end
      end.new

      class Some
        attr_reader :permitted_children

        def initialize(children)
          @permitted_children = children
        end

        def permitted?(child)
          permitted_children.any? { |permitted_child|
            permitted_child_class = Elements.const_get(Inflecto.camelize(permitted_child))
            child.ancestors.include?(permitted_child_class)
          }
        end
      end

      def self.all
        All
      end

      def self.none
        None
      end

      def self.[](children)
        Some.new(children)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
formalist-0.3.0 lib/formalist/element/permitted_children.rb
formalist-0.2.3 lib/formalist/element/permitted_children.rb