Sha256: 73751e9dfd0b342c9386cffd09738a8c0c6609701c24ad9821537ffa5890761c

Contents?: true

Size: 1008 Bytes

Versions: 1

Compression:

Stored size: 1008 Bytes

Contents

# frozen_string_literal: true

require 'marauders_map/version'
require 'active_support/core_ext/module/attribute_accessors_per_thread'

module MaraudersMap
  extend self

  UnrecitedPledgeError = Class.new(StandardError)

  PLEDGE = 'I solemnly swear that I am up to no good.'

  def pledge(statement)
    self.statement = statement
  end

  def reveal_routes!
    raise UnrecitedPledgeError, <<~MSG unless pledge_recited?
      In order to use Marauder's Map you must recite the pledge. Do so by adding the following to your code.

          MaraudersMap.pledge("#{PLEDGE}")
    MSG

    routes.each do |(_name, route)|
      app.routes.append(&route)
    end

    app.routes.finalize!
  end

  def draw(name, &routes)
    append_route(name, &routes)
  end

  private

  thread_mattr_accessor :statement, :routes

  def app
    Rails.application
  end

  def pledge_recited?
    statement == PLEDGE
  end

  def append_route(name, &definition)
    self.routes ||= {}
    routes[name] = definition
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
marauders_map-0.1.0 lib/marauders_map.rb