tension 0.3
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/LICENSE +23 -0
- data/README.md +6 -0
- data/lib/tension/application.rb +62 -0
- data/lib/tension/railtie.rb +17 -0
- data/lib/tension/tagger.rb +82 -0
- data/lib/tension.rb +0 -0
- data/tension.gemspec +18 -0
- metadata +84 -0
data/LICENSE
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
LICENSE
|
2
|
+
|
3
|
+
The MIT License
|
4
|
+
|
5
|
+
Copyright (c) 2013 Piers Mainwaring
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
9
|
+
in the Software without restriction, including without limitation the rights
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
12
|
+
furnished to do so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be included in
|
15
|
+
all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
module Tension
|
2
|
+
class Application
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
# This method collects all asset paths for the asset pipeline to
|
7
|
+
# precompile. It's called from `config/application.rb` when determining
|
8
|
+
# which additional assets to include in the pipeline's precompilation
|
9
|
+
# process. Tension will assume that any subdirectories in your assets
|
10
|
+
# directory are module scopes. You can also explicitly set module scopes:
|
11
|
+
#
|
12
|
+
# Rails.application.config.tension_modules = %W( blog account )
|
13
|
+
#
|
14
|
+
# Tension::Application will then search for all javascripts and stylesheets
|
15
|
+
# one filesystem level deep in those scopes. The search paths become:
|
16
|
+
#
|
17
|
+
# app/assets/{javascripts,stylesheets}/*.{js,css}
|
18
|
+
# app/assets/{javascripts,stylesheets}/{blog,account}/**/*.{js,css}
|
19
|
+
#
|
20
|
+
# Any assets in these paths will be added to the pipeline and compiled.
|
21
|
+
|
22
|
+
def collect_assets
|
23
|
+
assets = %W(stylesheets javascripts).map do |type|
|
24
|
+
glob_within_asset_path( type ) + module_scopes.map do |scope|
|
25
|
+
glob_within_asset_path( type, scope )
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
assets.flatten
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def module_scopes
|
36
|
+
# find dirs in app/assets
|
37
|
+
end
|
38
|
+
|
39
|
+
# Loads the file paths within a given subdirectory of "app/assets/".
|
40
|
+
def glob_within_asset_path type, *path_parts
|
41
|
+
# Only recursively find children if a particular subdirectory of an
|
42
|
+
# asset `type` is given. That way we can specify WHICH subdirectories
|
43
|
+
# of a `type` have assets that matter.
|
44
|
+
path_parts << "**" if path_parts.present?
|
45
|
+
|
46
|
+
root_path = File.join(Rails.root, "app", "assets", type)
|
47
|
+
pattern = File.expand_path( File.join(*path_parts, "*.*"), root_path )
|
48
|
+
|
49
|
+
paths = Dir.glob( pattern ).map do |file_path|
|
50
|
+
# Remove extra, pre-compilation file extensions and any part of the
|
51
|
+
# filepath at or above the asset `type`.
|
52
|
+
file_path.gsub( file_path.match(/(\.css|\.js)(.*)/)[2], '' )
|
53
|
+
.gsub( root_path + "/", '' ) rescue nil
|
54
|
+
end
|
55
|
+
|
56
|
+
paths.compact
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "tension"
|
2
|
+
|
3
|
+
module Tension
|
4
|
+
require "rails"
|
5
|
+
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
|
8
|
+
initializer "tension.asset_pipeline" do |app|
|
9
|
+
ActiveSupport.on_load :rails do
|
10
|
+
if !Rails.env.development? && !Rails.env.test?
|
11
|
+
Rails.application.config.assets.precompile += Tension::Collector.collect_assets
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Pipeline
|
2
|
+
class Builder
|
3
|
+
|
4
|
+
GLOBAL_ASSET_NAME = "application".freeze
|
5
|
+
SHARED_SUFFIX = "_common".freeze
|
6
|
+
ASSET_SPECIFICITY_ORDER = [ :action, :controller, :module ].freeze
|
7
|
+
|
8
|
+
# Determines which JS/CSS files should be included based on the current
|
9
|
+
# controller, action, and which files actually exist. If the current
|
10
|
+
# controller is "OrcaHealth::PagesController" and action is "products",
|
11
|
+
# this method (called with `type = :js`) will attempt to include
|
12
|
+
#
|
13
|
+
# + orca_health/pages/products.js
|
14
|
+
# + orca_health/pages_common.js
|
15
|
+
# + orca_health.js
|
16
|
+
#
|
17
|
+
# in that order. ONLY THE FIRST ASSET LOCATED WILL BE INCLUDED. Hence,
|
18
|
+
# you should always use Sprockets directives to include dependencies.
|
19
|
+
#
|
20
|
+
# Any files that don't exist will not be included in the page. Pass
|
21
|
+
# `{ except: :application }` to exclude `application.{js,css}`.
|
22
|
+
|
23
|
+
def self.asset_paths type, controller_path, action_name, options = {}
|
24
|
+
options[:except] = [ options[:except] ] unless options[:except].is_a? Array
|
25
|
+
|
26
|
+
# Check if the best asset's already been loaded and stored.
|
27
|
+
asset = known_asset_paths[ controller_path ].try(:fetch, action_name, nil).try(:fetch, type, nil)
|
28
|
+
|
29
|
+
if asset.nil?
|
30
|
+
path_components = controller_path.split("/")
|
31
|
+
controller_name = path_components.pop
|
32
|
+
module_path = path_components.join("/")
|
33
|
+
|
34
|
+
possible_paths = {
|
35
|
+
module: module_path,
|
36
|
+
controller: [ module_path, controller_name + SHARED_SUFFIX ].join("/"),
|
37
|
+
action: [ module_path, controller_name, action_name ].join("/")
|
38
|
+
}
|
39
|
+
|
40
|
+
# Find and store the best possible asset for this controller/action combo.
|
41
|
+
asset = most_specific_asset_path( type, possible_paths )
|
42
|
+
|
43
|
+
known_asset_paths[ controller_path ] ||= Hash.new
|
44
|
+
known_asset_paths[ controller_path ][ action_name ] ||= Hash.new
|
45
|
+
known_asset_paths[ controller_path ][ action_name ][ type ] = asset
|
46
|
+
end
|
47
|
+
|
48
|
+
assets = if options[:except].include? :application
|
49
|
+
[ asset ]
|
50
|
+
else
|
51
|
+
[ GLOBAL_ASSET_NAME, asset ]
|
52
|
+
end
|
53
|
+
|
54
|
+
assets.compact
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def self.known_asset_paths
|
61
|
+
@known_asset_paths ||= Hash.new
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.most_specific_asset_path filetype, paths
|
65
|
+
ASSET_SPECIFICITY_ORDER.each do |name|
|
66
|
+
path = paths[name]
|
67
|
+
|
68
|
+
# Using the Sprockets `#index` helps performance in production.
|
69
|
+
asset = if Rails.env.production?
|
70
|
+
Rails.application.assets.index.find_asset([ path, filetype ].join("."))
|
71
|
+
else
|
72
|
+
Rails.application.assets.find_asset([ path, filetype ].join("."))
|
73
|
+
end
|
74
|
+
|
75
|
+
# This loop is relatively expensive, so return the asset path as soon
|
76
|
+
# as possible rather than continue looping.
|
77
|
+
break path if asset.present?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
data/lib/tension.rb
ADDED
File without changes
|
data/tension.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "tension"
|
3
|
+
|
4
|
+
s.version = "0.3"
|
5
|
+
s.date = "2013-02-22"
|
6
|
+
|
7
|
+
s.summary = "Tighten up Rails's asset pipeline for CSS & JS."
|
8
|
+
s.description = "Tension brings some sanity to CSS & JS organization for modern front–end development."
|
9
|
+
|
10
|
+
s.authors = [ "Piers Mainwaring" ]
|
11
|
+
s.email = "piers@impossibly.org"
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.homepage = "https://github.com/piersadrian/tension"
|
14
|
+
s.require_paths = [ "lib" ]
|
15
|
+
|
16
|
+
s.add_dependency "activerecord", "~> 3.2.0"
|
17
|
+
s.add_dependency "activesupport", "~> 3.2.0"
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tension
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.3'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Piers Mainwaring
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activerecord
|
16
|
+
prerelease: false
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.0
|
22
|
+
none: false
|
23
|
+
type: :runtime
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 3.2.0
|
29
|
+
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
32
|
+
prerelease: false
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.2.0
|
38
|
+
none: false
|
39
|
+
type: :runtime
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 3.2.0
|
45
|
+
none: false
|
46
|
+
description: Tension brings some sanity to CSS & JS organization for modern front–end
|
47
|
+
development.
|
48
|
+
email: piers@impossibly.org
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- LICENSE
|
54
|
+
- README.md
|
55
|
+
- lib/tension.rb
|
56
|
+
- lib/tension/application.rb
|
57
|
+
- lib/tension/railtie.rb
|
58
|
+
- lib/tension/tagger.rb
|
59
|
+
- tension.gemspec
|
60
|
+
homepage: https://github.com/piersadrian/tension
|
61
|
+
licenses: []
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
none: false
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
none: false
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.8.24
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Tighten up Rails's asset pipeline for CSS & JS.
|
84
|
+
test_files: []
|