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 CHANGED
@@ -13,6 +13,7 @@ doc
13
13
  coverage
14
14
  pkg
15
15
 
16
- test/sinatra/app/assets/javascripts
17
- test/sinatra/app/assets/stylesheets
16
+ test/sinatra/app/assets/out
17
+ test/sinatra/app/assets/javascripts/*.js
18
+ test/sinatra/app/assets/stylesheets/*.css
18
19
  test/sinatra/public
@@ -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
- puts "Pubba is now monitoring: #{Site.asset_folder}"
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 Site.script_asset_folder do
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 Site.style_asset_folder do
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}
@@ -73,23 +73,23 @@ module Sinatra
73
73
 
74
74
  def create_style_assets
75
75
  style_groups do |group, hash|
76
- content = []
76
+ urls = []
77
77
  style_urls(group) do |url|
78
78
  next if url.start_with?("http")
79
- content << "//= require #{url}.css"
79
+ urls << url
80
80
  end
81
- write_asset(Site.style_asset_folder, group, "css", content.compact.join("\n"))
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
- content = []
87
+ urls = []
88
88
  script_urls(group) do |url|
89
89
  next if url.start_with?("http")
90
- content << "//= require #{url}.js"
90
+ urls << url
91
91
  end
92
- write_asset(Site.script_asset_folder, group, "js", content.compact.join("\n"))
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
@@ -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
- compile_assets
60
- minify_assets
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
- Statica.root_dir = settings.public_folder
81
- @script_public_folder = File.join(settings.public_folder, 'javascripts')
82
- @style_public_folder = File.join(settings.public_folder, 'stylesheets')
83
- @asset_folder = settings.asset_folder
84
- @script_asset_folder = File.join(@asset_folder, 'javascripts')
85
- @style_asset_folder = File.join(@asset_folder, 'stylesheets')
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 style_asset_folder, script_asset_folder
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
@@ -1,5 +1,5 @@
1
1
  module Pubba
2
2
  # Pubba version string
3
3
  # @api public
4
- VERSION = '0.4.2'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -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
 
@@ -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 test_script_public_folder_initialization
13
- assert_equal "#{R.public_folder}/javascripts", Sinatra::Pubba::Site.script_public_folder
12
+ def test_asset_folder_initialization
13
+ assert_equal "#{R.asset_folder}", Sinatra::Pubba::Site.asset_folder
14
14
  end
15
15
 
16
- def test_style_public_folder_initialization
17
- assert_equal "#{R.public_folder}/stylesheets", Sinatra::Pubba::Site.style_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 test_script_asset_folder_initialization
21
- assert_equal "#{R.asset_folder}/javascripts", Sinatra::Pubba::Site.script_asset_folder
20
+ def test_script_folder_initialization
21
+ assert_equal "javascripts", Sinatra::Pubba::Site.script_folder
22
22
  end
23
23
 
24
- def test_style_asset_folder_initialization
25
- assert_equal "#{R.asset_folder}/stylesheets", Sinatra::Pubba::Site.style_asset_folder
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.2
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-20 00:00:00.000000000 Z
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: &2151810340 !ruby/object:Gem::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: *2151810340
24
+ version_requirements: *2151797060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: r18n-desktop
27
- requirement: &2151809760 !ruby/object:Gem::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: *2151809760
35
+ version_requirements: *2151812720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yui-compressor
38
- requirement: &2151809060 !ruby/object:Gem::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: *2151809060
46
+ version_requirements: *2151812000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: fssm
49
- requirement: &2151808020 !ruby/object:Gem::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: *2151808020
57
+ version_requirements: *2151811180
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: statica
60
- requirement: &2151807380 !ruby/object:Gem::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: *2151807380
68
+ version_requirements: *2151810620
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &2151806780 !ruby/object:Gem::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: *2151806780
79
+ version_requirements: *2151810000
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sinatra
82
- requirement: &2151806120 !ruby/object:Gem::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: *2151806120
90
+ version_requirements: *2151809500
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sinatra-contrib
93
- requirement: &2151805560 !ruby/object:Gem::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: *2151805560
101
+ version_requirements: *2151808940
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: yard
104
- requirement: &2151821160 !ruby/object:Gem::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: *2151821160
112
+ version_requirements: *2151808040
113
113
  description:
114
114
  email:
115
115
  - andy@stonean.com