pubba 0.2.3 → 0.3.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
@@ -12,3 +12,7 @@ Gemfile.lock
12
12
  doc
13
13
  coverage
14
14
  pkg
15
+
16
+ test/sinatra/app/assets/javascripts
17
+ test/sinatra/app/assets/stylesheets
18
+ test/sinatra/public
data/CHANGES CHANGED
@@ -1,5 +1,24 @@
1
1
  master
2
2
 
3
+ 0.3.0
4
+
5
+ * Include YUICompressor processing of stylesheets and javascripts
6
+ * Update to r18n-desktop 0.4.13 to address require issue
7
+ * Update disclaimer so it doesn't include the full path.
8
+ * Move processing of assets to before filter in dev and test mode
9
+
10
+ 0.2.3
11
+
12
+ * Remove asset_id functionality. Dead code causing bugs.
13
+
14
+ 0.2.2
15
+
16
+ * Asset compilation fix
17
+
18
+ 0.2.1
19
+
20
+ * page_head_tags and page_body_tags implemented
21
+
3
22
  0.2.0
4
23
 
5
24
  * Ability to add external references
data/lib/sinatra/pubba.rb CHANGED
@@ -7,12 +7,15 @@ require_relative 'pubba/html/helpers'
7
7
  module Sinatra
8
8
  module Pubba
9
9
  def self.registered(app)
10
+ Site.configure(app)
11
+
10
12
  if app.settings.development? || app.settings.test?
11
- Site.configure(app)
13
+ app.before do
14
+ Site.process(app)
15
+ end
12
16
  end
13
17
 
14
18
  app.helpers Sinatra::Pubba::HTML::Helpers
15
-
16
19
  end
17
20
  end # Pubba
18
21
  end # Sinatra
@@ -5,13 +5,15 @@ module Sinatra
5
5
  module Assets
6
6
  class Configuration
7
7
  attr_reader :yaml
8
+ attr_reader :name
8
9
 
9
10
  def initialize(config_file)
11
+ @name = File.basename(config_file)
10
12
  @yaml = Psych.load_file(config_file)
11
13
  end
12
14
 
13
15
  def global_config!
14
- yaml.delete("global") || {}
16
+ @global_config ||= (yaml.delete("global") || {})
15
17
  end
16
18
 
17
19
  def process
@@ -0,0 +1,11 @@
1
+ module Sinatra
2
+ module Pubba
3
+ module Assets
4
+ class Minifier
5
+ def self.minify(folder, handler)
6
+ raise NotImplementedError
7
+ end
8
+ end # Compressor
9
+ end # Assets
10
+ end # Pubba
11
+ end # Sinatra
@@ -0,0 +1,28 @@
1
+ require "yui/compressor"
2
+ require_relative 'minifier'
3
+
4
+ module Sinatra
5
+ module Pubba
6
+ module Assets
7
+ class YUIMinifier < Minifier
8
+ def self.minify(folder, handler)
9
+ compressor = get_compressor(handler)
10
+ Dir.glob("#{folder}/*.*") do |file|
11
+ contents = File.read(file)
12
+ File.open(file, "w") {|f| f.write(compressor.compress(contents))}
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def self.get_compressor(handler)
19
+ case handler
20
+ when :js then YUI::JavaScriptCompressor.new
21
+ when :css then YUI::CssCompressor.new
22
+ else raise ArgumentError, "minify handler must be one of [:js, :css]"
23
+ end
24
+ end
25
+ end # YUIMinifier
26
+ end # Assets
27
+ end # Pubba
28
+ end # Sinatra
@@ -1,5 +1,6 @@
1
1
  require_relative 'assets/configuration'
2
2
  require_relative 'assets/sprockets_handler'
3
+ require_relative 'assets/yui_minifier'
3
4
  require_relative 'page'
4
5
 
5
6
  module Sinatra
@@ -9,7 +10,7 @@ module Sinatra
9
10
  attr_reader :script_asset_folder, :style_asset_folder
10
11
  attr_reader :script_public_folder, :style_public_folder
11
12
 
12
- attr_reader :global_asset_configuration, :asset_handler
13
+ attr_reader :asset_configuration, :asset_handler, :asset_minifier
13
14
  attr_reader :disclaimer, :locale, :r18n_folder, :r18n_locale
14
15
 
15
16
 
@@ -18,26 +19,36 @@ module Sinatra
18
19
 
19
20
  validate_settings(settings)
20
21
 
21
- set_defaults(settings)
22
+ set_folder_defaults(settings)
22
23
 
23
24
  maybe_init_r18n(settings)
24
25
 
25
26
  # Load pubba_config
26
- asset_configuration = Sinatra::Pubba::Assets::Configuration.new(settings.pubba_config)
27
+ @asset_configuration = Sinatra::Pubba::Assets::Configuration.new(settings.pubba_config)
28
+
29
+ @disclaimer = "// This file is automatically generated from the contents\n// in #{@asset_configuration.name}\n//\n"
27
30
 
28
31
  # Set assset handler
29
32
  configure_asset_handler(settings)
30
33
 
31
- # Grab the global section defined in @pubba_config
32
- @global_asset_configuration = asset_configuration.global_config!
34
+ # Set compressor
35
+ configure_asset_compressor(settings)
33
36
 
34
37
  # Process the remaining @pubba_config sections
35
38
  asset_configuration.process do |p, config|
36
- add_page(p, config).assetize
39
+ add_page(p, config)
40
+ end
41
+ end
42
+
43
+ def process(app)
44
+ pages.each do |name, p|
45
+ p.assetize
37
46
  end
38
47
 
39
48
  # Write assets to public_folder
40
49
  compile_assets(app)
50
+
51
+ minify_assets(app)
41
52
  end
42
53
 
43
54
 
@@ -57,13 +68,11 @@ module Sinatra
57
68
  end
58
69
  end
59
70
 
60
- def set_defaults(settings)
71
+ def set_folder_defaults(settings)
61
72
  @script_public_folder = File.join(settings.public_folder, 'javascripts')
62
73
  @style_public_folder = File.join(settings.public_folder, 'stylesheets')
63
74
  @script_asset_folder = File.join(settings.asset_folder, 'javascripts')
64
75
  @style_asset_folder = File.join(settings.asset_folder, 'stylesheets')
65
-
66
- @disclaimer = "// This file is automatically generated from the contents\n// in #{settings.pubba_config}\n//\n"
67
76
  end
68
77
 
69
78
  def maybe_init_r18n(settings)
@@ -90,6 +99,13 @@ module Sinatra
90
99
  @asset_handler.asset_paths style_asset_folder, script_asset_folder
91
100
  end
92
101
 
102
+ def configure_asset_compressor(settings)
103
+ @asset_minifier = Sinatra::Pubba::Assets::YUIMinifier
104
+ if settings.respond_to?(:asset_minifier) && (minifier = settings.asset_minifier)
105
+ @asset_minifier = minifier
106
+ end
107
+ end
108
+
93
109
  def page(name)
94
110
  pages[name]
95
111
  end
@@ -99,7 +115,7 @@ module Sinatra
99
115
  end
100
116
 
101
117
  def add_page(name, hsh)
102
- p = Page.new(name, @global_asset_configuration)
118
+ p = Page.new(name, @asset_configuration.global_config!)
103
119
 
104
120
  p.add_asset('styles', hsh['styles']) if hsh['styles']
105
121
  p.add_asset('scripts', hsh['scripts']) if hsh['scripts']
@@ -120,6 +136,11 @@ module Sinatra
120
136
  asset.save_as "#{to_folder}/#{File.basename(file)}"
121
137
  end
122
138
  end
139
+
140
+ def minify_assets(app)
141
+ asset_minifier.minify(script_public_folder, :js)
142
+ asset_minifier.minify(style_public_folder, :css)
143
+ end
123
144
  end # Site
124
145
  end # Pubba
125
146
  end # Sinatra
@@ -1,5 +1,5 @@
1
1
  module Pubba
2
2
  # Pubba version string
3
3
  # @api public
4
- VERSION = '0.2.3'
4
+ VERSION = '0.3.0'
5
5
  end
data/pubba.gemspec CHANGED
@@ -20,7 +20,8 @@ Gem::Specification.new do |s|
20
20
 
21
21
 
22
22
  s.add_runtime_dependency('sprockets', ['~> 2.1.2'])
23
- s.add_runtime_dependency('r18n-desktop', ['~> 0.4.11'])
23
+ s.add_runtime_dependency('r18n-desktop', ['~> 0.4.13'])
24
+ s.add_runtime_dependency('yui-compressor', ['>= 0.9.4'])
24
25
 
25
26
  s.add_development_dependency('rake', ['>= 0.9.2'])
26
27
  s.add_development_dependency('sinatra', ['>= 1.3.1'])
data/test/helper.rb CHANGED
@@ -42,6 +42,10 @@ class TestPubba < MiniTest::Unit::TestCase
42
42
 
43
43
  register Sinatra::Pubba
44
44
 
45
+ get('/') do
46
+ 'OK'
47
+ end
48
+
45
49
  get('/home-page-head-tags') do
46
50
  @page = Sinatra::Pubba::Site.page('home');
47
51
  page_head_tags
@@ -52,18 +56,8 @@ class TestPubba < MiniTest::Unit::TestCase
52
56
  page_body_tags
53
57
  end
54
58
  end
55
- end
56
59
 
57
- def teardown
58
- [R.asset_folder, R.public_folder].each do |root_folder|
59
- Dir.glob(File.join(root_folder, 'javascripts', '*.js')) do |f|
60
- File.delete(f) if File.exist?(f)
61
- end
62
-
63
- Dir.glob(File.join(root_folder, 'stylesheets', '*.css')) do |f|
64
- File.delete(f) if File.exist?(f)
65
- end
66
- end
60
+ get '/'
67
61
  end
68
62
 
69
63
  def empty_hash
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestMinifier < TestPubba
4
+ def test_minify
5
+ assert_raises NotImplementedError do
6
+ Sinatra::Pubba::Assets::Minifier.minify("/folder/path", :js)
7
+ end
8
+ end
9
+ end
@@ -19,7 +19,7 @@ class TestPubbaPage < TestPubba
19
19
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'home-all.css')){|f| f.read }
20
20
  contents = <<TEXT
21
21
  // This file is automatically generated from the contents
22
- // in #{R.pubba_config_file}
22
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
23
23
  //
24
24
  //= require custom/global.css
25
25
  //= require custom/home.css
@@ -32,7 +32,7 @@ TEXT
32
32
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'home-phone.css')){|f| f.read }
33
33
  contents = <<TEXT
34
34
  // This file is automatically generated from the contents
35
- // in #{R.pubba_config_file}
35
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
36
36
  //
37
37
  //= require custom/small.css
38
38
  TEXT
@@ -44,7 +44,7 @@ TEXT
44
44
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'home-desktop.css')){|f| f.read }
45
45
  contents = <<TEXT
46
46
  // This file is automatically generated from the contents
47
- // in #{R.pubba_config_file}
47
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
48
48
  //
49
49
  //= require custom/large.css
50
50
  TEXT
@@ -56,7 +56,7 @@ TEXT
56
56
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'search-all.css')){|f| f.read }
57
57
  contents = <<TEXT
58
58
  // This file is automatically generated from the contents
59
- // in #{R.pubba_config_file}
59
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
60
60
  //
61
61
  //= require custom/global.css
62
62
  //= require custom/search.css
@@ -70,7 +70,7 @@ TEXT
70
70
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'search-phone.css')){|f| f.read }
71
71
  contents = <<TEXT
72
72
  // This file is automatically generated from the contents
73
- // in #{R.pubba_config_file}
73
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
74
74
  //
75
75
  //= require custom/small.css
76
76
  TEXT
@@ -82,7 +82,7 @@ TEXT
82
82
  css = File.open( File.join(R.asset_folder, 'stylesheets', 'search-desktop.css')){|f| f.read }
83
83
  contents = <<TEXT
84
84
  // This file is automatically generated from the contents
85
- // in #{R.pubba_config_file}
85
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
86
86
  //
87
87
  //= require custom/large.css
88
88
  TEXT
@@ -94,7 +94,7 @@ TEXT
94
94
  js = File.open( File.join(R.asset_folder, 'javascripts', 'home-head.js')){|f| f.read }
95
95
  contents = <<TEXT
96
96
  // This file is automatically generated from the contents
97
- // in #{R.pubba_config_file}
97
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
98
98
  //
99
99
  //= require third-party/modernizr.js
100
100
  TEXT
@@ -106,7 +106,7 @@ TEXT
106
106
  js = File.open( File.join(R.asset_folder, 'javascripts', 'home-body.js')){|f| f.read }
107
107
  contents = <<TEXT
108
108
  // This file is automatically generated from the contents
109
- // in #{R.pubba_config_file}
109
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
110
110
  //
111
111
  //= require third-party/backbone.js
112
112
  //= require custom/app.js
@@ -120,7 +120,7 @@ TEXT
120
120
  js = File.open( File.join(R.asset_folder, 'javascripts', 'search-head.js')){|f| f.read }
121
121
  contents = <<TEXT
122
122
  // This file is automatically generated from the contents
123
- // in #{R.pubba_config_file}
123
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
124
124
  //
125
125
  //= require third-party/modernizr.js
126
126
  TEXT
@@ -132,7 +132,7 @@ TEXT
132
132
  js = File.open( File.join(R.asset_folder, 'javascripts', 'search-body.js')){|f| f.read }
133
133
  contents = <<TEXT
134
134
  // This file is automatically generated from the contents
135
- // in #{R.pubba_config_file}
135
+ // in #{Sinatra::Pubba::Site.asset_configuration.name}
136
136
  //
137
137
  //= require third-party/backbone.js
138
138
  //= require custom/app.js
@@ -5,6 +5,10 @@ class TestPubbaSite < TestPubba
5
5
  assert_equal Sinatra::Pubba::Assets::SprocketsHandler, Sinatra::Pubba::Site.asset_handler
6
6
  end
7
7
 
8
+ def test_asset_handler_initialization
9
+ assert_equal Sinatra::Pubba::Assets::YUIMinifier, Sinatra::Pubba::Site.asset_minifier
10
+ end
11
+
8
12
  def test_script_public_folder_initialization
9
13
  assert_equal "#{R.public_folder}/javascripts", Sinatra::Pubba::Site.script_public_folder
10
14
  end
@@ -1,3 +1,4 @@
1
1
  function app(){
2
+ var aLongVarName = "12"
2
3
  alert('This is the app test file');
3
4
  }
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.2.3
4
+ version: 0.3.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-07 00:00:00.000000000 Z
12
+ date: 2011-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
16
- requirement: &2151904260 !ruby/object:Gem::Requirement
16
+ requirement: &2152383640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,21 +21,32 @@ dependencies:
21
21
  version: 2.1.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151904260
24
+ version_requirements: *2152383640
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: r18n-desktop
27
- requirement: &2151903600 !ruby/object:Gem::Requirement
27
+ requirement: &2152382760 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 0.4.11
32
+ version: 0.4.13
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2151903600
35
+ version_requirements: *2152382760
36
+ - !ruby/object:Gem::Dependency
37
+ name: yui-compressor
38
+ requirement: &2152381900 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.9.4
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2152381900
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rake
38
- requirement: &2151902900 !ruby/object:Gem::Requirement
49
+ requirement: &2152381020 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: 0.9.2
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *2151902900
57
+ version_requirements: *2152381020
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: sinatra
49
- requirement: &2151902280 !ruby/object:Gem::Requirement
60
+ requirement: &2152380000 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: 1.3.1
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *2151902280
68
+ version_requirements: *2152380000
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: sinatra-contrib
60
- requirement: &2151901620 !ruby/object:Gem::Requirement
71
+ requirement: &2152379420 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 1.3.1
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *2151901620
79
+ version_requirements: *2152379420
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: yard
71
- requirement: &2151901080 !ruby/object:Gem::Requirement
82
+ requirement: &2152378680 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *2151901080
90
+ version_requirements: *2152378680
80
91
  description:
81
92
  email:
82
93
  - andy@stonean.com
@@ -94,7 +105,9 @@ files:
94
105
  - lib/sinatra/pubba.rb
95
106
  - lib/sinatra/pubba/assets/configuration.rb
96
107
  - lib/sinatra/pubba/assets/handler.rb
108
+ - lib/sinatra/pubba/assets/minifier.rb
97
109
  - lib/sinatra/pubba/assets/sprockets_handler.rb
110
+ - lib/sinatra/pubba/assets/yui_minifier.rb
98
111
  - lib/sinatra/pubba/errors.rb
99
112
  - lib/sinatra/pubba/html/helpers.rb
100
113
  - lib/sinatra/pubba/locale.rb
@@ -105,6 +118,7 @@ files:
105
118
  - test/helper.rb
106
119
  - test/pubba/assets/test_configuration.rb
107
120
  - test/pubba/assets/test_handler.rb
121
+ - test/pubba/assets/test_minifier.rb
108
122
  - test/pubba/html/test_helpers.rb
109
123
  - test/pubba/test_page.rb
110
124
  - test/pubba/test_site.rb