sinatra-export 0.9

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ sinatra-export (0.9)
5
+ rack
6
+ sinatra
7
+ sinatra-advanced-routes
8
+ term-ansicolor
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ awesome_print (1.1.0)
14
+ backports (2.6.5)
15
+ monkey-lib (0.5.4)
16
+ backports
17
+ rack (1.4.1)
18
+ rack-protection (1.3.2)
19
+ rack
20
+ rack-test (0.6.2)
21
+ rack (>= 1.0)
22
+ rake (10.0.2)
23
+ sinatra (1.3.3)
24
+ rack (~> 1.3, >= 1.3.6)
25
+ rack-protection (~> 1.2)
26
+ tilt (~> 1.3, >= 1.3.3)
27
+ sinatra-advanced-routes (0.5.1)
28
+ monkey-lib (~> 0.5.0)
29
+ sinatra (~> 1.0)
30
+ sinatra-sugar (~> 0.5.0)
31
+ sinatra-sugar (0.5.1)
32
+ monkey-lib (~> 0.5.0)
33
+ sinatra (~> 1.0)
34
+ term-ansicolor (1.0.7)
35
+ test-unit (2.5.2)
36
+ tilt (1.3.3)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ awesome_print
43
+ rack-test
44
+ rake
45
+ sinatra-export!
46
+ test-unit
@@ -0,0 +1,88 @@
1
+ module Sinatra
2
+ class Export
3
+
4
+ @@file_extensions = %w(css js xml json html csv)
5
+
6
+ attr_accessor :app
7
+
8
+ include Rack::Test::Methods
9
+
10
+ require 'term/ansicolor'
11
+ class ColorString < String
12
+ include Term::ANSIColor
13
+ end
14
+
15
+ def initialize(app)
16
+ @app = app
17
+ end
18
+
19
+ def build!(dir)
20
+ handle_error_no_each_route! unless @app.respond_to?(:each_route)
21
+ handle_error_dir_not_found!(dir) unless dir_exists?(dir)
22
+ build_routes(dir)
23
+ end
24
+
25
+ private
26
+
27
+ def build_routes(dir)
28
+ @app.each_route do |route|
29
+ next if route.verb != 'GET' or not route.path.is_a? String
30
+ build_path(route.path, dir)
31
+ end
32
+ end
33
+
34
+ def build_path(path, dir)
35
+ ::FileUtils.mkdir_p(dir_for_path(path, dir))
36
+ ::File.open(file_for_path(path, dir), 'w+') do |f|
37
+ f.write(get_path(path).body)
38
+ end
39
+ end
40
+
41
+ def get_path(path)
42
+ self.get(path).tap do |resp|
43
+ handle_error_non_200!(path) unless resp.status == 200
44
+ end
45
+ end
46
+
47
+ def file_for_path(path, dir)
48
+ if path.match(/[^\/\.]+.(#{file_extensions.join("|")})$/)
49
+ ::File.join(dir, path)
50
+ else
51
+ ::File.join(dir, path, 'index.html')
52
+ end
53
+ end
54
+
55
+ def dir_exists?(dir)
56
+ ::File.exists?(dir) && ::File.directory?(dir)
57
+ end
58
+
59
+ def dir_for_path(path, dir)
60
+ file_for_path(path, dir).match(/(.*)\/[^\/]+$/)[1]
61
+ end
62
+
63
+ def file_extensions
64
+ @@file_extensions
65
+ end
66
+
67
+ def env
68
+ ENV['RACK_ENV']
69
+ end
70
+
71
+ def handle_error_no_each_route!
72
+ handle_error!("can't call app.each_route, did you include sinatra-advanced-routes?")
73
+ end
74
+
75
+ def handle_error_dir_not_found!(dir)
76
+ handle_error!("can't find output directory: #{dir}")
77
+ end
78
+
79
+ def handle_error_non_200!(path)
80
+ handle_error!("GET #{path} returned non-200 status code...")
81
+ end
82
+
83
+ def handle_error!(desc)
84
+ puts ColorString.new("failed: #{desc}").red; exit!
85
+ end
86
+
87
+ end
88
+ end
data/readme.md ADDED
@@ -0,0 +1,59 @@
1
+ # sinatra-export
2
+
3
+ > Exports your Sinatra app to static files. Depends on [sinatra-advanced-routes](https://github.com/rkh/sinatra-advanced-routes).
4
+
5
+ [![Build Status](https://travis-ci.org/hooktstudios/sinatra-static.png)](https://travis-ci.org/hooktstudios/sinatra-static)
6
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/hooktstudios/sinatra-static)
7
+
8
+ ## Installation
9
+
10
+ Add to your Gemfile :
11
+
12
+ ```ruby
13
+ gem 'sinatra-export'
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```ruby
19
+ builder = Sinatra::Export.new(App)
20
+ builder.build!('public/')
21
+ ```
22
+
23
+ ## Getting started
24
+
25
+ Sample Sinatra application building static pages :
26
+
27
+ ```ruby
28
+ require 'sinatra'
29
+ require 'sinatra/advanced_routes'
30
+ require 'sinatra_static'
31
+
32
+ class App < Sinatra::Base
33
+
34
+ register Sinatra::AdvancedRoutes
35
+
36
+ get '/' do
37
+ "homepage"
38
+ end
39
+
40
+ get '/contact' do
41
+ "contact"
42
+ end
43
+
44
+ end
45
+
46
+ builder = Sinatra::Export.new(App)
47
+ builder.build!('public/')
48
+ ```
49
+
50
+ Running your app ex. `ruby app.rb` will automatically generate theses files :
51
+
52
+ public/index.html -> "homepage"
53
+ public/contact/index.html -> "contact"
54
+
55
+ ### Advanced assets management
56
+
57
+ If you wish to generate your assets (CSS, JS, images) with an assets packaging system,
58
+ you may use [Sinatra-AssetPack](https://github.com/rstacruz/sinatra-assetpack) and build
59
+ your assets in the same target directory with `rake assetpack:build` task.
@@ -0,0 +1,31 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'sinatra-export'
3
+ s.version = '0.9'
4
+
5
+ s.authors = ['Jean-Philippe Doyle', 'Paul Asmuth']
6
+ s.date = '2013-01-16'
7
+ s.description = 'Export your sinatra app to a directory of static files.'
8
+ s.summary = 'Sinatra static export.'
9
+ s.email = 'jeanphilippe.doyle@hooktstudios.com'
10
+ s.files = [
11
+ 'Gemfile',
12
+ 'Gemfile.lock',
13
+ 'sinatra-export.gemspec',
14
+ 'lib/sinatra/export.rb',
15
+ 'readme.md'
16
+ ]
17
+ s.homepage = 'http://github.com/hooktstudios/sinatra-export'
18
+ s.license = 'MIT'
19
+ s.required_ruby_version = '>= 1.8.7'
20
+
21
+ s.add_runtime_dependency 'term-ansicolor'
22
+ s.add_runtime_dependency 'sinatra'
23
+ s.add_runtime_dependency 'sinatra-advanced-routes'
24
+ s.add_runtime_dependency 'rack'
25
+
26
+ s.add_development_dependency 'rack-test'
27
+ s.add_development_dependency 'rake'
28
+ s.add_development_dependency 'awesome_print'
29
+ s.add_development_dependency 'test-unit'
30
+ end
31
+
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-export
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.9'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jean-Philippe Doyle
9
+ - Paul Asmuth
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-01-16 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: term-ansicolor
17
+ prerelease: false
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ none: false
24
+ type: :runtime
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ none: false
31
+ - !ruby/object:Gem::Dependency
32
+ name: sinatra
33
+ prerelease: false
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ none: false
40
+ type: :runtime
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ none: false
47
+ - !ruby/object:Gem::Dependency
48
+ name: sinatra-advanced-routes
49
+ prerelease: false
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ none: false
56
+ type: :runtime
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ none: false
63
+ - !ruby/object:Gem::Dependency
64
+ name: rack
65
+ prerelease: false
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ none: false
72
+ type: :runtime
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ none: false
79
+ - !ruby/object:Gem::Dependency
80
+ name: rack-test
81
+ prerelease: false
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ none: false
88
+ type: :development
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ none: false
95
+ - !ruby/object:Gem::Dependency
96
+ name: rake
97
+ prerelease: false
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ none: false
104
+ type: :development
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ none: false
111
+ - !ruby/object:Gem::Dependency
112
+ name: awesome_print
113
+ prerelease: false
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ none: false
120
+ type: :development
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ none: false
127
+ - !ruby/object:Gem::Dependency
128
+ name: test-unit
129
+ prerelease: false
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ none: false
136
+ type: :development
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ none: false
143
+ description: Export your sinatra app to a directory of static files.
144
+ email: jeanphilippe.doyle@hooktstudios.com
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - Gemfile
150
+ - Gemfile.lock
151
+ - sinatra-export.gemspec
152
+ - lib/sinatra/export.rb
153
+ - readme.md
154
+ homepage: http://github.com/hooktstudios/sinatra-export
155
+ licenses:
156
+ - MIT
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: 1.8.7
166
+ none: false
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ none: false
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 1.8.24
176
+ signing_key:
177
+ specification_version: 3
178
+ summary: Sinatra static export.
179
+ test_files: []
180
+ has_rdoc: