routing_data 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/README.md +35 -2
- data/lib/routing_data/version.rb +1 -1
- data/lib/routing_data.rb +44 -2
- data/routing_data.gemspec +2 -2
- metadata +4 -4
    
        data/.gitignore
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # RoutingData
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            Simple solution that provides information about routes in your rails app.
         | 
| 4 4 |  | 
| 5 5 | 
             
            ## Installation
         | 
| 6 6 |  | 
| @@ -17,8 +17,41 @@ Or install it yourself as: | |
| 17 17 | 
             
                $ gem install routing_data
         | 
| 18 18 |  | 
| 19 19 | 
             
            ## Usage
         | 
| 20 | 
            +
            With RoutingData you have access to url helpers in your models:
         | 
| 20 21 |  | 
| 21 | 
            -
             | 
| 22 | 
            +
            ```ruby
         | 
| 23 | 
            +
            RoutingData.url_helpers.new_user_path
         | 
| 24 | 
            +
            # => "/users/new"
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            RoutingData.url_helpers.user_path(User.first)
         | 
| 27 | 
            +
            # => "/users/1"
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            RoutingData.url_helpers.post_path(Post.last)
         | 
| 30 | 
            +
            # => "/posts/2"
         | 
| 31 | 
            +
            ```
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            You can access to lists of controllers and actions in your application (this is helpful for authorization purposes):
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            ```ruby
         | 
| 36 | 
            +
            RoutingData.controllers_actions_map
         | 
| 37 | 
            +
            # => {:home=>[:index], :blogs=>[:index, :create, :new, :edit, :show, :update, :destroy], :categories=>[:index, :create, :new, :edit, :show, :update, :destroy], :posts=>[:index, :create, :new, :edit, :show, :update, :destroy], :users=>[:index, :create, :new, :edit, :show, :update, :destroy, :show]}
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            RoutingData.controllers
         | 
| 40 | 
            +
            # => [:home, :blogs, :categories, :posts, :users]
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            RoutingData.actions_for(:users)
         | 
| 43 | 
            +
            # => [:index, :create, :new, :edit, :show, :update, :destroy, :show]
         | 
| 44 | 
            +
            ```
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            You can also generate json-data about routes and use it in your Javascript (in progress):
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            ```ruby
         | 
| 49 | 
            +
            RoutingData.routes_data
         | 
| 50 | 
            +
            # => [{:name=>"root", :path=>"/", :controller=>"home", :action=>"index", :parts=>[]}, {:name=>"blogs", :path=>"/blogs(.:format)", :controller=>"blogs", :action=>"index", :parts=>[:format]}, {:name=>"new_blog", :path=>"/blogs/new(.:format)", :controller=>"blogs", :action=>"new", :parts=>[:format]}, {:name=>"edit_blog", :path=>"/blogs/:id/edit(.:format)", :controller=>"blogs", :action=>"edit", :parts=>[:id, :format]}, {:name=>"blog", :path=>"/blogs/:id(.:format)", :controller=>"blogs", :action=>"show", :parts=>[:id, :format]}, {:name=>"categories", :path=>"/categories(.:format)", :controller=>"categories", :action=>"index", :parts=>[:format]}, {:name=>"new_category", :path=>"/categories/new(.:format)", :controller=>"categories", :action=>"new", :parts=>[:format]}, {:name=>"edit_category", :path=>"/categories/:id/edit(.:format)", :controller=>"categories", :action=>"edit", :parts=>[:id, :format]}, {:name=>"category", :path=>"/categories/:id(.:format)", :controller=>"categories", :action=>"show", :parts=>[:id, :format]}, {:name=>"posts", :path=>"/posts(.:format)", :controller=>"posts", :action=>"index", :parts=>[:format]}, {:name=>"new_post", :path=>"/posts/new(.:format)", :controller=>"posts", :action=>"new", :parts=>[:format]}, {:name=>"edit_post", :path=>"/posts/:id/edit(.:format)", :controller=>"posts", :action=>"edit", :parts=>[:id, :format]}, {:name=>"post", :path=>"/posts/:id(.:format)", :controller=>"posts", :action=>"show", :parts=>[:id, :format]}, {:name=>"users", :path=>"/users(.:format)", :controller=>"users", :action=>"index", :parts=>[:format]}, {:name=>"new_user", :path=>"/users/new(.:format)", :controller=>"users", :action=>"new", :parts=>[:format]}, {:name=>"edit_user", :path=>"/users/:id/edit(.:format)", :controller=>"users", :action=>"edit", :parts=>[:id, :format]}, {:name=>"user", :path=>"/users/:id(.:format)", :controller=>"users", :action=>"show", :parts=>[:id, :format]}, {:name=>"show_user", :path=>"/user/ololo/:user_id(.:format)", :controller=>"users", :action=>"show", :parts=>[:user_id, :format]}]
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            RoutingData.routes_json_data
         | 
| 53 | 
            +
            # => "[{\"name\":\"root\",\"path\":\"/\",\"controller\":\"home\",\"action\":\"index\",\"parts\":[]},{\"name\":\"blogs\",\"path\":\"/blogs(.:format)\",\"controller\":\"blogs\",\"action\":\"index\",\"parts\":[\"format\"]},{\"name\":\"new_blog\",\"path\":\"/blogs/new(.:format)\",\"controller\":\"blogs\",\"action\":\"new\",\"parts\":[\"format\"]},{\"name\":\"edit_blog\",\"path\":\"/blogs/:id/edit(.:format)\",\"controller\":\"blogs\",\"action\":\"edit\",\"parts\":[\"id\",\"format\"]},{\"name\":\"blog\",\"path\":\"/blogs/:id(.:format)\",\"controller\":\"blogs\",\"action\":\"show\",\"parts\":[\"id\",\"format\"]},{\"name\":\"categories\",\"path\":\"/categories(.:format)\",\"controller\":\"categories\",\"action\":\"index\",\"parts\":[\"format\"]},{\"name\":\"new_category\",\"path\":\"/categories/new(.:format)\",\"controller\":\"categories\",\"action\":\"new\",\"parts\":[\"format\"]},{\"name\":\"edit_category\",\"path\":\"/categories/:id/edit(.:format)\",\"controller\":\"categories\",\"action\":\"edit\",\"parts\":[\"id\",\"format\"]},{\"name\":\"category\",\"path\":\"/categories/:id(.:format)\",\"controller\":\"categories\",\"action\":\"show\",\"parts\":[\"id\",\"format\"]},{\"name\":\"posts\",\"path\":\"/posts(.:format)\",\"controller\":\"posts\",\"action\":\"index\",\"parts\":[\"format\"]},{\"name\":\"new_post\",\"path\":\"/posts/new(.:format)\",\"controller\":\"posts\",\"action\":\"new\",\"parts\":[\"format\"]},{\"name\":\"edit_post\",\"path\":\"/posts/:id/edit(.:format)\",\"controller\":\"posts\",\"action\":\"edit\",\"parts\":[\"id\",\"format\"]},{\"name\":\"post\",\"path\":\"/posts/:id(.:format)\",\"controller\":\"posts\",\"action\":\"show\",\"parts\":[\"id\",\"format\"]},{\"name\":\"users\",\"path\":\"/users(.:format)\",\"controller\":\"users\",\"action\":\"index\",\"parts\":[\"format\"]},{\"name\":\"new_user\",\"path\":\"/users/new(.:format)\",\"controller\":\"users\",\"action\":\"new\",\"parts\":[\"format\"]},{\"name\":\"edit_user\",\"path\":\"/users/:id/edit(.:format)\",\"controller\":\"users\",\"action\":\"edit\",\"parts\":[\"id\",\"format\"]},{\"name\":\"user\",\"path\":\"/users/:id(.:format)\",\"controller\":\"users\",\"action\":\"show\",\"parts\":[\"id\",\"format\"]},{\"name\":\"show_user\",\"path\":\"/user/ololo/:user_id(.:format)\",\"controller\":\"users\",\"action\":\"show\",\"parts\":[\"user_id\",\"format\"]}]"
         | 
| 54 | 
            +
            ```
         | 
| 22 55 |  | 
| 23 56 | 
             
            ## Contributing
         | 
| 24 57 |  | 
    
        data/lib/routing_data/version.rb
    CHANGED
    
    
    
        data/lib/routing_data.rb
    CHANGED
    
    | @@ -11,6 +11,16 @@ module RoutingData | |
| 11 11 | 
             
                @all_routes
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 | 
            +
              # Returns url helpers with pathes
         | 
| 15 | 
            +
              def self.url_helpers
         | 
| 16 | 
            +
                unless @url_helpers
         | 
| 17 | 
            +
                  Rails.application.reload_routes!
         | 
| 18 | 
            +
                  url_helpers_module = Rails.application.routes.url_helpers
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                @url_helpers ||= url_helpers_module
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 14 24 | 
             
              # Returns controllers -> actions map
         | 
| 15 25 | 
             
              # Example:
         | 
| 16 26 | 
             
              # RoutingData.controlles_actions_map
         | 
| @@ -40,9 +50,9 @@ module RoutingData | |
| 40 50 |  | 
| 41 51 | 
             
              # Returns array of actions for specific controller
         | 
| 42 52 | 
             
              # Example:
         | 
| 43 | 
            -
              # RoutingData. | 
| 53 | 
            +
              # RoutingData.actions_for(:pages)
         | 
| 44 54 | 
             
              # #=> [:index, :show, :new, :edit, :create, :update, :destroy]
         | 
| 45 | 
            -
              def self. | 
| 55 | 
            +
              def self.actions_for(controller)
         | 
| 46 56 | 
             
                controllers_actions_map[controller] || []
         | 
| 47 57 | 
             
              end
         | 
| 48 58 |  | 
| @@ -50,4 +60,36 @@ module RoutingData | |
| 50 60 | 
             
                @controllers ||= controllers_actions_map.keys
         | 
| 51 61 | 
             
              end
         | 
| 52 62 |  | 
| 63 | 
            +
              def self.routes_data(opts = {})
         | 
| 64 | 
            +
                @routes_data ||= all_routes.to_a.map do |route|
         | 
| 65 | 
            +
                  if route.name
         | 
| 66 | 
            +
                    {
         | 
| 67 | 
            +
                      name:       route.name,
         | 
| 68 | 
            +
                      path:       route.path.spec.to_s,
         | 
| 69 | 
            +
                      controller: route.defaults[:controller],
         | 
| 70 | 
            +
                      action:     route.defaults[:action],
         | 
| 71 | 
            +
                      parts:      route.parts
         | 
| 72 | 
            +
                    }
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
                end.compact!
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                if opts[:for_name]
         | 
| 77 | 
            +
                  routes_data = @routes_data.select { |route| route[:name] == opts[:for_name] }
         | 
| 78 | 
            +
                elsif opts[:for_name_in]
         | 
| 79 | 
            +
                  routes_data = @routes_data.select { |route| route[:for_name_in].include? route[:name] }
         | 
| 80 | 
            +
                elsif opts[:for_controller]
         | 
| 81 | 
            +
                  routes_data = @routes_data.select { |route| route[:controller] == opts[:for_controller] }
         | 
| 82 | 
            +
                elsif opts[:for_controllers]
         | 
| 83 | 
            +
                  routes_data = @routes_data.select { |route| opts[:for_controllers].include? route[:controller] }
         | 
| 84 | 
            +
                else
         | 
| 85 | 
            +
                  routes_data = @routes_data
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                routes_data
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              def self.routes_json_data(opts = {})
         | 
| 92 | 
            +
                @routes_json_data ||= routes_data(opts).to_json
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 53 95 | 
             
            end
         | 
    
        data/routing_data.gemspec
    CHANGED
    
    | @@ -8,8 +8,8 @@ Gem::Specification.new do |gem| | |
| 8 8 | 
             
              gem.version       = RoutingData::VERSION
         | 
| 9 9 | 
             
              gem.authors       = ["Vladimir Melnick"]
         | 
| 10 10 | 
             
              gem.email         = ["egotraumatic@gmail.com"]
         | 
| 11 | 
            -
              gem.description   = %q{Simple solution that provides information about  | 
| 12 | 
            -
              gem.summary       = %q{Simple solution that provides information about  | 
| 11 | 
            +
              gem.description   = %q{Simple solution that provides information about routes in your rails app.}
         | 
| 12 | 
            +
              gem.summary       = %q{Simple solution that provides information about routes in your rails app.}
         | 
| 13 13 | 
             
              gem.homepage      = ""
         | 
| 14 14 |  | 
| 15 15 | 
             
              gem.files         = `git ls-files`.split($/)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: routing_data
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,9 +9,9 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-12-09 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 | 
            -
            description: Simple solution that provides information about  | 
| 14 | 
            +
            description: Simple solution that provides information about routes in your rails
         | 
| 15 15 | 
             
              app.
         | 
| 16 16 | 
             
            email:
         | 
| 17 17 | 
             
            - egotraumatic@gmail.com
         | 
| @@ -50,6 +50,6 @@ rubyforge_project: | |
| 50 50 | 
             
            rubygems_version: 1.8.24
         | 
| 51 51 | 
             
            signing_key: 
         | 
| 52 52 | 
             
            specification_version: 3
         | 
| 53 | 
            -
            summary: Simple solution that provides information about  | 
| 53 | 
            +
            summary: Simple solution that provides information about routes in your rails app.
         | 
| 54 54 | 
             
            test_files: []
         | 
| 55 55 | 
             
            has_rdoc: 
         |