tarpaulin 0.3.2 → 0.3.3
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/VERSION +1 -1
- data/lib/tarpaulin.rb +2 -1
- data/lib/tarpaulin/camping.rb +50 -51
- data/lib/tarpaulin/camping/accept_language.rb +61 -0
- data/lib/tarpaulin/camping/filter.rb +35 -20
- data/lib/tarpaulin/endless.rb +1 -1
- data/lib/tarpaulin/tilt/clearsilver_template.rb +2 -2
- data/tarpaulin.gemspec +3 -2
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
data/lib/tarpaulin.rb
CHANGED
@@ -103,7 +103,8 @@ end
|
|
103
103
|
|
104
104
|
require File.here "tarpaulin/logger"
|
105
105
|
require File.here "tarpaulin/endless"
|
106
|
+
require File.here "tarpaulin/tilt/clearsilver_template"
|
106
107
|
require File.here "tarpaulin/camping"
|
107
108
|
require File.here "tarpaulin/camping/flash"
|
108
109
|
require File.here "tarpaulin/camping/filter"
|
109
|
-
require File.here "tarpaulin/
|
110
|
+
require File.here "tarpaulin/camping/accept_language"
|
data/lib/tarpaulin/camping.rb
CHANGED
@@ -6,14 +6,17 @@
|
|
6
6
|
#
|
7
7
|
# don't need to require anything as these are modules that are
|
8
8
|
# included elsewhere and those elsewhere require stuff :)
|
9
|
+
#
|
10
|
+
# A. use #included and then call TheApp for stuff we need (like #link_controller)
|
11
|
+
# B. what is the difference between #R, #R, #D, #URL ???
|
12
|
+
# C. use decent error pages, 403, 404, and Ruby Inspect (html version) in dev mode
|
13
|
+
# D. do link_ methods need to use #R or some variant?
|
9
14
|
module Tarpaulin
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def self.link_controller
|
16
|
-
@@link
|
16
|
+
def self.included(mod)
|
17
|
+
$DEBUG and $stderr.puts "mod is #{@mod}"
|
18
|
+
@mod = mod
|
19
|
+
$DEBUG and $stderr.puts "now it is #{@mod}"
|
17
20
|
end
|
18
21
|
|
19
22
|
# check for Context, only show a.inspect in dev mode
|
@@ -24,9 +27,10 @@ module Tarpaulin
|
|
24
27
|
if f.nil?
|
25
28
|
f = block.call
|
26
29
|
end
|
30
|
+
extra = (ENV['MODE'] == 'development') ? "<br><hr>#{a.inspect}" : ''
|
27
31
|
html_msg = "<!DOCTYPE html><html lang='en'><head>"+
|
28
32
|
"<title>« Uh oh »</title><body><span class='error'>"+
|
29
|
-
"Site error (BEEP!) 403: Invalid Path: #{f}
|
33
|
+
"Site error (BEEP!) 403: Invalid Path: #{f}#{extra}</span></body>"
|
30
34
|
r(403, html_msg, h)
|
31
35
|
end
|
32
36
|
|
@@ -37,9 +41,10 @@ module Tarpaulin
|
|
37
41
|
if f.nil?
|
38
42
|
f = block.call
|
39
43
|
end
|
44
|
+
extra = (ENV['MODE'] == 'development') ? "<br><hr>#{a.inspect}" : ''
|
40
45
|
html_msg = "<!DOCTYPE html><html lang='en'><head>"+
|
41
46
|
"<title>« Uh oh »</title><body><span class='error'>"+
|
42
|
-
"Site error (BEEP!) 404: File not found: #{f}
|
47
|
+
"Site error (BEEP!) 404: File not found: #{f}#{extra}</span></body>"
|
43
48
|
r(404, html_msg, h)
|
44
49
|
end
|
45
50
|
|
@@ -47,6 +52,12 @@ module Tarpaulin
|
|
47
52
|
|
48
53
|
module Helpers
|
49
54
|
|
55
|
+
def self.included(mod)
|
56
|
+
$DEBUG and $stderr.puts "h:mod is #{@mod}"
|
57
|
+
@mod = mod
|
58
|
+
$DEBUG and $stderr.puts "now it is #{@mod}"
|
59
|
+
end
|
60
|
+
|
50
61
|
# should be configified
|
51
62
|
def document_root # or whatever ...
|
52
63
|
'/var/www/localhost/htdocs/'
|
@@ -76,31 +87,25 @@ module Tarpaulin
|
|
76
87
|
File.join(document_root, JS)
|
77
88
|
end
|
78
89
|
|
90
|
+
def prepare_root
|
91
|
+
if @root.length > 0 and @root[0] == '/'.ord
|
92
|
+
root = @root.reverse.chop!.reverse
|
93
|
+
else
|
94
|
+
root = @root
|
95
|
+
end
|
96
|
+
root
|
97
|
+
end
|
98
|
+
|
79
99
|
def stylesheet_link_tag(stylish)
|
80
|
-
|
81
|
-
href = if stylish.start_with?("http")
|
100
|
+
type = "text/css"
|
101
|
+
href = if stylish.start_with?("http") or stylish.start_with?("//")
|
82
102
|
"#{stylish}"
|
83
103
|
else
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
else
|
89
|
-
root = @root
|
90
|
-
end
|
91
|
-
# $stderr.puts root
|
92
|
-
if root and root.length > 0
|
93
|
-
r = R(Tarpaulin.link_controller, root, Tarpaulin::Helpers::CSS, "#{stylish}.css")
|
94
|
-
r2 = R(Tarpaulin.link_controller, Tarpaulin::Helpers::CSS, "#{stylish}.css")
|
95
|
-
else
|
96
|
-
r = R(Tarpaulin.link_controller, Tarpaulin::Helpers::CSS, "#{stylish}.css")
|
97
|
-
r2 = nil
|
98
|
-
end
|
99
|
-
# $stderr.puts r.inspect
|
100
|
-
# $stderr.puts r2.inspect
|
101
|
-
r
|
104
|
+
root = prepare_root
|
105
|
+
(root and root.length > 0) ?
|
106
|
+
R(link_controller, root, Tarpaulin::Helpers::CSS, "#{stylish}.css") :
|
107
|
+
R(link_controller, Tarpaulin::Helpers::CSS, "#{stylish}.css")
|
102
108
|
end
|
103
|
-
# $stderr.puts href
|
104
109
|
|
105
110
|
Markaby::Builder.new.capture {
|
106
111
|
link :rel => "stylesheet",
|
@@ -111,35 +116,29 @@ module Tarpaulin
|
|
111
116
|
end
|
112
117
|
|
113
118
|
def javascript_link_tag(scriptish)
|
114
|
-
|
115
|
-
src = if scriptish.start_with?("http")
|
119
|
+
type = "text/javascript"
|
120
|
+
src = if scriptish.start_with?("http") or scriptish.start_with?("//") # 3rd party css? really?
|
116
121
|
"#{scriptish}"
|
117
122
|
else
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
else
|
123
|
-
root = @root
|
124
|
-
end
|
125
|
-
# $stderr.puts root
|
126
|
-
if root and root.length > 0
|
127
|
-
r = R(Tarpaulin.link_controller, root, Tarpaulin::Helpers::JS, "#{scriptish}.js")
|
128
|
-
r2 = R(Tarpaulin.link_controller, Tarpaulin::Helpers::JS, "#{scriptish}.js")
|
129
|
-
else
|
130
|
-
r = R(Tarpaulin.link_controller, Tarpaulin::Helpers::JS, "#{scriptish}.js")
|
131
|
-
r2 = nil
|
132
|
-
end
|
133
|
-
# $stderr.puts r.inspect
|
134
|
-
# $stderr.puts r2.inspect
|
135
|
-
r
|
123
|
+
root = prepare_root
|
124
|
+
(root and root.length > 0) ?
|
125
|
+
R(link_controller, root, Tarpaulin::Helpers::JS, "#{scriptish}.js") :
|
126
|
+
R(link_controller, Tarpaulin::Helpers::JS, "#{scriptish}.js")
|
136
127
|
end
|
137
|
-
# $stderr.puts src
|
138
128
|
|
139
129
|
Markaby::Builder.new.capture {
|
140
|
-
script(:type => type, :src => src)
|
130
|
+
script(:type => type, :src => src) do
|
131
|
+
end
|
141
132
|
}
|
142
133
|
end
|
134
|
+
|
135
|
+
@@empty_hdf = Neo::Hdf.new
|
136
|
+
|
137
|
+
def hdf_render *a
|
138
|
+
block_given? ?
|
139
|
+
render(*a, &Proc.new) :
|
140
|
+
render(*a) { @@empty_hdf }
|
141
|
+
end
|
143
142
|
|
144
143
|
end # module Helpers
|
145
144
|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# unashamedly robbed from https://github.com/iain/http_accept_language/blob/master/lib/http_accept_language.rb
|
3
|
+
#
|
4
|
+
module HttpAcceptLanguage
|
5
|
+
|
6
|
+
# Returns a sorted array based on user preference in HTTP_ACCEPT_LANGUAGE.
|
7
|
+
# Browsers send this HTTP header, so don't think this is holy.
|
8
|
+
#
|
9
|
+
# Example:
|
10
|
+
#
|
11
|
+
# request.user_preferred_languages
|
12
|
+
# # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ]
|
13
|
+
#
|
14
|
+
def user_preferred_languages
|
15
|
+
@user_preferred_languages ||= env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
|
16
|
+
l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
|
17
|
+
l.split(';q=')
|
18
|
+
end.sort do |x,y|
|
19
|
+
raise "Not correctly formatted" unless x.first =~ /^[a-z\-]+$/i
|
20
|
+
y.last.to_f <=> x.last.to_f
|
21
|
+
end.collect do |l|
|
22
|
+
l.first.downcase.gsub(/-[a-z]+$/i) { |x| x.upcase }
|
23
|
+
end
|
24
|
+
rescue # Just rescue anything if the browser messed up badly.
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
|
28
|
+
# Sets the user languages preference, overiding the browser
|
29
|
+
#
|
30
|
+
def user_preferred_languages=(languages)
|
31
|
+
@user_preferred_languages = languages
|
32
|
+
end
|
33
|
+
|
34
|
+
# Finds the locale specifically requested by the browser.
|
35
|
+
#
|
36
|
+
# Example:
|
37
|
+
#
|
38
|
+
# request.preferred_language_from I18n.available_locales
|
39
|
+
# # => 'nl'
|
40
|
+
#
|
41
|
+
def preferred_language_from(array)
|
42
|
+
(user_preferred_languages & array.collect { |i| i.to_s }).first
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns the first of the user_preferred_languages that is compatible
|
46
|
+
# with the available locales. Ignores region.
|
47
|
+
#
|
48
|
+
# Example:
|
49
|
+
#
|
50
|
+
# request.compatible_language_from I18n.available_locales
|
51
|
+
#
|
52
|
+
def compatible_language_from(available_languages)
|
53
|
+
user_preferred_languages.map do |x| #en-US
|
54
|
+
available_languages.find do |y| # en
|
55
|
+
y = y.to_s
|
56
|
+
x == y || x.split('-', 2).first == y.split('-', 2).first
|
57
|
+
end
|
58
|
+
end.compact.first
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -1,35 +1,50 @@
|
|
1
1
|
#
|
2
|
-
# include the
|
2
|
+
# include the CampingHooks module in TheApp
|
3
3
|
#
|
4
|
-
module
|
4
|
+
module CampingHooks
|
5
5
|
module ClassMethods
|
6
|
-
|
7
|
-
|
6
|
+
|
7
|
+
def set_hook_key(k)
|
8
|
+
@hooks ||= {}
|
9
|
+
@hooks[k] ||= []
|
8
10
|
end
|
9
11
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
filters[:before] << [action, blk]
|
14
|
-
end
|
12
|
+
def set_hook_value(k, v)
|
13
|
+
set_hook_key(k)
|
14
|
+
@hooks[k] << v
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
actions.each do |action|
|
20
|
-
filters[:after] << [action, blk]
|
21
|
-
end
|
17
|
+
def get_hooks
|
18
|
+
@hooks ||= {}
|
22
19
|
end
|
20
|
+
|
21
|
+
def hook(hook_pair, &block)
|
22
|
+
hook_sym = hook_pair.keys.first
|
23
|
+
hook_actions = hook_pair.values.first
|
24
|
+
instance_eval <<-EOT
|
25
|
+
def #{hook_sym}(actions, &block)
|
26
|
+
actions = [actions] unless actions.respond_to?(:each)
|
27
|
+
#binding.pry
|
28
|
+
actions.each do |action|
|
29
|
+
set_hook_value(:#{hook_sym}, [action, block])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
EOT
|
33
|
+
send(hook_sym, hook_actions, &block)
|
34
|
+
end
|
35
|
+
|
23
36
|
end # ClassMethods
|
24
37
|
|
25
38
|
def self.included(mod)
|
26
|
-
mod.extend(ClassMethods)
|
39
|
+
mod.extend(ClassMethods) # both are class methods, but what Object is @hooks an instance variable of?
|
27
40
|
end
|
28
41
|
|
29
|
-
def
|
42
|
+
def run_filter(sym)
|
30
43
|
o = self.class.to_s.split("::")
|
31
|
-
|
32
|
-
filters
|
44
|
+
app = Object.const_get(o.first)
|
45
|
+
filters = app.get_hooks
|
46
|
+
app.set_hook_key(sym)
|
47
|
+
filters[sym].each do |filter|
|
33
48
|
if (filter[0].is_a?(Symbol) && (filter[0] == o.last.to_sym || filter[0] == :all)) ||
|
34
49
|
(filter[0].is_a?(String) && /^#{filter[0]}\/?$/ =~ @env.REQUEST_URI)
|
35
50
|
self.instance_eval(&filter[1])
|
@@ -39,9 +54,9 @@ module CampingFilters
|
|
39
54
|
|
40
55
|
def service(*a) # params to controllers, ids n stuff
|
41
56
|
override_self = catch(:halt) do
|
42
|
-
|
57
|
+
run_filter(:before_service)
|
43
58
|
override_self = super(*a)
|
44
|
-
|
59
|
+
run_filter(:after_service)
|
45
60
|
override_self
|
46
61
|
end
|
47
62
|
override_self
|
data/lib/tarpaulin/endless.rb
CHANGED
data/tarpaulin.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "tarpaulin"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Anthony Durity"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-11-02"
|
13
13
|
s.description = "So I don't have to copy and paste a million times."
|
14
14
|
s.email = "github@jollyrotten.org"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"VERSION",
|
26
26
|
"lib/tarpaulin.rb",
|
27
27
|
"lib/tarpaulin/camping.rb",
|
28
|
+
"lib/tarpaulin/camping/accept_language.rb",
|
28
29
|
"lib/tarpaulin/camping/filter.rb",
|
29
30
|
"lib/tarpaulin/camping/flash.rb",
|
30
31
|
"lib/tarpaulin/endless.rb",
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tarpaulin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 3
|
10
|
+
version: 0.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Anthony Durity
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-02 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- VERSION
|
162
162
|
- lib/tarpaulin.rb
|
163
163
|
- lib/tarpaulin/camping.rb
|
164
|
+
- lib/tarpaulin/camping/accept_language.rb
|
164
165
|
- lib/tarpaulin/camping/filter.rb
|
165
166
|
- lib/tarpaulin/camping/flash.rb
|
166
167
|
- lib/tarpaulin/endless.rb
|