rkh / sinatra-advanced-routes

Make Sinatra routes first class objects (extracted from BigBand).
Other
38 stars 5 forks source link

each_route simply returning route #9

Open TechRsch opened 8 years ago

TechRsch commented 8 years ago

Noticed the error in the trace as I updated the post.

TechRsch commented 8 years ago

Had a bit of a freeze there. Anyway, each_route seems to be returning the same 'route' array variable as is App.routes. As such, the instance attributes and methods fail.

The advanced_routes code I use is:

require 'kctiot'
App.each_route do |route|
  puts '-' * 20
  puts route.inspect
  puts route.app.name # "SomeSinatraApp"
  puts route.path # that's the path given as argument to get and akin
  puts route.verb # get / head / post / put / delete
  puts route.file # "some_sinatra_app.rb" or something
  puts route.line # the line number of the get/post/... statement
  puts route.pattern # that's the pattern internally used by sinatra
  puts route.keys # keys given when route was defined
  puts route.conditions # conditions given when route was defined
  puts route.block # the route's closure
end

The App.routes code I am using is:

    App.routes["GET"].each do |route|
      puts route.inspect
      puts route[0]
    end

App.routes returns:

[/\A\/\z/, [], [], #<Proc:0x3e079d8@D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611>]

App.each_route returns: [/\A\/\z/, [], [], #<Proc:0x3e079d8@D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611>]

The console, with trace, is:

D:\Bitnami\rubystack-2.2.5-3\ruby\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/ruby-debug-ide-0.6.1.beta2/bin/rdebug-ide --disable-int-handler --evaluation-timeout 10 --rubymine-protocol-extensions --port 49589 --host 0.0.0.0 --dispatcher-port 49590 -- D:/Bitnami/rubystack-2.2.5-3/ruby/bin/puma config.ru
Fast Debugger (ruby-debug-ide 0.6.1.beta2, debase 0.2.2.beta8, file filtering is supported) listens on 0.0.0.0:49589
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.4.0 (ruby 2.2.4-p230), codename: Owl Bowl Brawl
* Min threads: 8, max threads: 8
* Environment: development
[/\A\/\z/, [], [], #<Proc:0x3e079d8@D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611>]
(?-mix:\A\/\z)
--------------------
[/\A\/\z/, [], [], #<Proc:0x3e079d8@D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611>]
! Unable to load application: NoMethodError: undefined method `app' for #<Array:0x3e07900>
Uncaught exception: undefined method `app' for #<Array:0x3e07900>
    D:/Bitnami/rubystack-2.2.5-3/projects/kctiot/kctiot.rb:125:in `block in <top (required)>'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-advanced-routes-0.5.3/lib/sinatra/advanced_routes.rb:139:in `each'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-advanced-routes-0.5.3/lib/sinatra/advanced_routes.rb:139:in `block in each_route'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-advanced-routes-0.5.3/lib/sinatra/advanced_routes.rb:139:in `each'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-advanced-routes-0.5.3/lib/sinatra/advanced_routes.rb:139:in `inject'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/sinatra-advanced-routes-0.5.3/lib/sinatra/advanced_routes.rb:139:in `each_route'
    D:/Bitnami/rubystack-2.2.5-3/projects/kctiot/kctiot.rb:122:in `<top (required)>'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    config.ru:1:in `block in <main>'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
    config.ru:in `new'
    config.ru:in `<main>'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `eval'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `new_from_string'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:40:in `parse_file'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/configuration.rb:313:in `load_rackup'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/configuration.rb:242:in `app'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/runner.rb:123:in `load_and_bind'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/single.rb:84:in `run'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/launcher.rb:172:in `run'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/lib/puma/cli.rb:74:in `run'
    D:/Bitnami/rubystack-2.2.5-3/ruby/lib/ruby/gems/2.2.0/gems/puma-3.4.0/bin/puma:10:in `<top (required)>'
    D:/Bitnami/rubystack-2.2.5-3/ruby/bin/puma:22:in `load'
    D:/Bitnami/rubystack-2.2.5-3/ruby/bin/puma:22:in `<top (required)>'

Process finished with exit code 0

I ended up confused by this message: ! Unable to load application: NoMethodError: undefined methodapp' for #Array:0x3e07900`

The NoMethodError occurs on the line puts route.app.name

I'm not sure about the prefix "Unable to load application". It seems incoherent, especially tied to the fact that the line before the NoMethodError executed and the "undefined method" reference.

Am I doing something wrong or is it advanced_routes?