module ActionQuery::Route

Public Class Methods

result() click to toggle source
# File lib/action_query/route.rb, line 3
def self.result
  variances = HashWithIndifferentAccess.new(::Rails.application.config.action_query) rescue {}
  controllers = HashWithIndifferentAccess.new
  ::Rails.application.routes.routes.each do |route|
    next unless route.defaults[:controller]
    names = route.defaults[:controller].split('/')
    obj = controllers
    names.each_with_index do |name,index|
      obj[name.classify()] ||= HashWithIndifferentAccess.new
      obj = obj[name.classify()]
    end
    obj[route.defaults[:action]] ||= []
    notArray = !!route.path.spec.to_s.match(/\:id/) || ['CREATE','NEW'].include?(route.defaults[:action].upcase)
    if (variance = HashWithIndifferentAccess.new(variances[route.defaults[:controller]])).present?
      notArray = !variance[route.defaults[:action]][:array] unless variance[route.defaults[:action]].nil?
    end
    path = {
      parts:        route.parts.map(&:to_s),
      path:         route.path.spec.to_s,
      verb:         route.verb,
      requirements: route.required_parts.map(&:to_s),
      method:       route.defaults[:action],
      array:        !notArray
    }
    obj[route.defaults[:action]] << path
  end
  controllers
end
to_coffee() click to toggle source
# File lib/action_query/route.rb, line 32
def self.to_coffee
  result.map{|k,v| self.write_class("#{k}",v)}.flatten.join
end
write_class(key,val) click to toggle source
# File lib/action_query/route.rb, line 37
def self.write_class(key,val)
  classes = []
  res  = "class ActionQuery.#{key} extends ActionQuery.$Base\n"
  res += "  @methods("
  arr = []
  val.each do |k,v|
    if v.is_a? Array
      arr << "#{k}: [{#{v.map{|path| path.map{|l,m| "#{l}: #{m.inspect}"}.join(',')}.join('},{')}}]"
    else
      classes << write_class("#{key}.#{k}",v)
    end
  end
  res += arr.join(',')
  res += "  )\n"
  [res] | classes
end