nrser-rash 0.2.0
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.
- 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
|