class Jets::Router::Scope

def from

def from
  @options[:from]
end

def full_as

def full_as
  items = []
  current = self
  while current
    items.unshift(current.options[:as]) # <= option_name
    current = current.parent
  end
  items.compact!
  return if items.empty?
  items = singularize_leading(items)
  items.join('_')
end

def full_module

def full_module
  items = walk_parents do |current, i, result|
    mod = current.options[:module]
    next unless mod
    result.unshift(mod)
  end
  items.empty? ? nil : items.join('/')
end

def full_prefix

def full_prefix
  items = walk_parents do |current, i, result|
    prefix = current.options[:prefix]
    next unless prefix
    case current.from
    when :resources
      variable = prefix.to_s.split('/').last
      variable = ":#{variable.singularize}_id"
      result.unshift(variable)
      result.unshift(prefix)
    else # resource, namespace or general scope
      result.unshift(prefix)
    end
  end
  items.empty? ? nil : items.join('/')
end

def initialize(options = {}, parent = nil, level = 1)

def initialize(options = {}, parent = nil, level = 1)
  @options = options
  @parent = parent
  @level = level
end

def new(options={})

def new(options={})
  self.class.new(options, self, level + 1)
end

def root?

def root?
  @parent.nil?
end

def singularize_leading(items)

singularize all except last item
def singularize_leading(items)
  result = []
  items.each_with_index do |item, index|
    item = item.to_s
    r = index == items.size - 1 ? item : item.singularize
    result << r
  end
  result
end

def walk_parents

def walk_parents
  current, i, result = self, 0, []
  while current
    yield(current, i, result)
    current = current.parent
    i += 1
  end
  result
end