duct_tape 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/Gemfile +10 -0
  2. data/Gemfile.lock +35 -0
  3. data/LICENSE +25 -0
  4. data/README.md +223 -0
  5. data/Rakefile +38 -0
  6. data/VERSION +1 -0
  7. data/duct_tape.gemspec +106 -0
  8. data/ext/mkrf_conf.rb +36 -0
  9. data/git_hooks/env_vars.sh +287 -0
  10. data/git_hooks/post-commit +43 -0
  11. data/git_hooks/post-merge +8 -0
  12. data/git_hooks/pre-commit +273 -0
  13. data/install_git_hooks +17 -0
  14. data/lib/algorithms/containers/heap.rb +15 -0
  15. data/lib/algorithms/containers/priority_queue.rb +11 -0
  16. data/lib/algorithms/containers.rb +1 -0
  17. data/lib/duct_tape/autoassociative_array.rb +110 -0
  18. data/lib/duct_tape.rb +10 -0
  19. data/lib/ext/array.rb +327 -0
  20. data/lib/ext/boolean.rb +3 -0
  21. data/lib/ext/datetime.rb +7 -0
  22. data/lib/ext/dir.rb +59 -0
  23. data/lib/ext/file.rb +40 -0
  24. data/lib/ext/hash.rb +83 -0
  25. data/lib/ext/kernel.rb +593 -0
  26. data/lib/ext/numeric.rb +74 -0
  27. data/lib/ext/object.rb +17 -0
  28. data/lib/ext/pathname.rb +114 -0
  29. data/lib/ext/range.rb +7 -0
  30. data/lib/ext/regexp.rb +12 -0
  31. data/lib/ext/string.rb +54 -0
  32. data/lib/ext/symbol.rb +8 -0
  33. data/lib/ext/time.rb +32 -0
  34. data/lib/ext/uri.rb +16 -0
  35. data/spec/algorithms/containers/heap_spec.rb +19 -0
  36. data/spec/algorithms/containers/priority_queue_spec.rb +19 -0
  37. data/spec/duct_tape/autoassociative_array_spec.rb +139 -0
  38. data/spec/ext/array_spec.rb +407 -0
  39. data/spec/ext/boolean_spec.rb +19 -0
  40. data/spec/ext/datetime_spec.rb +10 -0
  41. data/spec/ext/dir_spec.rb +46 -0
  42. data/spec/ext/file_spec.rb +10 -0
  43. data/spec/ext/hash_spec.rb +73 -0
  44. data/spec/ext/kernel_spec.rb +64 -0
  45. data/spec/ext/numeric_spec.rb +61 -0
  46. data/spec/ext/object_spec.rb +19 -0
  47. data/spec/ext/pathname_spec.rb +13 -0
  48. data/spec/ext/range_spec.rb +10 -0
  49. data/spec/ext/regexp_spec.rb +10 -0
  50. data/spec/ext/string_spec.rb +73 -0
  51. data/spec/ext/symbol_spec.rb +10 -0
  52. data/spec/ext/time_spec.rb +19 -0
  53. data/spec/ext/uri_spec.rb +28 -0
  54. data/spec/spec_helper.rb +7 -0
  55. metadata +183 -0
@@ -0,0 +1,287 @@
1
+ #!/bin/bash -e
2
+
3
+ #
4
+ # Determine Platform
5
+ #
6
+ uname_output=`uname -s`
7
+ if [[ "$uname_output" =~ "Linux" ]]; then
8
+ my_platform="linux"
9
+ elif [[ "$uname_output" =~ "Darwin" ]]; then
10
+ my_platform="darwin"
11
+ elif [[ "$uname_output" =~ "Solaris" || "$uname_output" =~ "SunOS" ]]; then
12
+ my_platform="solaris"
13
+ elif [[ "$uname_output" =~ "BSD" || "$uname_output" =~ "DragonFly" ]]; then
14
+ my_platform="bsd"
15
+ elif [[ "$uname_output" =~ "Haiku" ]]; then
16
+ my_platform="beos"
17
+ else
18
+ echo "ERROR: Unknown Platform '$uname_output'"
19
+ exit 1
20
+ fi
21
+
22
+ #
23
+ # Determine CPU info
24
+ #
25
+ if [[ -e "/proc/cpuinfo" ]]; then
26
+ # Linux
27
+ num_cpus=`cat /proc/cpuinfo | grep processor | wc -l`
28
+ elif [[ -n `which lscpu 2> /dev/null` ]]; then
29
+ # Linux Alternative
30
+ num_cpus=`lscpu | grep -i "CPU(s):" | awk '{print $2}'`
31
+ elif [[ -n `which psrinfo 2> /dev/null` ]]; then
32
+ # Solaris
33
+ num_cpus=`psrinfo | wc -l`
34
+ elif [[ -n `which sysinfo 2> /dev/null` ]]; then
35
+ # Haiku/BeOS
36
+ num_cpus=`sysinfo | grep -i "CPU #[0-9]*:" | wc -l`
37
+ elif [[ -n `which sysctl 2> /dev/null` ]]; then
38
+ # BSD
39
+ num_cpus=`sysctl -a 2> /dev/null | egrep -i 'hw.ncpu' | awk '{print $2}'`
40
+ fi
41
+
42
+ if [[ -n `which arch 2> /dev/null` ]]; then
43
+ # Linux
44
+ my_arch=`arch`
45
+ elif [[ -n `which lscpu 2> /dev/null` ]]; then
46
+ # Linux Alternative
47
+ my_arch=`lscpu | grep -i "Architecture" | awk '{print $2}'`
48
+ elif [[ -n `which sysinfo 2> /dev/null` ]]; then
49
+ # Haiku/BeOS
50
+ my_arch=`sysinfo | grep -o "kernel_\\w*"`
51
+ else
52
+ # BSD/Solaris
53
+ my_arch=`uname -p 2> /dev/null`
54
+ [[ -n "$my_arch" ]] || my_arch=`uname -m 2> /dev/null`
55
+ fi
56
+
57
+ if [[ -n `echo $my_arch | grep -i "sparc\\|sun4u"` ]]; then
58
+ my_arch_family="sparc"
59
+ elif [[ -n `echo $my_arch | grep -i "^ppc\\|powerpc"` ]]; then
60
+ my_arch_family="powerpc"
61
+ elif [[ "$my_arch" =~ mips ]]; then
62
+ my_arch_family="mips"
63
+ elif [[ "$my_arch" =~ s390 ]]; then
64
+ my_arch_family="s390x"
65
+ elif [[ -n `echo $my_arch | grep -i "ia64\\|itanium"` ]]; then
66
+ my_arch_family="itanium"
67
+ elif [[ "$my_arch" =~ 64 ]]; then
68
+ my_arch_family="x86_64"
69
+ elif [[ -n `echo $my_arch | grep -i "\\(i[3-6]\\?\\|x\\)86\\|ia32"` ]]; then
70
+ my_arch_family="i386"
71
+ elif [[ "$my_arch" =~ arm ]]; then
72
+ my_arch_family="arm"
73
+ fi
74
+
75
+ #
76
+ # Setup Build Env
77
+ #
78
+ if [[ -z `echo "$PATH" | grep "/usr/local/bin"` ]]; then
79
+ export PATH=/usr/local/sbin:/usr/local/bin:$PATH
80
+ fi
81
+ if [[ "$PATH" =~ "rvm/bin" ]]; then
82
+ if [[ `whoami` == "root" ]]; then
83
+ rvm_home=/usr/local/rvm
84
+ else
85
+ rvm_home=$HOME/.rvm
86
+ fi
87
+ export PATH=$PATH:$rvm_home/bin # Add RVM to PATH for scripting
88
+ fi
89
+
90
+ if [[ "$my_platform" == "linux" ]]; then
91
+
92
+ # PLEASE tell me you have lsb_release installed.
93
+ if [[ -z `which lsb_release 2> /dev/null` ]]; then
94
+ if [[ -n `which apt-get 2> /dev/null` ]]; then # Debian/Ubuntu/Linux Mint/PCLinuxOS
95
+ sudo apt-get install -y lsb
96
+ elif [[ -n `which up2date 2> /dev/null` ]]; then # RHEL/Oracle
97
+ sudo up2date -i lsb
98
+ elif [[ -n `which yum 2> /dev/null` ]]; then # CentOS/Fedora/RHEL/Oracle
99
+ sudo yum install -y lsb
100
+ elif [[ -n `which zypper 2> /dev/null` ]]; then # OpenSUSE/SLES
101
+ sudo zypper --non-interactive install lsb
102
+ elif [[ -n `which pacman 2> /dev/null` ]]; then # ArchLinux
103
+ sudo pacman -S --noconfirm lsb-release
104
+ elif [[ -n `which urpmi 2> /dev/null` ]]; then # Mandriva/Mageia
105
+ sudo urpmi --auto lsb-release
106
+ elif [[ -n `which emerge 2> /dev/null` ]]; then # Gentoo
107
+ sudo emerge lsb
108
+ elif [[ -n `which slackpkg 2> /dev/null` ]]; then # Slackware
109
+ echo "" > /dev/null # Slackware doesn't use LSB
110
+ else
111
+ echo "ERROR: Unknown Package manager in use (what ARE you using??)"
112
+ exit 1
113
+ fi
114
+ fi
115
+
116
+ my_method="install"
117
+ my_major_release=`lsb_release -r 2> /dev/null | awk '{print $2}' | grep -o "[0-9]\+" | head -1`
118
+ my_nickname=`lsb_release -c 2> /dev/null | awk '{print $2}'`
119
+ my_pkg_arch="$my_arch_family"
120
+ lsb_release_output=`lsb_release -a 2> /dev/null`
121
+ if [[ -n `echo $lsb_release_output | grep -i "debian"` ]]; then
122
+ my_distro="debian"
123
+ my_pkg_fmt="deb"
124
+ my_install="apt-get install -y"
125
+ my_local_install="dpkg -i"
126
+ if [[ "$my_arch_family" == "x86_64" ]]; then my_pkg_arch="amd64"; fi
127
+ elif [[ -n `echo $lsb_release_output | grep -i "ubuntu"` ]]; then
128
+ my_distro="ubuntu"
129
+ my_pkg_fmt="deb"
130
+ my_install="apt-get install -y"
131
+ my_local_install="dpkg -i"
132
+ if [[ "$my_arch_family" == "x86_64" ]]; then my_pkg_arch="amd64"; fi
133
+ elif [[ -n `echo $lsb_release_output | grep -i "mint"` ]]; then
134
+ my_distro="mint"
135
+ my_pkg_fmt="deb"
136
+ my_install="apt-get install -y"
137
+ my_local_install="dpkg -i"
138
+ if [[ "$my_arch_family" == "x86_64" ]]; then my_pkg_arch="amd64"; fi
139
+ elif [[ -n `echo $lsb_release_output | grep -i "centos"` ]]; then
140
+ my_distro="centos"
141
+ my_pkg_fmt="rpm"
142
+ my_install="yum install -y"
143
+ my_local_install="yum localinstall -y"
144
+ elif [[ -n `echo $lsb_release_output | grep -i "fedora"` ]]; then
145
+ my_distro="fedora"
146
+ my_pkg_fmt="rpm"
147
+ my_install="yum install -y"
148
+ my_local_install="yum localinstall -y"
149
+ elif [[ -n `echo $lsb_release_output | grep -i "redhat\|rhel"` ]]; then
150
+ my_distro="rhel"
151
+ my_pkg_fmt="rpm"
152
+ my_install="up2date -i"
153
+ my_local_install="rpm -Uvh"
154
+ elif test -e "/etc/oracle-release" -o -e "/etc/enterprise-release"; then
155
+ my_distro="oracle"
156
+ if test -e "/etc/oracle-release"; then
157
+ my_nickname=`cat /etc/oracle-release`
158
+ else
159
+ my_nickname=`cat /etc/enterprise-release`
160
+ fi
161
+ my_major_release=`echo $my_nickname | grep -o "[0-9]\+" | head -1`
162
+ my_pkg_fmt="rpm"
163
+ my_install="up2date -i"
164
+ my_local_install="rpm -Uvh"
165
+ elif [[ -n `echo $lsb_release_output | grep -i "open\s*suse"` ]]; then
166
+ my_distro="opensuse"
167
+ my_pkg_fmt="rpm"
168
+ my_install="zypper --non-interactive install"
169
+ my_local_install="rpm -Uvh"
170
+ elif [[ -n `echo $lsb_release_output | grep -i "suse" | grep -i "enterprise"` ]]; then
171
+ my_distro="sles"
172
+ my_pkg_fmt="rpm"
173
+ my_install="zypper --non-interactive install"
174
+ my_local_install="rpm -Uvh"
175
+ elif [[ -n `echo $lsb_release_output | grep -i "archlinux"` ]]; then
176
+ my_distro="arch"
177
+ my_pkg_fmt="pkg.tar.xz"
178
+ my_install="pacman -S --noconfirm"
179
+ my_local_install="pacman -U --noconfirm"
180
+ elif test -e "/etc/slackware-version"; then
181
+ my_distro="slackware"
182
+ my_nickname=`cat /etc/slackware-version`
183
+ my_major_release=`echo $my_nickname | grep -o "[0-9]\+" | head -1`
184
+ if [[ "$my_major_release" -lt "13" ]]; then
185
+ my_pkg_fmt="tgz"
186
+ else
187
+ my_pkg_fmt="txz"
188
+ fi
189
+ my_install="slackpkg -batch=on -default_answer=y install"
190
+ my_local_install="installpkg"
191
+ elif [[ -n `echo $lsb_release_output | grep -i "mandriva"` ]]; then
192
+ my_distro="mandriva"
193
+ my_pkg_fmt="rpm"
194
+ my_install="urpmi --auto "
195
+ my_local_install="rpm -Uvh"
196
+ elif [[ -n `echo $lsb_release_output | grep -i "mageia"` ]]; then
197
+ my_distro="mageia"
198
+ my_pkg_fmt="rpm"
199
+ my_install="urpmi --auto "
200
+ my_local_install="rpm -Uvh"
201
+ elif [[ -n `echo $lsb_release_output | grep -i "gentoo"` ]]; then
202
+ my_distro="gentoo"
203
+ my_pkg_fmt="tgz"
204
+ my_install="emerge"
205
+ my_local_install=""
206
+ else
207
+ echo "Warning: Unsupported Linux Distribution, any packages will be compiled from source"
208
+ my_method="build"
209
+ my_distro=`lsb_release -d 2> /dev/null`
210
+ fi
211
+
212
+ elif [[ "$my_platform" == "darwin" ]]; then
213
+
214
+ my_distro="Mac OSX"
215
+ my_install=""
216
+
217
+ if [[ -z `which brew 2> /dev/null` ]]; then # Homebrew
218
+ my_method="install"
219
+ my_install="brew install"
220
+ elif [[ -z `which port 2> /dev/null` ]]; then # MacPorts
221
+ my_method="install"
222
+ my_install="port install"
223
+ else
224
+ my_method="build"
225
+ fi
226
+ my_major_release=`sw_vers -productVersion | grep -o "[0-9]\+\.[0-9]\+" | head -1`
227
+ case "$my_major_release" in
228
+ "10.0") my_nickname="Cheetah";;
229
+ "10.1") my_nickname="Puma";;
230
+ "10.2") my_nickname="Jaguar";;
231
+ "10.3") my_nickname="Panther";;
232
+ "10.4") my_nickname="Tiger";;
233
+ "10.5") my_nickname="Leopard";;
234
+ "10.6") my_nickname="Snow Leopard";;
235
+ "10.7") my_nickname="Lion";;
236
+ "10.8") my_nickname="Mountain Lion";;
237
+ *)
238
+ echo "Unknown Version of OSX Detected: $my_major_release"
239
+ my_nickname="Unknown"
240
+ ;;
241
+ esac
242
+
243
+ my_pkg_fmt=""
244
+ my_local_install=""
245
+
246
+ elif [[ "$my_platform" == "solaris" ]]; then
247
+
248
+ my_major_release=`uname -r | grep -o "[0-9]\+" | head -2 | tail -1`
249
+ if [[ -n `uname -a | grep -i "open\s*solaris"` ]]; then
250
+ my_distro="OpenSolaris"
251
+ my_nickname="$my_distro `cat /etc/release | grep -o "OpenSolaris [a-zA-Z0-9.]\\+"`"
252
+ else
253
+ my_distro="Solaris"
254
+ my_nickname="$my_distro $my_major_release"
255
+ fi
256
+ my_method="install"
257
+ # NOTE - `pfexec pkg set-publisher -O http://pkg.openindiana.org/legacy opensolaris.org`
258
+ # NOTE - SUNWruby18, SUNWgcc, SUNWgnome-common-devel
259
+ my_install="pkg install"
260
+
261
+ my_pkg_fmt=""
262
+ my_local_install=""
263
+
264
+ elif [[ "$my_platform" == "bsd" ]]; then
265
+
266
+ my_distro=`uname -s`
267
+ my_pkg_fmt="tgz"
268
+ my_nickname="$my_distro `uname -r`"
269
+ my_major_release=`uname -r | grep -o "[0-9]\+" | head -1`
270
+ my_method="install"
271
+ # NOTE - `portsnap fetch extract` to update snapshot
272
+ my_install="pkg_add -r"
273
+
274
+ my_local_install=""
275
+
276
+ elif [[ "$my_platform" == "beos" ]]; then
277
+
278
+ my_distro=`uname -s`
279
+ my_major_release=`uname -r | grep -o "[0-9]\+" | head -1`
280
+ my_method="build"
281
+ my_nickname="$my_distro $my_major_release"
282
+
283
+ my_pkg_fmt=""
284
+ my_local_install=""
285
+ my_install=""
286
+
287
+ fi
@@ -0,0 +1,43 @@
1
+ #!/bin/bash -e
2
+ cat << 'EOS'
3
+ ..,ONMMMMMO.
4
+ NM8~:~:.,+NMM=
5
+ MO .MM:
6
+ NM. ,MN
7
+ .. .7MN . . 8M,
8
+ ==. ?N: .MMN .,,.. 8$ZZ.~MN
9
+ .$. N8 ,DD. ,MMN ...+:. .MMM
10
+ D 8D.Z= .$. NMMM..,~8I ,88+. MMMM:.
11
+ ,~... ,MM .N . MMMM7. .... MMMMM,
12
+ DZ.. .:OZ.:M. ..8= .MMMM. .OMMMMM
13
+ :7 . 8+$M:.D+ +MMMM, .:N+,MMD: 7MMMMM.
14
+ .MM7:.... 8 .M. 7MMMMM. MMMMZMMMMO.7MMMMM.
15
+ ,?. .. ..8 ,M =MMMMM MMN8$7O8DMM.OMMM~ +.
16
+ N.. . .+ M, .MMMMMOM M8. .OM.MIMMMZ =,.
17
+ =NZI+~, + I8 .MMMMMMM= .=DD, MMMMMI ~~
18
+ O. .N + M. IMMMMMMMMMD ~MN 7MMMMMMM .Z
19
+ .MNZZNMZ. . MM 7MMMMMMMMMMMMMMMMMMMMMMMM, .~M,.
20
+ ID=. . . MMI MMMMMMMMMMMMMMMMMMMMMMMMMD. .+N
21
+ .DMO,ZND+. MMM. :MMMMMMMMN =MMMMMMMMN:ZMMM,. +M~,$OD$
22
+ .MMO... MMM OMMMMMMMM~ . ,I++O7. OMMM= .IM7 . .=..+MNI.
23
+ .8MO :MMM .MMMMMMMMMM. MMMMM= ~D ?MO:7MN...
24
+ +$ON. $NMM .NMMMMMMMMM7. .MMMMM. .8Z. :7N...MM:
25
+ O7?N M+MMNMMMMMMMMMMMMMMMMMN MMMMMM8D. . $, .$8 M ..,$MN~,,.
26
+ N$:=M. .NM.MM. ?MMMMMMO. .. D IO$IM:D.,$O, ,. O.I,Z :M: .+MI
27
+ MO, MMI ..NM8.MM. =. MM..IMN7,. .,IDN7~MMMMMM, N .Z N.M. ,M. =N.
28
+ .MO. MMMMMMMM::MM .: . .M :+I?=D.~.MMMMMMM?,,~INMMNNM+ ~ ~. D8. ,8.
29
+ .M8. MMMMMMMM ZM$. 8 7. ~ M,MM+MMMMMMMMMMMMMMM.. , : ,M. .O+
30
+ .MO. MMMMMMMI.MM, N = .....,IDI. MMMMMMMM8MMMMMM.. = M+ .M.
31
+ .MZ~.MMMMMMM..MM . N .=. ?M,NMMMMMM?~MM$IMMM7MMMMM7 :O M
32
+ M7I.NMMMMM8.$MZ.~ 8 .~, : MMMMMMMMMMMMM.~OOIMMM+MMMMM, .N M
33
+ N=D OMMMMM, MM O .I .7. MMMMMMMMMMMMMMMMMMMMMD7NMM:MMMMN D .M
34
+ O:M,~MMMMD NM? D.=, 8 OMMMMMMMMMMMMMMMMMMMMMZZMM?MMMM: ... Z .M
35
+ +=M$ MMMZ :MN ~, D. I. ~MMMMMMM+,,~I, .NMMMMMZ.MDNMM7 I. . .M.
36
+ .$NM .,.. MM .M :N. :~ .MMMMMM. MMMMMMZ=M,MM. .M. 7M
37
+ .N.MM~ $MZ. O. N? N. ,MMMMMMM. MMMMMMMM+8Z: NZ. . .MI.
38
+ .M.=MMMMN.. .+=..M. M. NMMMMMMMD 8MMMMMMM.MMM. $M. . ?, ~M.
39
+ +. ~MM .. $, M: N: . 7MMMMMMN .~MMMMMM8,MMMMMMMMMMM ..M. :MM
40
+ D N . ,M N NN. I8. $MMMMMMM?.. .?MMMMMMM?OMMMMMMMMMMMMMMMMMMMMI . ...MM$
41
+ 7? .?N.7O DM ,M ZMMMMMMMMMM7.IMMMMMMMMD$MMMMMMMMMMMMMMMMMMMMMMMMZ: IMMN.
42
+ .~MM?.=NM~DM8.. M 8MMMMMMMMMMMMMMMMM7=MMMMMMMMMMMMMMMMMD.IMMMNZZNMMN~
43
+ EOS
@@ -0,0 +1,8 @@
1
+ #!/bin/bash -e
2
+
3
+ git_root=`git rev-parse --show-toplevel`
4
+ source "$git_root/git_hooks/env_vars.sh"
5
+ if [[ -e "$git_root/Gemfile" ]]; then
6
+ echo "Bundling gems..."
7
+ bundle install --system
8
+ fi
@@ -0,0 +1,273 @@
1
+ #!/bin/bash
2
+
3
+ lod_message() {
4
+ cat <<EOS
5
+
6
+ OMM MM$
7
+ MMMM MMMM
8
+ MMM MMO
9
+ =MM MMM
10
+ MMM MMD
11
+ MMMMMMMMMMMMMMMMMMMMM NMMMMMMMMMMMMMMMMMMMMM
12
+ MMMMMMMMMMMMMMMMMMMM NMMMMMMMMMMMMMMMMMMM,
13
+ MMMM? ?MMMM =MMMM MMMMD
14
+ =MMM ?MMM MMMM MMMN
15
+ :MMM MMM NMM= =MMD
16
+ MMM ,MMO MMM DMM
17
+ MMM MMMD MMM DMM? ,MMM, MMD
18
+ MMM MMM$ MMM NMM? MMM MMN
19
+ MMM MMM OMMM =MMO
20
+ MMMN NMM$ MMM MMM
21
+ MMM? MMMM DMMM MMM$
22
+ MMMM: :MMMM DMMMM MMMM$
23
+ =MMMMMMMMMMMMMM? MMMMMMMMMMMMMMM
24
+ MMMMMMMMMMM MMMMMMMMMMM
25
+
26
+
27
+
28
+
29
+ DMMMMMMMMMMMMMMMMMMMMMMM
30
+
31
+ EOS
32
+ }
33
+
34
+ lod_exit() {
35
+ lod_message
36
+ echo $1
37
+ exit 1
38
+ }
39
+
40
+ #
41
+ # Platform-specific features
42
+ #
43
+ git_root=`git rev-parse --show-toplevel`
44
+ source "$git_root/git_hooks/env_vars.sh"
45
+
46
+ if [[ "$my_platform" != "linux" ]]; then
47
+ echo "Non-linux platform detected ($my_platform) so whitespace modification logic suppressed..."
48
+ whitespace_modification=""
49
+ stat_flag=-f
50
+ else
51
+ whitespace_modification="true"
52
+ stat_flag=-c
53
+ fi
54
+
55
+ #
56
+ # Required Project Files
57
+ #
58
+
59
+ REQUIRED_FILES="Gemfile README.md VERSION .gitignore Rakefile LICENSE"
60
+
61
+ #
62
+ # Whitespace and syntax checks
63
+ #
64
+
65
+ whitespace=""
66
+ echo "Checking for syntax errors..."
67
+ commited_files=`git diff-index --name-only HEAD -- 2>&1`
68
+ exit_status=$?
69
+ if [[ "exit_status" -ne 0 && "$commited_files" == "fatal: bad revision 'HEAD'" ]]; then
70
+ commited_files=`find "$git_root" -type f | grep -v ".git/"`
71
+ fi
72
+ for FILE in $commited_files; do
73
+ if test -f "$FILE"; then
74
+ filetype=`file -b $FILE`
75
+ if [[ -n "$whitespace_modification" ]]; then
76
+ if [[ "$filetype" =~ "text" ]]; then
77
+ if [[ -n `grep "\\s\\s*$" $FILE` ]]; then whitespace="$whitespace $FILE"; fi
78
+ # Remove trailing whitespace
79
+ sed -i "s/\\s\\s*$//g" $FILE
80
+ # Remove tabs
81
+ sed -i "s/\t/ /g" $FILE
82
+ # Remove empty line at EOF
83
+ sed -i '${/^ *$/d;}' $FILE
84
+ fi
85
+ fi
86
+
87
+ # If a file is a bash script, check for syntax errors using bash
88
+ if [[ "$FILE" =~ .*\.sh$ || "$filetype" =~ "shell script" ]]; then
89
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
90
+ bash -n "$FILE" 1> /dev/null; fail=$?
91
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
92
+ else
93
+ bash -n "$FILE" 1> /dev/null
94
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
95
+ fi
96
+ fi
97
+
98
+ # If a file is ruby, check for syntax errors using ruby
99
+ if [[ "$FILE" =~ .*\.rb$ ]]; then
100
+ if [[ -n `which ruby 2> /dev/null` ]]; then
101
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
102
+ ruby -c "$FILE" 1> /dev/null; fail=$?
103
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
104
+ else
105
+ ruby -c "$FILE" 1> /dev/null
106
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
107
+ fi
108
+ else
109
+ echo "WARNING: Ruby file found, but syntax cannot be checked without 'ruby' binary"
110
+ fi
111
+ fi
112
+
113
+ # If a file is python, check for syntax errors using python or pypy
114
+ if [[ "$FILE" =~ .*\.py$ ]]; then
115
+ if [[ -n `which python 2> /dev/null` ]]; then
116
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
117
+ python -m py_compile "$FILE" 1> /dev/null; fail=$?
118
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
119
+ else
120
+ python -m py_compile "$FILE" 1> /dev/null
121
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
122
+ fi
123
+ elif [[ -n `which pypy 2> /dev/null` ]]; then
124
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
125
+ pypy -m py_compile "$FILE" 1> /dev/null; fail=$?
126
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
127
+ else
128
+ pypy -m py_compile "$FILE" 1> /dev/null
129
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
130
+ fi
131
+ else
132
+ echo "WARNING: Python file found, but syntax cannot be checked without 'python' or 'pypy' binary"
133
+ fi
134
+ fi
135
+
136
+ # If a file is javascript, check for syntax errors using js
137
+ if [[ "$FILE" =~ .*\.js$ ]]; then
138
+ if [[ -n `which js 2> /dev/null` ]]; then
139
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
140
+ js -C "$FILE" 1> /dev/null; fail=$?
141
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
142
+ else
143
+ js -C "$FILE" 1> /dev/null
144
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
145
+ fi
146
+ else
147
+ echo "WARNING: Javascript file found, but syntax cannot be checked without 'js' binary"
148
+ fi
149
+ fi
150
+
151
+ # If a file is css, check for syntax errors using lessc
152
+ if [[ "$FILE" =~ .*\.css$ ]]; then
153
+ if [[ -n `which lessc 2> /dev/null` ]]; then
154
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
155
+ lessc "$FILE" 1> /dev/null; fail=$?
156
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
157
+ else
158
+ lessc "$FILE" 1> /dev/null
159
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
160
+ fi
161
+ else
162
+ echo "WARNING: CSS file found, but syntax cannot be checked without 'less' npm package"
163
+ fi
164
+ fi
165
+
166
+ # If a file is json, check for syntax errors
167
+ if [[ "$FILE" =~ .*\.json$ ]]; then
168
+ if [[ -n `gem list | grep "json" 2> /dev/null` ]]; then
169
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
170
+ ruby -rrubygems -rjson -e "JSON::parse(IO.read('$FILE'))" 1> /dev/null; fail=$?
171
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
172
+ else
173
+ ruby -rrubygems -rjson -e "JSON::parse(IO.read('$FILE'))" 1> /dev/null
174
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
175
+ fi
176
+ else
177
+ echo "WARNING: JSON file found, but syntax cannot be checked without 'json' rubygem"
178
+ fi
179
+ fi
180
+
181
+ # If a file is yaml, check for syntax errors
182
+ if [[ "$FILE" =~ .*\.yaml$ ]]; then
183
+ if [[ -n `which ruby 2> /dev/null` ]]; then
184
+ if [[ "$fail" -eq 0 || -z "$fail" ]]; then
185
+ ruby -ryaml -e "begin; YAML::load(IO.read('$FILE')); rescue Exception => e; raise if e.is_a?(SyntaxError); end" 1> /dev/null; fail=$?
186
+ if [[ "$fail" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
187
+ else
188
+ ruby -ryaml -e "begin; YAML::load(IO.read('$FILE')); rescue Exception => e; raise if e.is_a?(SyntaxError); end" 1> /dev/null
189
+ if [[ "$?" -ne 0 ]]; then echo "Syntax Error found in '$FILE'"; fi
190
+ fi
191
+ else
192
+ echo "WARNING: YAML file found, but syntax cannot be checked without 'ruby' binary"
193
+ fi
194
+ fi
195
+ fi
196
+ done
197
+ echo "Syntax check complete."
198
+
199
+ #
200
+ # Built-in git checks
201
+ #
202
+ git diff-index --check HEAD -- 2> /dev/null
203
+
204
+ #
205
+ # Check for Syntax Errors
206
+ #
207
+ [[ "$fail" -ne 0 && -n "$fail" ]] && lod_exit "Syntax Errors Found. Aborting commit"
208
+
209
+ #
210
+ # Check for warnings
211
+ #
212
+ fail=0
213
+ for FILE in $commited_files ; do
214
+ if test -e $FILE; then
215
+ # If a file is ruby, check for syntax errors
216
+ if [[ -n `find $FILE -regex ".*\.rb$"` ]]; then
217
+ warnings=`ruby -c "$FILE" 2>&1 | grep -i warn`
218
+ if [[ -n "$warnings" ]]; then fail=1; fi
219
+ fi
220
+ fi
221
+ done
222
+
223
+ [[ "$fail" -ne 0 && -n "$fail" ]] && lod_exit "Syntax Warnings Found. Aborting commit"
224
+
225
+ #
226
+ # Was whitespace modified?
227
+ #
228
+ if [[ -n "$whitespace_modification" ]]; then
229
+ [[ -n "$whitespace" ]] && lod_message
230
+ for FILE in $whitespace; do
231
+ echo "Whitespace problem fixed. Please re-add '$FILE' to your commit"
232
+ done
233
+ [[ -n "$whitespace" ]] && exit 1
234
+ fi
235
+
236
+ #
237
+ # Check that project metadata files exist
238
+ #
239
+ for FILE in $REQUIRED_FILES; do
240
+ test ! -e $FILE && lod_exit "$FILE not present. Aborting commit"
241
+ done
242
+
243
+ #
244
+ # Check that if Gemfile exists, Gemfile.lock exists and is up to date
245
+ #
246
+ if [[ "$REQUIRED_FILES" =~ "Gemfile" ]]; then
247
+ # Bundler
248
+ old_mod_time="0"
249
+ if [[ -e "Gemfile.lock" ]]; then
250
+ old_mod_time=`stat $stat_flag %Z Gemfile.lock`
251
+ fi
252
+
253
+ echo -n Bundling Gemfile...
254
+ bundle install &> /dev/null
255
+ echo Bundle Complete.
256
+
257
+ [[ ! -e "Gemfile.lock" ]] && lod_exit "Gemfile.lock not present. Aborting commit"
258
+ [[ `stat $stat_flag %Z Gemfile.lock` -ne $old_mod_time ]] && lod_exit "Gemfile.lock updated. Please re-add 'Gemfile.lock' to your commit"
259
+ fi
260
+
261
+ #
262
+ # Check that username and user emails are filled properly
263
+ #
264
+ username=`git config --get user.name`
265
+ useremail=`git config --get user.email`
266
+ emaildomain=`echo $useremail | grep -o "[^@]*$"`
267
+ if [[ "$username" == "" ]]; then
268
+ lod_exit "Please set your git user.name by running 'git config user.name <your github username>'"
269
+ elif [[ "$useremail" == "" ]] || ! host "$emaildomain" &> /dev/null; then
270
+ lod_exit "Please set your git user.email by running 'git config user.email <your github email>'"
271
+ fi
272
+
273
+ exit 0
data/install_git_hooks ADDED
@@ -0,0 +1,17 @@
1
+ #!/bin/bash -e
2
+
3
+ if [[ "$SHELL" =~ bash ]]; then
4
+ test -d ".git" || git init
5
+ git_root=`git rev-parse --show-toplevel`
6
+ source "$git_root/git_hooks/env_vars.sh"
7
+
8
+ if test ! -L "$git_root/.git/hooks"; then
9
+ test -d "$git_root/.git/hooks" && rm -rf "$git_root/.git/hooks"
10
+ ln -s "$git_root/git_hooks" "$git_root/.git/hooks"
11
+ echo "Git Hooks installed"
12
+ else
13
+ echo "Git Hooks already installed; nothing to do"
14
+ fi
15
+ else
16
+ echo "ERROR: Please run using bash, not $SHELL"
17
+ fi
@@ -0,0 +1,15 @@
1
+ module Containers
2
+ class Heap
3
+ def to_a
4
+ ret = @stored.to_a
5
+ ret.sort! { |a,b| (@compare_fn[a[0],b[0]] ? -1 : 1) }
6
+ ret.map! { |k,v| v.map { |f| f.value } }
7
+ ret.flatten!
8
+ ret
9
+ end
10
+
11
+ def each(*args, &block)
12
+ to_a.each(*args, &block)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Containers
2
+ class PriorityQueue
3
+ def to_a
4
+ @heap.to_a
5
+ end
6
+
7
+ def each(*args, &block)
8
+ @heap.each(*args, &block)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ automatic_require