sinatra-static 0.1.0
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 +6 -0
- data/Gemfile.lock +34 -0
- data/lib/sinatra_static.rb +86 -0
- data/readme.rdoc +65 -0
- data/sinatra-static.gemspec +46 -0
- metadata +114 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
backports (2.3.0)
|
5
|
+
monkey-lib (0.5.4)
|
6
|
+
backports
|
7
|
+
rack (1.3.4)
|
8
|
+
rack-protection (1.1.4)
|
9
|
+
rack
|
10
|
+
rack-test (0.6.1)
|
11
|
+
rack (>= 1.0)
|
12
|
+
sinatra (1.3.1)
|
13
|
+
rack (>= 1.3.4, ~> 1.3)
|
14
|
+
rack-protection (>= 1.1.2, ~> 1.1)
|
15
|
+
tilt (>= 1.3.3, ~> 1.3)
|
16
|
+
sinatra-advanced-routes (0.5.1)
|
17
|
+
monkey-lib (~> 0.5.0)
|
18
|
+
sinatra (~> 1.0)
|
19
|
+
sinatra-sugar (~> 0.5.0)
|
20
|
+
sinatra-sugar (0.5.1)
|
21
|
+
monkey-lib (~> 0.5.0)
|
22
|
+
sinatra (~> 1.0)
|
23
|
+
term-ansicolor (1.0.7)
|
24
|
+
tilt (1.3.3)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
rack
|
31
|
+
rack-test
|
32
|
+
sinatra
|
33
|
+
sinatra-advanced-routes
|
34
|
+
term-ansicolor
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class SinatraStatic
|
2
|
+
|
3
|
+
@@file_extensions = %w(css js xml json html)
|
4
|
+
|
5
|
+
attr_accessor :app
|
6
|
+
|
7
|
+
include Rack::Test::Methods
|
8
|
+
|
9
|
+
require 'term/ansicolor'
|
10
|
+
class ColorString < String
|
11
|
+
include Term::ANSIColor
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(app)
|
15
|
+
@app = app
|
16
|
+
end
|
17
|
+
|
18
|
+
def build!(dir)
|
19
|
+
handle_error_no_each_route! unless @app.respond_to?(:each_route)
|
20
|
+
handle_error_dir_not_found!(dir) unless dir_exists?(dir)
|
21
|
+
build_routes(dir)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def build_routes(dir)
|
27
|
+
@app.each_route do |route|
|
28
|
+
next unless route.verb == 'GET'
|
29
|
+
build_path(route.path, dir)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_path(path, dir)
|
34
|
+
::FileUtils.mkdir_p(dir_for_path(path, dir))
|
35
|
+
::File.open(file_for_path(path, dir), 'w+') do |f|
|
36
|
+
f.write(get_path(path).body)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_path(path)
|
41
|
+
self.get(path).tap do |resp|
|
42
|
+
handle_error_non_200(route) unless resp.status == 200
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def file_for_path(path, dir)
|
47
|
+
if path.match(/[^\/\.]+.(#{file_extensions.join("|")})$/)
|
48
|
+
::File.join(dir, path)
|
49
|
+
else
|
50
|
+
::File.join(dir, path, 'index.html')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def dir_exists?(dir)
|
55
|
+
::File.exists?(dir) && ::File.directory?(dir)
|
56
|
+
end
|
57
|
+
|
58
|
+
def dir_for_path(path, dir)
|
59
|
+
file_for_path(path, dir).match(/(.*)\/[^\/]+$/)[1]
|
60
|
+
end
|
61
|
+
|
62
|
+
def file_extensions
|
63
|
+
@@file_extensions
|
64
|
+
end
|
65
|
+
|
66
|
+
def env
|
67
|
+
ENV['RACK_ENV']
|
68
|
+
end
|
69
|
+
|
70
|
+
def handle_error_no_each_route!
|
71
|
+
handle_error!("can't call app.each_route, did you include sinatra-advanced-routes?")
|
72
|
+
end
|
73
|
+
|
74
|
+
def handle_error_dir_not_found!(dir)
|
75
|
+
handle_error!("can't find output directory: #{dir}")
|
76
|
+
end
|
77
|
+
|
78
|
+
def handle_error_non_200!(route)
|
79
|
+
handle_error!("GET #{route.path} returned non-200 status code...")
|
80
|
+
end
|
81
|
+
|
82
|
+
def handle_error!(desc)
|
83
|
+
puts ColorString.new("failed: #{desc}").red; exit!
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/readme.rdoc
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
= sinatra-static
|
2
|
+
|
3
|
+
export your sinatra app to a directory of static files. requires "sinatra-advanced-routes". get requests and response-status 200 only (no redirects). you also have to copy the public-dir yourself (if you're using it).
|
4
|
+
|
5
|
+
|
6
|
+
== usage
|
7
|
+
|
8
|
+
require 'sinatra_static'
|
9
|
+
|
10
|
+
builder = SinatraStatic.new(MySinatraApp)
|
11
|
+
builder.build!('/Users/paul/my_static_site')
|
12
|
+
|
13
|
+
|
14
|
+
= example
|
15
|
+
|
16
|
+
this simple app:
|
17
|
+
|
18
|
+
require 'sinatra'
|
19
|
+
require "sinatra/advanced_routes"
|
20
|
+
require 'sinatra_static'
|
21
|
+
|
22
|
+
class MyApp::App < Sinatra::Base
|
23
|
+
|
24
|
+
get '/' do
|
25
|
+
"my homepage"
|
26
|
+
end
|
27
|
+
|
28
|
+
get '/blog' do
|
29
|
+
"blog index"
|
30
|
+
end
|
31
|
+
|
32
|
+
get '/blog/ajax.html' do
|
33
|
+
"blog index w/o layout"
|
34
|
+
end
|
35
|
+
|
36
|
+
%w(page1 page2 page3).each do |page|
|
37
|
+
get "/blog/#{page}" do
|
38
|
+
"blog page: #{page}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
get '/dynamic.js' do
|
43
|
+
"my generated javascript"
|
44
|
+
end
|
45
|
+
|
46
|
+
get '/data.json' do
|
47
|
+
"my generated json"
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
builder = SinatraStatic.new(MyApp:App)
|
53
|
+
builder.build!('/Users/paul/my_static_site')
|
54
|
+
|
55
|
+
|
56
|
+
will generate this output:
|
57
|
+
|
58
|
+
~/my_static_site/index.html -> "my homepage"
|
59
|
+
~/my_static_site/blog/index.html -> "blog index"
|
60
|
+
~/my_static_site/blog/ajax.html -> "blog index w/o layout"
|
61
|
+
~/my_static_site/blog/page1/index.html -> "blog page: page1"
|
62
|
+
~/my_static_site/blog/page2/index.html -> "blog page: page2"
|
63
|
+
~/my_static_site/blog/page3/index.html -> "blog page: page3"
|
64
|
+
~/my_static_site/dynamic.js -> "my generated javascript"
|
65
|
+
~/my_static_site/data.json -> "my generated json"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "sinatra-static"
|
3
|
+
s.version = "0.1.0"
|
4
|
+
|
5
|
+
s.authors = ["Paul Asmuth"]
|
6
|
+
s.date = "2011-10-16"
|
7
|
+
s.description = "export your sinatra app to a directory of static files"
|
8
|
+
s.email = "paul@paulasmuth.com"
|
9
|
+
s.files = [
|
10
|
+
"Gemfile",
|
11
|
+
"Gemfile.lock",
|
12
|
+
"sinatra-static.gemspec",
|
13
|
+
"lib/sinatra_static.rb",
|
14
|
+
"readme.rdoc"
|
15
|
+
]
|
16
|
+
s.homepage = "http://github.com/paulasmuth/sinatra-static"
|
17
|
+
s.licenses = ["MIT"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubygems_version = "1.8.10"
|
20
|
+
s.summary = "export your sinatra app to a directory of static files"
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_runtime_dependency(%q<term-ansicolor>, [">= 0"])
|
27
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
28
|
+
s.add_runtime_dependency(%q<sinatra-advanced-routes>, [">= 0"])
|
29
|
+
s.add_runtime_dependency(%q<rack>, [">= 0"])
|
30
|
+
s.add_runtime_dependency(%q<rack-test>, [">= 0"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
33
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
34
|
+
s.add_dependency(%q<sinatra-advanced-routes>, [">= 0"])
|
35
|
+
s.add_dependency(%q<rack>, [">= 0"])
|
36
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
37
|
+
end
|
38
|
+
else
|
39
|
+
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
40
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
41
|
+
s.add_dependency(%q<sinatra-advanced-routes>, [">= 0"])
|
42
|
+
s.add_dependency(%q<rack>, [">= 0"])
|
43
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra-static
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Paul Asmuth
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-10-16 00:00:00 +02:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: term-ansicolor
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sinatra
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: sinatra-advanced-routes
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rack
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rack-test
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
71
|
+
description: export your sinatra app to a directory of static files
|
72
|
+
email: paul@paulasmuth.com
|
73
|
+
executables: []
|
74
|
+
|
75
|
+
extensions: []
|
76
|
+
|
77
|
+
extra_rdoc_files: []
|
78
|
+
|
79
|
+
files:
|
80
|
+
- Gemfile
|
81
|
+
- Gemfile.lock
|
82
|
+
- sinatra-static.gemspec
|
83
|
+
- lib/sinatra_static.rb
|
84
|
+
- readme.rdoc
|
85
|
+
has_rdoc: true
|
86
|
+
homepage: http://github.com/paulasmuth/sinatra-static
|
87
|
+
licenses:
|
88
|
+
- MIT
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0"
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: "0"
|
106
|
+
requirements: []
|
107
|
+
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 1.6.2
|
110
|
+
signing_key:
|
111
|
+
specification_version: 3
|
112
|
+
summary: export your sinatra app to a directory of static files
|
113
|
+
test_files: []
|
114
|
+
|