staticify 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.rdoc +50 -0
  2. data/Rakefile +69 -0
  3. data/VERSION +1 -0
  4. data/bin/staticify +110 -0
  5. metadata +83 -0
@@ -0,0 +1,50 @@
1
+ = Staticify
2
+
3
+ Staticify is a tool for creating static sites in Ruby.
4
+
5
+ There are lots of tools out there already for creating static sites, eg:
6
+ Jekyll:: http://jekyllrb.com
7
+ StaticMatic:: http://staticmatic.rubyforge.org
8
+ webgen:: http://webgen.rubyforge.org
9
+ Webby:: http://webby.rubyforge.org
10
+
11
+ The problem with these tools, in my opinion, is that they make you code
12
+ your sites in a certain way.
13
+
14
+ What if you want to code your blog in Rails or Sinatra or something?
15
+
16
+ Staticify is intended to solve this problem for you. If you want
17
+ to code your static site in any Rack-based web framework, go right ahead!
18
+
19
+ You can use Staticify to statically cache responses to your app.
20
+
21
+ == Installation
22
+
23
+ $ gem sources -a http://gems.github.com
24
+ $ sudo gem install remi-staticify
25
+
26
+ == Usage
27
+
28
+ Simple script for staticifying your Rack applications
29
+
30
+ staticify == %{ For staticifying your Rack applications }
31
+
32
+ Usage:
33
+ echo 'paths' | staticify # print this usage information
34
+ echo 'paths' | staticify . # staticify Rack app in current directory
35
+
36
+ Note:
37
+ staticify expects to get the paths to hit via STDIN
38
+
39
+ Options:
40
+ -d, --dir some/directory # directory to save files to
41
+ -a, --app "MyApp.new" # ruby to eval to get Rack app
42
+ -r, --require file[.rb] # ruby file(s) to require
43
+
44
+ == Notes
45
+
46
+ Checks for config.ru / Rails by default, otherwise you can:
47
+
48
+ $ staticify -r myapp.rb --app 'lambda {|env| [200, {}, "hi!"] }' info
49
+ $ staticify -r myapp.rb,another-file.rb --app 'Sinatra::Application' get '/'
50
+ $ staticify -r myapp --app 'MyApp.new' '/'
@@ -0,0 +1,69 @@
1
+ require 'rake'
2
+ require 'rubygems'
3
+ require 'rake/rdoctask'
4
+ require 'spec/rake/spectask'
5
+
6
+ puts "\nGem: staticify\n\n"
7
+
8
+ begin
9
+ require 'jeweler'
10
+ Jeweler::Tasks.new do |s|
11
+ s.name = 'staticify'
12
+ s.summary = 'Tool for staticly caching Ruby web applications'
13
+ s.email = 'remi@remitaylor.com'
14
+ s.homepage = 'http://github.com/remi/staticify'
15
+ s.description = 'Tool for staticly caching Ruby web applications (based on Rack::Staticifier)'
16
+ s.authors = %w( remi )
17
+ s.files = FileList['[A-Z]*', '{lib,spec,bin,examples}/**/*']
18
+ s.add_dependency 'remi-rackbox'
19
+ s.add_dependency 'remi-rack-staticifier'
20
+ # s.executables << 'staticify'
21
+ # s.rubyforge_project = 'gemname'
22
+ # s.extra_rdoc_files = %w( README.rdoc )
23
+ end
24
+ rescue LoadError
25
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new do |t|
29
+ t.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
31
+
32
+ desc "Run all examples with RCov"
33
+ Spec::Rake::SpecTask.new('rcov') do |t|
34
+ t.spec_files = FileList['spec/**/*_spec.rb']
35
+ t.rcov = true
36
+ end
37
+
38
+ # require 'hanna'
39
+ # require 'darkfish-rdoc'
40
+
41
+ Rake::RDocTask.new do |rdoc|
42
+ rdoc.rdoc_dir = 'rdoc'
43
+ rdoc.title = 'staticify'
44
+ rdoc.options << '--line-numbers' << '--inline-source'
45
+ # rdoc.options += ["--template=#{`allison --path`}"] # sudo gem install allison
46
+ # rdoc.options += %w( -f darkfish ) # sudo gem install darkfish-rdoc
47
+ # rdoc.options += %w( -T hanna ) # sudo gem install mislav-hanna
48
+ rdoc.options += %w( -m README.rdoc ) # the initial page displayed
49
+ rdoc.rdoc_files.include('README.rdoc')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
52
+
53
+ desc 'Confirm that gemspec is $SAFE'
54
+ task :safe do
55
+ require 'yaml'
56
+ require 'rubygems/specification'
57
+ data = File.read('staticify.gemspec')
58
+ spec = nil
59
+ if data !~ %r{!ruby/object:Gem::Specification}
60
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
61
+ else
62
+ spec = YAML.load(data)
63
+ end
64
+ spec.validate
65
+ puts spec
66
+ puts "OK"
67
+ end
68
+
69
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,110 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # Simple script for staticifying your Rack applications
4
+ #
5
+ # Checks for config.ru / Rails by default, otherwise you can:
6
+ #
7
+ # $ staticify -r myapp.rb --app 'lambda {|env| [200, {}, "hi!"] }' info
8
+ # $ staticify -r myapp.rb,another-file.rb --app 'Sinatra::Application' get '/'
9
+ # $ staticify -r myapp --app 'MyApp.new' '/'
10
+ #
11
+ %w( rubygems rackbox optparse fileutils rack-staticifier ).each {|lib| require lib }
12
+
13
+ def usage
14
+ puts <<USAGE
15
+
16
+ staticify == %{ For staticifying your Rack applications }
17
+
18
+ Usage:
19
+ echo 'paths' | staticify # print this usage information
20
+ echo 'paths' | staticify . # staticify Rack app in current directory
21
+
22
+ Note:
23
+ staticify expects to get the paths to hit via STDIN
24
+
25
+ Options:
26
+ -d, --dir some/directory # directory to save files to
27
+ -a, --app "MyApp.new" # ruby to eval to get Rack app
28
+ -r, --require file[.rb] # ruby file(s) to require
29
+ -p, --paths "/,/foo,/bar" # specify paths (instead of STDIN)
30
+ -y, --dry-run # just print what we *would* do
31
+ -s, --save # don't delete dir before running
32
+
33
+ USAGE
34
+ end
35
+
36
+ if ARGV.empty?
37
+ usage
38
+ exit
39
+ end
40
+
41
+ #### ==== Option Parsing ==== ####
42
+
43
+ files_to_require = []
44
+ ruby_to_run = nil
45
+ path_to_cache_to = '.site'
46
+ paths_to_cache = []
47
+ dry_run = false
48
+ overwrite_dir = true
49
+
50
+ opts = OptionParser.new do |opts|
51
+ opts.on('-r', '--require [file]') {|x| files_to_require << x }
52
+ opts.on('-a', '--app [ruby]') {|x| ruby_to_run = x }
53
+ opts.on('-d', '--dir [dir]') {|x| path_to_cache_to = x }
54
+ opts.on('-p', '--paths [paths]') {|x| paths_to_cache = x.split(',') }
55
+ opts.on('-y', '--dry-run') { dry_run = true }
56
+ opts.on('-s', '--save') { overwrite_dir = false }
57
+ end
58
+ opts.parse! ARGV
59
+
60
+ app_directory = ARGV.shift
61
+ unless File.directory? app_directory
62
+ puts "App directory not found: #{ app_directory }\n\n"
63
+ usage
64
+ exit
65
+ end
66
+ FileUtils.cd app_directory
67
+
68
+ files_to_require.each {|file| require file }
69
+ if ruby_to_run
70
+ begin
71
+ RackBox.app = eval(ruby_to_run)
72
+ rescue Exception => ex
73
+ puts "Tried running Ruby code to set Rack app: #{ ruby_to_run.inspect }"
74
+ raise ex
75
+ end
76
+ end
77
+
78
+ unless RackBox.app(:silent => true)
79
+ puts "Cannot find your Rack application\n\n"
80
+ usage
81
+ exit
82
+ end
83
+
84
+ #### ==== Get Routes to Cache ==== ####
85
+
86
+ if paths_to_cache.empty?
87
+ while path = gets
88
+ paths_to_cache << path.strip
89
+ end
90
+ end
91
+
92
+ puts "Caching to #{ path_to_cache_to }"
93
+
94
+ puts "#{ paths_to_cache.length } paths to cache:"
95
+
96
+ #### ==== Cache the Routes ==== ####"
97
+
98
+ puts "rm -rf #{ path_to_cache_to }" if overwrite_dir
99
+ FileUtils.rm_rf path_to_cache_to if overwrite_dir && !dry_run
100
+
101
+ RackBox.app = Rack::Staticifier.new(RackBox.app, :root => path_to_cache_to)
102
+
103
+ paths_to_cache.each do |path|
104
+ if dry_run
105
+ puts " #{ path }"
106
+ else
107
+ response = RackBox.request path
108
+ puts " #{ response.status } #{ path }"
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: staticify
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - remi
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2009-06-15 00:00:00 -07:00
19
+ default_executable: staticify
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack-staticifier
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Tool for staticly caching Ruby web applications (based on Rack::Staticifier)
36
+ email: remi@remitaylor.com
37
+ executables:
38
+ - staticify
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.rdoc
43
+ files:
44
+ - README.rdoc
45
+ - Rakefile
46
+ - VERSION
47
+ - bin/staticify
48
+ has_rdoc: true
49
+ homepage: http://github.com/remi/staticify
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements: []
76
+
77
+ rubyforge_project:
78
+ rubygems_version: 1.3.7
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Tool for staticly caching Ruby web applications
82
+ test_files: []
83
+