dev_commands 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3150df9e053dfbd8b28b5ed40f79f203fd329ba4
4
- data.tar.gz: 521d3ab7fe7b0cd010675581a993d730e939982c
3
+ metadata.gz: dbbbe9db2da5300e3ca36aa1783b832d9057b1ef
4
+ data.tar.gz: 32924b87160449f1f8784e8b192c53ae85e2ec8d
5
5
  SHA512:
6
- metadata.gz: 8c2dfae830fc9cbc197ccf8c434ed5827946308c4baebd42b0eb592f38ff4ef34277b212733fc7cca89ba001b27f9086dc132b928a69744b539c364613a501e9
7
- data.tar.gz: 3653af0d4c066e9d3873b6bb0f08813788269167c3e0c758f4bb690e75463c8481401e3385b4315a7743952de7b0f742cef34ee76e11cfc029750051d6d873dd
6
+ metadata.gz: 42b40ebf3b8660a149f3c76dbdb9aed8b662b2e15a3a9d0cacf61223a0100a77ce727eff17991f28be7e4b36261df778f2f770328588bd2e5be94f740c137d3e
7
+ data.tar.gz: 202bd1b20dc7886eb0faa95b4bf0f5ecf76296034bdb1fef1ee53a231ff0a88eb7c09fea8dc4778528b4c5110fe9e8223800b339f8eb986ae21065ab7599b4e1
data/lib/Timer.rb ADDED
@@ -0,0 +1,41 @@
1
+ class Timer
2
+ attr_accessor :start_time
3
+
4
+ def initialize
5
+ @start_time=Time.now
6
+ end
7
+
8
+ def elapsed # in seconds
9
+ return Time.now-@start_time
10
+ end
11
+
12
+ def elapsed_str
13
+ elapsed_str="[" + "%.0f" %(elapsed) + "s]"
14
+ end
15
+
16
+ def self.elapsed_exceeds?(name,duration_seconds)
17
+ if(Timer.get_elapsed(name).nil? || Timer.get_elapsed(name) > duration_seconds)
18
+ return true
19
+ end
20
+ return false
21
+ end
22
+
23
+ def self.get_elapsed(name)
24
+ timestamp=get_timestamp(name)
25
+ return Time.now-timestamp if(!timestamp.nil?)
26
+ nil
27
+ end
28
+
29
+ def self.get_timestamp(name)
30
+ dir=Rake.application.original_dir
31
+ if(File.exists?("#{DEV[:dev_root]}/log/#{name}.timestamp"))
32
+ return Time.parse(File.read("#{DEV[:dev_root]}/log/#{name}.timestamp").strip)
33
+ end
34
+ nil
35
+ end
36
+
37
+ def self.set_timestamp(name)
38
+ Dir.mkdir("#{DEV_TASKS[:dev_root]}/log") if(!Dir.exists?("#{DEV_TASKS[:dev_root]}/log"))
39
+ File.open("#{DEV_TASKS[:dev_root]}/log/#{name}.timestamp",'w'){|f|f.puts(Time.now.to_s)}
40
+ end
41
+ end
data/lib/command.rb CHANGED
@@ -1,2 +1,61 @@
1
+ require_relative('./timer.rb')
2
+
1
3
  class Command < Hash
4
+ def initialize command
5
+
6
+ if(command.kind_of?(String))
7
+ self[:input] = command
8
+ self[:timeout] = 0
9
+ self[:directory] = ''
10
+ self[:exit_code] = 0
11
+ self[:output] = ''
12
+ self[:error] = ''
13
+ self[:machine_name] = ''
14
+ self[:user_name] = ''
15
+ self[:start_time] = nil
16
+ self[:end_time] = nil
17
+ end
18
+
19
+ if(command.kind_of?(Hash))
20
+ command.each{|k,v|
21
+ self[k.to_sym]=v
22
+ }
23
+ end
24
+ end
25
+
26
+ def execute
27
+
28
+ #Logger.start_command self
29
+
30
+ pwd=Dir.pwd
31
+ Dir.chdir(self[:directory]) if(self.has_key?(:directory) && File.exists?(self[:directory]))
32
+ #print " " + Color.green + self[:input] + Color.clear
33
+
34
+ self[:start_time]=Time.now
35
+ timer=Timer.new
36
+ if self[:input].include?('<%') && self[:input].include?('%>')
37
+ ruby = self[:input].gsub("<%","").gsub("%>","")
38
+
39
+ begin
40
+ puts "eval(#{ruby})"
41
+ self[:output]=eval(ruby)
42
+ rescue
43
+ puts "unable to eval(#{ruby})"
44
+ raise "unable to eval(#{ruby})"
45
+ end
46
+
47
+ #puts " " + timer.elapsed_str
48
+ self[:elapsed] = timer.elapsed_str
49
+ self[:end_time] = Time.now
50
+ else
51
+ self[:output] = `#{self[:input]}`
52
+ self[:elapsed] = timer.elapsed_str
53
+ self[:end_time] = Time.now
54
+ self[:exit_code]=$?.to_i
55
+ end
56
+
57
+ Dir.chdir(pwd) if pwd != Dir.pwd
58
+ #Logger.end_command self
59
+ end
60
+
2
61
  end
@@ -0,0 +1,84 @@
1
+ require_relative '../lib/command.rb'
2
+ require 'json'
3
+ require 'fileutils'
4
+
5
+ describe Command do
6
+ it "should be able to execute ruby --version command" do
7
+ cmd=Command.new("ruby --version")
8
+ # Timeout
9
+ expect(cmd[:timeout]).to eq(0)
10
+ cmd[:timeout]=3000
11
+ expect(cmd[:timeout]).to eq(3000)
12
+
13
+ # Directory
14
+ expect(cmd[:directory]).to eq("")
15
+ cmd[:directory] = File.dirname(__FILE__)
16
+ expect(cmd[:directory]).to eq(File.dirname(__FILE__))
17
+
18
+ # ExitCode
19
+ expect(cmd[:exit_code]).to eq(0)
20
+ cmd[:exit_code] = 1
21
+ expect(cmd[:exit_code]).to eq(1)
22
+
23
+ # Input
24
+ expect(cmd[:input]).to eq("ruby --version")
25
+ cmd2 = Command.new('')
26
+ expect(cmd2[:input]).to eq('')
27
+
28
+ # Output
29
+ expect(cmd[:output]).to eq('')
30
+ cmd[:output]='test'
31
+ expect(cmd[:output]).to eq('test')
32
+
33
+ # Error
34
+ expect(cmd[:error]).to eq('')
35
+ cmd[:error]='error_test'
36
+ expect(cmd[:error]).to eq('error_test')
37
+
38
+ # MachineName
39
+ expect(cmd[:machine_name]).to eq('')
40
+ cmd[:machine_name]='machine_name_test'
41
+ expect(cmd[:machine_name]).to eq('machine_name_test')
42
+
43
+ # UserName
44
+ expect(cmd[:user_name]).to eq('')
45
+ cmd[:user_name]='user_name_test'
46
+ expect(cmd[:user_name]).to eq('user_name_test')
47
+
48
+ # StartTime
49
+ expect(cmd[:start_time]).to eq(nil)
50
+ cmd[:start_time]=Time.now
51
+ expect(cmd[:start_time]).not_to eq(nil)
52
+
53
+ # EndTime
54
+ expect(cmd[:end_time]).to eq(nil)
55
+ cmd[:end_time]=Time.now
56
+ expect(cmd[:end_time]).not_to eq(nil)
57
+
58
+ end
59
+
60
+ it "should be able to write to/load from JSON" do
61
+ cmd=Command.new("ruby --version")
62
+ expect(cmd[:timeout]).to eq(0)
63
+ expect(cmd[:input]).to eq("ruby --version")
64
+ cmd2=Command.new(JSON.parse(cmd.to_json))
65
+ expect(cmd2[:timeout]).to eq(0)
66
+ expect(cmd2[:input]).to eq("ruby --version")
67
+ end
68
+
69
+ it "should be able to execute rake command in specific directory" do
70
+ dir="#{File.dirname(__FILE__)}/tmp/rake_test"
71
+ FileUtils.mkdir_p(dir) if(!File.exists?(dir))
72
+ File.open("#{dir}/rakefile.rb","w") { |f|
73
+ f.puts "task :default do"
74
+ f.puts " puts 'rake_test'"
75
+ f.puts "end"
76
+ }
77
+ cmd=Command.new("rake")
78
+ cmd[:directory]=dir
79
+ cmd.execute
80
+ FileUtils.rm_r("#{File.dirname(__FILE__)}/tmp")
81
+ expect(cmd[:output].include?('rake_test')).to eq(true)
82
+
83
+ end
84
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dev_commands
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lou Parslow
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: execution of system commands
42
56
  email: lou.parslow@gmail.com
43
57
  executables: []
@@ -45,6 +59,8 @@ extensions: []
45
59
  extra_rdoc_files: []
46
60
  files:
47
61
  - lib/command.rb
62
+ - lib/Timer.rb
63
+ - spec/command_spec.rb
48
64
  - LICENSE
49
65
  - README.md
50
66
  homepage: http://github.com/lou-parslow/dev_commands.gem