kelredd-sinatra-helpers 0.1.3 → 0.1.4
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/bin/sinatra +1 -1
- data/lib/sinatra_helpers.rb +22 -1
- data/lib/sinatra_helpers/generator/app.rb +2 -0
- data/lib/sinatra_helpers/generator/file_templates/Rakefile.erb +19 -2
- data/lib/sinatra_helpers/generator/file_templates/app.less.erb +1 -0
- data/lib/sinatra_helpers/generator/file_templates/app.rb.erb +6 -24
- data/lib/sinatra_helpers/generator/file_templates/app_test.rb.erb +18 -0
- data/lib/sinatra_helpers/generator/file_templates/boot.rb.erb +17 -0
- data/lib/sinatra_helpers/generator/file_templates/console.erb +10 -0
- data/lib/sinatra_helpers/generator/file_templates/{deploy_live.rb.erb → deploy_production.rb.erb} +0 -0
- data/lib/sinatra_helpers/generator/file_templates/environment.rb.erb +23 -0
- data/lib/sinatra_helpers/generator/file_templates/{index.html.erb → environment_development.rb.erb} +0 -0
- data/lib/sinatra_helpers/generator/file_templates/environment_production.rb.erb +11 -0
- data/lib/sinatra_helpers/generator/file_templates/environment_test.rb.erb +0 -0
- data/lib/sinatra_helpers/generator/file_templates/gems.rb.erb +7 -8
- data/lib/sinatra_helpers/generator/file_templates/index.html.erb.erb +1 -0
- data/lib/sinatra_helpers/generator/file_templates/layout +2 -2
- data/lib/sinatra_helpers/generator/file_templates/model_test.rb.erb +13 -0
- data/lib/sinatra_helpers/generator/file_templates/production.ru.erb +3 -21
- data/lib/sinatra_helpers/generator/file_templates/reset.less.erb +82 -0
- data/lib/sinatra_helpers/generator/file_templates/server.erb +9 -0
- data/lib/sinatra_helpers/generator/file_templates/test_helper.rb.erb +23 -0
- data/lib/sinatra_helpers/generator/template.rb +32 -25
- data/lib/sinatra_helpers/less.rb +113 -0
- data/lib/sinatra_helpers/sprockets.rb +109 -0
- data/lib/sinatra_helpers/version.rb +1 -1
- metadata +18 -10
- data/lib/sinatra_helpers/generator/file_templates/app_controller.rb.erb +0 -5
- data/lib/sinatra_helpers/generator/file_templates/app_helpers.rb.erb +0 -11
- data/lib/sinatra_helpers/generator/file_templates/app_initializer.rb.erb +0 -16
- data/lib/sinatra_helpers/generator/file_templates/initializers.rb.erb +0 -6
- data/lib/sinatra_helpers/generator/file_templates/sprockets.yml.erb +0 -7
- data/lib/sinatra_helpers/generator/file_templates/web.css.erb +0 -82
data/bin/sinatra
CHANGED
data/lib/sinatra_helpers.rb
CHANGED
@@ -1,3 +1,24 @@
|
|
1
1
|
require 'sinatra_helpers/environment_tests'
|
2
2
|
require 'sinatra_helpers/erb'
|
3
|
-
|
3
|
+
|
4
|
+
module SinatraHelpers
|
5
|
+
|
6
|
+
HTTP_STATUS = {
|
7
|
+
:not_found => 404,
|
8
|
+
:ok => 200
|
9
|
+
}
|
10
|
+
|
11
|
+
class << self
|
12
|
+
|
13
|
+
def page_cache?(app)
|
14
|
+
if defined?(Rails)
|
15
|
+
Rails.configuration.action_controller.perform_caching
|
16
|
+
elsif app.respond_to?(:environment)
|
17
|
+
app.environment == 'production'
|
18
|
+
else
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'erb'
|
2
|
+
require 'useful/ruby_extensions/string'
|
2
3
|
|
3
4
|
module SinatraHelpers; end
|
4
5
|
|
@@ -11,6 +12,7 @@ module SinatraHelpers::Generator
|
|
11
12
|
def initialize(path)
|
12
13
|
@root_path = File.dirname(path)
|
13
14
|
self.name = File.basename(path)
|
15
|
+
@class_name = @name.classify
|
14
16
|
end
|
15
17
|
|
16
18
|
def name=(name)
|
@@ -1,4 +1,21 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
3
|
-
require 'config/gems.rb'
|
4
2
|
require 'gemsconfig/tasks/rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
namespace :test do
|
6
|
+
|
7
|
+
Rake::TestTask.new(:units) do |t|
|
8
|
+
t.libs << "test"
|
9
|
+
t.pattern = 'test/unit/**/*_test.rb'
|
10
|
+
t.verbose = true
|
11
|
+
end
|
12
|
+
Rake::Task['test:units'].comment = "Run the unit tests"
|
13
|
+
|
14
|
+
Rake::TestTask.new(:app) do |t|
|
15
|
+
t.libs << "test"
|
16
|
+
t.pattern = 'test/functional/**/*_test.rb'
|
17
|
+
t.verbose = true
|
18
|
+
end
|
19
|
+
Rake::Task['test:app'].comment = "Run the functional tests"
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
/* TODO: put any application less code here */
|
@@ -1,27 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
Gemsconfig::load if defined?(Gemsconfig)
|
6
|
-
require 'config/initializers'
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra'
|
3
|
+
require 'config/boot'
|
7
4
|
|
8
|
-
#
|
9
|
-
use Rack::Session::Cookie, :key => '_sess'
|
10
|
-
use Rack::Flash
|
11
|
-
|
12
|
-
# Load in helpers
|
13
|
-
Dir[File.join(File.dirname(__FILE__), "app/helpers" ,"*.rb")].each do |file|
|
14
|
-
require "app/helpers/#{File.basename(file, ".rb")}"
|
15
|
-
end
|
5
|
+
# define routes here or load in route definitions
|
16
6
|
|
17
|
-
|
18
|
-
|
19
|
-
require "app/models/#{File.basename(file, ".rb")}"
|
7
|
+
get '/' do
|
8
|
+
erb :'index.html'
|
20
9
|
end
|
21
|
-
|
22
|
-
# Load in controllers
|
23
|
-
Dir[File.join(File.dirname(__FILE__), "app/controllers" ,"*.rb")].each do |file|
|
24
|
-
load File.join(File.dirname(__FILE__), 'app/controllers', File.basename(file))
|
25
|
-
end
|
26
|
-
|
27
|
-
set :views, File.join(File.dirname(__FILE__), 'app', 'views')
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class AppTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def app
|
6
|
+
Sinatra::Application
|
7
|
+
end
|
8
|
+
|
9
|
+
context "The app" do
|
10
|
+
|
11
|
+
should "say hello" do
|
12
|
+
visit '/'
|
13
|
+
assert_contain "Hello from <%= @class_name %>!"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RACK_ENV = ENV["RACK_ENV"] ||= "development" unless defined? RACK_ENV
|
2
|
+
ROOT_DIR = File.expand_path("#{File.dirname(__FILE__)}/..") unless defined? ROOT_DIR
|
3
|
+
|
4
|
+
def root_path(*args)
|
5
|
+
File.join(ROOT_DIR, *args)
|
6
|
+
end
|
7
|
+
|
8
|
+
def public_path(*args)
|
9
|
+
root_path('public', *args)
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
require "config/environments/#{RACK_ENV.downcase}"
|
14
|
+
rescue LoadError => err
|
15
|
+
puts "no environment config set up for '#{RACK_ENV.downcase}', ignoring..."
|
16
|
+
end
|
17
|
+
require 'config/environment'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
platform_irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'sinatra/base'
|
7
|
+
libs = " -r app"
|
8
|
+
|
9
|
+
puts "Loading default environment (Sinatra #{Sinatra::VERSION})"
|
10
|
+
exec "#{platform_irb} #{libs} --simple-prompt"
|
data/lib/sinatra_helpers/generator/file_templates/{deploy_live.rb.erb → deploy_production.rb.erb}
RENAMED
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'config/gems'
|
2
|
+
Gemsconfig::load if defined?(Gemsconfig)
|
3
|
+
|
4
|
+
# basic app configurations
|
5
|
+
set :root, root_path
|
6
|
+
set :views, root_path("app", "views")
|
7
|
+
set :images_path, public_path("images")
|
8
|
+
set :environment, RACK_ENV.to_sym if defined?(RACK_ENV)
|
9
|
+
|
10
|
+
# TODO: set your session cookie name here
|
11
|
+
use Rack::Session::Cookie, :key => '_sess'
|
12
|
+
use Rack::Flash
|
13
|
+
|
14
|
+
# setup the LESS helper
|
15
|
+
SinatraHelpers::Less.config do |config|
|
16
|
+
# => TODO: add less stylesheets to cache here
|
17
|
+
config.stylesheets = ['reset', 'app']
|
18
|
+
config.cache_name = 'web'
|
19
|
+
end
|
20
|
+
Sinatra::Application.register SinatraHelpers::Less
|
21
|
+
|
22
|
+
# setup the Sprockets helper
|
23
|
+
Sinatra::Application.register SinatraHelpers::Sprockets
|
data/lib/sinatra_helpers/generator/file_templates/{index.html.erb → environment_development.rb.erb}
RENAMED
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rack/cache'
|
2
|
+
use Rack::Cache,
|
3
|
+
:verbose => true,
|
4
|
+
:metastore => "file:#{root_path('cache-rack', 'meta')}",
|
5
|
+
:entitystore => "file:#{root_path('cache-rack', 'body')}"
|
6
|
+
|
7
|
+
|
8
|
+
FileUtils.mkdir_p 'log' unless File.exists?('log')
|
9
|
+
log = File.new("log/#{RACK_ENV.downcase}.log", "a+")
|
10
|
+
$stdout.reopen(log)
|
11
|
+
$stderr.reopen(log)
|
File without changes
|
@@ -1,19 +1,18 @@
|
|
1
1
|
begin
|
2
2
|
require 'gemsconfig'
|
3
3
|
rescue LoadError => err
|
4
|
-
|
4
|
+
puts " ** can't load gemsconfig. gem install kelredd-gemsconfig **"
|
5
5
|
end
|
6
6
|
|
7
7
|
Gemsconfig::init do |config|
|
8
8
|
|
9
|
-
config.gem '
|
10
|
-
|
11
|
-
config.gem 'rack-flash', :lib => 'rack-flash', :source => 'http://gemcutter.org'
|
12
|
-
config.gem 'rack-cache', :lib => false, :source => 'http://gemcutter.org'
|
9
|
+
config.gem 'rack-flash', :lib => 'rack-flash'
|
10
|
+
config.gem 'rack-cache', :lib => false
|
13
11
|
|
14
|
-
config.gem 'kelredd-
|
12
|
+
config.gem 'kelredd-useful', :lib => 'useful/ruby_extensions'
|
15
13
|
|
16
|
-
config.gem '
|
17
|
-
config.gem 'kelredd-
|
14
|
+
config.gem 'kelredd-sinatra-helpers', :lib => 'sinatra_helpers'
|
15
|
+
config.gem 'kelredd-sinatra-helpers', :lib => 'sinatra_helpers/less'
|
16
|
+
config.gem 'kelredd-sinatra-helpers', :lib => 'sinatra_helpers/sprockets'
|
18
17
|
|
19
18
|
end if defined?(Gemsconfig)
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Hello from <%= @class_name %>!</h1>
|
@@ -11,9 +11,9 @@
|
|
11
11
|
<meta name="robots" content="noindex,nofollow" />
|
12
12
|
<% end %>
|
13
13
|
<link rel="icon" type="image/png" href="/favicon.png"></link>
|
14
|
-
<%= stylesheet_link_tag :
|
14
|
+
<%= stylesheet_link_tag SinatraHelpers::Less[:stylesheets], :cache => SinatraHelpers::Less[:cache_name], :media => "all" %>
|
15
15
|
<% unless @noscript %>
|
16
|
-
<%=
|
16
|
+
<%= javascript_include_tag 'app.js' %>
|
17
17
|
<% end %>
|
18
18
|
</head>
|
19
19
|
<body class="body">
|
@@ -1,24 +1,6 @@
|
|
1
|
-
|
2
|
-
log = File.new("log/production.log", "a+")
|
3
|
-
$stdout.reopen(log)
|
4
|
-
$stderr.reopen(log)
|
5
|
-
|
6
|
-
require 'rubygems'
|
7
|
-
require 'sinatra'
|
1
|
+
RACK_ENV = ENV["RACK_ENV"] ||= "production" unless defined? RACK_ENV
|
8
2
|
require 'app'
|
9
|
-
|
10
|
-
root_dir = File.dirname(__FILE__)
|
11
|
-
|
12
|
-
set :root, root_dir
|
13
|
-
set :app_file, File.join(root_dir, 'app.rb')
|
14
|
-
set :environment, :production
|
3
|
+
set :app_file, File.join(root_path, 'app.rb')
|
15
4
|
disable :run
|
16
5
|
|
17
|
-
|
18
|
-
|
19
|
-
use Rack::Cache,
|
20
|
-
:verbose => true,
|
21
|
-
:metastore => "file:#{File.join(root_dir, 'cache-rack', 'meta')}",
|
22
|
-
:entitystore => "file:#{File.join(root_dir, 'cache-rack', 'body')}"
|
23
|
-
|
24
|
-
run Sinatra::Application
|
6
|
+
run Sinatra::Application
|
@@ -0,0 +1,82 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
|
3
|
+
Code licensed under the BSD License:
|
4
|
+
http://developer.yahoo.net/yui/license.txt
|
5
|
+
version: 2.7.0
|
6
|
+
*/
|
7
|
+
html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
|
8
|
+
|
9
|
+
/*
|
10
|
+
Copyright (c) 2009, Kelly Redding. All rights reserved.
|
11
|
+
See http://github.com/kelredd/sinatra-helpers for license details
|
12
|
+
*/
|
13
|
+
UL {
|
14
|
+
margin: 0;
|
15
|
+
padding: 0;
|
16
|
+
}
|
17
|
+
UL LI {
|
18
|
+
list-style-image: none;
|
19
|
+
list-style-position: outside;
|
20
|
+
list-style-type: none;
|
21
|
+
}
|
22
|
+
UL.bulleted LI {
|
23
|
+
list-style-position: inside !important;
|
24
|
+
list-style-type: disc !important;
|
25
|
+
}
|
26
|
+
|
27
|
+
OL LI {
|
28
|
+
list-style-type: decimal;
|
29
|
+
}
|
30
|
+
|
31
|
+
HTML {
|
32
|
+
font-size:10pt;
|
33
|
+
}
|
34
|
+
BODY {
|
35
|
+
width: 100%;
|
36
|
+
font-family: "Lucida Grande", Verdana, sans-serif;
|
37
|
+
font-size: 1em;
|
38
|
+
font-size-adjust: none;
|
39
|
+
font-variant: normal;
|
40
|
+
}
|
41
|
+
A, IMG, FORM, FIELDSET {
|
42
|
+
border: 0px none;
|
43
|
+
padding: 0;
|
44
|
+
margin: 0;
|
45
|
+
}
|
46
|
+
INPUT, SELECT, TEXTAREA, BUTTON {
|
47
|
+
margin: 0;
|
48
|
+
padding: .2em .3em;
|
49
|
+
font-family : 'Lucida Grande', sans-serif;
|
50
|
+
font-size: 9px;
|
51
|
+
font-size-adjust: none;
|
52
|
+
font-variant: normal;
|
53
|
+
}
|
54
|
+
INPUT[type="submit"],
|
55
|
+
INPUT[type="checkbox"], DIV.checkbox LABEL,
|
56
|
+
INPUT[type="radiobutton"] {
|
57
|
+
cursor: pointer;
|
58
|
+
vertical-align: middle;
|
59
|
+
}
|
60
|
+
INPUT[type="checkbox"] {
|
61
|
+
margin-right: .2em;
|
62
|
+
}
|
63
|
+
SELECT {
|
64
|
+
padding: 0;
|
65
|
+
}
|
66
|
+
|
67
|
+
/* IE fixes */
|
68
|
+
HTML, BODY {
|
69
|
+
height:100%;
|
70
|
+
}
|
71
|
+
|
72
|
+
/* Add the style below to a container element that contains floats - will cause the container
|
73
|
+
to expand to the height of the floats */
|
74
|
+
.clearfix:after {
|
75
|
+
content: ".";
|
76
|
+
display: block;
|
77
|
+
height: 0;
|
78
|
+
clear: both;
|
79
|
+
visibility: hidden;
|
80
|
+
}
|
81
|
+
/* Hides from IE-mac \*/
|
82
|
+
* html .clearfix {height: 1%;}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda/test_unit'
|
4
|
+
require 'context'
|
5
|
+
require 'useful/shoulda_macros/test_unit'
|
6
|
+
require 'rack/test'
|
7
|
+
require 'webrat'
|
8
|
+
|
9
|
+
RACK_ENV = "test"
|
10
|
+
require 'app'
|
11
|
+
|
12
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
13
|
+
|
14
|
+
class Test::Unit::TestCase
|
15
|
+
include Rack::Test::Methods
|
16
|
+
include Webrat::Methods
|
17
|
+
include Webrat::Matchers
|
18
|
+
|
19
|
+
Webrat.configure do |config|
|
20
|
+
config.mode = :rack
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -9,56 +9,63 @@ module SinatraHelpers::Generator
|
|
9
9
|
'gitignore.erb' => '.gitignore',
|
10
10
|
|
11
11
|
:admin => {
|
12
|
-
'production.ru.erb' => 'production.ru'
|
12
|
+
'production.ru.erb' => 'production.ru',
|
13
|
+
:vhosts => {},
|
14
|
+
:logrotate => {}
|
13
15
|
},
|
14
16
|
|
15
17
|
:app => {
|
16
|
-
:controllers => {
|
17
|
-
'app_controller.rb.erb' => 'app.rb'
|
18
|
-
},
|
19
|
-
:helpers => {
|
20
|
-
'app_helpers.rb.erb' => 'app_helpers.rb'
|
21
|
-
},
|
22
18
|
:javascripts => {
|
23
19
|
'app.js.erb' => 'app.js'
|
24
20
|
},
|
25
21
|
:models => {},
|
26
|
-
:stylesheets => {
|
22
|
+
:stylesheets => {
|
23
|
+
'reset.less.erb' => 'reset.less',
|
24
|
+
'app.less.erb' => 'app.less'
|
25
|
+
},
|
27
26
|
:views => {
|
28
27
|
'layout' => 'layout.erb',
|
29
|
-
|
30
|
-
|
31
|
-
}
|
32
|
-
}
|
28
|
+
'index.html.erb.erb' => 'index.html.erb'
|
29
|
+
},
|
33
30
|
},
|
34
31
|
|
35
32
|
:config => {
|
33
|
+
'boot.rb.erb' => 'boot.rb',
|
34
|
+
'deploy.rb.erb' => 'deploy.rb',
|
36
35
|
:deploy => {
|
37
|
-
'
|
36
|
+
'deploy_production.rb.erb' => 'production.rb',
|
38
37
|
'deploy_staging.rb.erb' => 'staging.rb'
|
39
38
|
},
|
40
|
-
'
|
41
|
-
|
42
|
-
|
43
|
-
'
|
39
|
+
'environment.rb.erb' => 'environment.rb',
|
40
|
+
:environments => {
|
41
|
+
'environment_development.rb.erb' => 'development.rb',
|
42
|
+
'environment_test.rb.erb' => 'test.rb',
|
43
|
+
'environment_production.rb.erb' => 'production.rb'
|
44
44
|
},
|
45
|
-
'
|
46
|
-
'sprockets.yml.erb' => 'sprockets.yml'
|
45
|
+
'gems.rb.erb' => 'gems.rb'
|
47
46
|
},
|
48
47
|
|
49
48
|
:log => {},
|
50
49
|
|
51
50
|
:public => {
|
52
51
|
:images => {},
|
53
|
-
:javascripts => {},
|
54
|
-
:stylesheets => {
|
55
|
-
'web.css.erb' => 'web.css'
|
56
|
-
}
|
57
52
|
},
|
58
53
|
|
59
|
-
:
|
60
|
-
|
54
|
+
:script => {
|
55
|
+
'console.erb' => 'console',
|
56
|
+
'server.erb' => 'server'
|
57
|
+
},
|
58
|
+
|
59
|
+
:test => {
|
60
|
+
'test_helper.rb.erb' => 'test_helper.rb',
|
61
|
+
:functional => {
|
62
|
+
'app_test.rb.erb' => 'app_test.rb'
|
63
|
+
},
|
64
|
+
:unit => {
|
65
|
+
'model_test.rb.erb' => 'model_test.rb'
|
66
|
+
}
|
61
67
|
}
|
68
|
+
|
62
69
|
}
|
63
70
|
|
64
71
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
begin
|
2
|
+
require 'less'
|
3
|
+
rescue LoadError => err
|
4
|
+
err.message << "\n**** Install less (gem install less) to use the sinatra less helpers ****\n"
|
5
|
+
raise err
|
6
|
+
end
|
7
|
+
|
8
|
+
module SinatraHelpers; end
|
9
|
+
module SinatraHelpers::Less
|
10
|
+
|
11
|
+
CONTENT_TYPE = "text/css"
|
12
|
+
DEFAULT_CACHE_CONTROL = 'public, max-age=86400' # cache for 24 hours
|
13
|
+
|
14
|
+
class Config
|
15
|
+
ATTRIBUTES = [:hosted_root, :src_root, :stylesheets, :cache_name, :cache_control, :compression]
|
16
|
+
DEFAULTS = {
|
17
|
+
:hosted_root => '/stylesheets',
|
18
|
+
:src_root => 'app/stylesheets',
|
19
|
+
:cache_name => 'all',
|
20
|
+
:stylesheets => [],
|
21
|
+
:cache_control => DEFAULT_CACHE_CONTROL,
|
22
|
+
:compression => false
|
23
|
+
}
|
24
|
+
|
25
|
+
attr_accessor *ATTRIBUTES
|
26
|
+
|
27
|
+
def initialize(args={})
|
28
|
+
ATTRIBUTES.each do |a|
|
29
|
+
instance_variable_set("@#{a}", args[a] || DEFAULTS[a])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
attr_reader :app
|
36
|
+
|
37
|
+
def config
|
38
|
+
if instance_variable_get("@config").nil?
|
39
|
+
instance_variable_set("@config", SinatraHelpers::Less::Config.new)
|
40
|
+
end
|
41
|
+
yield instance_variable_get("@config") if block_given?
|
42
|
+
instance_variable_get("@config")
|
43
|
+
end
|
44
|
+
|
45
|
+
def [](config_attribute)
|
46
|
+
config.send(config_attribute)
|
47
|
+
end
|
48
|
+
|
49
|
+
def registered(app)
|
50
|
+
instance_variable_set("@app", app)
|
51
|
+
|
52
|
+
app.get "/less-sinatra-helper-test" do
|
53
|
+
if SinatraHelpers::Less.config
|
54
|
+
"The LESS sinatra helper is configured and ready :)"
|
55
|
+
else
|
56
|
+
"The LESS sinatra helper is NOT configured and ready :("
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
app.get "#{SinatraHelpers::Less[:hosted_root]}/*.css" do
|
61
|
+
css_name = params['splat'].first.to_s
|
62
|
+
less_path = File.join([
|
63
|
+
app.root, SinatraHelpers::Less[:src_root], "#{css_name}.less"
|
64
|
+
])
|
65
|
+
css_path = File.join([
|
66
|
+
app.root, SinatraHelpers::Less[:src_root], "#{css_name}.css"
|
67
|
+
])
|
68
|
+
|
69
|
+
content_type CONTENT_TYPE
|
70
|
+
if SinatraHelpers.page_cache?(SinatraHelpers::Less.app)
|
71
|
+
headers['Cache-Control'] = SinatraHelpers::Less[:cache_control]
|
72
|
+
end
|
73
|
+
|
74
|
+
if File.exists?(less_path)
|
75
|
+
SinatraHelpers::Less.compile(css_name, [less_path])
|
76
|
+
elsif File.exists?(css_path)
|
77
|
+
SinatraHelpers::Less.compile(css_name, [css_path])
|
78
|
+
elsif SinatraHelpers::Less[:cache_name] && css_name == SinatraHelpers::Less[:cache_name]
|
79
|
+
less_paths = SinatraHelpers::Less[:stylesheets].collect do |css_name|
|
80
|
+
File.join(app.root, SinatraHelpers::Less[:src_root], "#{css_name}.less")
|
81
|
+
end.select do |less_path|
|
82
|
+
File.exists?(less_path)
|
83
|
+
end
|
84
|
+
SinatraHelpers::Less.compile(css_name, less_paths)
|
85
|
+
else
|
86
|
+
halt SinatraHelpers::HTTP_STATUS[:not_found]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def compile(css_name, file_paths)
|
92
|
+
compiled_less = file_paths.collect do |file_path|
|
93
|
+
Less::Engine.new(File.new(file_path)).to_css
|
94
|
+
end.join("\n")
|
95
|
+
compiled_less.delete!("\n") if use_compression?
|
96
|
+
if SinatraHelpers.page_cache?(SinatraHelpers::Less.app)
|
97
|
+
pub_path = File.join(SinatraHelpers::Less.app.public, SinatraHelpers::Less[:hosted_root])
|
98
|
+
FileUtils.mkdir_p(pub_path)
|
99
|
+
hosted = File.join(pub_path, "#{css_name}.css")
|
100
|
+
File.open(hosted, "w") do |file|
|
101
|
+
file.write(compiled_less)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
compiled_less
|
105
|
+
end
|
106
|
+
|
107
|
+
def use_compression?
|
108
|
+
SinatraHelpers::Less[:compression]
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
begin
|
2
|
+
require 'sprockets'
|
3
|
+
rescue LoadError => err
|
4
|
+
err.message << "\n**** Install sprockets (gem install sprockets) to use the sinatra sprockets helpers ****\n"
|
5
|
+
raise err
|
6
|
+
end
|
7
|
+
|
8
|
+
module SinatraHelpers; end
|
9
|
+
module SinatraHelpers::Sprockets
|
10
|
+
|
11
|
+
CONTENT_TYPE = "text/javascript; charset=utf-8"
|
12
|
+
DEFAULT_CACHE_CONTROL = 'public, max-age=86400' # cache for 24 hours
|
13
|
+
|
14
|
+
class Config
|
15
|
+
ATTRIBUTES = [:hosted_root, :src_root, :load_path, :expand_paths, :cache_control]
|
16
|
+
DEFAULTS = {
|
17
|
+
:hosted_root => '/javascripts',
|
18
|
+
:src_root => 'app/javascripts',
|
19
|
+
:load_path => ['app/javascripts/**', 'vendor/javascripts', 'vendor/sprockets'],
|
20
|
+
:expand_paths => true,
|
21
|
+
:cache_control => DEFAULT_CACHE_CONTROL
|
22
|
+
}
|
23
|
+
|
24
|
+
attr_accessor *ATTRIBUTES
|
25
|
+
|
26
|
+
def initialize(args={})
|
27
|
+
ATTRIBUTES.each do |a|
|
28
|
+
instance_variable_set("@#{a}", args[a] || DEFAULTS[a])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class << self
|
34
|
+
attr_reader :app
|
35
|
+
|
36
|
+
def config
|
37
|
+
if instance_variable_get("@config").nil?
|
38
|
+
instance_variable_set("@config", SinatraHelpers::Sprockets::Config.new)
|
39
|
+
end
|
40
|
+
yield instance_variable_get("@config") if block_given?
|
41
|
+
instance_variable_get("@config")
|
42
|
+
end
|
43
|
+
|
44
|
+
def secretary
|
45
|
+
if instance_variable_get("@secretary").nil?
|
46
|
+
instance_variable_set("@secretary", {
|
47
|
+
:root => app.root,
|
48
|
+
:load_path => config.load_path,
|
49
|
+
:expand_paths => config.expand_paths
|
50
|
+
})
|
51
|
+
end
|
52
|
+
yield instance_variable_get("@secretary") if block_given?
|
53
|
+
instance_variable_get("@secretary")
|
54
|
+
end
|
55
|
+
|
56
|
+
def [](config_attribute)
|
57
|
+
config.send(config_attribute)
|
58
|
+
end
|
59
|
+
|
60
|
+
def registered(app)
|
61
|
+
instance_variable_set("@app", app)
|
62
|
+
|
63
|
+
app.get "/sprockets-sinatra-helper-test" do
|
64
|
+
if SinatraHelpers::Sprockets.config
|
65
|
+
"The sprockets sinatra helper is configured and ready :)"
|
66
|
+
else
|
67
|
+
"The sprockets sinatra helper is NOT configured and ready :("
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
app.get "#{SinatraHelpers::Sprockets[:hosted_root]}/*.js" do
|
72
|
+
src_name = params['splat'].first.to_s
|
73
|
+
src_file_path = File.join([
|
74
|
+
SinatraHelpers::Sprockets[:src_root], "#{src_name}.js"
|
75
|
+
])
|
76
|
+
src_path = File.join(app.root, src_file_path)
|
77
|
+
|
78
|
+
content_type CONTENT_TYPE
|
79
|
+
if SinatraHelpers.page_cache?(SinatraHelpers::Sprockets.app)
|
80
|
+
headers['Cache-Control'] = SinatraHelpers::Sprockets[:cache_control]
|
81
|
+
end
|
82
|
+
|
83
|
+
if File.exists?(src_path)
|
84
|
+
SinatraHelpers::Sprockets.compile(src_file_path)
|
85
|
+
else
|
86
|
+
halt SinatraHelpers::HTTP_STATUS[:not_found]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def compile(src_file_name)
|
92
|
+
secretary_params = SinatraHelpers::Sprockets.secretary do |params|
|
93
|
+
params[:source_files] = [src_file_name]
|
94
|
+
end
|
95
|
+
compiled_src = Sprockets::Secretary.new(secretary_params).concatenation.to_s
|
96
|
+
if SinatraHelpers.page_cache?(SinatraHelpers::Sprockets.app)
|
97
|
+
pub_path = File.join(SinatraHelpers::Sprockets.app.public, SinatraHelpers::Sprockets[:hosted_root])
|
98
|
+
FileUtils.mkdir_p(pub_path)
|
99
|
+
hosted = File.join(pub_path, File.basename(src_file_name))
|
100
|
+
File.open(hosted, "w") do |file|
|
101
|
+
file.write(compiled_src)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
compiled_src
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kelredd-sinatra-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-23 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -39,25 +39,33 @@ files:
|
|
39
39
|
- lib/sinatra_helpers/erb.rb
|
40
40
|
- lib/sinatra_helpers/generator/app.rb
|
41
41
|
- lib/sinatra_helpers/generator/file_templates/app.js.erb
|
42
|
+
- lib/sinatra_helpers/generator/file_templates/app.less.erb
|
42
43
|
- lib/sinatra_helpers/generator/file_templates/app.rb.erb
|
43
|
-
- lib/sinatra_helpers/generator/file_templates/
|
44
|
-
- lib/sinatra_helpers/generator/file_templates/
|
45
|
-
- lib/sinatra_helpers/generator/file_templates/app_initializer.rb.erb
|
44
|
+
- lib/sinatra_helpers/generator/file_templates/app_test.rb.erb
|
45
|
+
- lib/sinatra_helpers/generator/file_templates/boot.rb.erb
|
46
46
|
- lib/sinatra_helpers/generator/file_templates/Capfile.erb
|
47
|
+
- lib/sinatra_helpers/generator/file_templates/console.erb
|
47
48
|
- lib/sinatra_helpers/generator/file_templates/deploy.rb.erb
|
48
|
-
- lib/sinatra_helpers/generator/file_templates/
|
49
|
+
- lib/sinatra_helpers/generator/file_templates/deploy_production.rb.erb
|
49
50
|
- lib/sinatra_helpers/generator/file_templates/deploy_staging.rb.erb
|
51
|
+
- lib/sinatra_helpers/generator/file_templates/environment.rb.erb
|
52
|
+
- lib/sinatra_helpers/generator/file_templates/environment_development.rb.erb
|
53
|
+
- lib/sinatra_helpers/generator/file_templates/environment_production.rb.erb
|
54
|
+
- lib/sinatra_helpers/generator/file_templates/environment_test.rb.erb
|
50
55
|
- lib/sinatra_helpers/generator/file_templates/gems.rb.erb
|
51
56
|
- lib/sinatra_helpers/generator/file_templates/gitignore.erb
|
52
|
-
- lib/sinatra_helpers/generator/file_templates/index.html.erb
|
53
|
-
- lib/sinatra_helpers/generator/file_templates/initializers.rb.erb
|
57
|
+
- lib/sinatra_helpers/generator/file_templates/index.html.erb.erb
|
54
58
|
- lib/sinatra_helpers/generator/file_templates/layout
|
59
|
+
- lib/sinatra_helpers/generator/file_templates/model_test.rb.erb
|
55
60
|
- lib/sinatra_helpers/generator/file_templates/production.ru.erb
|
56
61
|
- lib/sinatra_helpers/generator/file_templates/Rakefile.erb
|
57
|
-
- lib/sinatra_helpers/generator/file_templates/
|
58
|
-
- lib/sinatra_helpers/generator/file_templates/
|
62
|
+
- lib/sinatra_helpers/generator/file_templates/reset.less.erb
|
63
|
+
- lib/sinatra_helpers/generator/file_templates/server.erb
|
64
|
+
- lib/sinatra_helpers/generator/file_templates/test_helper.rb.erb
|
59
65
|
- lib/sinatra_helpers/generator/template.rb
|
60
66
|
- lib/sinatra_helpers/generator.rb
|
67
|
+
- lib/sinatra_helpers/less.rb
|
68
|
+
- lib/sinatra_helpers/sprockets.rb
|
61
69
|
- lib/sinatra_helpers/version.rb
|
62
70
|
- lib/sinatra_helpers.rb
|
63
71
|
has_rdoc: true
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Config; end
|
2
|
-
module Config::Initializers; end
|
3
|
-
|
4
|
-
module Config::Initializers::App
|
5
|
-
def self.registered(app)
|
6
|
-
|
7
|
-
app.configure do
|
8
|
-
|
9
|
-
# TODO: put some initializer code in here
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
Sinatra::Application.register Config::Initializers::App
|
@@ -1,82 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
/* some base styles */
|
15
|
-
UL {
|
16
|
-
margin: 0;
|
17
|
-
padding: 0;
|
18
|
-
list-style-image: none;
|
19
|
-
list-style-position: inside;
|
20
|
-
list-style-type:none;
|
21
|
-
}
|
22
|
-
UL.bulleted {
|
23
|
-
list-style-type: disc !important;
|
24
|
-
}
|
25
|
-
OL {
|
26
|
-
display: block;
|
27
|
-
list-style-type: decimal;
|
28
|
-
margin: 1em 0;
|
29
|
-
}
|
30
|
-
|
31
|
-
HTML {
|
32
|
-
font-size:10pt;
|
33
|
-
}
|
34
|
-
BODY {
|
35
|
-
width: 100%;
|
36
|
-
font-family: "Lucida Grande", Verdana, sans-serif;
|
37
|
-
font-size: 1em;
|
38
|
-
font-size-adjust:none;
|
39
|
-
font-variant: normal;
|
40
|
-
}
|
41
|
-
A, IMG, FORM, FIELDSET {
|
42
|
-
border: 0px none;
|
43
|
-
padding: 0;
|
44
|
-
margin: 0;
|
45
|
-
}
|
46
|
-
INPUT, SELECT, TEXTAREA, BUTTON {
|
47
|
-
margin: 0;
|
48
|
-
padding: .2em .3em;
|
49
|
-
font-family : 'Lucida Grande', sans-serif;
|
50
|
-
font-size: 9px;
|
51
|
-
font-size-adjust: none;
|
52
|
-
font-variant: normal;
|
53
|
-
}
|
54
|
-
INPUT[type="submit"],
|
55
|
-
INPUT[type="checkbox"], DIV.checkbox LABEL,
|
56
|
-
INPUT[type="radiobutton"] {
|
57
|
-
cursor: pointer;
|
58
|
-
vertical-align: middle;
|
59
|
-
}
|
60
|
-
INPUT[type="checkbox"] {
|
61
|
-
margin-right: .2em;
|
62
|
-
}
|
63
|
-
SELECT {
|
64
|
-
padding: 0;
|
65
|
-
}
|
66
|
-
|
67
|
-
/* IE fixes */
|
68
|
-
HTML, BODY {
|
69
|
-
height:100%;
|
70
|
-
}
|
71
|
-
|
72
|
-
/* Add the style below to a container element that contains floats - will cause the container
|
73
|
-
to expand to the height of the floats */
|
74
|
-
.clearfix:after {
|
75
|
-
content: ".";
|
76
|
-
display: block;
|
77
|
-
height: 0;
|
78
|
-
clear: both;
|
79
|
-
visibility: hidden;
|
80
|
-
}
|
81
|
-
/* Hides from IE-mac \*/
|
82
|
-
* html .clearfix {height: 1%;}
|