yac 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/format.rb +8 -6
- data/lib/git.rb +41 -0
- data/lib/yac.rb +33 -56
- data/yac.gemspec +2 -2
- metadata +2 -1
data/lib/format.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
class Symbol
|
2
|
+
def to_proc
|
3
|
+
Proc.new { |*args| args.shift.__send__(self, *args) }
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
1
7
|
module Format
|
2
8
|
Pdf_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate PDF Document"
|
3
9
|
Image_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate Image Document"
|
@@ -47,19 +53,15 @@ module Format
|
|
47
53
|
puts Doc_Error unless system("#{Yac::CONFIG["editor"] || ENV['EDITOR'] ||'vim'} \"#{file}\" 2>/dev/null")
|
48
54
|
end
|
49
55
|
|
50
|
-
def clean_filename(f)
|
51
|
-
return f.sub(/^(.*)?(main|private)\/(.*)/,'\3').sub(/^@/,'')
|
52
|
-
end
|
53
|
-
|
54
56
|
def colorful(stuff,level="text",line_break = true)
|
55
57
|
stuff = empha(stuff,level)
|
56
|
-
print "\
|
58
|
+
print "\e[%sm%s\e[0m " % [Yac::CONFIG[level],stuff.rstrip]
|
57
59
|
print "\n" if line_break
|
58
60
|
end
|
59
61
|
|
60
62
|
def empha(stuff,level="text",empha_regexp=/(@@@(.*)@@@)/)
|
61
63
|
stuff.to_s.scan(empha_regexp) do |x|
|
62
|
-
return stuff.gsub(x[0],"\
|
64
|
+
return stuff.gsub(x[0],"\e[0m\e[#{Yac::CONFIG["empha"].to_s}m%s\e[0m\e[%sm" % [x[1],Yac::CONFIG[level]])
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
data/lib/git.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
class Git
|
2
|
+
def initialize(path)
|
3
|
+
@working_path = path
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.clone(from,path,name)
|
7
|
+
`cd #{path} && git clone #{from} #{name}`
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.init(path)
|
11
|
+
`cd #{path} && git init`
|
12
|
+
end
|
13
|
+
|
14
|
+
def mv(orig,new,with_commit = true)
|
15
|
+
`cd '#@working_path' && git mv #{orig} #{new}`
|
16
|
+
self.commit("#{clean_name(orig)} Renamed to #{clean_name(new)}") if with_commit
|
17
|
+
end
|
18
|
+
|
19
|
+
def add(file,with_commit = true)
|
20
|
+
`cd '#@working_path' && git add file`
|
21
|
+
self.commit("#{clean_name(file)} Added") if with_commit
|
22
|
+
end
|
23
|
+
|
24
|
+
def edit(file,with_commit = true)
|
25
|
+
`cd '#@working_path' && git add file`
|
26
|
+
self.commit("#{clean_name(file)} Updated") if with_commit
|
27
|
+
end
|
28
|
+
|
29
|
+
def rm(file,with_commit=true)
|
30
|
+
`cd '#@working_path' && git rm -f file`
|
31
|
+
self.commit("#{clean_name(file)} Removed") if with_commit
|
32
|
+
end
|
33
|
+
|
34
|
+
def commit(msg,*args)
|
35
|
+
`cd '#@working_path' && git commit #{args.to_s} -m '#{msg}'`
|
36
|
+
end
|
37
|
+
|
38
|
+
def clean_name(f)
|
39
|
+
return f.sub(/^(.*)?\/(main|private)\/(.*)/,'\3').sub(/^@/,'')
|
40
|
+
end
|
41
|
+
end
|
data/lib/yac.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
|
-
%w(
|
3
|
-
|
2
|
+
%w(git fileutils yaml format).each {|f| require f}
|
4
3
|
module Yac
|
5
4
|
include Format
|
6
5
|
extend self
|
@@ -14,8 +13,8 @@ module Yac
|
|
14
13
|
CONFIG["root"] ||= File.join(ENV['HOME'],".yac")
|
15
14
|
|
16
15
|
@main_path, @pri_path = File.join(CONFIG["root"],"/main/"), File.join(CONFIG["root"],"/private/")
|
17
|
-
@main_git = Git.
|
18
|
-
@pri_git = Git.
|
16
|
+
@main_git = Git.new(@main_path)
|
17
|
+
@pri_git = Git.new(@pri_path)
|
19
18
|
|
20
19
|
def new(args)
|
21
20
|
init unless File.exist?(@main_path) && File.exist?(@pri_path)
|
@@ -47,13 +46,12 @@ module Yac
|
|
47
46
|
else
|
48
47
|
if CONFIG["#{name}"] && CONFIG["#{name}"]['clone-from']
|
49
48
|
colorful("Initialize #{name} repository from #{CONFIG[name]['clone-from']} to #{CONFIG['root']}/#{name}","notice")
|
50
|
-
Git.clone(CONFIG["#{name}"]['clone-from'],
|
49
|
+
Git.clone(CONFIG["#{name}"]['clone-from'],CONFIG['root'],name)
|
51
50
|
else
|
52
51
|
colorful("Initialize #{name} repository from scratch to #{CONFIG['root']}/#{name}","notice")
|
52
|
+
prepare_dir(path)
|
53
53
|
Git.init(path)
|
54
54
|
end
|
55
|
-
@main_git = Git.open(@main_path) if File.exist?(@main_path)
|
56
|
-
@pri_git = Git.open(@pri_path)if File.exist?(@pri_path)
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
@@ -128,35 +126,34 @@ module Yac
|
|
128
126
|
#You can use $ yac mv linux.ch linux/ to rename linux.ch to linux/linux.ch
|
129
127
|
new_filename = args[1].sub(/\/$/,file.sub(/.*\/(.*)(\..*)/,'/\1')).sub(/^(@)?/,file =~ /^#{@main_path}/ ? "@":"")
|
130
128
|
new_name = add_file(new_filename ,file.sub(/.*(\..*)/,'\1'))
|
131
|
-
if confirm("You Are Renaming #{file} To #{new_name}")
|
129
|
+
if new_name && confirm("You Are Renaming #{file} To #{new_name}")
|
132
130
|
prepare_dir(new_name)
|
133
|
-
|
134
|
-
@working_git.add
|
135
|
-
@working_git.commit_all("#{clean_filename(file)} Renamed to #{clean_filename(new_name)}")
|
131
|
+
@working_git.mv(file,new_name)
|
136
132
|
end
|
137
133
|
end
|
138
134
|
|
139
135
|
protected
|
140
136
|
def add_single(args)
|
141
137
|
file = add_file(args)
|
142
|
-
if confirm("You Are Adding #{file}")
|
138
|
+
if file && confirm("You Are Adding #{file}")
|
143
139
|
edit_text(file)
|
144
|
-
@working_git.add
|
145
|
-
@working_git.commit_all("#{clean_filename(file)} Added")
|
140
|
+
@working_git.add(file)
|
146
141
|
end
|
147
142
|
end
|
148
143
|
|
149
144
|
def add_file(args,suffix = ".ch")
|
150
|
-
if args.include?('/') && args =~ /(@?)(?:(.*)\/)(.+)/
|
151
|
-
path = $1.empty? ? @pri_path : @main_path
|
145
|
+
if args.include?('/') && args =~ /(@?)(?:(.*)\/)(.+)/ #choose directory
|
146
|
+
path = $1.empty? ? @pri_path : @main_path #choose git path
|
152
147
|
all_path = %x{
|
153
|
-
find #{path} -type d -iwholename '#{path}*#{$2}*' -not -iwholename '*.git*'| sed 's
|
154
|
-
}.to_a
|
155
|
-
|
156
|
-
|
157
|
-
|
148
|
+
find #{path} -type d -iwholename '#{path}*#{$2}*' -not -iwholename '*.git*'| sed 's/^.*\\/\\(private\\|main\\)\\//#{$1}/'
|
149
|
+
}.to_a.map(&:strip).concat([$1+$2]).uniq
|
150
|
+
|
151
|
+
colorful("Which directory do you want to use:","notice")
|
152
|
+
choosed_path = choose_one(all_path)
|
153
|
+
return full_path(choosed_path + "/" + $3 + suffix) if choosed_path
|
154
|
+
else
|
155
|
+
return full_path(args+suffix)
|
158
156
|
end
|
159
|
-
file = full_path(args+suffix)
|
160
157
|
end
|
161
158
|
|
162
159
|
def show_single(args)
|
@@ -169,53 +166,43 @@ module Yac
|
|
169
166
|
def rm_single(args)
|
170
167
|
file = search_name(args,"Remove")
|
171
168
|
if confirm("You Are Removing #{file}.")
|
172
|
-
|
173
|
-
@working_git.remove(file)
|
174
|
-
@working_git.commit_all("#{clean_filename(file)} Removed")
|
175
|
-
rescue Git::GitExecuteError
|
176
|
-
FileUtils.rm_rf(file)
|
177
|
-
end
|
169
|
+
@working_git.rm(file)
|
178
170
|
end
|
179
171
|
end
|
180
172
|
|
181
173
|
def edit_single(args)
|
182
174
|
file = search_name(args,"Edit")
|
183
175
|
edit_file(file)
|
184
|
-
@working_git.
|
185
|
-
@working_git.commit_all("#{clean_filename(file)} Updated")
|
176
|
+
@working_git.edit(file)
|
186
177
|
end
|
187
178
|
|
188
179
|
def search_name(args,msg = nil)
|
189
180
|
path = (args =~ /^(@)/) ? [@main_path] : [@main_path , @pri_path]
|
190
181
|
result = []
|
191
182
|
path.each do |x|
|
192
|
-
result.concat(`find "#{x}" -type f -iwholename '#{x}*#{args.sub(/^@/,'').strip}*' -not -iwholename '*.git*'| sed 's
|
183
|
+
result.concat(`find "#{x}" -type f -iwholename '#{x}*#{args.sub(/^@/,'').strip}*' -not -iwholename '*.git*'| sed 's/^.*\\/\\(private\\|main\\)\\//#{x=~/main/ ? '@':'' }/'`.to_a)
|
193
184
|
end
|
194
|
-
#For loop show filename
|
195
|
-
(format_file(full_path(result[0]));return nil) if msg =~ /show/i && result.size == 1
|
196
185
|
|
197
186
|
return result.empty? ? (colorful("Nothing Found About < #{args} >","warn")) :
|
198
187
|
(colorful("The Results About < #{args} > To #{msg || "Operate"} :","notice");full_path(choose_one(result)))
|
199
188
|
end
|
200
189
|
|
201
190
|
def search_content(args)
|
202
|
-
args.sub!(/^"(.*)"/,'\1')
|
191
|
+
args.sub!(/^"(.*)"/,'\1') #Remove the " for input Regex
|
203
192
|
result = `cd "#{@pri_path}" && grep -n -i -P '#{args}' -R *.ch 2>/dev/null`.to_a
|
204
193
|
result.concat(`cd "#{@main_path}" && grep -n -i -P '#{args}' -R *.ch 2>/dev/null | sed 's/^/@/g'`.to_a)
|
205
194
|
all_result = []
|
206
195
|
result.each do |x|
|
207
196
|
stuff = x.split(':',3)
|
208
197
|
colorful(stuff[0],"filename",false)
|
209
|
-
print " "
|
210
198
|
colorful(stuff[1],"line_number",false)
|
211
|
-
print " "
|
212
199
|
format_section(empha(stuff[2],nil,/((#{args}))/i),true)
|
213
200
|
all_result.concat(stuff[0].to_a)
|
214
201
|
end
|
215
202
|
all_result.uniq!
|
216
203
|
loop do
|
217
|
-
all_result.size > 1 ? (file = full_path(choose_one(all_result))) : (format_file(full_path(all_result[0]));break)
|
218
204
|
colorful("All files Contain #{args.strip},Choose one to show","notice")
|
205
|
+
file = full_path(choose_one(all_result))
|
219
206
|
file ? format_file(file) : break
|
220
207
|
end
|
221
208
|
end
|
@@ -234,39 +221,29 @@ module Yac
|
|
234
221
|
|
235
222
|
def confirm(*msg)
|
236
223
|
colorful("#{msg.to_s}\nAre You Sure (Y/N) (q to quit):","notice",false)
|
237
|
-
|
238
|
-
when /n|q/i
|
239
|
-
return false
|
240
|
-
when /y/i
|
241
|
-
return true
|
242
|
-
else
|
243
|
-
colorful("Please Input A Valid String,","warn")
|
244
|
-
confirm(msg)
|
245
|
-
end
|
224
|
+
return STDIN.gets.to_s =~ /n|q/i ? false : true
|
246
225
|
end
|
247
226
|
|
248
|
-
# Choose one file to operate
|
249
227
|
def choose_one(stuff)
|
250
|
-
if stuff.size
|
251
|
-
return stuff[0]
|
252
|
-
elsif stuff.size > 1
|
228
|
+
if stuff.size > 0
|
253
229
|
stuff.each_index do |x|
|
254
230
|
colorful("%2s" % (x+1).to_s,"line_number",false)
|
255
|
-
printf "
|
256
|
-
print "\n" if (x+1)%
|
231
|
+
printf "%-22s\t" % [stuff[x].rstrip]
|
232
|
+
print "\n" if (x+1)%3 == 0
|
257
233
|
end
|
258
234
|
printf "\n"
|
259
235
|
num = choose_range(stuff.size)
|
260
|
-
return stuff[num-1].to_s.strip
|
236
|
+
return stuff[num-1].to_s.strip #return the filename
|
261
237
|
end
|
262
238
|
rescue #Rescue for user input q to quit
|
263
239
|
end
|
264
240
|
|
265
|
-
#choose a valid
|
241
|
+
#choose a valid number
|
266
242
|
def choose_range(size)
|
267
243
|
colorful("Please Input A Valid Number To Choose (1..#{size}) (q to quit): ","notice",false)
|
268
244
|
num = STDIN.gets
|
269
|
-
return if num =~ /q/i
|
270
|
-
|
245
|
+
return false if num =~ /q/i
|
246
|
+
choosed_num = num.strip.empty? ? 1 : num.to_i
|
247
|
+
(1..size).member?(choosed_num) ? (return choosed_num) : choose_range(size)
|
271
248
|
end
|
272
249
|
end
|
data/yac.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
GEM = "yac"
|
2
|
-
VER = "1.0
|
2
|
+
VER = "1.1.0"
|
3
3
|
DATE = %q{2008-10-28}
|
4
4
|
AUTHOR = "Jinzhu Zhang"
|
5
5
|
EMAIL = "wosmvp@gmail.com"
|
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.autorequire = 'yac'
|
26
26
|
s.executables = ["yac"]
|
27
27
|
|
28
|
-
s.files = %w[README.rdoc yac.gemspec resources/yacrc bin/yac lib/yac.rb lib/format.rb]
|
28
|
+
s.files = %w[README.rdoc yac.gemspec resources/yacrc bin/yac lib/yac.rb lib/format.rb lib/git.rb]
|
29
29
|
|
30
30
|
#s.has_rdoc = true
|
31
31
|
s.rdoc_options = ["--quiet", "--title", "YAC => Yet Another Cheat", "--opname", "index.html", "--line-numbers", "--main", "README.rdoc", "--inline-source"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jinzhu Zhang
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- bin/yac
|
38
38
|
- lib/yac.rb
|
39
39
|
- lib/format.rb
|
40
|
+
- lib/git.rb
|
40
41
|
has_rdoc: false
|
41
42
|
homepage: http://www.zhangjinzhu.com
|
42
43
|
post_install_message:
|