class Clerq::Repositories::NodeRepository

Public Class Methods

new(path: Dir.pwd, pattern: '*.md') click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 14
def initialize(path: Dir.pwd, pattern: '*.md')
  super(path: path, pattern: pattern)
end

Public Instance Methods

assemble(on_parse: nil, on_error: nil) click to toggle source

asseble repository nodes hierarchy @return [Node]

# File lib/clerq/repositories/node_repository.rb, line 25
def assemble(on_parse: nil, on_error: nil)
  @node = Node.new(id: 'join', title: Clerq.title)
  loadn = load(on_parse: on_parse, on_error: on_error)
  loadn.each{|n| @node << n}
  subo!
  eqid!
  if @node.items.size == 1
    @node = @node.items.first
    @node.orphan!
  end
  @node
end
save(node) click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 18
def save(node)
  check! node
  write("#{node.id}.md", markup(node))
end

Protected Instance Methods

check!(node) click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 77
def check!(node)
  return if node.is_a? Node
  errmsg = "Invalid argument"
  raise ArgumentError, errmsg, caller #caller[1..-1]
end
eqid!() click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 64
def eqid!
  counter = {}
  @node.select{|n| n.id.empty?}.each do |n|
    # TODO maybe just .to_a.drop(1).select ?
    next if n == @node
    index = counter[n.parent] || 1
    counter[n.parent] = index + 1
    id = index.to_s.rjust(2, '0')
    id = '.' + id unless n.parent == @node
    n.id = id
  end
end
load(on_parse: nil, on_error: nil) click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 40
def load(on_parse: nil, on_error: nil)
  inside do
    [].tap do |ary|
      glob.each do |file|
        on_parse.call(file) if on_parse
        tmp = ReadNode.(file, on_error)
        tmp.each{|node| ary << node }
      end
    end
  end
end
markup(n) click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 83
def markup(n)
  head = "# [#{n.id}] #{n.title}"
  meta = n.meta.empty? ? '' : n.meta
    .map{|k,v| "#{k}: #{v}"}
    .unshift("{{")
    .push("}}")
    .join("\n")
  [head].tap do |txt|
    txt << "\n#{meta}" unless meta.empty?
    txt << "\n\n#{n.body}" unless n.body.empty?
  end.join + "\n"
end
subo!() click to toggle source
# File lib/clerq/repositories/node_repository.rb, line 52
def subo!
  @node.items
    .select{|n| n[:parent] && n[:parent] != n.parent.id}
    .each{|n|
      parent = @node.node(n[:parent])
      next unless parent
      parent << n
      @node.items.delete(n)
      n.meta.delete(:parent)
    }
end