JackDanger-sweet_assets 1.2.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.
@@ -0,0 +1,16 @@
1
+ === 1.0.0 / 2008-03-11
2
+
3
+ * 1 major enhancement
4
+
5
+ * First iteration complete.
6
+
7
+
8
+ === 2.0.1 / 2008-05-27
9
+
10
+ * 2 major enhancements
11
+
12
+ * Completely rewritten. Doesn't use <head> parsing magic.
13
+ * Supports media selection for stylesheets
14
+
15
+
16
+
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,15 @@
1
+ History.txt
2
+ MIT-LICENSE
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ init.rb
7
+ install.rb
8
+ lib/sweet_assets.rb
9
+ rails/init.rb
10
+ sweet_assets.gemspec
11
+ test/sweet_assets_test.rb
12
+ test/views/defaults/index.html.erb
13
+ test/views/shortcut/index.html.erb
14
+ test/views/web/index.html.erb
15
+ uninstall.rb
@@ -0,0 +1,49 @@
1
+ = SweetAssets
2
+
3
+ http://github.com/JackDanger/sweet_assets
4
+
5
+ == Description
6
+
7
+ Automate adding stylesheets and javascripts to your controller actions
8
+
9
+ == Example
10
+
11
+ Any controller will include the stylesheet and javascript source files named after named after the contorller if the file exists:
12
+
13
+ class UsersController < ApplicationController
14
+ ...
15
+ end
16
+
17
+ http://mysite.com/users/ will have /stylesheets/users.css and /javascripts/users.js included if they exist.
18
+
19
+ Any controller can specify any other file to be added as a stylesheet:
20
+
21
+ class UsersController < ApplicationController
22
+ style_like :homes
23
+ script_like :gargantuan
24
+ end
25
+
26
+ http://mysite.com/users/ will have users.css, homes.css and gargantuan.js included
27
+
28
+ Any asset that needs to take precedence over others (i.e. should be linked after the other stylesheets) can be used with a bang (!)
29
+
30
+ class UsersController < ApplicationController
31
+ style_like :distort_reality!, :homes, :trees
32
+ script_like :basic_script, :super_enhancement!
33
+ end
34
+
35
+ http://mysite.com/users/ will have homes.css, and trees.css and basic_script.js linked before the <title> tag.
36
+ distort_reality.css and super_enhancement.js will be linked after the <title> tag.
37
+ Note: the controller-named assets (users.css and users.js in this case) will always
38
+ be applied with precedence.
39
+
40
+ If you need better control over where these assets appear you can use the same options as you would for a before_filter
41
+
42
+ class UsersController < ApplicationController
43
+ style_like :homes!, :only => :show
44
+ script_like :trees, :except => [:index, :show]
45
+ end
46
+
47
+ All linked assets will be cached into a single asset if caching is enabled.
48
+
49
+ Copyright (c) 2007 Jack Danger Canty of adPickles Inc, released under the MIT license
@@ -0,0 +1,15 @@
1
+ # -*- ruby -*-
2
+
3
+ $:.unshift(File.dirname(__FILE__) + '/lib')
4
+
5
+
6
+ require 'rubygems'
7
+ require 'hoe'
8
+ require "sweet_assets"
9
+
10
+ Hoe.new('sweet_assets', SweetAssets::VERSION) do |p|
11
+ p.rubyforge_name = 'objectproxy' # if different than lowercase project name
12
+ p.developer('Jack Danger Canty', 'sweet_assets_gem@6brand.com')
13
+ end
14
+
15
+ # vim: syntax=Ruby
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ rails/init.rb
File without changes
@@ -0,0 +1,246 @@
1
+ require 'cgi'
2
+ require 'active_support'
3
+ require 'action_view/helpers/url_helper'
4
+ require 'action_view/helpers/asset_tag_helper'
5
+ require 'action_view/helpers/tag_helper'
6
+ require 'digest/md5'
7
+
8
+ # USAGE:
9
+ # style_like :dolphins # assumes :media => 'all'
10
+ # style_like :home, :media => 'print'
11
+ # style_like :users, :media => ['print', 'screen']
12
+ # script_like :boats
13
+
14
+ module SweetAssets
15
+ VERSION = '1.2.0'
16
+ DEFAULT_JAVASCRIPTS = ['prototype', 'effects', 'dragdrop', 'controls']
17
+ SCRIPT_PLACEHOLDER = '<!--SWEET_JAVASCRIPTS-->'
18
+ STYLE_PLACEHOLDER = '<!--SWEET_STYLESHEETS-->'
19
+ module ActionController
20
+ def self.included(base)
21
+ base.class_eval do
22
+ extend ClassMethods
23
+ include InstanceMethods
24
+ include AppendAssetsAfterRescue
25
+ after_filter :apply_sweet_assets
26
+ end
27
+ end
28
+
29
+ module ClassMethods
30
+ def style_like(*assets)
31
+ prepend_before_filter do |controller|
32
+ controller.send :style_like, *assets
33
+ end
34
+ end
35
+
36
+ def script_like(*assets)
37
+ prepend_before_filter do |controller|
38
+ controller.send :script_like, *assets
39
+ end
40
+ end
41
+ end
42
+
43
+ module InstanceMethods
44
+ protected
45
+ # Apply the assets even if the filter chain was aborted
46
+ def call_filters(*args)
47
+ ret = super
48
+ apply_sweet_assets
49
+ ret
50
+ end
51
+
52
+ def style_like(*assets)
53
+ sweet_assets.style_like(*assets)
54
+ end
55
+
56
+ def script_like(*assets)
57
+ sweet_assets.script_like(*assets)
58
+ end
59
+
60
+ def sweet_assets
61
+ @sweet_assets ||= SweetAssets::Request.new(self)
62
+ end
63
+
64
+ def apply_sweet_assets
65
+ return if @sweet_assets_applied
66
+ if response.body.respond_to?(:gsub!)
67
+ response.body.gsub! SweetAssets::STYLE_PLACEHOLDER, "\n#{sweet_assets.tags.stylesheets}"
68
+ response.body.gsub! SweetAssets::SCRIPT_PLACEHOLDER, "\n#{sweet_assets.tags.javascripts}"
69
+ end
70
+ @sweet_assets_applied = true
71
+ end
72
+ end
73
+ end
74
+
75
+ module ActionView
76
+ module Helpers
77
+ def style_like(*assets)
78
+ sweet_assets.style_like(*assets)
79
+ end
80
+
81
+ def script_like(*assets)
82
+ sweet_assets.script_like(*assets)
83
+ end
84
+
85
+ def sweet_stylesheets
86
+ SweetAssets::STYLE_PLACEHOLDER
87
+ end
88
+
89
+ def sweet_javascripts
90
+ SweetAssets::SCRIPT_PLACEHOLDER
91
+ end
92
+
93
+ protected
94
+
95
+ def sweet_assets
96
+ controller.send :sweet_assets
97
+ end
98
+ end
99
+ end
100
+
101
+ class Request
102
+ def initialize(controller)
103
+ @stylesheets = Array.new
104
+ @javascripts = Array.new
105
+ @controller = controller
106
+
107
+ # use the assets named 'application'
108
+ style_like :application
109
+ script_like :application
110
+
111
+ # use the assets named after the controller at higher priority
112
+ style_like "#{@controller.class.controller_name}!"
113
+ script_like "#{@controller.class.controller_name}!"
114
+ end
115
+
116
+ def style_like(*assets)
117
+ options = HashWithIndifferentAccess.new(assets.extract_options!)
118
+ media = [options[:media]].flatten.compact
119
+ media = ['all'] if media.blank?
120
+ media.each do |medium|
121
+ medium = medium.to_s
122
+ assets.each do |asset|
123
+ asset = asset.to_s
124
+ if asset.ends_with?('!')
125
+ asset.gsub!(/!$/, '')
126
+ # remove a lower-priority entry if it exists for this medium
127
+ @stylesheets.delete({:file => asset, :medium => medium, :priority => 'low'})
128
+ @stylesheets << {:file => asset, :medium => medium, :priority => 'high'}
129
+ else
130
+ # don't add this entry if it's already set to high-priority
131
+ unless @stylesheets.include?({:file => asset, :medium => medium, :priority => 'high'})
132
+ @stylesheets << {:file => asset, :medium => medium, :priority => 'low'}
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ def script_like(*assets)
140
+ assets.each do |asset|
141
+ asset = asset.to_s
142
+ if 'defaults' == asset
143
+ DEFAULT_JAVASCRIPTS.each do |default|
144
+ @javascripts << {:file => default, :priority => 'first' }
145
+ end
146
+ elsif asset.ends_with?('!')
147
+ asset.gsub!(/!$/, '')
148
+ # remove a lower-priority entry if it exists
149
+ @javascripts.delete({:file => asset, :priority => 'low'})
150
+ @javascripts << {:file => asset, :priority => 'high'}
151
+ else
152
+ # don't add this entry if it's already set to high-priority
153
+ unless @javascripts.include?({:file => asset, :priority => 'high'})
154
+ @javascripts << {:file => asset, :priority => 'low'}
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ def tags
161
+ @tag_generator ||= TagGenerator.new(@stylesheets, @javascripts, @controller)
162
+ end
163
+ end
164
+
165
+ class TagGenerator
166
+
167
+ include ::ActionView::Helpers::TagHelper
168
+ include ::ActionView::Helpers::AssetTagHelper
169
+
170
+ def initialize(stylesheets, javascripts, controller)
171
+ @stylesheets = stylesheets
172
+ @javascripts = javascripts
173
+ @controller = controller
174
+ end
175
+
176
+ def stylesheets
177
+ media = @stylesheets.map {|asset| asset[:medium] }.uniq
178
+
179
+ media.map do |medium|
180
+ files_in_order = ['low', 'high'].map do |priority|
181
+
182
+ files = @stylesheets.select do |asset|
183
+ asset[:medium] == medium && asset[:priority] == priority
184
+ end
185
+ files.map! {|asset| asset[:file] }
186
+ files.map! {|file| file =~ /\.css$/ ? file : "#{file}.css" }
187
+
188
+ # check that the files exist
189
+ unless RAILS_ENV.eql?('test')
190
+ files = files.select {|file| File.exists?( file.starts_with?('/') ? "#{RAILS_ROOT}/public#{file}" : "#{STYLESHEETS_DIR}/#{file}") }
191
+ end
192
+
193
+ files
194
+ end.flatten.uniq.compact
195
+
196
+ stylesheet_link_tag(*(files_in_order << {:media => medium, :cache => cached_file_name(files_in_order)}))
197
+
198
+ end.join("\n")
199
+ end
200
+
201
+ def javascripts
202
+ files_in_order = ['first', 'low', 'high'].map do |priority|
203
+
204
+ files = @javascripts.select {|asset| asset[:priority] == priority }
205
+ files.map! {|asset| asset[:file] }
206
+ files.map! {|file| file =~ /\.js$/ ? file : "#{file}.js" }
207
+
208
+ # check that the files exist
209
+ unless RAILS_ENV.eql?('test')
210
+ files = files.select {|file| File.exists?(file.starts_with?('/') ? "#{RAILS_ROOT}/public#{file}" : "#{JAVASCRIPTS_DIR}/#{file}") }
211
+ end
212
+ files
213
+ end.flatten.uniq.compact
214
+
215
+ files_in_order << {:cache => cached_file_name(files_in_order)}
216
+
217
+ javascript_include_tag *files_in_order
218
+ end
219
+
220
+ protected
221
+
222
+ def cached_file_name(filenames)
223
+ "sweet_assets_#{Digest::MD5.hexdigest(filenames.join('_'))}"
224
+ end
225
+ end
226
+
227
+
228
+ # we're going to wrap our rescue_action around the top-level rescue_action method chain
229
+ # this ensures that we can apply the stylesheets even if the after filter was aborted due to an exception
230
+ module AppendAssetsAfterRescue
231
+ def self.included(base)
232
+ base.class_eval do
233
+ def initialize_with_append_sweet_assets_rescue_action(*args)
234
+ initialize_without_append_sweet_assets_rescue_action(*args)
235
+ self.class.send :alias_method_chain, :rescue_action, :append_sweet_assets unless respond_to?(:rescue_action_without_append_sweet_assets)
236
+ end
237
+ alias_method_chain :initialize, :append_sweet_assets_rescue_action unless respond_to?(:initialize_without_append_sweet_assets_rescue_action)
238
+ end
239
+ end
240
+
241
+ def rescue_action_with_append_sweet_assets(*args)
242
+ rescue_action_without_append_sweet_assets(*args)
243
+ apply_sweet_assets
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,11 @@
1
+ require 'sweet_assets'
2
+
3
+
4
+ ActionController::Base.class_eval do
5
+ include SweetAssets::ActionController
6
+ end
7
+
8
+ ActionView::Base.class_eval do
9
+ include SweetAssets::ActionView::Helpers
10
+ end
11
+
@@ -0,0 +1,32 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{sweet_assets}
3
+ s.version = "1.2.0"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+ s.authors = ["Jack Danger Canty"]
7
+ s.date = %q{2009-03-19}
8
+ s.description = %q{Automate adding stylesheets and javascripts to your controller actions}
9
+ s.email = ["sweet_assets_gem@6brand.com"]
10
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
11
+ s.files = ["History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "init.rb", "install.rb", "lib/sweet_assets.rb", "rails/init.rb", "sweet_assets.gemspec", "test/sweet_assets_test.rb", "test/views/defaults/index.html.erb", "test/views/shortcut/index.html.erb", "test/views/web/index.html.erb", "uninstall.rb"]
12
+ s.has_rdoc = true
13
+ s.homepage = %q{http://github.com/JackDanger/sweet_assets}
14
+ s.rdoc_options = ["--main", "README.txt"]
15
+ s.require_paths = ["lib"]
16
+ s.rubyforge_project = %q{objectproxy}
17
+ s.rubygems_version = %q{1.3.1}
18
+ s.summary = %q{Automate adding stylesheets and javascripts to your controller actions}
19
+
20
+ if s.respond_to? :specification_version then
21
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
+ s.specification_version = 2
23
+
24
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
+ s.add_development_dependency(%q<hoe>, [">= 1.11.0"])
26
+ else
27
+ s.add_dependency(%q<hoe>, [">= 1.11.0"])
28
+ end
29
+ else
30
+ s.add_dependency(%q<hoe>, [">= 1.11.0"])
31
+ end
32
+ end
@@ -0,0 +1,170 @@
1
+
2
+ RAILS_ENV = 'test'
3
+
4
+ require File.dirname(__FILE__) + '/../../../../config/environment'
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'action_controller/test_process'
8
+ require File.dirname(__FILE__) + '/../init'
9
+
10
+ ActionController::Base.view_paths = [File.dirname(__FILE__) + '/views/']
11
+
12
+ # Re-raise errors caught by the controller.
13
+ class WebController < ActionController::Base
14
+ style_like :home
15
+ style_like :users!
16
+ style_like :extra
17
+ script_like :home
18
+ script_like :users!
19
+ script_like :extra
20
+ end
21
+
22
+ class ShortcutController < ActionController::Base
23
+ style_like :home!, :users
24
+ script_like :extra!, :home
25
+ end
26
+
27
+ class DefaultsController < ActionController::Base
28
+ script_like :defaults
29
+ end
30
+
31
+ class SweetAssetsTest < Test::Unit::TestCase
32
+
33
+ def setup
34
+ ActionController::Base.perform_caching = false
35
+ @controller = WebController.new
36
+ @request = ActionController::TestRequest.new
37
+ @response = ActionController::TestResponse.new
38
+ end
39
+
40
+ def teardown
41
+ delete_empty_recent_files
42
+ end
43
+
44
+ def test_each_stylesheet_should_appear
45
+ get :index
46
+ assert_response :success
47
+ assert_tag :link, :attributes => {:href => /stylesheets\/application.css/, :rel => 'stylesheet'}
48
+ assert_tag :link, :attributes => {:href => /stylesheets\/web.css/, :rel => 'stylesheet'}
49
+ assert_tag :link, :attributes => {:href => /stylesheets\/home.css/, :rel => 'stylesheet'}
50
+ assert_tag :link, :attributes => {:href => /stylesheets\/extra.css/, :rel => 'stylesheet'}
51
+ assert_tag :link, :attributes => {:href => /stylesheets\/users.css/, :rel => 'stylesheet'}
52
+ assert_select 'head > link', :count => 5
53
+ end
54
+
55
+ def test_bottom_stylesheets_should_appear_last
56
+ get :index
57
+ assert_response :success
58
+ location_of_extra_css = @response.body =~ /<link href="\/stylesheets\/extra.css/
59
+ location_of_home_css = @response.body =~ /<link href="\/stylesheets\/home.css/
60
+ location_of_users_css = @response.body =~ /<link href="\/stylesheets\/users.css/
61
+ assert location_of_home_css < location_of_users_css
62
+ assert location_of_extra_css < location_of_users_css
63
+ end
64
+
65
+ def test_caching_stylesheets
66
+ ActionController::Base.perform_caching = true
67
+ with_stylesheets :application, :home, :web, :users, :extra do
68
+ with_javascripts :application, :home, :web, :users, :extra do
69
+ get :index
70
+ end
71
+ end
72
+ assert_response :success
73
+ assert_no_tag :link, :attributes => {:href => /stylesheets\/application.css/, :rel => 'stylesheet'}
74
+ assert_no_tag :link, :attributes => {:href => /stylesheets\/web.css/, :rel => 'stylesheet'}
75
+ assert_no_tag :link, :attributes => {:href => /stylesheets\/home.css/, :rel => 'stylesheet'}
76
+ assert_no_tag :link, :attributes => {:href => /stylesheets\/extra.css/, :rel => 'stylesheet'}
77
+ assert_no_tag :link, :attributes => {:href => /stylesheets\/users.css/, :rel => 'stylesheet'}
78
+ assert_tag :link, :attributes => {:href => /sweet_assets_([\w\d]{32}).css/, :rel => 'stylesheet'}
79
+ ActionController::Base.perform_caching = false
80
+ end
81
+
82
+ def test_caching_javascripts
83
+ ActionController::Base.perform_caching = true
84
+ with_stylesheets :home, :web, :users, :extra do
85
+ with_javascripts :home, :web, :users, :extra do
86
+ get :index
87
+ end
88
+ end
89
+ assert_response :success
90
+ assert_no_tag :script, :attributes => {:src => /javascripts\/web.js/}
91
+ assert_no_tag :script, :attributes => {:src => /javascripts\/home.js/}
92
+ assert_no_tag :script, :attributes => {:src => /javascripts\/extra.js/}
93
+ assert_no_tag :script, :attributes => {:src => /javascripts\/users.js/}
94
+ assert_tag :script, :attributes => {:src => /sweet_assets_([\w\d]{32}).js/}
95
+ ActionController::Base.perform_caching = false
96
+ end
97
+
98
+ def test_defaults_should_include_prototype_scriptaculous_and_application
99
+ @controller = DefaultsController.new
100
+ get :index
101
+ assert_tag :script, :attributes => {:src => /prototype.js/}
102
+ assert_tag :script, :attributes => {:src => /effects.js/}
103
+ assert_tag :script, :attributes => {:src => /dragdrop.js/}
104
+ assert_tag :script, :attributes => {:src => /controls.js/}
105
+ assert_tag :script, :attributes => {:src => /application.js/}
106
+ end
107
+
108
+ def test_shortcuts
109
+ @controller = ShortcutController.new
110
+ with_stylesheets :home, :web, :users, :extra do
111
+ with_javascripts :home, :web, :users, :extra do
112
+ get :index
113
+ end
114
+ end
115
+ assert_tag :link, :attributes => {:href => /home.css/, :rel => 'stylesheet'}
116
+ assert_tag :link, :attributes => {:href => /users.css/, :rel => 'stylesheet'}
117
+ assert_tag :script, :attributes => {:src => /extra.js/}
118
+ assert_tag :script, :attributes => {:src => /home.js/}
119
+ @controller = WebController.new
120
+ end
121
+
122
+ def delete_empty_recent_files
123
+ dirs = ["#{RAILS_ROOT}/public/stylesheets", "#{RAILS_ROOT}/public/javascripts"]
124
+ dirs.each do |dir|
125
+ Dir.entries(dir).each do |file|
126
+ if file =~ /(\.css|\.js)$/
127
+ filename = File.join(dir, file)
128
+ if File.exists?(filename) && File.read(filename).blank? && (File.ctime(filename) + 10.minutes) > Time.now
129
+ File.delete(filename)
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+
136
+ # create some temporary css files for the duration of the block
137
+ def with_stylesheets(*files, &block)
138
+ @temp_stylesheet_files = []
139
+ files.each do |file|
140
+ filename = "#{RAILS_ROOT}/public/stylesheets/#{file}.css"
141
+ unless File.exists?(filename)
142
+ @temp_stylesheet_files << "#{RAILS_ROOT}/public/stylesheets/#{file}.css"
143
+ File.open(filename, 'w') {|f| f.write('') }
144
+ end
145
+ end
146
+
147
+ yield
148
+
149
+ @temp_stylesheet_files.each {|filename| File.delete(filename) }
150
+
151
+ end
152
+
153
+ # create some temporary javascript files for the duration of the block
154
+ def with_javascripts(*files, &block)
155
+ @temp_javascript_files = []
156
+ files.each do |file|
157
+ filename = "#{RAILS_ROOT}/public/javascripts/#{file}.js"
158
+ unless File.exists?(filename)
159
+ @temp_javascript_files << "#{RAILS_ROOT}/public/javascripts/#{file}.js"
160
+ File.open(filename, 'w') {|f| f.write('') }
161
+ end
162
+ end
163
+
164
+ yield
165
+
166
+ @temp_javascript_files.each {|filename| File.delete(filename) }
167
+
168
+ end
169
+
170
+ end
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <head>
3
+ <%= sweet_stylesheets %>
4
+ <%= sweet_javascripts %>
5
+ </head>
6
+ <body></body>
7
+ </html>
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <head>
3
+ <%= sweet_stylesheets %>
4
+ <%= sweet_javascripts %>
5
+ </head>
6
+ <body></body>
7
+ </html>
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <head>
3
+ <%= sweet_stylesheets %>
4
+ <%= sweet_javascripts %>
5
+ </head>
6
+ <body></body>
7
+ </html>
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: JackDanger-sweet_assets
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Jack Danger Canty
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-19 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.11.0
24
+ version:
25
+ description: Automate adding stylesheets and javascripts to your controller actions
26
+ email:
27
+ - sweet_assets_gem@6brand.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - MIT-LICENSE
39
+ - Manifest.txt
40
+ - README.txt
41
+ - Rakefile
42
+ - init.rb
43
+ - install.rb
44
+ - lib/sweet_assets.rb
45
+ - rails/init.rb
46
+ - sweet_assets.gemspec
47
+ - test/sweet_assets_test.rb
48
+ - test/views/defaults/index.html.erb
49
+ - test/views/shortcut/index.html.erb
50
+ - test/views/web/index.html.erb
51
+ - uninstall.rb
52
+ has_rdoc: true
53
+ homepage: http://github.com/JackDanger/sweet_assets
54
+ post_install_message:
55
+ rdoc_options:
56
+ - --main
57
+ - README.txt
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: "0"
71
+ version:
72
+ requirements: []
73
+
74
+ rubyforge_project: objectproxy
75
+ rubygems_version: 1.2.0
76
+ signing_key:
77
+ specification_version: 2
78
+ summary: Automate adding stylesheets and javascripts to your controller actions
79
+ test_files: []
80
+