route_tractor 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []