trackman 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -9,12 +9,11 @@ GIT
9
9
  PATH
10
10
  remote: .
11
11
  specs:
12
- trackman (0.5.7)
12
+ trackman (0.6.1)
13
13
  heroku (>= 2.26.2)
14
14
  json
15
15
  nokogiri
16
16
  rack
17
- rake
18
17
  rest-client
19
18
  versionomy
20
19
 
@@ -42,7 +41,6 @@ GEM
42
41
  netrc (0.7.7)
43
42
  nokogiri (1.5.5)
44
43
  rack (1.4.1)
45
- rake (0.9.2.2)
46
44
  rspec (2.10.0)
47
45
  rspec-core (~> 2.10.0)
48
46
  rspec-expectations (~> 2.10.0)
data/README.md CHANGED
@@ -5,7 +5,9 @@ You keep them within your project and Trackman syncs them to S3 when you deploy.
5
5
  Works out of the box for Ruby(1.8.7 and 1.9.3) on
6
6
  * Rails 2.3
7
7
  * Rails 3
8
+ * Sinatra
8
9
 
10
+ For a detailed tutorial of each framework integration visit the [Wiki](https://github.com/SynApps/trackman/wiki).
9
11
 
10
12
  ## Quick peek
11
13
  ### The first time
@@ -17,6 +19,8 @@ Works out of the box for Ruby(1.8.7 and 1.9.3) on
17
19
  Simply edit your static pages, link different assets, go crazy!
18
20
  Trackman will sync upon application boot on your next deployment.
19
21
 
22
+ ## How to use
23
+
20
24
  ### Conventions
21
25
  We assume your maintenance page is located at:
22
26
 
@@ -30,78 +34,17 @@ And the page to display if your app breaks during initialization:
30
34
  public/503-error.html
31
35
  ```
32
36
 
33
- ## Getting started
34
- ### Step 1 - Install the addon, add the gem and run bundle install
35
-
36
-
37
- ```console
38
- heroku addons:add trackman
39
- ```
40
-
41
-
42
- ```ruby
43
- gem 'trackman'
44
- ```
45
-
46
-
47
- ```console
48
- bundle install
49
- ```
50
-
51
- ##### Step 1.5 (Rails 2 only) - Generate Trackman tasks
52
-
53
- ```console
54
- ./script/generate trackman_tasks
55
- ```
56
-
57
-
58
- This will add trackman.rake to lib/tasks/
59
-
60
- ### Step 2 - Setup
61
-
62
-
63
- ```console
64
- rake trackman:setup
65
- ```
66
-
67
-
68
- This sets your initial heroku configurations and ensures that when your app is down or in maintenance your pages will be requested by heroku.
69
- If you already have maintenance or error pages configs for heroku, Trackman will copy with .bkp extensions before he overwrites them.
70
-
71
- ### Step 3 (optional) - Scaffold your static pages
72
-
73
- ##### Rails 2.3
74
-
75
- ```console
76
- ./script/generate trackman_controller [name]
77
- ```
78
-
79
- ##### Rails 3
80
-
81
-
82
- ```console
83
- rails generate trackman:controller [name]
84
- ```
85
-
86
- This will generate a special controller that, when on development, will create your maintenance pages for you when you execute its actions.
87
- Because Rails 3 can handle 500 and 404 pages dynamically, the controller also adds the required route to handle them.
88
- On Rails 2, it generates the 4 different static pages instead.
89
-
90
- The controller has class methods to filter the response output.
91
- You can find examples on how to use them within the controller itself.
92
-
93
- ### Step 4 - Deploy
94
- Now that you have your maintenance pages, you can commit and push to Heroku.
95
- Trackman will look for changes to your pages and linked assets and sync them on application boot.
96
-
97
37
  ### To troubleshoot the sync operation
98
38
 
39
+
99
40
  ```console
100
41
  heroku run rake trackman:sync
101
42
  ```
102
43
 
103
-
104
44
  Executing this task will throw exceptions instead of silently failing like the normal sync would.
45
+ You can also turn debugging on by adding TRACKMAN_DEBUG_ON=true in your env.
46
+ It will output every request done by restclient and also a diff about what is getting pushed.
47
+
105
48
 
106
49
  ### For best results, make sure you have those installed:
107
50
  * Heroku >= 2.26.2
@@ -7,7 +7,7 @@ module Trackman
7
7
  desc "Generates a controller to generate your static pages"
8
8
 
9
9
  @@actions = ['not_found', 'error', 'maintenance', 'maintenance_error']
10
- @@routes = {'404' => 'not_found', '500' => 'error', 'maintenance' => 'maintenance', 'maintenance-error' => 'maintenance_error'}
10
+ @@routes = {'not-found' => 'not_found', 'error' => 'error', 'maintenance' => 'maintenance', 'maintenance-error' => 'maintenance_error'}
11
11
 
12
12
  def create_controller
13
13
  template "controller_layout.rb.erb", "app/controllers/#{controller_name}_controller.rb"
@@ -16,7 +16,7 @@ module Trackman
16
16
  def create_app_config
17
17
  puts "
18
18
  ------
19
- Trackman added \"config.exceptions_app = self.routes\" in app/config/application.rb
19
+ Trackman added \"config.exceptions_app = self.routes\" in config/application.rb
20
20
  ------\n"
21
21
  application do
22
22
  "config.exceptions_app = self.routes"
@@ -1,6 +1,7 @@
1
- class ErrorsController < ApplicationController
1
+ class <%= controller_name.camelize %>Controller < ApplicationController
2
2
  include Trackman::Scaffold::ContentSaver
3
- after_filter :save_content if Rails.env.development?
3
+ after_filter :save_filters if Rails.env.development?
4
+ after_filter :render_filters
4
5
 
5
6
  # ContentSaver defines two class methods for filtering the ouput of your pages
6
7
  #
@@ -17,7 +17,6 @@ module Trackman
17
17
  base.extend ClassMethods
18
18
  end
19
19
 
20
-
21
20
  module ClassMethods
22
21
  def edit selector, &block
23
22
  raise 'block parameter is mandatory' unless block_given?
@@ -32,7 +31,10 @@ module Trackman
32
31
  def remove_nodes doc
33
32
  self.class.nodes_to_remove.each do |selector, predicate|
34
33
  nodes = doc.search(selector)
35
- nodes = nodes.select(&predicate) unless predicate.nil?
34
+ i = 0;
35
+ unless predicate.nil?
36
+ nodes = nodes.select { |n| r = predicate.call(n, i); i +=1;r }
37
+ end
36
38
  nodes.each{|n| n.remove }
37
39
  end
38
40
  doc
@@ -40,24 +42,38 @@ module Trackman
40
42
 
41
43
  def edit_nodes doc
42
44
  self.class.nodes_to_edit.each do |selector, block|
43
- doc.search(selector).each { |n| block.call(n) }
45
+ doc.search(selector).each_with_index { |n, i| block.call(n, i) }
44
46
  end
45
47
  doc
46
48
  end
49
+ def xslt
50
+ @xslt ||= Nokogiri::XSLT(File.open("#{File.dirname(__FILE__)}/pretty-print.xslt"))
51
+ end
52
+
53
+ def new_content
54
+ html = Nokogiri::HTML(response.body)
55
+
56
+ edit_nodes html
57
+ remove_nodes html
58
+
59
+ xslt.apply_to(html).to_s
60
+ end
61
+
62
+ def cache key
63
+ @cache ||= {}
64
+ @cache[key] || yield
65
+ end
47
66
 
48
- def save_content
67
+ def render_filters
68
+ response.body = cache(params[:action]) { new_content }
69
+ end
70
+
71
+ def save_filters
49
72
  to_write = self.class.mappings[params[:action].to_sym]
50
-
51
73
  unless to_write.nil?
52
74
  path = "/public/#{to_write}.html"
53
-
54
- xsl = Nokogiri::XSLT(File.open("#{File.dirname(__FILE__)}/pretty-print.xslt"))
55
- html = Nokogiri::HTML(response.body)
56
-
57
- edit_nodes html
58
- remove_nodes html
59
-
60
- File.open(Rails.root.to_s + path, 'w') { |f| f.write(xsl.apply_to(html).to_s) }
75
+ result = cache(params[:action]) { new_content }
76
+ File.open(Rails.root.to_s + path, 'w') { |f| f.write(result) }
61
77
  end
62
78
  end
63
79
  end
@@ -1,3 +1,3 @@
1
1
  module Trackman
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -1,7 +1,7 @@
1
- class ErrorsController < ApplicationController
1
+ class <%= controller_name.camelize %>Controller < ApplicationController
2
2
  include Trackman::Scaffold::ContentSaver
3
- after_filter :save_content if Rails.env.development?
4
-
3
+ after_filter :save_filters if Rails.env.development?
4
+ after_filter :render_filters
5
5
  # ContentSaver defines two class methods for filtering the ouput of your pages
6
6
  #
7
7
  # Note that it uses nokogiri to parse the output.
@@ -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 = {'404' => 'not_found', '500' => 'error', 'maintenance' => 'maintenance', 'maintenance-error' => 'maintenance_error'}
11
+ @@routes = {'not-found' => 'not_found', 'error' => 'error', 'maintenance' => 'maintenance', 'maintenance-error' => 'maintenance_error'}
12
12
 
13
13
  def manifest # this method is default entrance of generator
14
14
  puts route_doc false
@@ -27,12 +27,12 @@ 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
- end
30
+
31
31
 
32
32
  def route_doc show_as_comments = false
33
33
  char = show_as_comments ? '#' : ''
34
34
  "\n#{char} Don't forget to add the routes in config/routes.rb\n#{char} ------
35
- #{char} map.not_found '/not_found', :controller => '#{controller_name}', :action => :not_found
35
+ #{char} map.not_found '/not-found', :controller => '#{controller_name}', :action => :not_found
36
36
  #{char} map.error '/error', :controller => '#{controller_name}', :action => :error
37
37
  #{char} map.maintenance '/maintenance', :controller => '#{controller_name}', :action => :maintenance
38
38
  #{char} map.maintenance_error '/maintenance-error', :controller => '#{controller_name}', :action => :maintenance_error
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.0
4
+ version: 0.6.1
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-09 00:00:00.000000000 Z
13
+ date: 2012-10-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client