module SHACL::Refinements

Localized refinements to externally defined classes

Public Instance Methods

deep_merge(second) click to toggle source

@!parse

# Refinements on Hash
class Hash
  ##
  # Deep merge two hashes folding array values together.
  #
  # @param  [Hash] second
  # @return [Hash]
  def deep_merge(second); end
end
# File lib/shacl/refinements.rb, line 16
def deep_merge(second)
  merger = ->(_, v1, v2) {Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : v2.nil? ? v1 : v2 }
  merge(second.to_h, &merger)
end
each_statement(&block) click to toggle source
# File lib/shacl/refinements.rb, line 37
def each_statement(&block)
  @subject = RDF::Node.new
  elements = operands.map do |op|
    if op.respond_to?(:each_statement)
      op.each_statement(&block)
      op.subject
    else
      op
    end
  end
  list = RDF::List(*elements)
  list.each_statement(&block)
  block.call(RDF::Statement(@subject, RDF::Vocab::SHACL.alternativePath, list.subject))
end