rapper 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -63,7 +63,7 @@ The following defaults are applied if not defined in your configuration:
63
63
 
64
64
  The `definition_root` setting in the rapper config is a path to a folder containing more YAML files that define the various types of bundles you want to build (eg. `stylesheets.yml`, `javascripts.yml`) Example definition file:
65
65
 
66
- --- !omap
66
+ ---
67
67
  - source_root: public/javascripts
68
68
  - destination_root: public/assets/javascripts
69
69
  - suffix: js
@@ -82,9 +82,9 @@ The above definition will create two asset files: `public/assets/javascripts/bas
82
82
 
83
83
  ## Versioning
84
84
 
85
- If versioning is turned on in your config, version strings will be used to enforce better browser caching of assets.
85
+ If versioning is turned on in your config, version strings will be used to enforce better browser caching of assets. (Version numbers are always used in definition files.)
86
86
 
87
- --- !omap
87
+ ---
88
88
  - source_root: public/javascripts
89
89
  - destination_root: public/assets/javascripts
90
90
  - suffix: js
@@ -99,7 +99,9 @@ If versioning is turned on in your config, version strings will be used to enfor
99
99
  - ext_js_full
100
100
  - version: db62
101
101
 
102
- These version strings are hashes of the final asset file. This means that they will only change when the contents of the asset file change. Version strings are used to enforce good browser caching habits, especially when you have a far-future expires header configured on your web server. For example, suppose you had the following asset:
102
+ Version strings are short hashes of the pre-compression asset file. This means that they will only change when the contents of the component files for an asset change and time-consuming compression will only happen when a bundle needs to be re-packaged.
103
+
104
+ Version strings are also used to enforce good browser caching habits, especially when you have a far-future expires header configured on your web server. For example, suppose you had the following asset:
103
105
 
104
106
  <script type="text/javascript" src="/assets/milkshake.js?v=d3va"></script>
105
107
 
@@ -123,6 +125,7 @@ Browsers will automatically re-download and cache the new asset.
123
125
 
124
126
  ## Version history
125
127
 
128
+ * **0.0.3** - New `Definition` object to make working with definitions significantly easier, don't re-package assets that don't need re-packaging.
126
129
  * **0.0.2** - Compression now works and is specced.
127
130
  * **0.0.1** - Initial release. Functioning bundler, minus the view helpers.
128
131
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/lib/rapper.rb CHANGED
@@ -33,7 +33,7 @@ module Rapper
33
33
  end
34
34
 
35
35
  # Package assets according to the loaded config and definitions. Defaults
36
- # to packaging all asset types.
36
+ # to packaging all asset types. Skips files that don't need re-packaging.
37
37
  #
38
38
  # @param [<String>] types Asset types to refresh versions for.
39
39
  def package( *types )
@@ -42,18 +42,17 @@ module Rapper
42
42
 
43
43
  types.each do |type|
44
44
  definition = @definitions[type]
45
- source = File.expand_path( definition["source_root"] )
46
- destination = definition["destination_root"]
47
- suffix = definition["suffix"]
45
+ source = File.expand_path( definition.source_root )
46
+ destination = definition.destination_root
47
+ suffix = definition.suffix
48
48
 
49
- definition["assets"].each do |asset|
50
- name = asset.keys.first
51
- spec = asset.values.first.first
49
+ definition.assets.each do |name, spec|
50
+ next unless needs_packaging?( type, name )
52
51
 
53
- source_files = asset_component_paths( type, name )
54
- destination_file = asset_path( type, name )
52
+ source_files = definition.asset_component_paths( name )
53
+ destination_file = definition.asset_path( name )
55
54
 
56
- log :verbose, "Joining #{definition["assets"].count} files to #{name}"
55
+ log :verbose, "Joining #{source_files.size} files to #{name}"
57
56
  join_files( source_files, destination_file )
58
57
 
59
58
  if get_config( "compress" )
data/lib/rapper/config.rb CHANGED
@@ -24,10 +24,10 @@ module Rapper
24
24
  raise Rapper::Errors::NoDefinitionRoot,
25
25
  "No 'definition_root' has been defined for #{@environment}"
26
26
  end
27
- definition_path = File.join( env_config["definition_root"], "*.yml" )
28
- Dir[definition_path].each do |definition|
27
+ definition_paths = File.join( env_config["definition_root"], "*.yml" )
28
+ Dir[definition_paths].each do |definition|
29
29
  type = File.basename( definition, ".yml" )
30
- @definitions[type] = YAML.load_file( definition )
30
+ @definitions[type] = Definition.new( definition )
31
31
  end
32
32
  end
33
33
 
@@ -59,10 +59,7 @@ module Rapper
59
59
  log :info, "Updating definitions for #{types.join( ', ' )}"
60
60
 
61
61
  types.each do |type|
62
- log "Updating definition file for", type
63
- File.open( definition_path( type ), "w" ) do |file|
64
- file.puts @definitions[type].to_yaml
65
- end
62
+ @definitions[type].update
66
63
  end
67
64
  end
68
65
 
@@ -0,0 +1,114 @@
1
+ module Rapper
2
+ # Basic definition abstraction to make working with the wacky YAML structure
3
+ # easier.
4
+ class Definition
5
+
6
+ def initialize( path )
7
+ @path = path
8
+ @type = File.basename( path, ".yml" )
9
+ @definition = YAML.load_file( @path )
10
+ end
11
+
12
+ # =======================
13
+ # = Definition settings =
14
+ # =======================
15
+
16
+ def source_root
17
+ first_key_value( "source_root", @definition ) || ""
18
+ end
19
+
20
+ def destination_root
21
+ first_key_value( "destination_root", @definition ) || ""
22
+ end
23
+
24
+ def suffix
25
+ first_key_value( "suffix", @definition )
26
+ end
27
+
28
+ # ==========
29
+ # = Assets =
30
+ # ==========
31
+
32
+ # @return [Hash] Simplified structure representing all asset definitions.
33
+ def assets
34
+ assets = {}
35
+
36
+ first_key_value( "assets", @definition ).each do |spec|
37
+ assets[spec.keys.first] = spec.values.first.inject({}) do |memo, item|
38
+ memo.merge( item )
39
+ end
40
+ end
41
+
42
+ assets
43
+ end
44
+
45
+ # Update the version string for a specific asset.
46
+ #
47
+ # @param [String] name Asset name.
48
+ #
49
+ # @param [String] version New version string for the asset.
50
+ def set_version( name, version )
51
+ first_key_value( "assets", @definition ).each do |spec|
52
+ next unless spec[name]
53
+ spec[name].each do |setting|
54
+ next unless setting["version"]
55
+ setting["version"] = version
56
+ end
57
+ end
58
+ end
59
+
60
+ # ==========
61
+ # = Saving =
62
+ # ==========
63
+
64
+ # Writes the in-memory definition out to disk.
65
+ def update
66
+ File.open( @path, "w" ) do |file|
67
+ file.puts @definition.to_yaml
68
+ end
69
+ end
70
+
71
+ # =========
72
+ # = Paths =
73
+ # =========
74
+
75
+ # @param [String] name The asset's name.
76
+ #
77
+ # @return [String] Path to the packaged asset file.
78
+ def asset_path( name )
79
+ file_name = "#{name}.#{self.suffix}"
80
+ File.join( self.destination_root, file_name )
81
+ end
82
+
83
+ # @param [String] name Name of the asset.
84
+ #
85
+ # @return [Array<String>] Ordered list of the files that comprise the given
86
+ # asset.
87
+ def asset_component_paths( name )
88
+ spec = self.assets[name]
89
+
90
+ if spec.nil?
91
+ raise Rapper::Errors::InvalidAssetName,
92
+ "'#{name}' is not a valid #{@type} asset. Make sure it is defined in the definition file."
93
+ end
94
+
95
+ ( spec["files"] || [] ).map do |file|
96
+ file_name = "#{file}.#{self.suffix}"
97
+ File.join( self.source_root, file_name )
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ # @param [Object] key Key to search for.
104
+ #
105
+ # @param [Array<Hash>] array Array of Hash object to search in.
106
+ #
107
+ # @return [Object,nil] The first value found for the key or nil of nothing
108
+ # was found.
109
+ def first_key_value( key, array )
110
+ hash = array.find { |h| h.keys.include? key }
111
+ hash ? hash[key] : nil
112
+ end
113
+ end
114
+ end
data/lib/rapper/errors.rb CHANGED
@@ -10,11 +10,6 @@ module Rapper
10
10
  # environment.
11
11
  class NoDefinitionRoot < StandardError; end
12
12
 
13
- # Raised when an invalid definition type param is used. An invalid
14
- # definition type is one that doesn't have a definition YAML file in the
15
- # "definition_root" folder (set in the config).
16
- class InvalidDefinitionType < StandardError; end
17
-
18
13
  # Raised when an invalid asset name param is used. An invalid asset name
19
14
  # is one not defined in a given definition file.
20
15
  class InvalidAssetName < StandardError; end
data/lib/rapper/utils.rb CHANGED
@@ -4,67 +4,11 @@ module Rapper
4
4
 
5
5
  protected
6
6
 
7
- # =========
8
- # = Paths =
9
- # =========
10
-
11
- # @param [String] type Asset type.
12
- #
13
- # @return [String] Path to the definition file for the given asset type.
14
- def definition_path( type )
15
- File.join( get_config( "definition_root" ), "#{type}.yml")
16
- end
17
-
18
- # @param [String] type Asset type.
19
- #
20
- # @param [String] name Name of the asset.
21
- #
22
- # @return [String] Path to the packaged asset file for the given type and
23
- # name.
24
- def asset_path( type, name )
25
- if @definitions[type].nil?
26
- raise Rapper::Errors::InvalidDefinitionType,
27
- "'#{type}' is not a defined asset type."
28
- end
29
-
30
- file_name = "#{name}.#{@definitions[type]["suffix"]}"
31
-
32
- File.join( @definitions[type]["destination_root"], file_name )
33
- end
34
-
35
- # @param [String] type Asset type.
36
- #
37
- # @param [String] name Name of the asset.
38
- #
39
- # @return [Array<String>] Ordered list of asset component file paths.
40
- def asset_component_paths( type, name )
41
- if @definitions[type].nil?
42
- raise Rapper::Errors::InvalidDefinitionType,
43
- "'#{type}' is not a defined asset type."
44
- end
45
-
46
- spec = first_hash_with_key( name, @definitions[type]["assets"] )
47
-
48
- if spec.nil?
49
- raise Rapper::Errors::InvalidAssetName,
50
- "'#{name}' is not a valid #{type} asset. Make sure it is defined in the definition file."
51
- end
52
-
53
- source_root = @definitions[type]["source_root"]
54
- suffix = @definitions[type]["suffix"]
55
- files = first_hash_with_key( "files", spec.values.first )["files"] || []
56
-
57
- files.map do |file|
58
- file_name = "#{file}.#{suffix}"
59
- File.join( source_root, file_name )
60
- end
61
- end
62
-
63
7
  # =========
64
8
  # = Files =
65
9
  # =========
66
10
 
67
- # Contatenate one or more files. Uses <code>cat</code>.
11
+ # Concatenate one or more files. Uses <code>cat</code>.
68
12
  #
69
13
  # @param [Array<String>,String] source_files A path or array of paths to
70
14
  # files to concatenate.
@@ -75,18 +19,5 @@ module Rapper
75
19
  system "cat #{source_files} > #{destination_file}"
76
20
  end
77
21
 
78
- # =========
79
- # = Misc. =
80
- # =========
81
-
82
- # @param [Object] key Key to search for.
83
- #
84
- # @param [Array<Hash>] array Array of Hash object to search in.
85
- #
86
- # @return [Hash] First hash with the given key.
87
- def first_hash_with_key( key, array )
88
- array.find { |h| h.keys.include? key }
89
- end
90
-
91
22
  end
92
23
  end
@@ -1,4 +1,5 @@
1
1
  require 'digest/md5'
2
+ require 'tempfile'
2
3
 
3
4
  module Rapper
4
5
  # Asset versioning methods.
@@ -6,6 +7,20 @@ module Rapper
6
7
 
7
8
  protected
8
9
 
10
+ # @param [String] type The asset type.
11
+ #
12
+ # @param [String] name The name of the asset.
13
+ #
14
+ # @return [Boolean] True if the asset needs re-packaging, false otherwise.
15
+ def needs_packaging?( type, name )
16
+ definition = @definitions[type]
17
+ destination_file = definition.asset_path( name )
18
+ return true unless File.exists?( destination_file )
19
+ current_version = definition.assets[name]["version"]
20
+ new_version = version( type, name )
21
+ new_version != current_version
22
+ end
23
+
9
24
  # Refresh the version hashes for the given asset types. If no arguments are
10
25
  # passed, version hashes for all asset types will be updated.
11
26
  #
@@ -16,21 +31,25 @@ module Rapper
16
31
  log :info, "Refreshing versions for #{types.join( ', ' )}"
17
32
 
18
33
  types.each do |type|
19
- @definitions[type]["assets"].each do |asset|
20
- name = asset.keys.first
21
- spec = asset.values.first
22
- path = asset_path( type, name )
23
- version = version( path )
24
- first_hash_with_key( "version", spec )["version"] = version
34
+ @definitions[type].assets.each do |name, spec|
35
+ version = version( type, name )
36
+ @definitions[type].set_version( name, version )
25
37
  end
26
38
  end
27
39
  end
28
40
 
29
- # @param [String] file_path The path to a file to generate a version for.
41
+ # @param [String] type The asset type.
42
+ #
43
+ # @param [String] name The name of the asset.
30
44
  #
31
- # @return [String] A four-character MD5 hash of the contents of the file.
32
- def version( file_path )
33
- Digest::MD5.file( file_path ).to_s[0,4]
45
+ # @return [String] A four-character version hash for the given asset.
46
+ def version( type, name )
47
+ source_files = @definitions[type].asset_component_paths( name )
48
+ destination_file = Tempfile.new( 'rapper' )
49
+ join_files( source_files, destination_file.path )
50
+ version = Digest::MD5.file( destination_file.path ).to_s[0,4]
51
+ destination_file.unlink
52
+ version
34
53
  end
35
54
 
36
55
  end
data/rapper.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rapper}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tyson Tate"]
12
- s.date = %q{2011-02-05}
12
+ s.date = %q{2011-02-19}
13
13
  s.description = %q{Static asset packager and compressor with versioning and built-in view helpers. Easy to configure, easy to use, and easy to ignore when you want to. No crazy JavaScript comment DSLs, either.}
14
14
  s.email = %q{tyson@tysontate.com}
15
15
  s.extra_rdoc_files = [
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  "lib/rapper.rb",
29
29
  "lib/rapper/compressors.rb",
30
30
  "lib/rapper/config.rb",
31
+ "lib/rapper/definition.rb",
31
32
  "lib/rapper/errors.rb",
32
33
  "lib/rapper/logging.rb",
33
34
  "lib/rapper/utils.rb",
@@ -37,7 +38,6 @@ Gem::Specification.new do |s|
37
38
  "spec/fixtures/config/assets.yml",
38
39
  "spec/fixtures/config/assets/base/javascripts.yml",
39
40
  "spec/fixtures/config/assets/base/stylesheets.yml",
40
- "spec/fixtures/config/assets/base/validators.yml",
41
41
  "spec/fixtures/javascripts/simple_1.js",
42
42
  "spec/fixtures/javascripts/simple_2.js",
43
43
  "spec/fixtures/stylesheets/simple_1.css",
@@ -117,7 +117,7 @@ Gem::Specification.new do |s|
117
117
  s.homepage = %q{http://tysontate.github.com/rapper/}
118
118
  s.licenses = ["MIT"]
119
119
  s.require_paths = ["lib"]
120
- s.rubygems_version = %q{1.3.7}
120
+ s.rubygems_version = %q{1.4.2}
121
121
  s.summary = %q{Static asset packager and compressor with versioning and built-in view helpers.}
122
122
  s.test_files = [
123
123
  "spec/rapper_spec.rb",
@@ -126,7 +126,6 @@ Gem::Specification.new do |s|
126
126
  ]
127
127
 
128
128
  if s.respond_to? :specification_version then
129
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
130
129
  s.specification_version = 3
131
130
 
132
131
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -1,12 +1,14 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/javascripts
3
- - destination_root: spec/fixtures/javascripts
3
+ - destination_root: tmp
4
4
  - suffix: js
5
- - assets:
5
+ - assets:
6
6
  - single_file:
7
7
  - files:
8
- - mootools
8
+ - simple_1
9
+ - version: 0
9
10
  - multiple_files:
10
11
  - files:
11
- - mootools
12
- - jquery
12
+ - simple_1
13
+ - simple_2
14
+ - version: 0
@@ -1,10 +1,14 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/stylesheets
3
- - destination_root: spec/fixtures/stylesheets
3
+ - destination_root: tmp
4
4
  - suffix: css
5
- - assets:
6
- - master:
5
+ - assets:
6
+ - single_file:
7
7
  - files:
8
- - reset
9
- - base
10
- - layout
8
+ - simple_1
9
+ - version: 0
10
+ - multiple_files:
11
+ - files:
12
+ - simple_1
13
+ - simple_2
14
+ - version: 0
@@ -1,4 +1,4 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/stylesheets
3
3
  - destination_root: tmp
4
4
  - suffix: css
@@ -1,4 +1,4 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/javascripts
3
3
  - destination_root: tmp
4
4
  - suffix: js
@@ -1,4 +1,4 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/stylesheets
3
3
  - destination_root: tmp
4
4
  - suffix: css
@@ -1,4 +1,4 @@
1
- --- !omap
1
+ ---
2
2
  - source_root: spec/fixtures/javascripts
3
3
  - destination_root: tmp
4
4
  - suffix: js
data/spec/rapper_spec.rb CHANGED
@@ -48,12 +48,22 @@ describe Rapper do
48
48
 
49
49
  it "loads asset definitions" do
50
50
  rapper = Rapper::Engine.new( "spec/fixtures/config/assets.yml", "test" )
51
- rapper.send( :asset_types ).sort.should == ["javascripts", "stylesheets", "validators"]
52
- rapper.definitions["stylesheets"]["source_root"].should == "spec/fixtures/stylesheets"
53
- rapper.definitions["stylesheets"]["suffix"].should == "css"
54
- # Using a YAML::OMap here, so it looks a bit weird
55
- rapper.definitions["stylesheets"]["assets"].first.key?( "master" ).should be_true
56
- rapper.definitions["stylesheets"]["assets"].first["master"].first["files"].should == ["reset", "base", "layout"]
51
+ rapper.send( :asset_types ).sort.should == ["javascripts", "stylesheets"]
52
+ rapper.definitions["javascripts"].should be_a( Rapper::Definition )
53
+ rapper.definitions["stylesheets"].should be_a( Rapper::Definition )
54
+ rapper.definitions["javascripts"].source_root.should == "spec/fixtures/javascripts"
55
+ rapper.definitions["javascripts"].destination_root.should == "tmp"
56
+ rapper.definitions["javascripts"].suffix.should == "js"
57
+ rapper.definitions["javascripts"].assets.should == {
58
+ "single_file"=>{
59
+ "files"=>["simple_1"],
60
+ "version"=>0
61
+ },
62
+ "multiple_files"=>{
63
+ "files"=>["simple_1", "simple_2"],
64
+ "version"=>0
65
+ }
66
+ }
57
67
  end
58
68
  end
59
69
 
@@ -92,6 +102,30 @@ describe Rapper do
92
102
  end
93
103
  end
94
104
 
105
+ describe "versioning" do
106
+ it "uses the concatenated file to calculate versions" do
107
+ rapper = Rapper::Engine.new( "spec/fixtures/config/assets.yml", "test" )
108
+ rapper.send( :refresh_versions )
109
+ rapper.definitions["javascripts"].assets["single_file"].should == {
110
+ "files"=>["simple_1"],
111
+ "version"=>"98bc"
112
+ }
113
+ rapper.definitions["javascripts"].assets["multiple_files"].should == {
114
+ "files"=>["simple_1", "simple_2"],
115
+ "version"=>"f3d9"
116
+ }
117
+ end
118
+
119
+ it "doesn't re-package assets that don't need re-packaging" do
120
+ rapper = Rapper::Engine.new( "spec/fixtures/config/assets.yml", "test" )
121
+ rapper.stub!( :update_definitions ).and_return( nil ) # Block definition updating
122
+ rapper.package
123
+
124
+ rapper.should_not_receive( :compress )
125
+ rapper.package
126
+ end
127
+ end
128
+
95
129
  describe "packaging test cases" do
96
130
  Dir["spec/fixtures/test_cases/*"].each do |folder|
97
131
  next unless File.directory?( folder )
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
4
+ hash: 25
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tyson Tate
@@ -15,13 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-05 00:00:00 -08:00
18
+ date: 2011-02-19 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- type: :runtime
23
22
  prerelease: false
24
23
  name: closure-compiler
24
+ type: :runtime
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
@@ -35,9 +35,9 @@ dependencies:
35
35
  version: 1.0.0
36
36
  requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- type: :development
39
38
  prerelease: false
40
39
  name: rspec
40
+ type: :development
41
41
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
@@ -51,9 +51,9 @@ dependencies:
51
51
  version: 1.3.1
52
52
  requirement: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- type: :development
55
54
  prerelease: false
56
55
  name: yard
56
+ type: :development
57
57
  version_requirements: &id003 !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
@@ -67,9 +67,9 @@ dependencies:
67
67
  version: 0.6.4
68
68
  requirement: *id003
69
69
  - !ruby/object:Gem::Dependency
70
- type: :development
71
70
  prerelease: false
72
71
  name: bluecloth
72
+ type: :development
73
73
  version_requirements: &id004 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
@@ -83,9 +83,9 @@ dependencies:
83
83
  version: 2.0.10
84
84
  requirement: *id004
85
85
  - !ruby/object:Gem::Dependency
86
- type: :development
87
86
  prerelease: false
88
87
  name: bundler
88
+ type: :development
89
89
  version_requirements: &id005 !ruby/object:Gem::Requirement
90
90
  none: false
91
91
  requirements:
@@ -99,9 +99,9 @@ dependencies:
99
99
  version: 1.0.0
100
100
  requirement: *id005
101
101
  - !ruby/object:Gem::Dependency
102
- type: :development
103
102
  prerelease: false
104
103
  name: jeweler
104
+ type: :development
105
105
  version_requirements: &id006 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
@@ -115,9 +115,9 @@ dependencies:
115
115
  version: 1.5.2
116
116
  requirement: *id006
117
117
  - !ruby/object:Gem::Dependency
118
- type: :runtime
119
118
  prerelease: false
120
119
  name: closure-compiler
120
+ type: :runtime
121
121
  version_requirements: &id007 !ruby/object:Gem::Requirement
122
122
  none: false
123
123
  requirements:
@@ -131,9 +131,9 @@ dependencies:
131
131
  version: 1.0.0
132
132
  requirement: *id007
133
133
  - !ruby/object:Gem::Dependency
134
- type: :development
135
134
  prerelease: false
136
135
  name: rspec
136
+ type: :development
137
137
  version_requirements: &id008 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
@@ -147,9 +147,9 @@ dependencies:
147
147
  version: 1.3.1
148
148
  requirement: *id008
149
149
  - !ruby/object:Gem::Dependency
150
- type: :development
151
150
  prerelease: false
152
151
  name: yard
152
+ type: :development
153
153
  version_requirements: &id009 !ruby/object:Gem::Requirement
154
154
  none: false
155
155
  requirements:
@@ -163,9 +163,9 @@ dependencies:
163
163
  version: 0.6.4
164
164
  requirement: *id009
165
165
  - !ruby/object:Gem::Dependency
166
- type: :development
167
166
  prerelease: false
168
167
  name: bluecloth
168
+ type: :development
169
169
  version_requirements: &id010 !ruby/object:Gem::Requirement
170
170
  none: false
171
171
  requirements:
@@ -179,9 +179,9 @@ dependencies:
179
179
  version: 2.0.10
180
180
  requirement: *id010
181
181
  - !ruby/object:Gem::Dependency
182
- type: :development
183
182
  prerelease: false
184
183
  name: bundler
184
+ type: :development
185
185
  version_requirements: &id011 !ruby/object:Gem::Requirement
186
186
  none: false
187
187
  requirements:
@@ -195,9 +195,9 @@ dependencies:
195
195
  version: 1.0.0
196
196
  requirement: *id011
197
197
  - !ruby/object:Gem::Dependency
198
- type: :development
199
198
  prerelease: false
200
199
  name: jeweler
200
+ type: :development
201
201
  version_requirements: &id012 !ruby/object:Gem::Requirement
202
202
  none: false
203
203
  requirements:
@@ -231,6 +231,7 @@ files:
231
231
  - lib/rapper.rb
232
232
  - lib/rapper/compressors.rb
233
233
  - lib/rapper/config.rb
234
+ - lib/rapper/definition.rb
234
235
  - lib/rapper/errors.rb
235
236
  - lib/rapper/logging.rb
236
237
  - lib/rapper/utils.rb
@@ -240,7 +241,6 @@ files:
240
241
  - spec/fixtures/config/assets.yml
241
242
  - spec/fixtures/config/assets/base/javascripts.yml
242
243
  - spec/fixtures/config/assets/base/stylesheets.yml
243
- - spec/fixtures/config/assets/base/validators.yml
244
244
  - spec/fixtures/javascripts/simple_1.js
245
245
  - spec/fixtures/javascripts/simple_2.js
246
246
  - spec/fixtures/stylesheets/simple_1.css
@@ -346,7 +346,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
346
  requirements: []
347
347
 
348
348
  rubyforge_project:
349
- rubygems_version: 1.3.7
349
+ rubygems_version: 1.4.2
350
350
  signing_key:
351
351
  specification_version: 3
352
352
  summary: Static asset packager and compressor with versioning and built-in view helpers.
@@ -1,9 +0,0 @@
1
- --- !omap
2
- - source_root: spec/fixtures/validators
3
- - destination_root: spec/fixtures/validators
4
- - suffix: js
5
- - assets:
6
- - master:
7
- - files:
8
- - spec/fixtures/javascripts/foo
9
- - spec/fixtures/javascripts/bar