trackman 0.6.6 → 0.6.7
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/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
|