pubba 0.4.2 → 0.5.0

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/.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