trackman 0.6.6 → 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/generators/controller/controller_generator.rb +2 -2
- data/lib/trackman/assets/composite_asset.rb +1 -20
- data/lib/trackman/assets/css_asset.rb +4 -3
- data/lib/trackman/assets/html_asset.rb +2 -21
- data/lib/trackman/scaffold/content_saver.rb +16 -2
- data/lib/trackman/urls/css_parser.rb +19 -0
- data/lib/trackman/urls/html_parser.rb +32 -0
- data/lib/trackman/urls.rb +6 -0
- data/lib/trackman/utility/core_extensions.rb +6 -0
- data/lib/trackman/version.rb +1 -1
- data/lib/trackman.rb +1 -0
- data/rails_generators/trackman_controller/trackman_controller_generator.rb +11 -8
- data/spec/html_asset_spec.rb +10 -1
- data/spec/scaffold_spec.rb +27 -0
- data/spec/test_data/html/favicon.html +13 -0
- metadata +7 -2
data/Gemfile.lock
CHANGED
@@ -5,7 +5,7 @@ module Trackman
|
|
5
5
|
argument :controller_name, :type => :string, :default => 'errors'
|
6
6
|
|
7
7
|
@@actions = ['not_found', 'error', 'maintenance', 'maintenance_error']
|
8
|
-
@@routes = {'
|
8
|
+
@@routes = {'404' => 'not_found', '500' => 'error', '503' => 'maintenance', '503-error' => 'maintenance_error'}
|
9
9
|
|
10
10
|
def create_controller
|
11
11
|
template "controller_layout.rb.erb", "app/controllers/#{controller_name}_controller.rb"
|
@@ -17,7 +17,7 @@ module Trackman
|
|
17
17
|
|
18
18
|
def create_routes
|
19
19
|
@@routes.each do |k, v|
|
20
|
-
route "match \"/#{k}\", :to => \"#{controller_name}##{v}\""
|
20
|
+
route "match \"#{controller_name.camelize}/#{k}\", :to => \"#{controller_name}##{v}\""
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -1,9 +1,6 @@
|
|
1
1
|
module Trackman
|
2
2
|
module Assets
|
3
|
-
module CompositeAsset
|
4
|
-
@@url ||= /url\(['"]?([^'"\)]+)['"]?\)/
|
5
|
-
@@import ||= /url\(['"]?[^'"\)]+['"]?\)/
|
6
|
-
|
3
|
+
module CompositeAsset
|
7
4
|
def self.included(mod)
|
8
5
|
mod.send(:include, Path::Resolver)
|
9
6
|
end
|
@@ -22,22 +19,6 @@ module Trackman
|
|
22
19
|
def asset_from(virtual, physical)
|
23
20
|
Asset.create(:virtual_path => virtual, :path => physical)
|
24
21
|
end
|
25
|
-
|
26
|
-
def inner_css_paths
|
27
|
-
#clean css comments
|
28
|
-
my_data = data.gsub(/\/\*.*\*\//m, '')
|
29
|
-
my_data = my_data.gsub(/\<\!\-\-.*\-\-\>/m, '')
|
30
|
-
my_data.scan(@@import).collect{|x| @@url.match(x)[1]}.select{|x| !x.embedded? }
|
31
|
-
end
|
32
22
|
end
|
33
23
|
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class String
|
37
|
-
def internal_path?
|
38
|
-
self !~ /^http/
|
39
|
-
end
|
40
|
-
def embedded?
|
41
|
-
self.include? 'data:'
|
42
|
-
end
|
43
24
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Trackman
|
2
2
|
module Assets
|
3
3
|
class CssAsset < Asset
|
4
|
-
include CompositeAsset
|
4
|
+
include CompositeAsset, Trackman::Urls::CssParser
|
5
5
|
|
6
6
|
protected
|
7
|
-
|
8
|
-
|
7
|
+
def children_paths
|
8
|
+
@children ||= parse_css(data)
|
9
|
+
end
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
@@ -2,29 +2,10 @@ require 'nokogiri'
|
|
2
2
|
module Trackman
|
3
3
|
module Assets
|
4
4
|
class HtmlAsset < Asset
|
5
|
-
include CompositeAsset
|
6
|
-
|
7
|
-
def document
|
8
|
-
@doc ||= Nokogiri::HTML(data)
|
9
|
-
end
|
10
|
-
|
11
|
-
def img_paths
|
12
|
-
@images_paths ||= refine_path(document.css('img'), 'src')
|
13
|
-
end
|
14
|
-
def js_paths
|
15
|
-
@js_paths ||= refine_path(document.xpath('//script'), 'src')
|
16
|
-
end
|
17
|
-
def css_paths
|
18
|
-
@css_paths ||= refine_path(document.xpath('//link[@type="text/css"]'), 'href')
|
19
|
-
end
|
5
|
+
include CompositeAsset, Trackman::Urls::HtmlParser
|
20
6
|
|
21
7
|
def children_paths
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
def refine_path(paths, node)
|
26
|
-
temp = paths.map{|n| n[node].to_s.gsub(/\?[^\?]*$/, '') }
|
27
|
-
temp.select{|n| n && n =~ /\w/ && n.internal_path? && !n.embedded? }
|
8
|
+
@children ||= parse(data)
|
28
9
|
end
|
29
10
|
end
|
30
11
|
end
|
@@ -4,9 +4,12 @@ module Trackman
|
|
4
4
|
module Scaffold
|
5
5
|
module ContentSaver
|
6
6
|
def self.included(base)
|
7
|
-
class << base
|
7
|
+
class << base
|
8
|
+
attr_accessor :nodes_to_remove, :nodes_to_edit, :text_to_edit, :mappings
|
9
|
+
end
|
8
10
|
base.nodes_to_remove = {}
|
9
11
|
base.nodes_to_edit = {}
|
12
|
+
base.text_to_edit = {}
|
10
13
|
|
11
14
|
if defined?(Rails)
|
12
15
|
base.mappings = { :maintenance => '503', :maintenance_error => '503-error', :not_found => '404', :error => '500' }
|
@@ -21,6 +24,9 @@ module Trackman
|
|
21
24
|
raise 'block parameter is mandatory' unless block_given?
|
22
25
|
nodes_to_edit[selector] = block
|
23
26
|
end
|
27
|
+
def gsub pattern, replacement
|
28
|
+
text_to_edit[pattern] = replacement
|
29
|
+
end
|
24
30
|
def remove selector, &predicate
|
25
31
|
nodes_to_remove[selector] = predicate
|
26
32
|
end
|
@@ -45,6 +51,13 @@ module Trackman
|
|
45
51
|
end
|
46
52
|
doc
|
47
53
|
end
|
54
|
+
def gsub_html text
|
55
|
+
self.class.text_to_edit.each do |pattern, replacement|
|
56
|
+
text.gsub! pattern, replacement
|
57
|
+
end
|
58
|
+
text
|
59
|
+
end
|
60
|
+
|
48
61
|
def xslt
|
49
62
|
@xslt ||= Nokogiri::XSLT(File.open("#{File.dirname(__FILE__)}/pretty-print.xslt"))
|
50
63
|
end
|
@@ -55,7 +68,8 @@ module Trackman
|
|
55
68
|
edit_nodes html
|
56
69
|
remove_nodes html
|
57
70
|
|
58
|
-
xslt.apply_to(html).to_s
|
71
|
+
html = xslt.apply_to(html).to_s
|
72
|
+
gsub_html(html)
|
59
73
|
end
|
60
74
|
|
61
75
|
def render_content
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Trackman
|
2
|
+
module Urls
|
3
|
+
module CssParser
|
4
|
+
@@url ||= /url\(['"]?([^'"\)]+)['"]?\)/
|
5
|
+
@@import ||= /url\(['"]?[^'"\)]+['"]?\)/
|
6
|
+
|
7
|
+
def parse_css value
|
8
|
+
value = value.dup
|
9
|
+
clean_comments value
|
10
|
+
value.scan(@@import).collect{|x| @@url.match(x)[1]}.select{|x| !x.embedded? }
|
11
|
+
end
|
12
|
+
|
13
|
+
def clean_comments value
|
14
|
+
value.gsub!(/\/\*.*\*\//m, '')
|
15
|
+
value.gsub!(/\<\!\-\-.*\-\-\>/m, '')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
module Trackman
|
3
|
+
module Urls
|
4
|
+
module HtmlParser
|
5
|
+
include CssParser
|
6
|
+
|
7
|
+
def parse html
|
8
|
+
doc = Nokogiri::HTML(html)
|
9
|
+
img(doc) + js(doc) + css(doc) + parse_css(html)
|
10
|
+
end
|
11
|
+
|
12
|
+
def img doc
|
13
|
+
imgs = refine(doc.css('img'), 'src')
|
14
|
+
icons = refine(doc.xpath('//link[@rel="icon"]'), 'href')
|
15
|
+
|
16
|
+
imgs + icons
|
17
|
+
end
|
18
|
+
|
19
|
+
def js doc
|
20
|
+
refine(doc.xpath('//script'), 'src')
|
21
|
+
end
|
22
|
+
def css doc
|
23
|
+
refine(doc.xpath('//link[@type="text/css"]'), 'href')
|
24
|
+
end
|
25
|
+
|
26
|
+
def refine(paths, node)
|
27
|
+
temp = paths.map{|n| n[node].to_s.gsub(/\?[^\?]*$/, '') }
|
28
|
+
temp.select{|n| n && n =~ /\w/ && n.internal_path? && !n.embedded? }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/trackman/version.rb
CHANGED
data/lib/trackman.rb
CHANGED
@@ -8,7 +8,7 @@ class TrackmanControllerGenerator < ::Rails::Generator::Base
|
|
8
8
|
attr_accessor :controller_name
|
9
9
|
|
10
10
|
@@actions = ['not_found', 'error', 'maintenance', 'maintenance_error']
|
11
|
-
@@routes = {'
|
11
|
+
@@routes = {'404' => 'not_found', '500' => 'error', '503' => 'maintenance', '503-error' => 'maintenance_error'}
|
12
12
|
|
13
13
|
def manifest # this method is default entrance of generator
|
14
14
|
puts route_doc false
|
@@ -27,15 +27,18 @@ class TrackmanControllerGenerator < ::Rails::Generator::Base
|
|
27
27
|
@@actions.each do |n|
|
28
28
|
m.template layout, "#{view_folder}/#{n}.html.#{engine}"
|
29
29
|
end
|
30
|
-
|
30
|
+
end
|
31
31
|
|
32
32
|
def route_doc show_as_comments = false
|
33
33
|
char = show_as_comments ? '#' : ''
|
34
|
-
|
35
|
-
|
36
|
-
#{char}
|
37
|
-
|
38
|
-
#{char} map
|
39
|
-
|
34
|
+
camelized = controller_name.camelize
|
35
|
+
|
36
|
+
doc = "\n#{char} Don't forget to add the routes in config/routes.rb\n#{char} ------\n"
|
37
|
+
@@routes.each do |k, v|
|
38
|
+
doc << "#{char} map.#{v} '#{camelized}/#{k}', :controller => '#{controller_name}', :action => :#{v}\n"
|
39
|
+
end
|
40
|
+
doc << "#{char} ------\n\n"
|
41
|
+
|
42
|
+
doc
|
40
43
|
end
|
41
44
|
end
|
data/spec/html_asset_spec.rb
CHANGED
@@ -53,7 +53,7 @@ describe Trackman::Assets::HtmlAsset do
|
|
53
53
|
asset = Asset.create(:path => 'spec/fixtures/composite_assets/query_string_in_path.html')
|
54
54
|
expected = [
|
55
55
|
'/assets/burndownchartslogo.png', '/assets/google.png', '/assets/facebook.png',
|
56
|
-
'/assets/twitter.png', '/assets/application.js', '/assets/application.css'
|
56
|
+
'/assets/twitter.png', '/assets/favicon.png', '/assets/application.js', '/assets/application.css'
|
57
57
|
]
|
58
58
|
|
59
59
|
actual = asset.children_paths
|
@@ -69,4 +69,13 @@ describe Trackman::Assets::HtmlAsset do
|
|
69
69
|
|
70
70
|
actual.should == expected
|
71
71
|
end
|
72
|
+
|
73
|
+
it "returns all link tags" do
|
74
|
+
asset = Asset.create(:path => 'spec/test_data/html/favicon.html')
|
75
|
+
expected = ['assets/trackman70x70.png', '/assets/application.css']
|
76
|
+
|
77
|
+
actual = asset.children_paths
|
78
|
+
|
79
|
+
actual.should == expected
|
80
|
+
end
|
72
81
|
end
|
data/spec/scaffold_spec.rb
CHANGED
@@ -125,4 +125,31 @@ describe Trackman::Scaffold::ContentSaver do
|
|
125
125
|
actual.should include('bobby')
|
126
126
|
actual.should include('span')
|
127
127
|
end
|
128
|
+
|
129
|
+
it "edits multiple things" do
|
130
|
+
TestSaver.gsub 'wallo', 'bobby'
|
131
|
+
|
132
|
+
TestSaver.gsub /ginette/, 'johnny'
|
133
|
+
|
134
|
+
html = "
|
135
|
+
<html>
|
136
|
+
<head></head>
|
137
|
+
<body>
|
138
|
+
<a href='wallo'></a>
|
139
|
+
<a href='ginette'></a>
|
140
|
+
<a href='/world'></a>
|
141
|
+
|
142
|
+
<div class='bobby'></div>
|
143
|
+
<div>
|
144
|
+
<p>allo</p>
|
145
|
+
</div>
|
146
|
+
</body>
|
147
|
+
</html>"
|
148
|
+
|
149
|
+
@saver.send(:gsub_html, html)
|
150
|
+
|
151
|
+
html.should_not include('/abc')
|
152
|
+
html.should include('bobby')
|
153
|
+
html.should include('johnny')
|
154
|
+
end
|
128
155
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
5
|
+
<link href="assets/trackman70x70.png" rel="icon" type="image/png">
|
6
|
+
<title>Trackman - Don't spend your time on maintenance pages</title>
|
7
|
+
<link href="http://fonts.googleapis.com/css?family=Arapey:400italic,400" rel="stylesheet" type="text/css">
|
8
|
+
<meta content="Rails and Sinatra maintenance pages made easy. Trackman is an Heroku add-on for building, deploying and hosting your maintenance pages." name="description">
|
9
|
+
<link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css">
|
10
|
+
</head>
|
11
|
+
<body id="home">
|
12
|
+
</body>
|
13
|
+
</html>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-10-
|
13
|
+
date: 2012-10-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
@@ -189,6 +189,9 @@ files:
|
|
189
189
|
- lib/trackman/scaffold/content_saver.rb
|
190
190
|
- lib/trackman/scaffold/pretty-print.xslt
|
191
191
|
- lib/trackman/tasks/trackman.rake
|
192
|
+
- lib/trackman/urls.rb
|
193
|
+
- lib/trackman/urls/css_parser.rb
|
194
|
+
- lib/trackman/urls/html_parser.rb
|
192
195
|
- lib/trackman/utility.rb
|
193
196
|
- lib/trackman/utility/configuration.rb
|
194
197
|
- lib/trackman/utility/core_extensions.rb
|
@@ -487,6 +490,7 @@ files:
|
|
487
490
|
- spec/test_data/external_paths/1.css
|
488
491
|
- spec/test_data/external_paths/1.html
|
489
492
|
- spec/test_data/html/comments.html
|
493
|
+
- spec/test_data/html/favicon.html
|
490
494
|
- spec/test_data/sample.html
|
491
495
|
- spec/test_data/test1.jpeg
|
492
496
|
- spec/test_data/test2.png
|
@@ -803,6 +807,7 @@ test_files:
|
|
803
807
|
- spec/test_data/external_paths/1.css
|
804
808
|
- spec/test_data/external_paths/1.html
|
805
809
|
- spec/test_data/html/comments.html
|
810
|
+
- spec/test_data/html/favicon.html
|
806
811
|
- spec/test_data/sample.html
|
807
812
|
- spec/test_data/test1.jpeg
|
808
813
|
- spec/test_data/test2.png
|