mindful_sass 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/mindful_sass ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to
8
+ # deal in the Software without restriction, including without limitation the
9
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ # sell copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
+ # IN THE SOFTWARE.
23
+ #++
24
+
25
+ begin
26
+ require 'rubygems'
27
+ rescue LoadError
28
+ end
29
+
30
+ require 'mindful_watcher'
31
+ require 'directory_runner'
32
+
33
+ args = ARGV.dup
34
+ watcher = MindfulWatcher.new(args)
35
+ watcher.observe_folder
@@ -0,0 +1,20 @@
1
+ class DirectoryRunner
2
+ EXCLUDE_FILES = %w{. .. .sass-cache}.freeze
3
+
4
+ def initialize root_dir
5
+ @root_dir = root_dir
6
+ raise "FileNotFound" if @root_dir.nil?
7
+ end
8
+
9
+ def process(dir = nil, &block)
10
+ dir ||= @root_dir
11
+
12
+ Dir.foreach(dir) do |filename|
13
+ unless EXCLUDE_FILES.include? filename
14
+ act_path = File.join(dir, filename)
15
+ block.call act_path
16
+ self.process act_path, &block if File.directory? act_path
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,36 @@
1
+ class MindfulWatcher
2
+
3
+ def initialize(args=[])
4
+ puts "initializing sass_watcher"
5
+ args.delete_if { |a| a == '--watch' }
6
+ @args = args
7
+ path_args = args.select { |a| a =~ /.+\:.+/ }.first || ""
8
+ sources = path_args.gsub(/\:.+/, ' ')
9
+ @dir2observe = File.realdirpath(File.dirname(sources)) if sources
10
+
11
+ raise NotObservableException, :msg => 'cannot find folder in arguments' if @dir2observe.nil?
12
+ end
13
+
14
+ def observe_folder
15
+ fm = DirectoryRunner.new(@dir2observe)
16
+ while true do
17
+ fm.process do |filename|
18
+ if @last_change.nil? || File.mtime(filename).to_s > @last_change.to_s
19
+ @last_change = Time.now
20
+ update_files(filename)
21
+ end
22
+ end
23
+ sleep 2
24
+ end
25
+ end
26
+
27
+ def update_files(filename)
28
+ files_converted = system("sass #{@args.join(' ')}")
29
+ if files_converted
30
+ puts "#{@last_change} file changed: #{filename}"
31
+ else
32
+ raise "SassNotFoundException", :msg => "please run 'gem install sass'"
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,2 @@
1
+ class NotObservableException < StandardError
2
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mindful_sass
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - ! '''Falk'
9
+ - Hoppe'
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-08-01 00:00:00.000000000Z
14
+ dependencies: []
15
+ description: ! "\n Sass or the much better approach of scss is really helpful and
16
+ a big silver bullet for my css structuring in \n ruby projects.\n \n Standard
17
+ sass command works for whole directories or single files only. In general it gets
18
+ the jobs we want done, \n but in practical usage i think the sass command tool
19
+ is a little bit unconvinient. A common scenario for me is, \n that you have whole
20
+ bunch of sass files, which you want to compile to a single compressed output file.\n
21
+ \ But if you have splitted your sass files in component based modules and you
22
+ want to watch the complete folder you \n have to care for dependency handling
23
+ in each file, because each file will be compiled for its own.\n \n # compiling
24
+ a complete folder with scss\n ~ $ sass css/scss:css/compiled\n \n So converting
25
+ the whole folder is not what i want, because i don\\'t want to import for example
26
+ my color.sass config file\n in each module again. Compiling a single file seems
27
+ to be the better solution, and it works in general, as expected,\n but the devil
28
+ is in the detail. \n \n # compiling a single file where the other files are
29
+ imported.\n ~ $ sass css/scss/main.scss:css/compiled/main.css\n \n If we
30
+ change a file with impact to our main.sass file, the --watch handle will not get
31
+ it, because it observes only\n the timestamp of the given main.sass.\n \n Here
32
+ is it, where mindful_sass tries to help out. You use it according to the single
33
+ file variant of \n sass, but it tries to observe the whole folder the given sass
34
+ file is placed. If a timestamp of file in the sass folder\n or its children changes
35
+ it will compile the specified main.sass again.\n \n This gem is not aimed to
36
+ replace anything in the sass universe. It is only a wrapper to avoid the described
37
+ unconvinience, \n and i hope that it gets useless as fast as possible, because
38
+ the sass development gets this feature done for themselves.\n \n Thanks anyway
39
+ to the sass developer team. \n "
40
+ email: info@systems-engineer.net
41
+ executables:
42
+ - mindful_sass
43
+ extensions: []
44
+ extra_rdoc_files: []
45
+ files:
46
+ - lib/directory_runner.rb
47
+ - lib/mindful_watcher.rb
48
+ - lib/not_observable_exception.rb
49
+ - bin/mindful_sass
50
+ homepage:
51
+ licenses:
52
+ - GPL-3
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 1.8.6
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: provides a recursive observer for sass command line tool. Takes the same
75
+ arguments as sass, using the sass single file syntax.
76
+ test_files: []