sitefuel 0.0.0a
Sign up to get free protection for your applications and to get access to all the features.
- data/README +86 -0
- data/RELEASE_NOTES +7 -0
- data/bin/sitefuel +162 -0
- data/lib/sitefuel/Configuration.rb +35 -0
- data/lib/sitefuel/SiteFuelLogger.rb +128 -0
- data/lib/sitefuel/SiteFuelRuntime.rb +293 -0
- data/lib/sitefuel/extensions/ArrayComparisons.rb +34 -0
- data/lib/sitefuel/extensions/DynamicClassMethods.rb +19 -0
- data/lib/sitefuel/extensions/FileComparison.rb +24 -0
- data/lib/sitefuel/extensions/Silently.rb +27 -0
- data/lib/sitefuel/extensions/StringFormatting.rb +75 -0
- data/lib/sitefuel/extensions/SymbolComparison.rb +13 -0
- data/lib/sitefuel/external/AbstractExternalProgram.rb +616 -0
- data/lib/sitefuel/external/ExternalProgramTestCase.rb +67 -0
- data/lib/sitefuel/external/GIT.rb +9 -0
- data/lib/sitefuel/external/JPEGTran.rb +68 -0
- data/lib/sitefuel/external/PNGCrush.rb +66 -0
- data/lib/sitefuel/processors/AbstractExternalProgramProcessor.rb +72 -0
- data/lib/sitefuel/processors/AbstractProcessor.rb +378 -0
- data/lib/sitefuel/processors/AbstractStringBasedProcessor.rb +88 -0
- data/lib/sitefuel/processors/CSSProcessor.rb +84 -0
- data/lib/sitefuel/processors/HAMLProcessor.rb +52 -0
- data/lib/sitefuel/processors/HTMLProcessor.rb +211 -0
- data/lib/sitefuel/processors/JavaScriptProcessor.rb +57 -0
- data/lib/sitefuel/processors/PHPProcessor.rb +32 -0
- data/lib/sitefuel/processors/PNGProcessor.rb +80 -0
- data/lib/sitefuel/processors/RHTMLProcessor.rb +25 -0
- data/lib/sitefuel/processors/SASSProcessor.rb +50 -0
- data/test/processor_listing.rb +28 -0
- data/test/test_AbstractExternalProgram.rb +186 -0
- data/test/test_AbstractProcessor.rb +237 -0
- data/test/test_AbstractStringBasedProcessor.rb +48 -0
- data/test/test_AllProcessors.rb +65 -0
- data/test/test_ArrayComparisons.rb +32 -0
- data/test/test_CSSProcessor.rb +120 -0
- data/test/test_FileComparisons.rb +42 -0
- data/test/test_HAMLProcessor.rb.rb +60 -0
- data/test/test_HTMLProcessor.rb +186 -0
- data/test/test_JPEGTran.rb +40 -0
- data/test/test_JavaScriptProcessor.rb +63 -0
- data/test/test_PHPProcessor.rb +51 -0
- data/test/test_PNGCrush.rb +58 -0
- data/test/test_PNGProcessor.rb +32 -0
- data/test/test_RHTMLProcessor.rb +62 -0
- data/test/test_SASSProcessor.rb +68 -0
- data/test/test_SiteFuelLogging.rb +79 -0
- data/test/test_SiteFuelRuntime.rb +96 -0
- data/test/test_StringFormatting.rb +51 -0
- data/test/test_SymbolComparison.rb +27 -0
- data/test/test_images/sample_jpg01.jpg +0 -0
- data/test/test_images/sample_png01.png +0 -0
- data/test/test_programs/versioning.rb +26 -0
- data/test/test_sites/simplehtml/deployment.yml +22 -0
- data/test/test_sites/simplehtml/index.html +66 -0
- data/test/test_sites/simplehtml/style.css +40 -0
- data/test/ts_all.rb +39 -0
- metadata +165 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# File:: ArrayComparisons.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Adds methods to Array for comparing with other arrays
|
8
|
+
#
|
9
|
+
|
10
|
+
class Array
|
11
|
+
|
12
|
+
# gives true if self ends with the given array
|
13
|
+
#
|
14
|
+
# [1, 2, 3].ends_with? [2, 3] # ==> true
|
15
|
+
# [1, 2, 3].ends_with? [] # ==> true
|
16
|
+
# [1, 2, 3].ends_with? [1, 2, 3] # ==> true
|
17
|
+
# [1, 2, 3].ends_with? [1, 2] # ==> false
|
18
|
+
def ends_with?(other)
|
19
|
+
# if the supposed 'ending' is longer, it can't be an ending
|
20
|
+
if length < other.length
|
21
|
+
return false
|
22
|
+
end
|
23
|
+
|
24
|
+
index = -1
|
25
|
+
while -index <= other.length and -index <= length
|
26
|
+
if other[index] != self[index]
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
index -= 1
|
30
|
+
end
|
31
|
+
|
32
|
+
return true
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# File:: DynamicClassMethods.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Adds a #meta_def function to Object so we can programmatically define class
|
8
|
+
# methods.
|
9
|
+
#
|
10
|
+
|
11
|
+
class Object
|
12
|
+
|
13
|
+
# defines a class method
|
14
|
+
# based on: http://blog.jayfields.com/2007/10/ruby-defining-class-methods.html
|
15
|
+
# and: http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
|
16
|
+
def define_class_method name, &blk
|
17
|
+
(class << self; self; end).instance_eval { define_method name, &blk}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# File:: FileComparison.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Adds File.equivalent? that tries to guess whether two files are equivalent
|
8
|
+
#
|
9
|
+
|
10
|
+
require 'sitefuel/extensions/ArrayComparisons'
|
11
|
+
|
12
|
+
class File
|
13
|
+
# gives true if one of the paths is the ending of another path
|
14
|
+
#
|
15
|
+
# File.equivalent?('b/a.rb', 'a.rb') # ==> true
|
16
|
+
# File.equivalent?('c/b/a.rb', 'c/a.rb') # ==> false
|
17
|
+
def self.equivalent?(a, b)
|
18
|
+
list = [
|
19
|
+
File.expand_path(a, '/').split(File::SEPARATOR)[1 .. -1],
|
20
|
+
File.expand_path(b, '/').split(File::SEPARATOR)[1 .. -1]
|
21
|
+
].sort {|l,r| l.length <=> r.length }.reverse
|
22
|
+
list.first.ends_with? list.last
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# File:: Silently.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Implements a silently method for executing code without warnings; intended for
|
8
|
+
# wrapping around require statements
|
9
|
+
#
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
# this is sourced directly from
|
14
|
+
# http://vidyapsi.wordpress.com/category/ruby/#warnings
|
15
|
+
|
16
|
+
def silently(&block)
|
17
|
+
warn_level = $VERBOSE
|
18
|
+
$VERBOSE = nil
|
19
|
+
|
20
|
+
result = block.call
|
21
|
+
|
22
|
+
$VERBOSE = warn_level
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
# /end sourcing
|
27
|
+
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#
|
2
|
+
# File:: StringFormatting.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Adds String#cabbrev for abbreviating strings
|
8
|
+
#
|
9
|
+
|
10
|
+
class String
|
11
|
+
|
12
|
+
# gives an abbreviated form of a string, showing some of the beginning
|
13
|
+
# and some of the end.
|
14
|
+
#
|
15
|
+
# "the quick brown dog".cabbrev 12 # => "the q... dog"
|
16
|
+
def cabbrev(len)
|
17
|
+
if length <= len
|
18
|
+
self
|
19
|
+
else
|
20
|
+
self[0..(len/2-2).floor] + "..." + self[(length - len/2+2) .. (length)]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# gives an abbreviated form of the string, showing as much of the beginning
|
25
|
+
# as possible
|
26
|
+
#
|
27
|
+
# "the quick brown dog".labbrev 12 # => "the quick ..."
|
28
|
+
def labbrev(len)
|
29
|
+
if length <= len
|
30
|
+
self
|
31
|
+
else
|
32
|
+
self[0..(len-4)] + '...'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# gives an abbreviated form of the string, showing as much of the end as
|
37
|
+
# possible
|
38
|
+
#
|
39
|
+
# "the quick brown dog".rabbrev 12 # => "...brown dog"
|
40
|
+
def rabbrev(len)
|
41
|
+
if length <= len
|
42
|
+
self
|
43
|
+
else
|
44
|
+
'...' + self[(length - (len-3)) .. length]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# removes leading whitespace from a set of lines, preserving indentation
|
49
|
+
# relative to the first non-empty line
|
50
|
+
def align
|
51
|
+
return self if empty?
|
52
|
+
|
53
|
+
# split by lines
|
54
|
+
lines = split("\n")
|
55
|
+
|
56
|
+
# get rid of the first line if it is null
|
57
|
+
if lines.first == ''
|
58
|
+
lines = lines[1..-1]
|
59
|
+
end
|
60
|
+
|
61
|
+
# take the first line and extract the leading whitespace
|
62
|
+
leading = lines.first[/^[ \t]*/]
|
63
|
+
|
64
|
+
# iterate over each line dumping the leading whitespace
|
65
|
+
lines = lines.map do |l|
|
66
|
+
l.gsub!(Regexp.new('^'+leading), '')
|
67
|
+
end
|
68
|
+
|
69
|
+
lines.join("\n")
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
alias :format :%
|
74
|
+
|
75
|
+
end
|