SasquatchJS 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bca6b695f88cf721ce0240a77881978afc8a9de1
4
+ data.tar.gz: badd03e480275c7429582c0c364e6f29da679809
5
+ SHA512:
6
+ metadata.gz: 72eecb67d9da36913dfeb25061f9e45b626c67bf498595b836bbb0ea8fd58db264bf4a35ef5051e0bddce87e71d43d2368030903e361052bcc4fbc4993afd32f
7
+ data.tar.gz: 838e0fcf90a7cb904e352bd84fa3729bf571d73634416d272ed919add7f52be0254bf62d49a96e104e38870c4970853511f181f242c60a060cee07e33d44562e
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.gitignore ADDED
@@ -0,0 +1,54 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # bundle generated
19
+ Gemfile.lock
20
+
21
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
22
+ #
23
+ # * Create a file at ~/.gitignore
24
+ # * Include files you want ignored
25
+ # * Run: git config --global core.excludesfile ~/.gitignore
26
+ #
27
+ # After doing this, these files will be ignored in all your git projects,
28
+ # saving you from having to 'pollute' every project you touch with them
29
+ #
30
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
31
+ #
32
+ # For MacOS:
33
+ #
34
+ .DS_Store
35
+
36
+ # For TextMate
37
+ #*.tmproj
38
+ #tmtags
39
+
40
+ # For emacs:
41
+ #*~
42
+ #\#*
43
+ #.\#*
44
+
45
+ # For vim:
46
+ #*.swp
47
+
48
+ # For redcar:
49
+ #.redcar
50
+
51
+ # For rubinius:
52
+ #*.rbc
53
+
54
+ test/js/application.min.js
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem 'listen', '~> 2.0'
6
+
7
+ # Add dependencies to develop your gem here.
8
+ # Include everything needed to run rake, tests, features, etc.
9
+ group :development do
10
+ gem "shoulda", ">= 0"
11
+ gem "rdoc", "~> 3.12"
12
+ gem "bundler", "~> 1.0"
13
+ gem "jeweler", "~> 1.8.7"
14
+ gem "simplecov", ">= 0"
15
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Chris Montes
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,19 @@
1
+ = SasquatchJS
2
+
3
+ It's like SASS Watch for JavaScript
4
+
5
+ == Contributing to sasquatchjs
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2013 Chris Montes. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "SasquatchJS"
18
+ gem.homepage = "http://github.com/mandelbro/sasquatchjs"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A SASS Watch Like tool for JavaScript}
21
+ gem.description = %Q{Gives you a SASS Watch type syntax for combining and minimizing javascript files}
22
+ gem.email = "chrismontes@about.me"
23
+ gem.authors = ["Chris Montes"]
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.require_path= 'lib'
26
+ gem.version = '0.1.0'
27
+ # dependencies defined in Gemfile
28
+ end
29
+ Jeweler::RubygemsDotOrgTasks.new
30
+
31
+ require 'rake/testtask'
32
+ Rake::TestTask.new(:test) do |test|
33
+ test.libs << 'lib' << 'test'
34
+ test.pattern = 'test/**/test_*.rb'
35
+ test.verbose = true
36
+ end
37
+
38
+ task :default => :test
39
+
40
+ require 'rdoc/task'
41
+ Rake::RDocTask.new do |rdoc|
42
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
+
44
+ rdoc.rdoc_dir = 'rdoc'
45
+ rdoc.title = "sasquatchjs #{version}"
46
+ rdoc.rdoc_files.include('README*')
47
+ rdoc.rdoc_files.include('lib/**/*.rb')
48
+ end
data/bin/sasquatch ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'sasquatchjs'
4
+
5
+ begin
6
+ Sasquatch.watch(*ARGV)
7
+ rescue Errno::ENOENT => err
8
+ $stderr.puts "Sasquatch: #{err.message}"
9
+ exit(1)
10
+ rescue OptionParser::InvalidOption => err
11
+ $stderr.puts "Sasquatch: #{err.message}\nusage: sasquatch [-bns] [file ...]"
12
+ exit(1)
13
+ end
@@ -0,0 +1,45 @@
1
+
2
+ module Sasquatch
3
+ class Compiler
4
+ include Logger
5
+ attr_accessor :ext
6
+
7
+ def initialize ext
8
+ # set the default extension for compiled files
9
+ @ext = ext
10
+ end
11
+
12
+ # compiles files into the specified file
13
+ def compile(files, file)
14
+
15
+ # setup the output buffer with the base file
16
+ output_buffer = File.read(File.path(file))
17
+
18
+ # loop through import files and substitute imports
19
+ files.each do |key, import_file|
20
+ output_buffer = import(output_buffer, key, import_file)
21
+ end
22
+
23
+ File.open(output_filename(file), 'w') do |file|
24
+ file.write(output_buffer)
25
+ end
26
+ end
27
+
28
+ def output_filename file
29
+
30
+ filename = ""
31
+ file.scan(/^(.*?)\./) do |basename|
32
+ filename = basename.first + @ext
33
+ end
34
+
35
+ (filename == file ? filename + @ext : filename)
36
+
37
+ end
38
+
39
+ # search the output buffer for the key and replace it with the import_file
40
+ def import output_buffer, key, import_file
41
+ output_buffer.sub(/\/\* @import #{key} \*\//, "/* Imports #{key} */ \n\n" + File.read(import_file.path()) + "\n")
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,87 @@
1
+ require 'listen' # require listen gem
2
+
3
+ module Sasquatch
4
+ class Listener
5
+ include Logger
6
+ attr_reader :file, :files, :listener, :status, :base_path, :file_changed, :running
7
+
8
+ def initialize file, &block
9
+ @file = file
10
+
11
+ @base_path = File.dirname(@file)
12
+
13
+ @running = true
14
+
15
+ validate_file @file
16
+
17
+ find_imports @file
18
+
19
+ @file_changed = block
20
+
21
+ # init the logger
22
+ logger "Watching '#{@file}' for updates"
23
+
24
+ # listen to the main file's directory
25
+ @listener = Listen.to(File.dirname(@file), only: /\.js$/, &hear)
26
+ # start listening
27
+ start
28
+ end
29
+
30
+ def find_imports file
31
+ @files = {}
32
+ File.read(file).scan(/\/\* @import (.*.js)/) do |filename|
33
+ @import = "#{File.dirname(@file)}/#{filename.first}"
34
+ validate_file @import
35
+ @files[filename.first] = File.new(File.absolute_path(@import))
36
+ end
37
+ end
38
+
39
+ def hear
40
+ Proc.new do |modified, added, removed|
41
+ if(modified)
42
+ modified_file = modified.first
43
+ if(imported? modified_file)
44
+ if(@file_changed)
45
+ @file_changed.call(_get_file_name(modified_file), @file, @files)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ def start
53
+ @listener.start # not blocking
54
+ while( @running ) do
55
+ sleep(1)
56
+ end
57
+ end
58
+
59
+ def stop
60
+ @listener.pause
61
+ @running = false
62
+ end
63
+
64
+ def validate_file file
65
+ unless(File.file?(file))
66
+ raise "Specified file doesn't exist"
67
+ end
68
+ end
69
+
70
+ def imported? file
71
+
72
+ filename = _get_file_name file
73
+
74
+ if(filename == _get_file_name(@file) or @files.keys.include? filename)
75
+ return true
76
+ end
77
+
78
+ false
79
+
80
+ end
81
+
82
+ def _get_file_name filename
83
+ filename.sub(/^.*?#{@base_path}\//, '')
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,13 @@
1
+ module Sasquatch
2
+ module Logger
3
+ def logger message
4
+ @status = message
5
+ print_line message
6
+ STDOUT.flush
7
+ end
8
+
9
+ def print_line(line)
10
+ puts "\s\s#{line.to_s.rjust(6)}"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,53 @@
1
+ # require all files in the directory
2
+ # example:
3
+ require "quatch/logger"
4
+ require "quatch/listener"
5
+ require "quatch/compiler"
6
+ require "optparse"
7
+
8
+ module Sasquatch
9
+ class Quatcher
10
+ include Logger
11
+ attr_reader :options, :listeners, :compiler
12
+
13
+ def initialize *args
14
+
15
+ @options = parse_options args
16
+
17
+ @listeners = []
18
+
19
+ @compiler = Compiler.new('.min.js')
20
+
21
+ @options[:files].each do |file|
22
+
23
+ @listeners << Listener.new(file, &file_changed)
24
+
25
+ end
26
+
27
+ end
28
+
29
+ def file_changed
30
+
31
+ Proc.new do |modified_file, file, files|
32
+
33
+ @compiler.compile(files, file)
34
+
35
+ logger "Sasquatch has detected a change to #{modified_file}, recompiling..."
36
+ end
37
+ end
38
+
39
+ def parse_options(argv)
40
+ params = {}
41
+ parser = OptionParser.new
42
+
43
+ parser.on("-n") { params[:line_numbering_style] ||= :all_lines }
44
+ parser.on("-b") { params[:line_numbering_style] = :significant_lines }
45
+ parser.on("-s") { params[:squeeze_extra_newlines] = true }
46
+
47
+ params[:files] = parser.parse(argv)
48
+
49
+ params
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ require 'quatch/quatcher'
2
+
3
+ module Sasquatch
4
+ # Sasquatch to file system modifications on a either single directory or multiple directories.
5
+ #
6
+ # @param (see Sasquatch::Quatcher#new)
7
+ #
8
+ # @return [Sasquatch::Quatcher] the listener
9
+ #
10
+ def self.watch(*args, &block)
11
+ Quatcher.new(*args)
12
+ end
13
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'sasquatchjs'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,10 @@
1
+
2
+ /* @import test.js */
3
+
4
+ function Application() {
5
+ console.log('test');
6
+ }
7
+
8
+ /* @import test-2.js */
9
+
10
+ // 2013-12-10 01:28:58 -0800 line added by rspec
@@ -0,0 +1,2 @@
1
+
2
+ /* @import file_not_found.js */
data/test/js/test-2.js ADDED
@@ -0,0 +1 @@
1
+ // test-2.js file
data/test/js/test.js ADDED
@@ -0,0 +1,8 @@
1
+ ;(function($) {
2
+
3
+ $(function() {
4
+ console.log('test');
5
+ });
6
+
7
+ })(jQuery);
8
+ // 2013-12-10 01:29:00 -0800 line added by rspec
@@ -0,0 +1,97 @@
1
+ require "sasquatchjs"
2
+
3
+ describe Sasquatch do
4
+
5
+ context "#initialization" do
6
+ # it should accept a valid file
7
+ it "should accept a valid file" do
8
+ expect {
9
+ @thread = Thread.new { Sasquatch.watch('test/js/application.js') }
10
+ @thread.abort_on_exception = true
11
+ sleep(1)
12
+ @thread.exit
13
+ }.to_not raise_exception
14
+ end
15
+ # it should raise an exception on an invalid file
16
+ it "should raise an exception on an invalid file" do
17
+ expect {
18
+ @thread = Thread.new { Sasquatch.watch('test/js/error') }
19
+ @thread.abort_on_exception = true
20
+ sleep(1)
21
+ @thread.exit
22
+ }.to raise_exception
23
+ end
24
+ # it should raise an exception if any of the imported files are invalid
25
+ it "should raise an exception if any of the imported files are invalid" do
26
+ expect {
27
+ @thread = Thread.new { Sasquatch.watch('test/js/import_error.js') }
28
+ @thread.abort_on_exception = true
29
+ sleep(1)
30
+ @thread.exit
31
+ }.to raise_exception
32
+ end
33
+ # it should tell me what file is being watched
34
+ it "should tell me what file is being watched" do
35
+ @thread = Thread.new { Sasquatch.watch('test/js/application.js') }
36
+ @thread.abort_on_exception = true
37
+ STDOUT.should_receive(:puts).and_return("Watching 'test/js/application.js' for updates")
38
+ sleep(1)
39
+ @thread.exit
40
+ end
41
+ end
42
+
43
+ context "#Listener" do
44
+ listener = Sasquatch::Listener.new('test/js/application.js')
45
+ # it should have a list of all imported files
46
+ it "should have a list of all imported files" do
47
+ files = ["test.js", "test-2.js"]
48
+ expect(listener.files.keys).to eq files
49
+ end
50
+ sleep(1)
51
+ @thread = Thread.new { Sasquatch.watch('test/js/application.js') }
52
+ @thread.abort_on_exception = true
53
+ sleep(1)
54
+ # it should start listening to a valid file
55
+ it "should listen to changes to the initilized file" do
56
+ File.write(f = 'test/js/application.js', File.read(f).gsub(/\n.*line added by rspec|\n{1}\z/, "\n // #{Time.now} line added by rspec"))
57
+ STDOUT.should_receive(:puts).and_return("Sasquatch has detected a change to test/js/application.js, recompiling...")
58
+ sleep(1)
59
+ end
60
+ # should listen to changes to the imported files
61
+ it "should listen to changes to the imported files" do
62
+ File.write(f = File.path('test/js/test.js'), File.read(f).gsub(/\n.*line added by rspec|\n{1}\z/, "\n // #{Time.now} line added by rspec"))
63
+ STDOUT.should_receive(:puts).and_return("Sasquatch has detected a change to test/js/test.js, recompiling...")
64
+ sleep(1)
65
+ end
66
+ sleep(1)
67
+ @thread.exit
68
+ end
69
+
70
+ context "#compiler" do
71
+ @thread = Thread.new { Sasquatch.watch('test/js/application.js') }
72
+ @thread.abort_on_exception = true
73
+ sleep(1)
74
+ # it should write a new file when the primary file is changed
75
+ it "should write a new file appended with .min.js when the primary file is changed" do
76
+ File.write(f = File.path('test/js/application.js'), File.read(f).gsub(/\n.*line added by rspec|\n{1}\z/, "\n // #{Time.now} line added by rspec"))
77
+ sleep(1)
78
+ expect(File.file?('test/js/application.min.js')).to eq true
79
+ sleep(1)
80
+ end
81
+ # it should write a new file when any of the import files are changed
82
+ it "should add the imported files into the compiled file when a file is changed" do
83
+ File.write(f = File.path('test/js/test.js'), File.read(f).gsub(/\n.*line added by rspec|\n{1}\z/, "\n // #{Time.now} line added by rspec"))
84
+
85
+ sleep(1)
86
+
87
+ @import_file = File.read(File.path('test/js/test.js'))
88
+
89
+ expect(File.read(File.path('test/js/application.min.js')).index(@import_file)).to_not eq nil
90
+
91
+ end
92
+
93
+ sleep(1)
94
+ @thread.exit
95
+ end
96
+
97
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: SasquatchJS
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Montes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: listen
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: shoulda
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 1.8.7
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.7
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Gives you a SASS Watch type syntax for combining and minimizing javascript
98
+ files
99
+ email: chrismontes@about.me
100
+ executables:
101
+ - sasquatch
102
+ extensions: []
103
+ extra_rdoc_files:
104
+ - LICENSE.txt
105
+ - README.rdoc
106
+ files:
107
+ - .document
108
+ - .gitignore
109
+ - .rspec
110
+ - Gemfile
111
+ - LICENSE.txt
112
+ - README.rdoc
113
+ - Rakefile
114
+ - bin/sasquatch
115
+ - lib/quatch/compiler.rb
116
+ - lib/quatch/listener.rb
117
+ - lib/quatch/logger.rb
118
+ - lib/quatch/quatcher.rb
119
+ - lib/sasquatchjs.rb
120
+ - test/helper.rb
121
+ - test/js/application.js
122
+ - test/js/import_error.js
123
+ - test/js/test-2.js
124
+ - test/js/test.js
125
+ - test/test_sasquatchjs.rb
126
+ homepage: http://github.com/mandelbro/sasquatchjs
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.0.6
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: A SASS Watch Like tool for JavaScript
150
+ test_files: []