route_tractor 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d0f4d9d5c0c40527b89c8e944fcc9b64b3c5f24c
4
+ data.tar.gz: a03744276075082aae35c7c97124f4ef4918d433
5
+ SHA512:
6
+ metadata.gz: 0bc18cc8aa0ae80d8bedea853985f681d8af36b4a9013172ee1da1b6f2ad7d8c80fca78b0e6a0db07801b30249e7cafdf6beaf9266074f9b2645f2d6b5fbeca5
7
+ data.tar.gz: ec454b227854e1f8ef319034f26808f515dbe6822c8a056616da6d2fd2eaa6d4942db39ee00dff6d6e09af9760ea6da10cf875bf069f18fe859e99a8a524c4ce
@@ -0,0 +1,65 @@
1
+ require 'rails'
2
+
3
+ module RouteTractor
4
+ class Generator
5
+ REGEX = /([A-Z]+\s+)?(\/.*)/
6
+
7
+ def self.generate
8
+
9
+ FileUtils.mkdir_p('spec/routing/')
10
+
11
+ # prepare spec file
12
+ self.inject_header_code
13
+
14
+ puts "### Processing routes data..."
15
+
16
+ self.load_routes
17
+
18
+ # Finish-up spec file
19
+ self.inject_footer_code
20
+
21
+ puts "### Finished!"
22
+ puts "### Bye!"
23
+ end
24
+
25
+ def self.inject_header_code
26
+ header_text = "require \"spec_helper\"\ndescribe \"All routes\" do\n"
27
+ system('touch spec/routing/all_routes_spec.rb')
28
+ system("echo '#{header_text}' > spec/routing/all_routes_spec.rb")
29
+ end
30
+
31
+ def self.inject_footer_code
32
+ footer_text = "end"
33
+ system("echo '#{footer_text}' >> spec/routing/all_routes_spec.rb")
34
+ end
35
+
36
+ def self.generate_route_spec(http_verb, route, hash)
37
+ spec_str = "it { { :#{http_verb} => \"#{route}\" }.should route_to#{hash} }"
38
+ system("echo '#{spec_str}' >> spec/routing/all_routes_spec.rb")
39
+ end
40
+
41
+ def self.load_routes
42
+ puts "### Loading routes..."
43
+
44
+ Rails.application.routes.routes.each do |route|
45
+ match_data = REGEX.match(route.to_s)
46
+ next unless match_data
47
+ verb = match_data[1].strip
48
+
49
+ path = match_data[2].strip.gsub(/\(.:.*\)/, '').gsub(/:\w*/, '1').split[0]
50
+
51
+ if verb == 'ANY'
52
+ ["POST", "PUT", "GET", "DELETE"].each do |verb_variation|
53
+ routing_options = Rails.application.routes.recognize_path(path, :method => verb_variation).to_s.gsub(/{/, '(').gsub(/}/, ')')
54
+ verb_variation.downcase!
55
+ generate_route_spec(verb_variation.downcase, path, routing_options)
56
+ end
57
+ else
58
+ routing_options = Rails.application.routes.recognize_path(path, :method => verb).to_s.gsub(/{/, '(').gsub(/}/, ')')
59
+ verb.downcase!
60
+ generate_route_spec(verb.downcase, path, routing_options)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,11 @@
1
+ require 'route_tractor'
2
+
3
+ module RouteTractor
4
+ class Railtie < Rails::Railtie
5
+ railtie_name :route_tractor
6
+
7
+ rake_tasks do
8
+ load "route_tractor/tasks/route_tractor.rake"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ require 'route_tractor/generator'
2
+
3
+ namespace 'route_tractor' do
4
+ desc "Generate route specs"
5
+ task :generate => :environment do
6
+ RouteTractor::Generator.generate
7
+ end
8
+ end
@@ -0,0 +1 @@
1
+ require 'route_tractor/railtie' if defined?(Rails)
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: route_tractor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wilhelm Kirschbaum
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple route spec generator
14
+ email: wkirschbaum@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/route_tractor.rb
20
+ - lib/route_tractor/railtie.rb
21
+ - lib/route_tractor/generator.rb
22
+ - lib/route_tractor/tasks/route_tractor.rake
23
+ homepage: http://rubygems.org/gems/route_tractor
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.0.3
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Generates route specs
47
+ test_files: []