pubba 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -2
- data/lib/sinatra/pubba/assets/handler.rb +8 -0
- data/lib/sinatra/pubba/assets/sprockets_handler.rb +19 -0
- data/lib/sinatra/pubba/monitor.rb +8 -3
- data/lib/sinatra/pubba/page.rb +6 -14
- data/lib/sinatra/pubba/site.rb +19 -33
- data/lib/sinatra/pubba/version.rb +1 -1
- data/test/pubba/assets/test_handler.rb +14 -0
- data/test/pubba/html/test_helpers.rb +0 -1
- data/test/pubba/test_site.rb +8 -8
- metadata +20 -20
data/.gitignore
CHANGED
@@ -9,6 +9,14 @@ module Sinatra
|
|
9
9
|
def save_as(file)
|
10
10
|
raise NotImplementedError
|
11
11
|
end
|
12
|
+
|
13
|
+
def process(pattern, destination)
|
14
|
+
raise NotImplementedError
|
15
|
+
end
|
16
|
+
|
17
|
+
def build(name, type, ext, urls)
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
12
20
|
end # Handler
|
13
21
|
end # Assets
|
14
22
|
end # Pubba
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fileutils'
|
1
2
|
require 'sprockets'
|
2
3
|
require_relative 'handler'
|
3
4
|
|
@@ -19,6 +20,24 @@ module Sinatra
|
|
19
20
|
@sprockets ||= Sprockets::Environment.new()
|
20
21
|
end
|
21
22
|
|
23
|
+
def self.process(source, pattern, destination)
|
24
|
+
Dir.glob("#{source}/#{pattern}") do |file|
|
25
|
+
asset = find(file)
|
26
|
+
asset.save_as "#{destination}/#{File.basename(file)}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.build(name, type, ext, urls)
|
31
|
+
content = urls.collect{|url| "//= require #{url}.#{ext}"}.compact.join("\n")
|
32
|
+
out_folder = File.join(Site.asset_folder, "out", ext)
|
33
|
+
FileUtils.mkdir_p out_folder
|
34
|
+
fname = File.join(out_folder, "#{name}-#{type}.#{ext}")
|
35
|
+
File.open(fname, 'w') do |f|
|
36
|
+
f.write Site.asset_configuration.disclaimer
|
37
|
+
f.write content
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
22
41
|
attr_reader :asset
|
23
42
|
|
24
43
|
def initialize(asset)
|
@@ -11,16 +11,21 @@ module Sinatra
|
|
11
11
|
|
12
12
|
def start_monitor
|
13
13
|
@running = Thread.new do
|
14
|
-
|
14
|
+
|
15
|
+
|
16
|
+
script_asset_folder = File.join(Site.asset_folder, Site.script_folder)
|
17
|
+
style_asset_folder = File.join(Site.asset_folder, Site.style_folder)
|
18
|
+
|
19
|
+
puts ">> Pubba is now monitoring:\n>> #{script_asset_folder}\n>> #{style_asset_folder}"
|
15
20
|
FSSM.monitor do
|
16
|
-
path
|
21
|
+
path script_asset_folder do
|
17
22
|
glob '**/*'
|
18
23
|
update {|base, relative, type| Site.process}
|
19
24
|
delete {|base, relative, type| Site.process}
|
20
25
|
create {|base, relative, type| Site.process}
|
21
26
|
end
|
22
27
|
|
23
|
-
path
|
28
|
+
path style_asset_folder do
|
24
29
|
glob '**/*'
|
25
30
|
update {|base, relative, type| Site.process}
|
26
31
|
delete {|base, relative, type| Site.process}
|
data/lib/sinatra/pubba/page.rb
CHANGED
@@ -73,23 +73,23 @@ module Sinatra
|
|
73
73
|
|
74
74
|
def create_style_assets
|
75
75
|
style_groups do |group, hash|
|
76
|
-
|
76
|
+
urls = []
|
77
77
|
style_urls(group) do |url|
|
78
78
|
next if url.start_with?("http")
|
79
|
-
|
79
|
+
urls << url
|
80
80
|
end
|
81
|
-
|
81
|
+
Site.asset_handler.build(name, group, "css", urls)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
def create_script_assets
|
86
86
|
script_groups do |group|
|
87
|
-
|
87
|
+
urls = []
|
88
88
|
script_urls(group) do |url|
|
89
89
|
next if url.start_with?("http")
|
90
|
-
|
90
|
+
urls << url
|
91
91
|
end
|
92
|
-
|
92
|
+
Site.asset_handler.build(name, group, "js", urls)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -130,14 +130,6 @@ module Sinatra
|
|
130
130
|
tag_set.each{|tag| found = true if tag[key] == hash[key]}
|
131
131
|
tag_set << hash unless found
|
132
132
|
end
|
133
|
-
|
134
|
-
def write_asset(dir, type, ext, content)
|
135
|
-
fname = File.join(dir, "#{name}-#{type}.#{ext}")
|
136
|
-
File.open(fname, 'w') do |f|
|
137
|
-
f.write Site.asset_configuration.disclaimer
|
138
|
-
f.write content
|
139
|
-
end
|
140
|
-
end
|
141
133
|
end # Page
|
142
134
|
end # Pubba
|
143
135
|
end # Sinatra
|
data/lib/sinatra/pubba/site.rb
CHANGED
@@ -9,14 +9,10 @@ module Sinatra
|
|
9
9
|
module Pubba
|
10
10
|
module Site
|
11
11
|
extend self
|
12
|
-
attr_reader :asset_folder
|
13
|
-
attr_reader :script_asset_folder, :style_asset_folder
|
14
|
-
attr_reader :script_public_folder, :style_public_folder
|
15
|
-
|
12
|
+
attr_reader :public_folder, :asset_folder, :script_folder, :style_folder
|
16
13
|
attr_reader :asset_configuration, :asset_handler, :asset_minifier
|
17
14
|
attr_reader :locale, :r18n_folder, :r18n_locale
|
18
15
|
|
19
|
-
|
20
16
|
def configure(app)
|
21
17
|
return if @configured
|
22
18
|
|
@@ -56,8 +52,15 @@ module Sinatra
|
|
56
52
|
|
57
53
|
def process
|
58
54
|
pages.each{|name, p| p.assetize }
|
59
|
-
|
60
|
-
|
55
|
+
|
56
|
+
public_script_folder = File.join(public_folder, script_folder)
|
57
|
+
public_style_folder = File.join(public_folder, style_folder)
|
58
|
+
|
59
|
+
asset_handler.process(asset_folder, "*.js", public_script_folder)
|
60
|
+
asset_handler.process(asset_folder, "*.css", public_style_folder)
|
61
|
+
|
62
|
+
asset_minifier.minify(public_script_folder, :js)
|
63
|
+
asset_minifier.minify(public_style_folder, :css)
|
61
64
|
end
|
62
65
|
|
63
66
|
def validate_settings(settings)
|
@@ -77,12 +80,12 @@ module Sinatra
|
|
77
80
|
end
|
78
81
|
|
79
82
|
def set_folder_defaults(settings)
|
80
|
-
|
81
|
-
@
|
82
|
-
@
|
83
|
-
@
|
84
|
-
|
85
|
-
|
83
|
+
@public_folder = settings.public_folder
|
84
|
+
@asset_folder = settings.asset_folder
|
85
|
+
@script_folder = 'javascripts'
|
86
|
+
@style_folder = 'stylesheets'
|
87
|
+
|
88
|
+
Statica.root_dir = settings.public_folder
|
86
89
|
end
|
87
90
|
|
88
91
|
def maybe_init_r18n(settings)
|
@@ -106,7 +109,9 @@ module Sinatra
|
|
106
109
|
if settings.respond_to?(:asset_handler) && (handler = settings.asset_handler)
|
107
110
|
@asset_handler = handler
|
108
111
|
end
|
109
|
-
@asset_handler.asset_paths
|
112
|
+
@asset_handler.asset_paths asset_folder,
|
113
|
+
File.join(asset_folder, style_folder),
|
114
|
+
File.join(asset_folder, script_folder)
|
110
115
|
end
|
111
116
|
|
112
117
|
def configure_asset_compressor(settings)
|
@@ -134,25 +139,6 @@ module Sinatra
|
|
134
139
|
|
135
140
|
pages[name] = p
|
136
141
|
end
|
137
|
-
|
138
|
-
private
|
139
|
-
|
140
|
-
def compile_assets
|
141
|
-
process_assets(script_asset_folder, script_public_folder)
|
142
|
-
process_assets(style_asset_folder, style_public_folder)
|
143
|
-
end
|
144
|
-
|
145
|
-
def process_assets(from_folder, to_folder)
|
146
|
-
Dir.glob("#{from_folder}/*.*") do |file|
|
147
|
-
asset = asset_handler.find(file)
|
148
|
-
asset.save_as "#{to_folder}/#{File.basename(file)}"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def minify_assets
|
153
|
-
asset_minifier.minify(script_public_folder, :js)
|
154
|
-
asset_minifier.minify(style_public_folder, :css)
|
155
|
-
end
|
156
142
|
end # Site
|
157
143
|
end # Pubba
|
158
144
|
end # Sinatra
|
@@ -13,4 +13,18 @@ class TestHandler < TestPubba
|
|
13
13
|
handler.save_as('')
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
def test_process
|
18
|
+
handler = Sinatra::Pubba::Assets::Handler.new
|
19
|
+
assert_raises NotImplementedError do
|
20
|
+
handler.process('', '')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_build
|
25
|
+
handler = Sinatra::Pubba::Assets::Handler.new
|
26
|
+
assert_raises NotImplementedError do
|
27
|
+
handler.build('', '', '', '')
|
28
|
+
end
|
29
|
+
end
|
16
30
|
end
|
@@ -6,7 +6,6 @@ class TestPubbaHTMLHelper < TestPubba
|
|
6
6
|
|
7
7
|
def test_home_page_head_tags
|
8
8
|
res = get('/home-page-head-tags').body
|
9
|
-
puts res
|
10
9
|
reg = Regexp.new '<link href="http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css" rel="stylesheet" type="text/css"></link><link href="/stylesheets/home-all.css/\w+" rel="stylesheet" type="text/css"></link><link href="/stylesheets/home-phone.css/\w+" media="only screen and \(max-width: 480px\)" rel="stylesheet" type="text/css"></link><link href="/stylesheets/home-desktop.css/\w+" media="only screen and \(min-width: 480px\)" rel="stylesheet" type="text/css"></link><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script><script src="/javascripts/home-head.js/\w+" type="text/javascript"></script>'
|
11
10
|
|
12
11
|
|
data/test/pubba/test_site.rb
CHANGED
@@ -9,19 +9,19 @@ class TestPubbaSite < TestPubba
|
|
9
9
|
assert_equal Sinatra::Pubba::Assets::YUIMinifier, Sinatra::Pubba::Site.asset_minifier
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
assert_equal "#{R.
|
12
|
+
def test_asset_folder_initialization
|
13
|
+
assert_equal "#{R.asset_folder}", Sinatra::Pubba::Site.asset_folder
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
assert_equal "#{R.public_folder}
|
16
|
+
def test_public_folder_initialization
|
17
|
+
assert_equal "#{R.public_folder}", Sinatra::Pubba::Site.public_folder
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
assert_equal "
|
20
|
+
def test_script_folder_initialization
|
21
|
+
assert_equal "javascripts", Sinatra::Pubba::Site.script_folder
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
assert_equal "
|
24
|
+
def test_style_folder_initialization
|
25
|
+
assert_equal "stylesheets", Sinatra::Pubba::Site.style_folder
|
26
26
|
end
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sprockets
|
16
|
-
requirement: &
|
16
|
+
requirement: &2151797060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.1.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2151797060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: r18n-desktop
|
27
|
-
requirement: &
|
27
|
+
requirement: &2151812720 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.4.13
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2151812720
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yui-compressor
|
38
|
-
requirement: &
|
38
|
+
requirement: &2151812000 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.4
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2151812000
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fssm
|
49
|
-
requirement: &
|
49
|
+
requirement: &2151811180 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.2.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2151811180
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: statica
|
60
|
-
requirement: &
|
60
|
+
requirement: &2151810620 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.1.0
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2151810620
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
|
-
requirement: &
|
71
|
+
requirement: &2151810000 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.9.2
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2151810000
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sinatra
|
82
|
-
requirement: &
|
82
|
+
requirement: &2151809500 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.3.1
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2151809500
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sinatra-contrib
|
93
|
-
requirement: &
|
93
|
+
requirement: &2151808940 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.3.1
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2151808940
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: yard
|
104
|
-
requirement: &
|
104
|
+
requirement: &2151808040 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2151808040
|
113
113
|
description:
|
114
114
|
email:
|
115
115
|
- andy@stonean.com
|