rapper_lite 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,4 +7,7 @@ group :development do
7
7
  gem "rdiscount", "~> 1.6.8"
8
8
  gem "jeweler", "~> 1.6.4"
9
9
  gem "yui-compressor", "~> 0.9.6"
10
+ gem "fssm", "~> 0.2.7"
11
+ gem "rb-fsevent"
12
+ gem "coffee-script", "~> 2.2.0"
10
13
  end
@@ -5,13 +5,22 @@ GEM
5
5
  Platform (>= 0.4.0)
6
6
  open4
7
7
  Platform (0.4.0)
8
+ coffee-script (2.2.0)
9
+ coffee-script-source
10
+ execjs
11
+ coffee-script-source (1.1.2)
12
+ execjs (1.2.9)
13
+ multi_json (~> 1.0)
14
+ fssm (0.2.7)
8
15
  git (1.2.5)
9
16
  jeweler (1.6.4)
10
17
  bundler (~> 1.0)
11
18
  git (>= 1.2.5)
12
19
  rake
20
+ multi_json (1.0.3)
13
21
  open4 (1.0.1)
14
22
  rake (0.9.2)
23
+ rb-fsevent (0.4.3.1)
15
24
  rdiscount (1.6.8)
16
25
  rspec (1.3.2)
17
26
  yard (0.6.4)
@@ -23,8 +32,11 @@ PLATFORMS
23
32
  ruby
24
33
 
25
34
  DEPENDENCIES
35
+ coffee-script (~> 2.2.0)
36
+ fssm (~> 0.2.7)
26
37
  jeweler (~> 1.6.4)
27
38
  rake (~> 0.9.2)
39
+ rb-fsevent
28
40
  rdiscount (~> 1.6.8)
29
41
  rspec (~> 1.3.2)
30
42
  yard
@@ -1,6 +1,6 @@
1
1
  # rapper_lite #
2
2
 
3
- Bare-bones static asset packager and compressor. Currently supports CSS and JavaScript. Uses MD5 versioning to avoid re-compressing packages that don't need to be re-compressed. Uses a simple config file so that you don't have to wrangle wacky comment DSLs in your source code just to join and compress a few files.
3
+ Bare-bones static asset packager and compressor. Currently supports CSS, JavaScript, and CoffeeScript. Uses MD5 versioning to avoid re-compressing packages that don't need to be re-compressed. Uses a simple config file so that you don't have to wrangle wacky comment DSLs in your source code just to join and compress a few files.
4
4
 
5
5
  ## Packaging assets without wanting to claw your eyes out
6
6
 
@@ -33,7 +33,18 @@ Bare-bones static asset packager and compressor. Currently supports CSS and Java
33
33
 
34
34
  2. Run rapper lite:
35
35
 
36
- $ rapper_lite config/assets.yml
36
+ $ rapper_lite config/static_assets.yml
37
+
38
+ Watch for changes:
39
+
40
+ $ rapper_lite --watch config/static_assets.yml
41
+
42
+ If no config file is passed in, RapperLite will search for the config file:
43
+
44
+ ./rapper.yml
45
+ ./assets.yml
46
+ ./config/rapper.yml
47
+ ./config/assets.yml
37
48
 
38
49
  3. That's it.
39
50
 
@@ -53,6 +64,8 @@ Rapper's got a Gemfile. You know what to do.
53
64
 
54
65
  ## Version history
55
66
 
67
+ * **0.1.1** - Turns out you can only release `master`, which `jeweler` doesn't tell you. Oops.
68
+ * **0.1.0** - Add CoffeeScript support. Re-write `rapper_lite` command to allow watching for changes. Add watch support to Rake task.
56
69
  * **0.0.2** - Fix gem homepage link.
57
70
  * **0.0.1** - Initial release.
58
71
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.1
@@ -1,19 +1,44 @@
1
1
  #!/usr/bin/env ruby
2
- #
2
+
3
3
  require File.join( File.expand_path( File.dirname(__FILE__) ), '../lib/rapper_lite' )
4
+ require "optparse"
5
+ require "fssm"
6
+ require "rb-fsevent"
4
7
 
5
- def config_path
6
- return ARGV[0] if ARGV[0]
7
- ["", "config/"].each do |folder|
8
- ["rapper.yml", "assets.yml"].each do |file|
9
- path = File.expand_path( file, folder )
10
- return path if File.exists?( path )
8
+ module RapperLite
9
+ class CommandLine
10
+
11
+ attr_reader :rapper
12
+
13
+ def initialize
14
+ args, options = self.parse_args
15
+ @config_path = args.first || RapperLite::Engine.find_config_path
16
+ @rapper = self.build_rapper_engine
17
+ options[:watch] ? @rapper.watch : @rapper.noisy_package
18
+ end
19
+
20
+ def build_rapper_engine
21
+ puts "Loading RapperLite with #{@config_path}"
22
+ RapperLite::Engine.new( @config_path )
23
+ end
24
+
25
+ protected
26
+
27
+ def parse_args
28
+ options = {}
29
+ OptionParser.new do |opts|
30
+ opts.banner = "Usage: #{File.basename(__FILE__)} [-w|--watch] [-h|--help] [configfile]"
31
+ opts.on( "-h", "--help", "Print this message") do
32
+ p opts
33
+ exit 1
34
+ end
35
+ opts.on( "-w", "--watch", "Watch files for changes") do
36
+ options[:watch] = true
37
+ end
38
+ end.parse!
39
+ [ARGV, options]
11
40
  end
12
41
  end
13
- raise "No config file found."
14
42
  end
15
43
 
16
- config = config_path
17
- puts "Packaging assets, using: #{config}"
18
- RapperLite::Engine.new( config_path ).package
19
- puts "Done!"
44
+ RapperLite::CommandLine.new
@@ -1,10 +1,12 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
1
3
  require 'yaml'
2
4
 
3
5
  module RapperLite; end
4
6
  Dir[File.expand_path( "#{File.dirname( __FILE__ )}/rapper_lite/*.rb" )].each do |file|
5
7
  require file
6
8
  end
7
- # TODO: Re-enable
9
+ # TODO: Re-enable?
8
10
  # require File.dirname( __FILE__ ) + "/tasks.rb"
9
11
 
10
12
  # No batteries included, and no strings attached /
@@ -12,34 +14,35 @@ end
12
14
  # Gots to get the loot so I can bring home the bacon
13
15
  module RapperLite
14
16
  class Engine
17
+ include RapperLite::Build
18
+ include RapperLite::Compressors
15
19
  include RapperLite::Config
16
20
  include RapperLite::Utils
17
- include RapperLite::Compressors
18
21
  include RapperLite::Versioning
19
22
 
20
23
  def initialize( config_path )
21
- @config = {}
22
- @definitions = Struct.new( :css, :js ).new
23
24
  self.load_config( config_path )
24
25
  end
25
26
 
27
+ def self.find_config_path
28
+ ["./", "config/"].each do |folder|
29
+ ["rapper.yml", "assets.yml"].each do |file|
30
+ path = File.expand_path( file, folder )
31
+ return path if File.exists?( path )
32
+ end
33
+ end
34
+ raise "No config file found."
35
+ end
36
+
26
37
  def package
27
38
  [:js, :css].each do |type|
28
39
  definition = @definitions[type]
29
40
  source = File.expand_path( self.root( type ) )
30
41
 
31
42
  definition.each do |name, spec|
32
- next if name == "root" || name == "destination"
43
+ next if self.config_key?( name ) # Skip config settings
33
44
  next unless self.needs_packaging?( type, name )
34
-
35
- source_files = self.file_paths( type, name )
36
- destination_file = self.destination_path( type, name )
37
-
38
- self.join_files( source_files, destination_file )
39
-
40
- if self.compress?
41
- self.compress( destination_file )
42
- end
45
+ self.build_package( type, name )
43
46
  end
44
47
  end
45
48
 
@@ -0,0 +1,31 @@
1
+ require "coffee-script"
2
+
3
+ module RapperLite::Build
4
+
5
+ def build_package( type, name )
6
+ source_paths = self.file_paths( type, name )
7
+ destination_file = self.destination_path( type, name )
8
+ tempfiles = []
9
+
10
+ # Convert any CoffeeScript to JS
11
+ if type == :js
12
+ source_paths.map! do |source_path|
13
+ if File.extname( source_path ) == ".coffee"
14
+ tempfile = Tempfile.new( "rapper_lite_coffee" )
15
+ tempfile.write( CoffeeScript.compile( File.read( source_path ) ) )
16
+ tempfile.close
17
+ tempfile.path
18
+ else
19
+ source_path
20
+ end
21
+ end
22
+ end
23
+
24
+ # Join files and compress if needed
25
+ self.join_files( source_paths, destination_file )
26
+ self.compress( destination_file ) if self.compress?( type )
27
+
28
+ # Cleanup
29
+ tempfiles.each{ |tempfile| tempfile.unlink }
30
+ end
31
+ end
@@ -9,11 +9,11 @@ rescue LoadError; end
9
9
  module RapperLite::Compressors
10
10
 
11
11
  # Compress a file in-place. Relies on the file's suffix to determine type.
12
- def compress( file )
12
+ def compress( file_path )
13
13
  opts = {}
14
14
  # TODO: Someday this goes away.
15
- opts = self.yui_config if file =~ /\.js/
16
- RapperLite::Compressors::Compressor.compress( file, opts )
15
+ opts = self.yui_config if file_path =~ /\.js/
16
+ RapperLite::Compressors::Compressor.compress( file_path, opts )
17
17
  end
18
18
 
19
19
  protected
@@ -1,32 +1,18 @@
1
1
  module RapperLite::Config
2
2
 
3
- protected
4
-
5
- def load_config( config_path )
6
- @config_path = config_path
7
- @config = YAML.load_file( config_path )
8
- @definitions.css = @config["css"]
9
- @definitions.js = @config["js"]
10
- end
11
-
12
- def save_config
13
- File.open( @config_path, "w" ) do |file|
14
- file.puts @config.to_yaml
15
- end
16
- end
17
-
3
+ # Source path for files of the given type.
18
4
  def root( type )
19
- assert_type!( type )
20
- @definitions.send( type )["root"] || @config["root"] || "."
5
+ self.config_or_default( "root", type, "." )
21
6
  end
22
7
 
8
+ # Destination path for files of the given type.
23
9
  def destination( type )
24
- assert_type!( type )
25
- @definitions.send( type )["destination"] || @config["destination"] || "."
10
+ self.config_or_default( "destination", type, "." )
26
11
  end
27
12
 
28
- def compress?
29
- @config.key?( "compress" ) ? @config["compress"] : false
13
+ # True if we should compress files of the given type.
14
+ def compress?( type )
15
+ self.config_or_default( "compress", type, false )
30
16
  end
31
17
 
32
18
  def yui_config
@@ -40,13 +26,16 @@ module RapperLite::Config
40
26
 
41
27
  # Array of source files for the given asset package.
42
28
  def file_paths( type, name )
43
- definition = @definitions[type][name]
44
- root = self.root( type )
45
- definition["files"].map do |file|
29
+ @definitions[type][name]["files"].map do |file|
46
30
  if file[0] == "+"
31
+ # Include other asset package
47
32
  self.file_paths( type, file[1..-1] )
33
+ elsif type == :js
34
+ coffee_path = File.join( self.root( type ), "#{file}.coffee" )
35
+ js_path = File.join( self.root( type ), "#{file}.js" )
36
+ File.exists?( coffee_path ) ? coffee_path : js_path
48
37
  else
49
- File.join( root, "#{file}.#{type}" )
38
+ File.join( self.root( type ), "#{file}.#{type}" )
50
39
  end
51
40
  end.flatten
52
41
  end
@@ -55,7 +44,29 @@ module RapperLite::Config
55
44
  File.join( self.destination( type ), "#{name}.#{type}" )
56
45
  end
57
46
 
58
- def assert_type!( type )
59
- raise "wat." unless type == :css || type == :js
47
+ protected
48
+
49
+ def load_config( config_path )
50
+ @config_path = config_path
51
+ @config = YAML.load_file( @config_path )
52
+ @definitions = {
53
+ :css => @config["css"],
54
+ :js => @config["js"]
55
+ }
56
+ end
57
+
58
+ # Write in-memory config to file (i.e. just update version strings).
59
+ def save_config
60
+ File.open( @config_path, "w" ) do |file|
61
+ file.puts( @config.to_yaml )
62
+ end
63
+ end
64
+
65
+ def config_or_default( key, type, default )
66
+ if @definitions[type].key?( key )
67
+ @definitions[type][key]
68
+ else
69
+ @config.key?( key ) ? @config[key] : default
70
+ end
60
71
  end
61
72
  end
@@ -1,19 +1,23 @@
1
- # Rapper-wide utility methods for working with paths, files, etc.
2
1
  module RapperLite::Utils
3
-
2
+
4
3
  protected
5
-
6
- # Concatenate one or more files. Uses <code>cat</code>.
7
- #
8
- # @param [Array<String>,String] source_files A path or array of paths to
9
- # files to concatenate.
10
- #
11
- # @param [String] destination_file Destination for concatenated output.
12
- def join_files( source_files, destination_file )
13
- source_files = Array( source_files )
14
- source_files.any? do |path|
4
+
5
+ # Concatenate one or more files by shelling out to `cat`.
6
+ def join_files( source_paths, destination_path )
7
+ source_paths = Array( source_paths )
8
+ source_paths.each do |path|
15
9
  raise "#{path} doesn't exist." unless File.exists?( path )
16
10
  end
17
- system "cat #{source_files.join( " " )} > #{destination_file}"
11
+
12
+ system "cat #{source_paths.join( " " )} > #{destination_path}"
13
+ end
14
+
15
+ # True if the given string is a reserved config key name.
16
+ def config_key?( key )
17
+ self.config_keys.include?( key )
18
+ end
19
+
20
+ def config_keys
21
+ %w( root destination compress )
18
22
  end
19
23
  end
@@ -4,35 +4,29 @@ require 'tempfile'
4
4
  # Asset versioning methods.
5
5
  module RapperLite::Versioning
6
6
 
7
+ def needs_packaging?( type, name )
8
+ return true unless File.exists?( self.destination_path( type, name ) )
9
+ self.version( type, name ) != @definitions[type][name]["version"]
10
+ end
11
+
7
12
  protected
8
13
 
9
- def needs_packaging?( type, name )
10
- definition = @definitions[type][name]
11
- destination_file = self.destination_path( type, name )
12
- return true unless File.exists?( destination_file )
13
-
14
- current_version = definition["version"]
15
- new_version = self.version( type, name )
16
- new_version != current_version
14
+ # MD5 version of the concatenated raw asset package.
15
+ def version( type, name )
16
+ source_paths = self.file_paths( type, name )
17
+ destination_file = Tempfile.new( 'rapper' )
18
+ self.join_files( source_paths, destination_file.path )
19
+ version = Digest::MD5.file( destination_file.path ).to_s[0,7]
20
+ destination_file.unlink
21
+ version
17
22
  end
18
23
 
19
24
  def refresh_versions
20
25
  [:css, :js].each do |type|
21
26
  @definitions[type].each do |name, spec|
22
- next if name == "root" || name == "destination"
27
+ next if self.config_key?( name )
23
28
  @definitions[type][name]["version"] = self.version( type, name )
24
29
  end
25
30
  end
26
31
  end
27
-
28
- # MD5 version of the concatenated asset package.
29
- def version( type, name )
30
- definition = @definitions[type][name]
31
- source_files = self.file_paths( type, name )
32
- destination_file = Tempfile.new( 'rapper' )
33
- self.join_files( source_files, destination_file.path )
34
- version = Digest::MD5.file( destination_file.path ).to_s[0,4]
35
- destination_file.unlink
36
- version
37
- end
38
32
  end
@@ -0,0 +1,46 @@
1
+ module RapperLite
2
+ class Engine
3
+
4
+ def watch
5
+ rapper = self
6
+ rapper.noisy_package
7
+ FSSM.monitor( rapper.common_root, '**/*.{css,js,coffee}' ) do
8
+ component_files = rapper.all_component_paths
9
+ update do |base, relative|
10
+ if component_files.include?( File.join( base, relative) )
11
+ rapper.noisy_package
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ def noisy_package
18
+ print( "Compiling static assets..." ) && STDOUT.flush
19
+ self.package
20
+ puts " Done!"
21
+ end
22
+
23
+ # LCD for JS and CSS roots
24
+ def common_root
25
+ js_path = File.expand_path( self.root( :js ) ).split( "/" )
26
+ css_path = File.expand_path( self.root( :css ) ).split( "/" )
27
+ path = []
28
+ while js_component = js_path.shift && css_component = css_path.shift
29
+ break if js_component != css_component
30
+ path << js_component
31
+ end
32
+ path.join( "/" )
33
+ end
34
+
35
+ # All absolute file paths for the component files
36
+ def all_component_paths
37
+ [:css, :js].map do |type|
38
+ (@definitions[type].keys - self.config_keys).map do |name|
39
+ self.file_paths( type, name )
40
+ end
41
+ end.flatten.uniq.map do |path|
42
+ File.expand_path( path )
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,4 +1,4 @@
1
- module Rapper
1
+ module RapperLite
2
2
 
3
3
  # Rake tasks for building / refreshing packages
4
4
  class Tasks
@@ -31,6 +31,16 @@ module Rapper
31
31
  task :package do
32
32
  @rapper.package
33
33
  end
34
+
35
+ desc "Watch static assets and re-package when necessary"
36
+ task :watch do
37
+ begin
38
+ RapperLite::Engine.method( :watch )
39
+ rescue NameError
40
+ raise "You need to `require 'rapper_lite/watch_support'`, first."
41
+ end
42
+ @rapper.watch
43
+ end
34
44
  end
35
45
  end
36
46
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "rapper_lite"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
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"]
@@ -26,13 +26,16 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "bin/rapper_lite",
28
28
  "lib/rapper_lite.rb",
29
+ "lib/rapper_lite/build.rb",
29
30
  "lib/rapper_lite/compressors.rb",
30
31
  "lib/rapper_lite/config.rb",
31
32
  "lib/rapper_lite/utils.rb",
32
33
  "lib/rapper_lite/versioning.rb",
34
+ "lib/rapper_lite/watch_support.rb",
33
35
  "lib/tasks.rb",
34
36
  "lib/yui/css_compressor.rb",
35
37
  "rapper_lite.gemspec",
38
+ "spec/fixtures/src/coffeescript.coffee",
36
39
  "spec/fixtures/src/simple_1.css",
37
40
  "spec/fixtures/src/simple_1.js",
38
41
  "spec/fixtures/src/simple_2.css",
@@ -0,0 +1 @@
1
+ x: -> true
@@ -1 +1 @@
1
- a=1;b=2;function b(){return false}var x=1;var y=2;function a(){return true}a=1;b=2;function b(){return false};
1
+ a=1;b=2;function b(){return false}var x=1;var y=2;function a(){return true}a=1;b=2;function b(){return false}(function(){({x:function(){return true}})}).call(this);
@@ -7,20 +7,21 @@
7
7
  - files:
8
8
  - simple_1
9
9
  - simple_2
10
- - version: 683e
10
+ - version: 683e7ae
11
11
  - base_combined: !omap
12
12
  - files:
13
13
  - +base
14
14
  - simple_1
15
- - version: 0bb9
15
+ - version: 0bb9443
16
16
  - js: !omap
17
17
  - base: !omap
18
18
  - files:
19
19
  - simple_1
20
20
  - subfolder/simple_2
21
- - version: f3d9
21
+ - version: f3d92a9
22
22
  - base_combined: !omap
23
23
  - files:
24
24
  - subfolder/simple_2
25
25
  - +base
26
- - version: ccfc
26
+ - coffeescript
27
+ - version: 75d7058
@@ -13,3 +13,10 @@ b = 2;
13
13
  function b() {
14
14
  return false;
15
15
  }
16
+ (function() {
17
+ ({
18
+ x: function() {
19
+ return true;
20
+ }
21
+ });
22
+ }).call(this);
@@ -7,20 +7,21 @@
7
7
  - files:
8
8
  - simple_1
9
9
  - simple_2
10
- - version: 683e
10
+ - version: 683e7ae
11
11
  - base_combined: !omap
12
12
  - files:
13
13
  - +base
14
14
  - simple_1
15
- - version: 0bb9
15
+ - version: 0bb9443
16
16
  - js: !omap
17
17
  - base: !omap
18
18
  - files:
19
19
  - simple_1
20
20
  - subfolder/simple_2
21
- - version: f3d9
21
+ - version: f3d92a9
22
22
  - base_combined: !omap
23
23
  - files:
24
24
  - subfolder/simple_2
25
25
  - +base
26
- - version: ccfc
26
+ - coffeescript
27
+ - version: 75d7058
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rapper_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70109260465380 !ruby/object:Gem::Requirement
16
+ requirement: &70105090745260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70109260465380
24
+ version_requirements: *70105090745260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70109260464820 !ruby/object:Gem::Requirement
27
+ requirement: &70105090744000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.3.2
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70109260464820
35
+ version_requirements: *70105090744000
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &70109260464280 !ruby/object:Gem::Requirement
38
+ requirement: &70105090743240 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70109260464280
46
+ version_requirements: *70105090743240
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdiscount
49
- requirement: &70109260463420 !ruby/object:Gem::Requirement
49
+ requirement: &70105090742340 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.6.8
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70109260463420
57
+ version_requirements: *70105090742340
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70109260462240 !ruby/object:Gem::Requirement
60
+ requirement: &70105090741660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.6.4
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70109260462240
68
+ version_requirements: *70105090741660
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yui-compressor
71
- requirement: &70109260461600 !ruby/object:Gem::Requirement
71
+ requirement: &70105090740380 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.6
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70109260461600
79
+ version_requirements: *70105090740380
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fssm
82
- requirement: &70109260460580 !ruby/object:Gem::Requirement
82
+ requirement: &70105090739480 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 0.2.7
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70109260460580
90
+ version_requirements: *70105090739480
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rb-fsevent
93
- requirement: &70109260459860 !ruby/object:Gem::Requirement
93
+ requirement: &70105090737600 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70109260459860
101
+ version_requirements: *70105090737600
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: coffee-script
104
- requirement: &70109260458840 !ruby/object:Gem::Requirement
104
+ requirement: &70105090735640 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: 2.2.0
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70109260458840
112
+ version_requirements: *70105090735640
113
113
  description: Simple static asset packaging. Compresses files only when they're updated.
114
114
  email: tyson@tysontate.com
115
115
  executables:
@@ -127,13 +127,16 @@ files:
127
127
  - VERSION
128
128
  - bin/rapper_lite
129
129
  - lib/rapper_lite.rb
130
+ - lib/rapper_lite/build.rb
130
131
  - lib/rapper_lite/compressors.rb
131
132
  - lib/rapper_lite/config.rb
132
133
  - lib/rapper_lite/utils.rb
133
134
  - lib/rapper_lite/versioning.rb
135
+ - lib/rapper_lite/watch_support.rb
134
136
  - lib/tasks.rb
135
137
  - lib/yui/css_compressor.rb
136
138
  - rapper_lite.gemspec
139
+ - spec/fixtures/src/coffeescript.coffee
137
140
  - spec/fixtures/src/simple_1.css
138
141
  - spec/fixtures/src/simple_1.js
139
142
  - spec/fixtures/src/simple_2.css
@@ -220,7 +223,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
223
  version: '0'
221
224
  segments:
222
225
  - 0
223
- hash: 819027011091602425
226
+ hash: 3082783424749448526
224
227
  required_rubygems_version: !ruby/object:Gem::Requirement
225
228
  none: false
226
229
  requirements: