class Architecture::DSL

Public Class Methods

new(source:, destination:, output: STDOUT, level: 0) { |self| ... } click to toggle source
# File lib/architecture/dsl.rb, line 5
def initialize(source:, destination:, output: STDOUT, level: 0)
  @source = source
  @destination = destination
  @output = output
  @level = level

  yield(self)
end

Public Instance Methods

append(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil) click to toggle source
# File lib/architecture/dsl.rb, line 88
def append(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil)
  a = Entity.new(id: directory || file, prefix: location || @destination)

  @output.print("#{indentention}Appending `#{truncate(a.to_s)}` with content")

  Append.new(source: a, content: content, context: context).call

  @output.puts(" succeeded.")
end
copy(file: nil, directory: nil, as: nil, context: EMPTY_CONTEXT, &block) click to toggle source
# File lib/architecture/dsl.rb, line 14
def copy(file: nil, directory: nil, as: nil, context: EMPTY_CONTEXT, &block)
  a = Entity.new(id: directory || file, prefix: @source)
  b = Entity.new(id: as || directory || file, prefix: @destination)

  @output.print("#{indentention}Copying `#{truncate(a.to_s)}` to `#{truncate(b.to_s)}`")

  Copy.new(source: a, destination: b, context: context).call

  @output.puts(" succeeded.")

  if block_given? && directory
    within(directory: directory, &block)
  end
end
create(file: nil, directory: nil, content: nil, context: EMPTY_CONTEXT, location: nil, &block) click to toggle source
# File lib/architecture/dsl.rb, line 44
def create(file: nil, directory: nil, content: nil, context: EMPTY_CONTEXT, location: nil, &block)
  a = Entity.new(id: directory || file, prefix: location || @destination)

  @output.print("#{indentention}Creating `#{truncate(a.to_s)}`")

  Create.new(source: a, content: content, context: context).call

  @output.puts(" succeeded.")

  if block_given? && directory
    within(directory: directory, &block)
  end
end
delete(directory: nil, file: nil, location: nil) click to toggle source
# File lib/architecture/dsl.rb, line 58
def delete(directory: nil, file: nil, location: nil)
  a = Entity.new(id: directory || file, prefix: location || @destination)

  @output.print("#{indentention}Deleting `#{truncate(a.to_s)}`")

  Delete.new(source: a).call

  @output.puts(" succeeded.")
end
move(file: nil, directory: nil, as:, &block) click to toggle source
# File lib/architecture/dsl.rb, line 29
def move(file: nil, directory: nil, as:, &block)
  a = Entity.new(id: directory || file, prefix: @source)
  b = Entity.new(id: as, prefix: @destination)

  @output.print("#{indentention}Moving `#{truncate(a.to_s)}` to `#{truncate(b.to_s)}`")

  Move.new(source: a, destination: b).call

  @output.puts(" succeeded.")

  if block_given? && directory
    within(directory: directory, &block)
  end
end
overwrite(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil) click to toggle source
# File lib/architecture/dsl.rb, line 98
def overwrite(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil)
  a = Entity.new(id: directory || file, prefix: location || @destination)

  @output.print("#{indentention}Overwriting `#{truncate(a.to_s)}` with content")

  Overwrite.new(source: a, content: content, context: context).call

  @output.puts(" succeeded.")
end
prepend(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil) click to toggle source
# File lib/architecture/dsl.rb, line 78
def prepend(file:, content:, context: Architecture::EMPTY_CONTEXT, location: nil)
  a = Entity.new(id: file, prefix: location || @destination)

  @output.print("#{indentention}Prepending `#{truncate(a.to_s)}` with content")

  Prepend.new(source: a, content: content, context: context).call

  @output.puts(" succeeded.")
end
replace(file:, search:, content:, location: nil) click to toggle source
# File lib/architecture/dsl.rb, line 68
def replace(file:, search:, content:, location: nil)
  a = Entity.new(id: file, prefix: location || @destination)

  @output.print("#{indentention}Replacing content in `#{truncate(a.to_s)}`")

  Replace.new(source: a, search: search, content: content).call

  @output.puts(" succeeded.")
end
within(directory: nil, source: @source, destination: @destination, &block) click to toggle source
# File lib/architecture/dsl.rb, line 108
def within(directory: nil, source: @source, destination: @destination, &block)
  @output.puts "#{indentention}Within `#{truncate(join(@destination, directory || destination))}`"

  self.class.new(source: join(@source, directory || source), destination:  join(@destination, directory || destination), output: @output, level: @level + 1, &block)
end

Private Instance Methods

indentention() click to toggle source
# File lib/architecture/dsl.rb, line 118
        def indentention
  "  " * @level + "- "
end
join(*ids) click to toggle source
# File lib/architecture/dsl.rb, line 114
        def join(*ids)
  File.join(*ids.compact)
end
truncate(path) click to toggle source
# File lib/architecture/dsl.rb, line 122
        def truncate(path)
  path.split("/").last(@level + 1).join("/")
end