easyoperate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.1.0 2008-12-13
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,13 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ bin/eo
6
+ example/eorc
7
+ lib/easyoperate.rb
8
+ lib/eo.rb
9
+ lib/eo/eo.rb
10
+ lib/eo/scm.rb
11
+ test/test_easyoperate.rb
12
+ test/test_eo_cli.rb
13
+ test/test_helper.rb
data/README.rdoc ADDED
@@ -0,0 +1,39 @@
1
+ = EasyOperate < eo >
2
+
3
+ == INSTALL:
4
+ $ sudo gem install easyoperate
5
+
6
+ == Why && How To Use:
7
+ ## ~/.eorc
8
+ vim-rails:
9
+ path: ~/vim/vim-rails/ # Local path
10
+
11
+ repo: git://github.com/tpope/vim-rails.git # Remote path
12
+
13
+ autorun: 'puts "Thanks to Tim Pope";cp_autoload;cp_plugin'
14
+ # Splited by ';' , when init or update,'autorun' will autorun
15
+
16
+ scm: # svn/git,default is git
17
+
18
+ cmd: # Where define your methods
19
+ cp_autoload: `cp autoload/rails.vim ~/.vim/autoload/`
20
+ cp_plugin: `cp plugin/rails.vim '~/.vim/plugin/`
21
+ example: 'puts "Hi,This is example method"'
22
+ ##
23
+ $ eo -i vim-rails => Clone vim-rails from github to the path your specify
24
+ $ eo -c vim-rails => Select vim-rails to operate
25
+ $ eo -u vim-rails => Update vim-rails
26
+ $ eo -u hi => Update all repository match /hi/,nothing for all
27
+
28
+ == More Help:
29
+
30
+ <shell>
31
+ $ eo -h for help
32
+ <program>
33
+ $ h for help
34
+
35
+
36
+ Copyright (c) 2008 Jinzhu Zhang (GPL3)
37
+
38
+ Web : http://www.zhangjinzhu.com
39
+ Email: wosmvp (no-spam) gmail (no-spam) com
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/easyoperate'
3
+
4
+ $hoe = Hoe.new('easyoperate', Easyoperate::VERSION) do |p|
5
+ p.developer('Jinzhu Zhang', 'wosmvp@gmail.com')
6
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
7
+ p.rubyforge_name = "easyoperate"
8
+ p.url = "http://www.zhangjinzhu.com"
9
+ p.description = "Eo_oE"
10
+
11
+ p.extra_dev_deps = [
12
+ ['newgem', ">= #{::Newgem::VERSION}"]
13
+ ]
14
+
15
+ p.clean_globs |= %w[tmp *.log]
16
+ path = "\#{p.rubyforge_name}/\#{p.name}"
17
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
18
+ p.rsync_args = '-av --delete --ignore-errors'
19
+ end
20
+
21
+ require 'newgem/tasks' # load /tasks/*.rake
22
+ Dir['tasks/**/*.rake'].each { |t| load t }
23
+
24
+ # TODO - want other tests/tasks run by default? Add them to the list
25
+ # task :default => [:spec, :features]
data/bin/eo ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2008. GPL3.
4
+ # Author: Jinzhu Zhang
5
+
6
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/easyoperate")
7
+
8
+ require "eo"
9
+
10
+ Eo.execute(STDOUT, ARGV)
data/example/eorc ADDED
@@ -0,0 +1,10 @@
1
+ # hack hack hack, rename to ~/.eorc
2
+ vim-rails:
3
+ path: ~/vim/vim-rails/ # Local path
4
+ repo: git://github.com/tpope/vim-rails.git # Remote path
5
+ autorun: 'puts "Thanks to Tim Pope";cp_autoload;cp_plugin' # Splited by ;
6
+ scm: # svn/git,default is git
7
+ cmd: # Where can define your methods
8
+ cp_autoload: `cp autoload/rails.vim ~/.vim/autoload/`
9
+ cp_plugin: `cp plugin/rails.vim '~/.vim/plugin/`
10
+ example: 'puts "Hi,This is example method"'
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+
3
+ module Easyoperate
4
+ VERSION = '0.1.0'
5
+ end
data/lib/eo.rb ADDED
@@ -0,0 +1,49 @@
1
+ %w(optparse yaml eo/eo).each {|f| require f}
2
+
3
+ class Eo
4
+
5
+ def self.execute(stdout, arguments=[])
6
+
7
+ parser = OptionParser.new do |opts|
8
+ opts.banner = <<-BANNER.gsub(/^ /,'')
9
+ Usage: #{File.basename($0)} [options]
10
+
11
+ Options are:
12
+ BANNER
13
+
14
+ opts.on_tail("-h", "--help","Show this help message.") do |args|
15
+ stdout.puts opts; exit
16
+ end
17
+
18
+ opts.on_tail("-v", "--version","Show version information.") do
19
+ puts Easyoperate::VERSION; exit
20
+ end
21
+
22
+ opts.on("-u [ARGS]", "--update","Update Repository. <Regexp>") do |args|
23
+ self.update(args)
24
+ end
25
+
26
+ opts.on("-s [ARGS]", "--show","Show All Repositories. <Regexp>") do |args|
27
+ self.show(args)
28
+ end
29
+
30
+ opts.on("-c [ARGS]", "--choose","Choose Some Repository.") do |args|
31
+ self.choose(args)
32
+ end
33
+
34
+ opts.on("-i [ARGS]", "--init","Initialize Repository. <Regexp>") do |args|
35
+ self.init(args)
36
+ end
37
+
38
+ if arguments.empty?
39
+ self.run
40
+ else
41
+ begin
42
+ opts.parse!(arguments)
43
+ rescue OptionParser::InvalidOption
44
+ puts "\e[31m;(\tError\e[0m \n\tHelp?\t\e[33m$ eo -h \e[31m;)\e[0m"
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
data/lib/eo/eo.rb ADDED
@@ -0,0 +1,138 @@
1
+ require 'eo/scm'
2
+ class Eo
3
+ Repo = Hash.new
4
+
5
+ Config_file = File.join("#{ENV['HOME']}",".eorc")
6
+
7
+ unless File.exist?(Config_file)
8
+ puts " \e[31m;( No config file\e[0m \n\nexample file:"
9
+ puts File.read(File.join(File.dirname(__FILE__),'../../example/eorc'))
10
+ exit
11
+ end
12
+
13
+ YAML.load_file(Config_file).each_pair do |keys,value|
14
+ Repo[keys] = Scm.new.merge(value)
15
+ end
16
+
17
+ class << self
18
+ def run
19
+ loop do
20
+ printf("\e[33mInput Commands (q to quit| h for help) : \e[0m")
21
+ input = STDIN.gets.split(' ',2)
22
+ input[1].strip!
23
+ case input[0].to_s
24
+ when /S/i then show(input[1])
25
+ when /C/i then choose(input[1])
26
+ when /U/i then update(input[1])
27
+ when /I/i then init(input[1])
28
+ when /Q/i then exit(0)
29
+ else help
30
+ end
31
+ end
32
+ end
33
+
34
+ def help
35
+ puts "Usage:"
36
+ puts " S /args/ : Show matched repositories <Regexp>"
37
+ puts " C /args/ : Choose Some Repository <Regexp>"
38
+ puts " U /args/ : Update matched Repository <Regexp>"
39
+ puts " I /args/ : Initialize matched Repository <Regexp>"
40
+ puts " Q : Quit"
41
+ puts " H : Show this help message."
42
+ puts "e.g:\n \e[32m s v.*m\e[0m"
43
+ end
44
+
45
+ def show(*args)
46
+ repos = pick(args,false)
47
+ puts "\e[33mAll Repo match < #{args} > :\e[0m"
48
+ repos.each_index do |x|
49
+ printf "\e[32m %-15s\t\e[0m" % [repos[x].rstrip]
50
+ printf("\n") if (x+1)%4==0
51
+ end
52
+ puts "\n" if repos.size%4 != 0
53
+ end
54
+
55
+ def choose(*args)
56
+ repos = pick(args)
57
+ if repos && repos = repos.to_s
58
+ return false unless exist_path(repos)
59
+ loop do
60
+ printf("\e[01;34m#{repos.first} >> \e[0m")
61
+ input = STDIN.gets.strip
62
+ break if input =~ /\A\s*q\s*\Z/
63
+ exit if input =~ /\A\s*Q\s*\Z/
64
+ Repo[repos].send(input) unless input.empty?
65
+ end
66
+ end
67
+ end
68
+
69
+ def init(*args)
70
+ repos = pick(args,false)
71
+ repos.each do |x|
72
+ if File.exist?(File.expand_path(Repo[x]['path']))
73
+ puts "\e[32m %-18s: already Initialized\e[0m" % [x]
74
+ next
75
+ end
76
+ puts "\e[32m %-18s: Initializing\e[0m" % [x]
77
+ Repo[x].init
78
+ end
79
+ end
80
+
81
+ def update(*args)
82
+ repos = pick(args,false)
83
+ repos.each do |x|
84
+ puts "\e[32mUpdating #{Repo[x]['path']} :\e[0m"
85
+ next if !exist_path(x)
86
+ Repo[x].update
87
+ end
88
+ end
89
+
90
+ protected
91
+ def pick(args,only_one=true)
92
+ repos = Repo.keys.grep(/#{args}/)
93
+ if only_one
94
+ if repos.size == 1
95
+ return repos
96
+ elsif repos.empty?
97
+ printf("\e[31mSorry,But No Result.\n\e[0m")
98
+ return false
99
+ else
100
+ return choose_one(repos)
101
+ end
102
+ else
103
+ return repos
104
+ end
105
+ end
106
+
107
+ def choose_one(args)
108
+ puts "\e[33mPlease Choose One of them : \e[0m"
109
+
110
+ args.each_index do |x|
111
+ printf "\e[32m%-2d\e[0m %-15s\t" % [x+1,args[x].rstrip]
112
+ printf "\n" if (x+1)%4 == 0
113
+ end
114
+ printf "\n" if args.size%4 != 0
115
+
116
+ num = choose_range(args.size)
117
+ return num ? [args[num-1]] : false
118
+ end
119
+
120
+ def choose_range(size)
121
+ printf "\e[33mPlease Input A Valid Number (1..#{size}) (q to quit): \e[0m"
122
+ num = STDIN.gets
123
+ return false if num =~ /q/i
124
+ choosed_num = num.strip.empty? ? 1 : num.to_i
125
+ (1..size).member?(choosed_num) ? (return choosed_num) : choose_range(size)
126
+ end
127
+
128
+ def exist_path(repos)
129
+ if File.exist?(File.expand_path(Repo[repos]['path']))
130
+ Dir.chdir(File.expand_path(Repo[repos]['path']))
131
+ else
132
+ puts "\n l.l,Have You init \e[33m#{repos}\e[0m Repository?\n\n"
133
+ return false
134
+ end
135
+ end
136
+
137
+ end
138
+ end
data/lib/eo/scm.rb ADDED
@@ -0,0 +1,93 @@
1
+ class Scm < Hash
2
+
3
+ def help
4
+ if self['cmd'] && cmd = self['cmd'].keys
5
+ printf("Your Defined Methods :\n")
6
+ cmd.each_index do |x|
7
+ puts " %-18s: %s" % [cmd[x].rstrip,self['cmd'][cmd[x]]]
8
+ end
9
+ puts
10
+ end
11
+
12
+ puts "Usage: "
13
+ puts " %-18s: %s." % ["update","Update"]
14
+ puts " %-18s: %s." % ["shell/sh","Goto shell"]
15
+ puts " %-18s: %s." % ["help/h","Show this help message"]
16
+ puts " %-18s: %s." % ["q","Quit this shell"]
17
+ puts " %-18s: %s." % ["Q","Exit this program"]
18
+ puts " %-18s: %s." % ["<Hash Method>","Run"]
19
+ puts " %-18s: %s." % ["<Your Method>","Run.if undefined by above"]
20
+ puts " %-18s: %s." % ["<Shell Command>","Run.if undefined by above"]
21
+ puts "e.g:\n \e[32m pwd \e[0m => The repository's path"
22
+
23
+ end
24
+ alias h help
25
+
26
+ def update
27
+ old_commit = now_commit
28
+ scm_update
29
+ new_commit = now_commit
30
+ if new_commit == old_commit
31
+ puts "NO Update"
32
+ else
33
+ if self['autorun']
34
+ self['autorun'].split(';').each do |x|
35
+ eval x
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def shell
42
+ system("sh")
43
+ end
44
+ alias sh shell
45
+
46
+ def init
47
+ command = case self['scm']
48
+ when /svn/ then 'svn co'
49
+ when /git/ then 'git clone'
50
+ when nil then 'git clone'
51
+ end
52
+ if command
53
+ system("#{command} #{self['repo']} #{self['path']}")
54
+ else
55
+ puts "\e[31mSorry,Maybe doesn't support #{self['scm']} rightnow.\e[0m"
56
+ end
57
+ end
58
+
59
+ def method_missing(m,*args)
60
+ m = m.to_s
61
+ methods = self['cmd'] ? self['cmd'].keys.grep(m) : []
62
+
63
+ if methods.size == 1
64
+ eval self['cmd'][m]
65
+ else
66
+ result = system(m + " " + args.join(' '))
67
+ puts "\e[31mlol, Some Wrong?\e[0m" unless result
68
+ end
69
+ end
70
+
71
+ protected
72
+ def scm
73
+ return 'git' if !Dir.entries('.').grep(".git").empty?
74
+ return 'svn' if !Dir.entries('.').grep(".svn").empty?
75
+ end
76
+
77
+ def scm_update
78
+ case scm
79
+ when /git/ then system("git pull")
80
+ when /svn/ then system("svn update")
81
+ end
82
+ end
83
+
84
+ def now_commit
85
+ case scm
86
+ when /git/ then return `git log --pretty=format:%H -1`
87
+ when /svn/ then return `svn -l 1 log -q | grep "\w" | awk '{print $1}'`
88
+ else
89
+ puts "\e[31mSorry,RightNow Only Support SVN/GIT\e[0m"
90
+ exit
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestEasyoperate < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'eo'
3
+
4
+ class TestEo < Test::Unit::TestCase
5
+ def setup
6
+ @stdout_io = StringIO.new
7
+ Eo.execute(@stdout_io, [])
8
+ @stdout_io.rewind
9
+ @stdout = @stdout_io.read
10
+ end
11
+
12
+ def test_not_print_default_output
13
+ assert_no_match(/To update this executable/, @stdout)
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/easyoperate'
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easyoperate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jinzhu Zhang
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-13 00:00:00 +08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: newgem
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.0
34
+ version:
35
+ description: Eo_oE
36
+ email:
37
+ - wosmvp@gmail.com
38
+ executables:
39
+ - eo
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - History.txt
44
+ - Manifest.txt
45
+ - README.rdoc
46
+ files:
47
+ - History.txt
48
+ - Manifest.txt
49
+ - README.rdoc
50
+ - Rakefile
51
+ - bin/eo
52
+ - example/eorc
53
+ - lib/easyoperate.rb
54
+ - lib/eo.rb
55
+ - lib/eo/eo.rb
56
+ - lib/eo/scm.rb
57
+ - test/test_easyoperate.rb
58
+ - test/test_eo_cli.rb
59
+ - test/test_helper.rb
60
+ has_rdoc: true
61
+ homepage: http://www.zhangjinzhu.com
62
+ post_install_message:
63
+ rdoc_options:
64
+ - --main
65
+ - README.rdoc
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ requirements: []
81
+
82
+ rubyforge_project: easyoperate
83
+ rubygems_version: 1.3.1
84
+ signing_key:
85
+ specification_version: 2
86
+ summary: ""
87
+ test_files:
88
+ - test/test_helper.rb
89
+ - test/test_eo_cli.rb
90
+ - test/test_easyoperate.rb