juicer-rails 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.
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
@@ -0,0 +1,4 @@
1
+ = CHANGELOG
2
+
3
+ == 0.1.0 (26.01.2011)
4
+ * initial release
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Michał Łomnicki
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,62 @@
1
+ = juicer-rails
2
+
3
+ Rails helper for Juicer - excellent asset packaging tool.
4
+
5
+ https://github.com/cjohansen/juicer
6
+
7
+ == Usage
8
+
9
+ Create config/assets.yml file
10
+
11
+ js:
12
+ common:
13
+ - 'public/javascripts/jquery/jquery.js'
14
+ - 'public/javascripts/common.js'
15
+ myapp:
16
+ - 'public/javascripts/application.js'
17
+ - 'public/javascripts/dashboard.js'
18
+
19
+ css:
20
+ myapp:
21
+ - 'public/stylesheets/application.css'
22
+ - 'public/stylesheets/dialogs.css'
23
+
24
+ juicer-rails provides 2 helper methods
25
+ * merged_javascripts - includes merged javascript assets
26
+ * merged_stylesheets - includes merged and cache-friendly stylesheet assets
27
+
28
+ Include merged assets in your layout
29
+
30
+ <head>
31
+ ...
32
+ <%= merged_javascripts :common %>
33
+ <%= merged_javascripts :myapp %>
34
+ <%= merged_stylesheets :myapp %>
35
+
36
+ </head>
37
+
38
+ Please note that assets will be compiled only in production environemnt unless
39
+ <tt>always_compile</tt> options is set.
40
+
41
+ == Configuration
42
+
43
+ Create config/initializers/juicer-rails.rb
44
+
45
+ JuicerRails.setup do |config|
46
+ # config.always_compile = true
47
+
48
+ # add more options here
49
+ end
50
+
51
+ Available options are:
52
+
53
+ * config_file - path of confiugration file. default: config/assets.yml
54
+ * config - configuration in YAML format. default: content of config_file
55
+ * environemnt - current environment name. default: Rails.env
56
+ * compile_environments - which environments triggers compiling assets. default: production
57
+ * always_compile - always compile assets, no matter the environemnt. default: false
58
+ * compiled_assets_directory - subdirectory of public directory where compiled assets are stored. default: assets
59
+
60
+ == Copyright
61
+
62
+ Copyright (c) 2010 Michał Łomnicki. See LICENSE for details.
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require "juicer-rails"
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "juicer-rails/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "juicer-rails"
7
+ s.version = JuicerRails::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Michał Łomnicki"]
10
+ s.email = ["michal.lomnicki@gmail.com"]
11
+ s.homepage = "https://github.com/mlomnicki/juicer-rails"
12
+ s.summary = "Rails helpers for Juicer"
13
+ s.description = "Juicer-rails adds helpers for easy embedding juicer-packaged assets"
14
+
15
+ s.rubyforge_project = "juicer-rails"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency("juicer", "~> 1.0")
23
+ s.add_dependency("actionpack", ">= 2.1")
24
+ end
@@ -0,0 +1,42 @@
1
+ require 'juicer-rails/version'
2
+ require 'juicer-rails/helper'
3
+ require 'juicer-rails/railtie' if defined?(Rails::Railtie)
4
+
5
+ module JuicerRails
6
+
7
+ # location of configuration files
8
+ mattr_accessor :config_file
9
+ # Rails 3 set this with Railtie. Rails.root is nil at this stage
10
+ # Rails 2 has Rails.root defined so we can use it
11
+ @@config_file = Rails.root.join('config/assets.yml') if Rails.root
12
+
13
+ mattr_accessor :config
14
+ @@config = YAML.load_file(config_file) if config_file
15
+
16
+ # Current environment
17
+ mattr_accessor :environment
18
+ @@environment = Rails.env
19
+
20
+ # Which environments triggers assets compilations
21
+ mattr_accessor :compile_environments
22
+ @@compile_environments = %w[production]
23
+
24
+ # Always compile assets
25
+ mattr_accessor :always_compile
26
+ @@always_compile = false
27
+
28
+ # relative path from RAILS_ROOT/public where compiled assets are stored
29
+ mattr_accessor :compiled_assets_directory
30
+ @@compiled_assets_directory = 'assets'
31
+
32
+ def self.perform_compilation?
33
+ always_compile || compile_environments.include?(environment)
34
+ end
35
+
36
+ def self.setup
37
+ yield self
38
+ end
39
+
40
+ end
41
+
42
+ ActionView::Base.send(:include, Juicer::Helper)
@@ -0,0 +1,110 @@
1
+ require 'juicer'
2
+ require 'fileutils'
3
+
4
+ class Juicer::Collection
5
+
6
+ class << self
7
+ extend ActiveSupport::Memoizable
8
+
9
+ def dispatch(key, type)
10
+ if JuicerRails.perform_compilation?
11
+ compile(key, type)
12
+ else
13
+ embed_standalone(key, type)
14
+ end
15
+ end
16
+
17
+ def compile(key, type)
18
+ self.new(key, type).compile
19
+ destination_compiled_path(key, type).to_s
20
+ end
21
+ memoize :compile
22
+
23
+ # Embeds each asset as standalone file.
24
+ # The best mode for development purposes. No merging occurs
25
+ def embed_standalone(key, type)
26
+ dir = case type.to_s
27
+ when 'js' then 'javascripts'
28
+ when 'css' then 'stylesheets'
29
+ end
30
+ new(key, type).paths.collect { |p| Rails.root.join(p).relative_path_from(public_path.join(dir)).to_s }
31
+ end
32
+
33
+ def compiled_directory
34
+ public_path.join(JuicerRails.compiled_assets_directory)
35
+ end
36
+
37
+ def compiled_path(key, type)
38
+ compiled_directory.join("#{key}.#{type}")
39
+ end
40
+
41
+ def relative_compiled_path(key, type)
42
+ compiled_path(key, type).relative_path_from(public_path)
43
+ end
44
+
45
+ def destination_compiled_path(key, type)
46
+ "/#{relative_compiled_path(key, type)}"
47
+ end
48
+
49
+ def public_path
50
+ @public_path ||= Rails.root.join('public')
51
+ end
52
+
53
+ end
54
+
55
+ attr_reader :paths
56
+
57
+ def initialize(key, type, options = {})
58
+ @type = type
59
+ @key = key
60
+ @paths = JuicerRails.config[type.to_s][key.to_s]
61
+ @destination_dir = self.class.compiled_directory
62
+ @destination_path = self.class.compiled_path(key, type)
63
+ ensure_destination_directory_exists
64
+ end
65
+
66
+ # Produces production ready assets.
67
+ # Merges, appends timestamps for images, embeds images into stylesheets
68
+ # and tries to do everything what juicer can.
69
+ # TODO: only merging and cache buster are implemented at the moment
70
+ def compile
71
+ merge
72
+ bust_cache
73
+ end
74
+
75
+ # Depending on type merges and saves compiled asset
76
+ def merge
77
+ if @type == 'js'
78
+ merger = merge_javascripts
79
+ elsif @type == 'css'
80
+ merger = merge_stylesheets
81
+ end
82
+ save(merger)
83
+ self
84
+ end
85
+
86
+ def merge_javascripts
87
+ Juicer::Merger::JavaScriptMerger.new(@paths)
88
+ end
89
+
90
+ def merge_stylesheets
91
+ Juicer::Merger::StylesheetMerger.new(@paths, :document_root => Rails.root.join('public/stylesheets'))
92
+ end
93
+
94
+ def save(compiler)
95
+ compiler.save(@destination_path.to_s)
96
+ self
97
+ end
98
+
99
+ def bust_cache
100
+ Juicer::CssCacheBuster.new.save(@destination_path.to_s)
101
+ self
102
+ end
103
+
104
+ def ensure_destination_directory_exists
105
+ unless @destination_dir.exist?
106
+ FileUtils.mkdir_p(@destination_dir.to_s)
107
+ end
108
+ end
109
+
110
+ end
@@ -0,0 +1,15 @@
1
+ require 'juicer-rails/collection'
2
+
3
+ module Juicer::Helper
4
+
5
+ def merged_javascripts(key)
6
+ javascript_include_tag(Juicer::Collection.dispatch(key, 'js'))
7
+ end
8
+
9
+ def merged_stylesheets(key)
10
+ stylesheet_link_tag(Juicer::Collection.dispatch(key, 'css'))
11
+ end
12
+
13
+ end
14
+
15
+ ActionView::Base.send(:include, Juicer::Helper)
@@ -0,0 +1,16 @@
1
+ require 'yaml'
2
+
3
+ module JuicerRails
4
+
5
+ class Railtie < Rails::Railtie
6
+
7
+ initializer "juicer_rails.init" do
8
+ ::JuicerRails.setup do |juicer|
9
+ juicer.config_file ||= Rails.root.join('config/assets.yml')
10
+ juicer.config ||= YAML.load_file(juicer.config_file)
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,3 @@
1
+ module JuicerRails
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'juicer-rails'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestJuicerRails < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: juicer-rails
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - "Micha\xC5\x82 \xC5\x81omnicki"
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-27 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: juicer
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 0
30
+ version: "1.0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: actionpack
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 2
42
+ - 1
43
+ version: "2.1"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ description: Juicer-rails adds helpers for easy embedding juicer-packaged assets
47
+ email:
48
+ - michal.lomnicki@gmail.com
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ extra_rdoc_files: []
54
+
55
+ files:
56
+ - .gitignore
57
+ - CHANGELOG.rdoc
58
+ - LICENSE
59
+ - README.rdoc
60
+ - Rakefile
61
+ - init.rb
62
+ - juicer-rails.gemspec
63
+ - lib/juicer-rails.rb
64
+ - lib/juicer-rails/collection.rb
65
+ - lib/juicer-rails/helper.rb
66
+ - lib/juicer-rails/railtie.rb
67
+ - lib/juicer-rails/version.rb
68
+ - test/helper.rb
69
+ - test/test_juicer-rails.rb
70
+ has_rdoc: true
71
+ homepage: https://github.com/mlomnicki/juicer-rails
72
+ licenses: []
73
+
74
+ post_install_message:
75
+ rdoc_options: []
76
+
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ requirements: []
94
+
95
+ rubyforge_project: juicer-rails
96
+ rubygems_version: 1.3.6
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: Rails helpers for Juicer
100
+ test_files: []
101
+