routler 0.0.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 97c46f72c4a9cc001d8000f0da27c56183f9c142
4
+ data.tar.gz: 8e6e8b1a53e8d213362440189c29d3bad3130ec9
5
+ SHA512:
6
+ metadata.gz: 007151e9ec3438da6e49ca167b95189883525e2259d1678b194e1e4fedae3ac9059d6eea03490a084c5be80d033be6c5e7577b51bf400100e25ee63a58dff4a7
7
+ data.tar.gz: a6111473d44f5a68a0fc59c3ef6b274864bfed86bbdaf55805dd8ae24770f0dd163437218a56962b73c468a5caaa016868c734a1b7730c7162a8170aebf45032
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in routler.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Jason Madsen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # routler
2
+
3
+ Convert your rails routes to a CSV for reporting, processing, etc.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'routler'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install routler
20
+
21
+ ## Usage
22
+
23
+ ```bash
24
+
25
+ routler -h
26
+
27
+ ```
28
+
29
+ ## Contributing
30
+
31
+ 1. Fork it ( https://github.com/[my-github-username]/routler/fork )
32
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
33
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
34
+ 4. Push to the branch (`git push origin my-new-feature`)
35
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ task :default => :spec
8
+ rescue LoadError
9
+ # no rspec available
10
+ end
data/bin/routler ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'routler'
4
+ require 'commander/import'
5
+
6
+ program :version, Routler::VERSION
7
+ program :description, 'convert your rails routes to a CSV for reporting, processing, etc'
8
+
9
+ default_command :build
10
+
11
+ command :build do |c|
12
+ c.syntax = 'routler build filename [options]'
13
+ c.summary = 'build csv from routes'
14
+ c.description = <<-EOF
15
+ Builds CSV files for your rail routes. 'filename' is assumed to be a file that
16
+ holds the output of a rake routes run. If no filename is passed, routler will
17
+ run rake routes in your cwd and use the contents out its output.
18
+
19
+ build is the default command so you can actually drop the build argument in all
20
+ of the following examples
21
+ EOF
22
+ c.example 'run rake routes in cwd and output csv to stdout', 'routler build'
23
+ c.example 'process input_file and write csv to stdout', 'routler build input_file'
24
+ c.example 'process input_file and write csv to a file named routes.csv', 'routler build input_file -o routes.csv'
25
+ c.option '--output STRING', 'output file path'
26
+ c.option '--stats BOOL', 'output stats'
27
+ c.action do |args, options|
28
+ options.default output: 'stdout', stats: false
29
+ formatter = Routler::Formatters::Csv.new
30
+ cs = Routler::Consumer.new
31
+ parser = Routler::Parser.new
32
+ content = formatter.format(parser.parse(cs.load_file(args[0])))
33
+ Routler::Presenter.new.display content, options.output
34
+ if options.stats
35
+ puts Routler::StatBuilder.new(parser).display
36
+ end
37
+ end
38
+ end
39
+
data/lib/routler.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "routler/version"
2
+ require "routler/parser"
3
+ require "routler/consumer"
4
+ require "routler/controller"
5
+ require "routler/presenter"
6
+ require "routler/formatters/csv"
7
+ require "routler/stat_builder"
8
+
9
+ module Routler
10
+ end
@@ -0,0 +1,18 @@
1
+ module Routler
2
+ class Consumer
3
+
4
+ def load_file path=nil
5
+ path ? IO.read(path) : build_routes
6
+ end
7
+
8
+ def build_routes
9
+ contents = ''
10
+ pipe = IO.popen("bundle exec rake routes")
11
+ while (line = pipe.gets)
12
+ contents += line
13
+ end
14
+ contents
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module Routler
2
+ class Controller
3
+
4
+ attr_accessor :actions
5
+ attr_accessor :name
6
+
7
+ def initialize(name)
8
+ @name = name
9
+ @actions = []
10
+ end
11
+
12
+ def add_action(action)
13
+ actions.push action unless actions.include? action
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'csv'
2
+
3
+ module Routler
4
+ module Formatters
5
+ class Csv
6
+
7
+ def initialize(controllers=[])
8
+ @controllers = controllers
9
+ end
10
+
11
+ def format(controllers=nil)
12
+ @controllers = controllers if controllers
13
+ CSV.generate do |csv|
14
+ csv << ['Controller', 'Action']
15
+ @controllers.each do |c|
16
+ c.actions.each do |a|
17
+ csv << [c.name, a]
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,56 @@
1
+ module Routler
2
+ class Parser
3
+
4
+ attr_accessor :controllers
5
+ attr_accessor :lines
6
+ attr_accessor :error_lines
7
+
8
+ def initialize
9
+ @controllers = Hash.new
10
+ @error_lines = []
11
+ @lines = 0
12
+ end
13
+
14
+ def parse(content)
15
+ content.each_line do |line|
16
+ @lines += 1
17
+ add_controller(parse_line line)
18
+ end
19
+ all_controllers
20
+ end
21
+
22
+ def parse_line(line)
23
+ match = line.match(/^(\s{1,})?(\S*\s\S*\s{1,}\/\S*)(?<cont>.*)\#(?<action>\S*)/)
24
+ controller = Hash.new
25
+ begin
26
+ if match[:cont]
27
+ controller[:name] = match[:cont].strip
28
+ controller[:action] = match[:action].strip.chomp
29
+ end
30
+ rescue
31
+ controller[:error] = line
32
+ end
33
+ controller
34
+ end
35
+
36
+ def add_controller(controller)
37
+ if controller.fetch :error, nil
38
+ @error_lines << controller[:error]
39
+ else
40
+ name = controller[:name]
41
+ action = controller[:action]
42
+ @controllers[name] = Controller.new(name) if !@controllers.fetch name, nil
43
+ @controllers[name].add_action action
44
+ end
45
+ end
46
+
47
+ def all_controllers
48
+ cont = []
49
+ @controllers.keys.sort.each do |k|
50
+ cont << @controllers[k]
51
+ end
52
+ cont
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ module Routler
2
+ class Presenter
3
+
4
+ def display content, output
5
+ if output == 'stdout'
6
+ puts content
7
+ else
8
+ File.open(output, 'w') {|f| f.write(content)}
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ module Routler
2
+ class StatBuilder
3
+
4
+ attr_accessor :parser
5
+
6
+ def initialize(parser)
7
+ @parser = parser
8
+ end
9
+
10
+ def display
11
+ controllers = @parser.all_controllers
12
+ num_actions = controllers.inject(0) {|sum, c| sum + c.actions.length}
13
+ output = " Stats:\n"
14
+ output += "=============================\n"
15
+ output += "Controllers found: #{controllers.length}\n"
16
+ output += " Actions found: #{num_actions}\n"
17
+ output += " Lines parsed: #{@parser.lines}\n"
18
+ output += " Parsing errors: #{@parser.error_lines.length}\n"
19
+ output += "=============================\n"
20
+ output += "Parsing error on the following lines:\n"
21
+ @parser.error_lines.each {|e| output += "#{e}"}
22
+ output
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Routler
2
+ VERSION = "0.0.2"
3
+ end
data/routler.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'routler/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "routler"
8
+ spec.version = Routler::VERSION
9
+ spec.authors = ["Jason Madsen"]
10
+ spec.email = ["knomedia@gmail.com"]
11
+ spec.summary = %q{Convert your rails routes to a CSV for reporting, processing, etc.}
12
+ spec.description = %q{Convert your rails routes to a CSV for reporting, processing, etc.}
13
+ spec.homepage = "https://github.com/knomedia/routler"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "commander"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.7"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec"
26
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler::Consumer do
4
+
5
+ before :each do
6
+ @consumer = Routler::Consumer.new
7
+ end
8
+
9
+ describe 'load_file' do
10
+ it 'load route content from a file' do
11
+ output = @consumer.load_file 'spec/support/routes.txt'
12
+ expect(output).to match (/conversations#destroy/)
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler::Controller do
4
+
5
+ before :each do
6
+ @controller = Routler::Controller.new('testing')
7
+ end
8
+
9
+ it 'should hold a default name' do
10
+ expect(@controller.name).to eq('testing')
11
+ end
12
+ it 'should start with an emptyp actions array' do
13
+ expect(@controller.actions).to eq([])
14
+ end
15
+
16
+
17
+ describe 'add_action' do
18
+ it 'should add actions' do
19
+ @controller.add_action('index')
20
+ expect(@controller.actions).to eq(['index'])
21
+ end
22
+
23
+ it 'should not add the same action more than once' do
24
+ @controller.add_action('index')
25
+ @controller.add_action('index')
26
+ expect(@controller.actions).to eq(['index'])
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler::Formatters::Csv do
4
+
5
+ before :each do
6
+ controllers = []
7
+ ['users', 'auth'].each do |controller|
8
+ a = Routler::Controller.new controller
9
+ a.add_action 'index'
10
+ a.add_action 'update'
11
+ a.add_action 'destroy'
12
+ controllers << a
13
+ end
14
+ @formatter = Routler::Formatters::Csv.new(controllers)
15
+ end
16
+
17
+ describe '#format' do
18
+
19
+ it 'should return the first line as headers' do
20
+ csv = @formatter.format
21
+ expect(csv.lines[0].chomp).to eq('Controller,Action')
22
+ end
23
+
24
+ it 'should return a row for each action' do
25
+ csv = @formatter.format
26
+ expect(csv.lines[6].chomp).to eq('auth,destroy')
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler::Parser do
4
+
5
+ before :each do
6
+ @p = Routler::Parser.new
7
+ end
8
+
9
+ it 'should have controllers, lines and error_lines attrs' do
10
+ expect(@p.controllers).to eq({})
11
+ expect(@p.lines).to eq(0)
12
+ expect(@p.error_lines).to eq([])
13
+ end
14
+
15
+ describe '#parse_line' do
16
+ it 'should parse a single line' do
17
+ line = "registration_confirmation GET /communications/:id/register(.:format) communication_channels#confirm"
18
+ output = @p.parse_line line
19
+ expect(output[:name]).to eq('communication_channels')
20
+ expect(output[:action]).to eq('confirm')
21
+ end
22
+
23
+ it 'should flag error when line parsing fails' do
24
+ line = "registration_confirmation GET/communications/:id/register(.:format)communication_channels#confirm"
25
+ output = @p.parse_line line
26
+ expect(output[:error]).to eq(line)
27
+ end
28
+ end
29
+
30
+ describe '#add_controller' do
31
+ it 'should add invalid parsed objects to error_lines' do
32
+ line = "registration_confirmation GET/communications/:id/register(.:format)communication_channels#confirm"
33
+ output = @p.parse_line line
34
+ @p.add_controller output
35
+ expect(@p.error_lines.first).to eq(line)
36
+ end
37
+
38
+ it 'should add valid parsed objects to controllers' do
39
+ line = "registration_confirmation GET /communications/:id/register(.:format) communication_channels#confirm"
40
+ output = @p.parse_line line
41
+ @p.add_controller(output)
42
+ expect(@p.controllers['communication_channels'].actions).to eq(['confirm'])
43
+ end
44
+
45
+ it 'should add additional valid parsed objects to a single controllers' do
46
+ line = "oauth_success GET /oauth_success(.:format) users#oauth_success"
47
+ line2 = "oauth GET /oauth(.:format) users#oauth"
48
+ @p.add_controller(@p.parse_line line)
49
+ @p.add_controller(@p.parse_line line2)
50
+ expect(@p.controllers['users'].actions).to eq(['oauth_success', 'oauth'])
51
+ end
52
+ end
53
+
54
+ describe '#parse' do
55
+ it 'should parse multiple lines' do
56
+ content = "oauth_success GET /oauth_success(.:format) users#oauth_success"
57
+ content = content + "\n"
58
+ content = content + "oauth GET /oauth(.:format) users#oauth"
59
+ @p.parse content
60
+ expect(@p.controllers['users'].actions).to eq(['oauth_success', 'oauth'])
61
+ end
62
+ end
63
+
64
+ describe '#all_controllers' do
65
+ it 'should return a sorted array of controllers' do
66
+ content = "oauth_success GET /oauth_success(.:format) foo#oauth_success"
67
+ content = content + "\n"
68
+ content = content + "oauth GET /oauth(.:format) bar#oauth"
69
+ @p.parse content
70
+ controller_names = @p.all_controllers.map {|c| c.name}
71
+ expect(controller_names).to eq(['bar', 'foo'])
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler::StatBuilder do
4
+
5
+ def controller_double name
6
+ actions = double()
7
+ allow(actions).to receive(:length).and_return(2)
8
+ ct = double()
9
+ allow(ct).to receive(:name).and_return(name)
10
+ allow(ct).to receive(:actions).and_return(actions)
11
+ ct
12
+ end
13
+
14
+ before :each do
15
+ controllers = []
16
+ ['users', 'auth'].each {|c| controllers << controller_double(c)}
17
+ parser = double()
18
+ allow(parser).to receive(:lines).and_return(50)
19
+ allow(parser).to receive(:error_lines).and_return(['errorline', 'another errorline'])
20
+ allow(parser).to receive(:all_controllers).and_return(controllers)
21
+ @sb = Routler::StatBuilder.new parser
22
+ end
23
+
24
+ it 'should have a parser' do
25
+ expect(@sb.parser).to_not eq(nil)
26
+ end
27
+
28
+ describe '#display' do
29
+
30
+ it 'should display the number of error lines' do
31
+ expect(@sb.display).to match(/Parsing errors: 2/)
32
+ end
33
+
34
+ it 'should display the number of lines parsed' do
35
+ expect(@sb.display).to match(/Lines parsed: 50/)
36
+ end
37
+
38
+ it 'should display the number of controllers found' do
39
+ expect(@sb.display).to match(/Controllers found: 2/)
40
+ end
41
+
42
+ it 'should display the number of actions found' do
43
+ expect(@sb.display).to match(/Actions found: 4/)
44
+ end
45
+ end
46
+
47
+ end
48
+
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routler do
4
+
5
+ it 'should have a version' do
6
+ expect(!!Routler::VERSION).to be true
7
+ end
8
+
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'routler'
2
+
3
+ RSpec.configure do |config|
4
+ config.run_all_when_everything_filtered = true
5
+ config.filter_run :focus
6
+ config.color = true
7
+
8
+ config.order = 'random'
9
+ end
@@ -0,0 +1,21 @@
1
+ submission_comment DELETE /submission_comments/:id(.:format) submission_comments#destroy
2
+ inbox GET /inbox(.:format) context#inbox
3
+ oauth_redirect_proxy GET /oauth/redirect_proxy(.:format) oauth_proxy#redirect_proxy
4
+ conversations_unread GET /conversations/unread(.:format) conversations#index {:redirect_scope=>"unread"}
5
+ conversations_starred GET /conversations/starred(.:format) conversations#index {:redirect_scope=>"starred"}
6
+ conversations_sent GET /conversations/sent(.:format) conversations#index {:redirect_scope=>"sent"}
7
+ conversations_archived GET /conversations/archived(.:format) conversations#index {:redirect_scope=>"archived"}
8
+ conversations_find_recipients GET /conversations/find_recipients(.:format) search#recipients
9
+ search_recipients GET /search/recipients(.:format) search#recipients
10
+ conversations_mark_all_as_read POST /conversations/mark_all_as_read(.:format) conversations#mark_all_as_read
11
+ conversations_watched_intro POST /conversations/watched_intro(.:format) conversations#watched_intro
12
+ conversation_batches GET /conversations/batches(.:format) conversations#batches
13
+ toggle_new_conversations POST /conversations/toggle_new_conversations(.:format) conversations#toggle_new_conversations
14
+ conversation_add_recipients POST /conversations/:conversation_id/add_recipients(.:format) conversations#add_recipients
15
+ conversation_add_message POST /conversations/:conversation_id/add_message(.:format) conversations#add_message
16
+ conversation_remove_messages POST /conversations/:conversation_id/remove_messages(.:format) conversations#remove_messages
17
+ conversations GET /conversations(.:format) conversations#index
18
+ POST /conversations(.:format) conversations#create
19
+ conversation GET /conversations/:id(.:format) conversations#show
20
+ PUT /conversations/:id(.:format) conversations#update
21
+ DELETE /conversations/:id(.:format) conversations#destroy
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: routler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jason Madsen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Convert your rails routes to a CSV for reporting, processing, etc.
70
+ email:
71
+ - knomedia@gmail.com
72
+ executables:
73
+ - routler
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - Gemfile
79
+ - LICENSE.txt
80
+ - README.md
81
+ - Rakefile
82
+ - bin/routler
83
+ - lib/routler.rb
84
+ - lib/routler/consumer.rb
85
+ - lib/routler/controller.rb
86
+ - lib/routler/formatters/csv.rb
87
+ - lib/routler/parser.rb
88
+ - lib/routler/presenter.rb
89
+ - lib/routler/stat_builder.rb
90
+ - lib/routler/version.rb
91
+ - routler.gemspec
92
+ - spec/routler/consumer_spec.rb
93
+ - spec/routler/controller_spec.rb
94
+ - spec/routler/formatters/csv_spec.rb
95
+ - spec/routler/parser_spec.rb
96
+ - spec/routler/stat_builder_spec.rb
97
+ - spec/routler/version_spec.rb
98
+ - spec/spec_helper.rb
99
+ - spec/support/routes.txt
100
+ homepage: https://github.com/knomedia/routler
101
+ licenses:
102
+ - MIT
103
+ metadata: {}
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 2.2.2
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Convert your rails routes to a CSV for reporting, processing, etc.
124
+ test_files:
125
+ - spec/routler/consumer_spec.rb
126
+ - spec/routler/controller_spec.rb
127
+ - spec/routler/formatters/csv_spec.rb
128
+ - spec/routler/parser_spec.rb
129
+ - spec/routler/stat_builder_spec.rb
130
+ - spec/routler/version_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/support/routes.txt
133
+ has_rdoc: