nrser-rash 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +104 -0
- data/.gitmodules +4 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/.yardopts +7 -0
- data/Gemfile +10 -0
- data/README.md +4 -0
- data/Rakefile +6 -0
- data/bash/source-profile.sh +17 -0
- data/dev/bin/.gitkeep +0 -0
- data/dev/bin/console +33 -0
- data/dev/bin/rake +3 -0
- data/dev/bin/rash +16 -0
- data/dev/bin/rspec +3 -0
- data/dev/ref/autocomplete.rb +62 -0
- data/dev/scratch/apps.AppleScript +14 -0
- data/dev/scratch/blocks.rb +232 -0
- data/dev/scratch/decorating_methods.rb +18 -0
- data/dev/scratch/functions.sh +80 -0
- data/dev/scratch/if.sh +16 -0
- data/dev/scratch/inc.rb +3 -0
- data/dev/scratch/inheriting_env/main.rb +44 -0
- data/dev/scratch/inheriting_env/sub.rb +9 -0
- data/dev/scratch/load_main.rb +5 -0
- data/dev/scratch/load_module.rb +19 -0
- data/dev/scratch/lsregister-dump.txt +30165 -0
- data/dev/scratch/main.rb +4 -0
- data/dev/scratch/optparse.rb +43 -0
- data/dev/scratch/overridding-cd.sh +53 -0
- data/dev/scratch/path.sh +22 -0
- data/dev/scratch/pirating_methods.rb +62 -0
- data/dev/scratch/profile.sh +624 -0
- data/dev/scratch/return.sh +5 -0
- data/dev/scratch/source_rvm.sh +11 -0
- data/dev/scratch/stub-names/project/test +3 -0
- data/exe/rash +4 -0
- data/lib/nrser/rash/cli/call.rb +137 -0
- data/lib/nrser/rash/cli/help.rb +29 -0
- data/lib/nrser/rash/cli/list.rb +36 -0
- data/lib/nrser/rash/cli/run.rb +54 -0
- data/lib/nrser/rash/cli.rb +21 -0
- data/lib/nrser/rash/config.rb +172 -0
- data/lib/nrser/rash/core_ext/object.rb +55 -0
- data/lib/nrser/rash/formatters.rb +105 -0
- data/lib/nrser/rash/functions.rb +154 -0
- data/lib/nrser/rash/helpers.rb +53 -0
- data/lib/nrser/rash/testing.rb +305 -0
- data/lib/nrser/rash/util.rb +260 -0
- data/lib/nrser/rash/version.rb +17 -0
- data/lib/nrser/rash.rb +40 -0
- data/nrser-rash.gemspec +48 -0
- data/tmp/.gitkeep +0 -0
- metadata +248 -0
data/dev/scratch/main.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# play with optparse
|
2
|
+
|
3
|
+
# A script that will pretend to resize a number of images
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
# This hash will hold all of the options
|
7
|
+
# parsed from the command-line by
|
8
|
+
# OptionParser.
|
9
|
+
options = {}
|
10
|
+
|
11
|
+
optparse = OptionParser.new do |opts|
|
12
|
+
|
13
|
+
# Define the options, and what they do
|
14
|
+
options[:verbose] = false
|
15
|
+
opts.on( '-v', '--verbose', 'Output more information' ) do
|
16
|
+
options[:verbose] = true
|
17
|
+
end
|
18
|
+
|
19
|
+
options[:quick] = false
|
20
|
+
opts.on( '-q', '--quick', 'Perform the task quickly' ) do
|
21
|
+
options[:quick] = true
|
22
|
+
end
|
23
|
+
|
24
|
+
options[:logfile] = nil
|
25
|
+
opts.on( '-l', '--logfile FILE', 'Write log to FILE' ) do |file|
|
26
|
+
options[:logfile] = file
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
puts ARGV.inspect
|
31
|
+
|
32
|
+
# Parse the command-line. Remember there are two forms
|
33
|
+
# of the parse method. The 'parse' method simply parses
|
34
|
+
# ARGV, while the 'parse!' method parses ARGV and removes
|
35
|
+
# any options found there, as well as any parameters for
|
36
|
+
# the options. What's left is the list of files to resize.
|
37
|
+
optparse.parse!
|
38
|
+
|
39
|
+
puts "Being verbose" if options[:verbose]
|
40
|
+
puts "Being quick" if options[:quick]
|
41
|
+
puts "Logging to file #{options[:logfile]}" if options[:logfile]
|
42
|
+
|
43
|
+
p ARGV
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# want to override `cd` so that it will try and change to a local github repo
|
2
|
+
# iff regular `cd` fails...
|
3
|
+
|
4
|
+
function alias_function {
|
5
|
+
local ORIG_FUNC=$(declare -f $1)
|
6
|
+
local NEWNAME_FUNC="$2${ORIG_FUNC#$1}"
|
7
|
+
eval "$NEWNAME_FUNC"
|
8
|
+
}
|
9
|
+
|
10
|
+
function is_function {
|
11
|
+
local TYPE=$(type "$1")
|
12
|
+
if [[ "$TYPE" =~ "is a function" ]]; then
|
13
|
+
return 0
|
14
|
+
else
|
15
|
+
return 1
|
16
|
+
fi
|
17
|
+
}
|
18
|
+
|
19
|
+
is_function "cd"
|
20
|
+
if [ $? -ne 0 ]; then
|
21
|
+
alias_function "cd" "old_cd"
|
22
|
+
else
|
23
|
+
function old_cd {
|
24
|
+
builtin cd "$@"
|
25
|
+
}
|
26
|
+
fi
|
27
|
+
|
28
|
+
function cd {
|
29
|
+
# first, try to execute the `cd`
|
30
|
+
old_cd "$@"
|
31
|
+
local RTN="$?"
|
32
|
+
if [[ $RTN != 0 ]]; then
|
33
|
+
echo "looking for a project..." 1>&2
|
34
|
+
if rash call 'Project.resolve_repo' "$1"; then
|
35
|
+
old_cd `rash call 'Project.dir' $1`
|
36
|
+
return $?
|
37
|
+
fi
|
38
|
+
fi
|
39
|
+
return $RTN
|
40
|
+
# echo "cd'ing into '$1'"
|
41
|
+
# # see if it looks like `$1` will be a directory we can change to from
|
42
|
+
# # here, which takes precendence
|
43
|
+
# if [ ! -d $1 ]; then
|
44
|
+
# # it doesn't look like it's a dir, so try to
|
45
|
+
# rash call 'Project.cd' "$1" --RASH_PRINT_ERRORS=0
|
46
|
+
# if [ $? -ne 0 ]; then
|
47
|
+
# echo "using old_cd"
|
48
|
+
# old_cd "$1"
|
49
|
+
# else
|
50
|
+
# echo "using Project.cd"
|
51
|
+
# Project.cd "$1"
|
52
|
+
# fi
|
53
|
+
}
|
data/dev/scratch/path.sh
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
function split {
|
2
|
+
local IFS=:
|
3
|
+
local array
|
4
|
+
set -f
|
5
|
+
array=( $@ )
|
6
|
+
set +f
|
7
|
+
printf '%s\n' "${array[@]}"
|
8
|
+
}
|
9
|
+
|
10
|
+
# split $PATH
|
11
|
+
|
12
|
+
function path_prepend {
|
13
|
+
export PATH="$1:$PATH"
|
14
|
+
}
|
15
|
+
|
16
|
+
function path_append {
|
17
|
+
export PATH="$PATH:$1"
|
18
|
+
}
|
19
|
+
|
20
|
+
path_prepend "blah"
|
21
|
+
|
22
|
+
echo $PATH
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# define a module with a class method
|
2
|
+
module M
|
3
|
+
def self.f
|
4
|
+
puts 'success!'
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.h
|
8
|
+
puts 'and again!'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# this allows it be invoked via
|
13
|
+
M.f
|
14
|
+
|
15
|
+
# but now we want to make it available globally
|
16
|
+
#
|
17
|
+
# [1]: http://softwarebyjosh.com/2012/01/21/Pirating-Ruby-Methods-For-Fun-And-Profit.html
|
18
|
+
# [2]: http://stackoverflow.com/questions/4390329/how-do-we-copy-singleton-methods-between-different-ruby-classes
|
19
|
+
# [3]: http://stackoverflow.com/questions/3782026/how-do-i-dynamically-define-a-method-as-private
|
20
|
+
|
21
|
+
main = self
|
22
|
+
# pirate = main.class.new.extend(M)
|
23
|
+
M.singleton_methods.each do |name|
|
24
|
+
# main.class.send(:define_method, name, &M.method(name))
|
25
|
+
Object.instance_eval do
|
26
|
+
define_method name, &M.method(name)
|
27
|
+
private name
|
28
|
+
end
|
29
|
+
# M.method(name).unbind.bind(main)
|
30
|
+
end
|
31
|
+
|
32
|
+
# now, will this work?
|
33
|
+
f
|
34
|
+
# after much fiddling, it seems so
|
35
|
+
|
36
|
+
# however, we should not be able to invoke f on an `Object` instance
|
37
|
+
begin
|
38
|
+
Object.new.f
|
39
|
+
rescue NoMethodError => e
|
40
|
+
puts "success! failed to call `Object.new.f` with: #{ e }"
|
41
|
+
end
|
42
|
+
|
43
|
+
# this matches behavoir when defining on the top-level
|
44
|
+
def g
|
45
|
+
puts 'blah'
|
46
|
+
end
|
47
|
+
begin
|
48
|
+
Object.new.g
|
49
|
+
rescue NoMethodError => e
|
50
|
+
puts "success! failed to call `Object.new.g` with: #{ e }"
|
51
|
+
end
|
52
|
+
|
53
|
+
# note that we can use this to fuck up methods on `Object`:
|
54
|
+
def to_s
|
55
|
+
"hey!"
|
56
|
+
end
|
57
|
+
class C; end
|
58
|
+
begin
|
59
|
+
C.new.to_s
|
60
|
+
rescue NoMethodError => e
|
61
|
+
puts "fuck, we broke `Object.to_s`"
|
62
|
+
end
|