jammit_lite 0.1.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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +30 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/jammit_lite.gemspec +58 -0
- data/lib/jammit/lite/asset.rb +14 -0
- data/lib/jammit/lite/bundle.rb +49 -0
- data/lib/jammit/lite/helper.rb +79 -0
- data/lib/jammit/lite/routes.rb +16 -0
- data/lib/jammit_lite.rb +33 -0
- data/test/helper.rb +10 -0
- data/test/test_jammit_lite.rb +7 -0
- metadata +79 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Jordan Glasner
|
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.
|
data/README.rdoc
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
= jammit_lite
|
2
|
+
|
3
|
+
Jammit::Lite replaces Jammit in production environments that pre-bundle all their files, e.g. Heroku. Removing Jammit as a dependency from the production app saves over 9MB, which means faster deploys at Heroku.
|
4
|
+
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
sudo gem install jammit_lite
|
8
|
+
|
9
|
+
To switch over you need to make two changes:
|
10
|
+
|
11
|
+
=== In config/enviroment.rb
|
12
|
+
config.gem 'jammit' to config.gem 'jammit_lite'
|
13
|
+
|
14
|
+
=== In config/routes.rb
|
15
|
+
change Jammit::Routes.draw(map) to Jammit::Lite::Routes.draw(map)
|
16
|
+
|
17
|
+
|
18
|
+
== Note on Patches/Pull Requests
|
19
|
+
|
20
|
+
* Fork the project.
|
21
|
+
* Make your feature addition or bug fix.
|
22
|
+
* Add tests for it. This is important so I don't break it in a
|
23
|
+
future version unintentionally.
|
24
|
+
* Commit, do not mess with rakefile, version, or history.
|
25
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
26
|
+
* Send me a pull request. Bonus points for topic branches.
|
27
|
+
|
28
|
+
== Copyright
|
29
|
+
|
30
|
+
Copyright (c) 2010 Jordan Glasner. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "jammit_lite"
|
8
|
+
gem.summary = "Replaces full Jammit gem in production. Made to reduce slug size at Heroku"
|
9
|
+
gem.description = "Jammit is awesome, but the gem is giant. Jammit::Lite loads Jammit in development, but replaces it in production saving over 9MB."
|
10
|
+
gem.email = "jordan@digitalignition.com"
|
11
|
+
gem.homepage = "http://github.com/glasner/jammit_lite"
|
12
|
+
gem.authors = ["Jordan Glasner"]
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |test|
|
23
|
+
test.libs << 'lib' << 'test'
|
24
|
+
test.pattern = 'test/**/test_*.rb'
|
25
|
+
test.verbose = true
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'rcov/rcovtask'
|
30
|
+
Rcov::RcovTask.new do |test|
|
31
|
+
test.libs << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
rescue LoadError
|
36
|
+
task :rcov do
|
37
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :test => :check_dependencies
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "jammit_lite #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/jammit_lite.gemspec
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{jammit_lite}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jordan Glasner"]
|
12
|
+
s.date = %q{2010-03-22}
|
13
|
+
s.description = %q{Jammit is awesome, but the gem is giant. Jammit::Lite loads Jammit in development, but replaces it in production saving over 9MB.}
|
14
|
+
s.email = %q{jordan@digitalignition.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"jammit_lite.gemspec",
|
27
|
+
"lib/jammit/lite/asset.rb",
|
28
|
+
"lib/jammit/lite/bundle.rb",
|
29
|
+
"lib/jammit/lite/helper.rb",
|
30
|
+
"lib/jammit/lite/routes.rb",
|
31
|
+
"lib/jammit_lite.rb",
|
32
|
+
"test/helper.rb",
|
33
|
+
"test/test_jammit_lite.rb"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/glasner/jammit_lite}
|
36
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
37
|
+
s.require_paths = ["lib"]
|
38
|
+
s.rubygems_version = %q{1.3.5}
|
39
|
+
s.summary = %q{Replaces full Jammit gem in production. Made to reduce slug size at Heroku}
|
40
|
+
s.test_files = [
|
41
|
+
"test/helper.rb",
|
42
|
+
"test/test_jammit_lite.rb"
|
43
|
+
]
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
+
s.specification_version = 3
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
53
|
+
end
|
54
|
+
else
|
55
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Jammit
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
|
5
|
+
class Bundle
|
6
|
+
|
7
|
+
# takes array of files from yaml hash and expands any wilcards
|
8
|
+
def self.expand(files)
|
9
|
+
files.map! do |file|
|
10
|
+
if file.match(/\*/).nil?
|
11
|
+
# return single file name
|
12
|
+
return file
|
13
|
+
else
|
14
|
+
# expand wildcard into all matching filenames
|
15
|
+
return Dir[Rails.root + file].map { |path| path.gsub("#{Rails.root}/",'') }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
files.flatten!
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_accessor :path
|
22
|
+
|
23
|
+
# takes hash with bundle type as key and bundle name as value
|
24
|
+
# eg, Bundle.new(:stylesheets => :cotillion)
|
25
|
+
def initialize(args= {})
|
26
|
+
@filetype, @name = args.shift
|
27
|
+
@path = "/assets/#{@name}.#{extension}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def extension
|
31
|
+
case @filetype
|
32
|
+
when :javascripts : 'js'
|
33
|
+
when :stylesheets : 'css'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# returns Array of Jammit::Lite::Files
|
38
|
+
def files
|
39
|
+
Jammit::Lite.assets(@filetype)[@name]
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Jammit
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
|
5
|
+
module Helper
|
6
|
+
|
7
|
+
#= Javascript Helpers
|
8
|
+
|
9
|
+
# creates <script> tags for Jammit js bundles
|
10
|
+
# in development, creates <script> tag for each individual file in bundles
|
11
|
+
# in production, creates <script> tag for each bundle
|
12
|
+
def include_javascripts(*bundles)
|
13
|
+
bundles.map! { |name| Jammit::Lite::Bundle.new(:javascripts => name) }
|
14
|
+
return include_individual_javascripts(bundles) unless Rails.env.production?
|
15
|
+
tags = bundles.map { |bundle| javascript_include_tag(bundle.path) }
|
16
|
+
tags.join("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
# creates <script> tags for Jammit templates
|
20
|
+
def include_templates(*bundles)
|
21
|
+
tags = bundles.map { |bundle| javascript_include_tag("/assets/#{bundle}.jst") }
|
22
|
+
tags.join("\n")
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# creates <script> tags for each individual file in given Array of bundles
|
28
|
+
def include_individual_javascripts(bundles=[])
|
29
|
+
tags = []
|
30
|
+
bundles.each do |bundle|
|
31
|
+
tags.concat bundle.files.map { |js| javascript_include_tag(js.path) }
|
32
|
+
end
|
33
|
+
tags.join("\n")
|
34
|
+
end
|
35
|
+
|
36
|
+
public
|
37
|
+
|
38
|
+
#= Stylesheet Helpers
|
39
|
+
|
40
|
+
# creates <link> tags for Jammit css bundles
|
41
|
+
# in development, creates <link> tag for each individual file in bundles
|
42
|
+
# in production, creates <link> tag for each bundle
|
43
|
+
def include_stylesheets(*bundles)
|
44
|
+
bundles.map! { |name| Jammit::Lite::Bundle.new(:stylesheets => name) }
|
45
|
+
return include_individual_stylesheets(bundles) unless Rails.env.production?
|
46
|
+
tags = bundles.map { |bundle| stylesheet_link_tag(bundle.path) }
|
47
|
+
tags.join("\n")
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
# creates <script> tags for each individual file in given Array of bundles
|
55
|
+
def include_individual_stylesheets(bundles=[])
|
56
|
+
tags = []
|
57
|
+
bundles.each do |bundle|
|
58
|
+
tags.concat bundle.files.map { |css| stylesheet_link_tag(css.path) }
|
59
|
+
end
|
60
|
+
tags.join("\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
# returns hash for stylesheet link tag attributes for given file
|
64
|
+
def attributes_for_stylesheet_link(file)
|
65
|
+
{:href => file.path, :media => 'screen', :rel => 'stylesheet', :type => 'text/css'}
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
# Include the Jammit asset helpers in all views, a-la ApplicationHelper.
|
79
|
+
::ActionView::Base.send(:include, Jammit::Lite::Helper)
|
data/lib/jammit_lite.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Jammit
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
|
5
|
+
# returns hash of bundle file arrays keyed by bundle name
|
6
|
+
def self.assets(type)
|
7
|
+
hash = asset_hash[type].symbolize_keys
|
8
|
+
assets = hash.inject({}) do |out,array|
|
9
|
+
key,paths = array
|
10
|
+
out[key] = paths.map { |path| Jammit::Lite::Asset.new(path) }
|
11
|
+
out
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
# returns hash from config/assets.yml
|
17
|
+
# expands all wildcard paths
|
18
|
+
def self.asset_hash
|
19
|
+
yaml = File.open("#{Rails.root}/config/assets.yml")
|
20
|
+
hash = YAML::load(yaml).symbolize_keys
|
21
|
+
hash.each do |key,bundles|
|
22
|
+
bundles.each { |name,files| bundles[name] = Jammit::Lite::Bundle.expand(files) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
require 'jammit' unless Rails.env.production?
|
31
|
+
files = %w(routes bundle asset helper)
|
32
|
+
files.each { |file| require "#{File.dirname(__FILE__)}/jammit/lite/#{file}" }
|
33
|
+
|
data/test/helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jammit_lite
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordan Glasner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-03-22 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: Jammit is awesome, but the gem is giant. Jammit::Lite loads Jammit in development, but replaces it in production saving over 9MB.
|
26
|
+
email: jordan@digitalignition.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.rdoc
|
34
|
+
files:
|
35
|
+
- .document
|
36
|
+
- .gitignore
|
37
|
+
- LICENSE
|
38
|
+
- README.rdoc
|
39
|
+
- Rakefile
|
40
|
+
- VERSION
|
41
|
+
- jammit_lite.gemspec
|
42
|
+
- lib/jammit/lite/asset.rb
|
43
|
+
- lib/jammit/lite/bundle.rb
|
44
|
+
- lib/jammit/lite/helper.rb
|
45
|
+
- lib/jammit/lite/routes.rb
|
46
|
+
- lib/jammit_lite.rb
|
47
|
+
- test/helper.rb
|
48
|
+
- test/test_jammit_lite.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage: http://github.com/glasner/jammit_lite
|
51
|
+
licenses: []
|
52
|
+
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options:
|
55
|
+
- --charset=UTF-8
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.3.5
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: Replaces full Jammit gem in production. Made to reduce slug size at Heroku
|
77
|
+
test_files:
|
78
|
+
- test/helper.rb
|
79
|
+
- test/test_jammit_lite.rb
|