ztk 1.0.11 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,7 +2,6 @@
2
2
  *.txt
3
3
  *.gem
4
4
  *.rbc
5
- .rvmrc
6
5
  .bundle
7
6
  .config
8
7
  .yardoc
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ ztk
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-1.9.3
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'coveralls', :require => false
4
+
3
5
  gemspec
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/ztk.png)](http://badge.fury.io/rb/ztk)
2
2
  [![Dependency Status](https://gemnasium.com/zpatten/ztk.png)](https://gemnasium.com/zpatten/ztk)
3
3
  [![Build Status](https://secure.travis-ci.org/zpatten/ztk.png)](http://travis-ci.org/zpatten/ztk)
4
+ [![Coverage Status](https://coveralls.io/repos/zpatten/testlab/badge.png?branch=master)](https://coveralls.io/r/zpatten/testlab)
4
5
  [![Code Climate](https://codeclimate.com/github/zpatten/ztk.png)](https://codeclimate.com/github/zpatten/ztk)
5
6
 
6
7
  # ZTK
data/Rakefile CHANGED
@@ -29,16 +29,9 @@ task :test => :spec
29
29
 
30
30
  ################################################################################
31
31
 
32
- desc "Run RSpec with code coverage"
33
- task :coverage do
34
- `rake spec COVERAGE=true`
35
- case RUBY_PLATFORM
36
- when /darwin/
37
- `open coverage/index.html`
38
- when /linux/
39
- `google-chrome coverage/index.html`
40
- end
41
- end
32
+ require 'coveralls/rake/task'
33
+ Coveralls::RakeTask.new
34
+ task :coveralls => [:spec, 'coveralls:push']
42
35
 
43
36
  ################################################################################
44
37
 
data/lib/ztk.rb CHANGED
@@ -41,6 +41,7 @@ module ZTK
41
41
  autoload :Benchmark, "ztk/benchmark"
42
42
  autoload :Command, "ztk/command"
43
43
  autoload :Config, "ztk/config"
44
+ autoload :Locator, "ztk/locator"
44
45
  autoload :Logger, "ztk/logger"
45
46
  autoload :Parallel, "ztk/parallel"
46
47
  autoload :PTY, "ztk/pty"
data/lib/ztk/dsl/core.rb CHANGED
@@ -35,8 +35,8 @@ module ZTK::DSL
35
35
  base.class_eval do
36
36
  base.send(:extend, ZTK::DSL::Core::ClassMethods)
37
37
 
38
- base.send(:extend, ZTK::DSL::Core::DualMethods)
39
- base.send(:include, ZTK::DSL::Core::DualMethods)
38
+ # base.send(:extend, ZTK::DSL::Core::DualMethods)
39
+ # base.send(:include, ZTK::DSL::Core::DualMethods)
40
40
 
41
41
  base.send(:include, ZTK::DSL::Core::Attributes)
42
42
  base.send(:include, ZTK::DSL::Core::Actions)
@@ -47,19 +47,19 @@ module ZTK::DSL
47
47
  end
48
48
 
49
49
  # @author Zachary Patten <zachary@jovelabs.net>
50
- module DualMethods
50
+ # module DualMethods
51
51
 
52
- def logger
53
- unless defined?($logger)
54
- $logger = ::ZTK::Logger.new("dsl.log")
55
- $logger.info {"=" * 80}
56
- $logger.info {"=" * 80}
57
- $logger.info {"=" * 80}
58
- end
59
- $logger
60
- end
52
+ # def logger
53
+ # unless defined?($logger)
54
+ # $logger = ::ZTK::Logger.new("dsl.log")
55
+ # $logger.info {"=" * 80}
56
+ # $logger.info {"=" * 80}
57
+ # $logger.info {"=" * 80}
58
+ # end
59
+ # $logger
60
+ # end
61
61
 
62
- end
62
+ # end
63
63
 
64
64
  # @author Zachary Patten <zachary@jovelabs.net>
65
65
  module ClassMethods
@@ -38,7 +38,6 @@ module ZTK::DSL::Core::Actions
38
38
  end
39
39
 
40
40
  def find(*args)
41
- logger.debug { "*args(#{args.inspect})" }
42
41
  ids = [args].flatten
43
42
  all.select{ |data| ids.include?(data.id) }
44
43
  end
@@ -36,15 +36,9 @@ module ZTK::DSL::Core::Relations
36
36
  end
37
37
 
38
38
  def get_belongs_to_reference(key)
39
- logger.debug { "key(#{key})" }
40
-
41
39
  if belongs_to_references.key?(key)
42
- logger.debug { "found key -> (#{key})" }
43
-
44
40
  belongs_to_references[key]
45
41
  else
46
- logger.debug { "looking up key -> (#{key})" }
47
-
48
42
  key_id = send("#{key}_id")
49
43
  item = key.to_s.classify.constantize.find(key_id).first
50
44
  belongs_to_references[key] = item
@@ -52,13 +46,11 @@ module ZTK::DSL::Core::Relations
52
46
  end
53
47
 
54
48
  def set_belongs_to_reference(key, value)
55
- logger.debug { "key(#{key}), value(#{value})" }
56
-
57
49
  belongs_to_references[key] = value
58
50
  attributes.merge!("#{key}_id".to_sym => value.id)
59
51
 
60
52
  klass = self.class.to_s.demodulize.downcase.pluralize
61
- logger.debug { "send(#{klass})" }
53
+
62
54
  many = value.send(klass)
63
55
  many << self
64
56
  many.uniq!
@@ -80,11 +72,8 @@ module ZTK::DSL::Core::Relations
80
72
  :class_name => key.to_s.classify,
81
73
  :key => key
82
74
  }.merge(options)
83
- logger.debug { "key(#{key.inspect}), options(#{belongs_to_relations[key].inspect})" }
84
75
 
85
76
  define_method(key) do |*args|
86
- logger.debug { "*args(#{args.inspect})" }
87
-
88
77
  if args.count == 0
89
78
  get_belongs_to_reference(key)
90
79
  else
@@ -93,14 +82,10 @@ module ZTK::DSL::Core::Relations
93
82
  end
94
83
 
95
84
  define_method("#{key}=") do |value|
96
- logger.debug { "#{key}= value(#{value.inspect})" }
97
-
98
85
  set_belongs_to_reference(key, value)
99
86
  end
100
87
 
101
88
  define_method("#{key}_id") do |*args|
102
- logger.debug { "#{key}_id *args(#{args.inspect})" }
103
-
104
89
  if args.count == 0
105
90
  attributes["#{key}_id".to_sym]
106
91
  else
@@ -111,8 +96,6 @@ module ZTK::DSL::Core::Relations
111
96
 
112
97
  define_method("#{key}_id=") do |value|
113
98
  options = self.class.belongs_to_relations[key]
114
- logger.debug { "#{key}_id= value(#{value.inspect}), options(#{options.inspect})" }
115
-
116
99
  if value != attributes["#{key}_id".to_sym]
117
100
  item = options[:class_name].constantize.find(value).first
118
101
  set_belongs_to_reference(key, item)
@@ -36,22 +36,14 @@ module ZTK::DSL::Core::Relations
36
36
  end
37
37
 
38
38
  def get_has_many_reference(key)
39
- logger.debug { "key(#{key})" }
40
-
41
39
  if has_many_references.key?(key)
42
- logger.debug { "found key -> (#{key})" }
43
-
44
40
  has_many_references[key]
45
41
  else
46
- logger.debug { "looking up key -> (#{key})" }
47
-
48
42
  has_many_references[key] ||= []
49
43
  end
50
44
  end
51
45
 
52
46
  def set_has_many_reference(key, value)
53
- logger.debug { "key(#{key}), value(#{value})" }
54
-
55
47
  dataset = get_has_many_reference(key)
56
48
  dataset.clear
57
49
  dataset.concat(value)
@@ -73,11 +65,8 @@ module ZTK::DSL::Core::Relations
73
65
  :class_name => key.to_s.classify,
74
66
  :key => key
75
67
  }.merge(options)
76
- logger.debug { "key(#{key.inspect}), options(#{has_many_relations[key].inspect})" }
77
68
 
78
69
  define_method(key) do |*args|
79
- logger.debug { "#{key} *args(#{args.inspect})" }
80
-
81
70
  if args.count == 0
82
71
  get_has_many_reference(key)
83
72
  else
@@ -86,18 +75,16 @@ module ZTK::DSL::Core::Relations
86
75
  end
87
76
 
88
77
  define_method("#{key}=") do |value|
89
- logger.debug { "#{key}= value(#{value.inspect})" }
90
-
91
78
  set_has_many_reference(key, value)
92
79
  end
93
80
 
94
81
  define_method(key.to_s.singularize) do |id=nil, &block|
95
82
  options = self.class.has_many_relations[key]
96
- logger.debug { "#{key.to_s.singularize} block(#{block.inspect}), options(#{options.inspect})" }
97
83
  data = options[:class_name].constantize.new(id, &block)
98
84
  get_has_many_reference(key) << data
85
+
99
86
  klass = self.class.to_s.demodulize.singularize.downcase
100
- logger.debug { "send(#{klass})" }
87
+
101
88
  data.send("#{klass}=", self)
102
89
  data
103
90
  end
@@ -0,0 +1,57 @@
1
+ ################################################################################
2
+ #
3
+ # Author: Zachary Patten <zachary@jovelabs.net>
4
+ # Copyright: Copyright (c) Zachary Patten
5
+ # License: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ################################################################################
20
+ module ZTK
21
+
22
+ # ZTK::Locator Error Class
23
+ #
24
+ # @author Zachary Patten <zachary@jovelabs.net>
25
+ class LocatorError < Error; end
26
+
27
+ # @author Zachary Patten <zachary@jovelabs.net>
28
+ class Locator
29
+
30
+ class << self
31
+
32
+ # Locate a file or directory
33
+ #
34
+ # Attempts to locate the file or directory supplied, starting with
35
+ # the current working directory and crawling it up looking for a match
36
+ # at each step of the way.
37
+ #
38
+ # @param [String,Array<String>] args A string or array of strings to
39
+ # attempt to locate.
40
+ #
41
+ # @return [String] The expanded path to the located entry.
42
+ def find(*args)
43
+ pwd = Dir.pwd.split(File::SEPARATOR)
44
+
45
+ (pwd.length - 1).downto(0) do |i|
46
+ candidate = File.expand_path(File.join(pwd[0..i], args))
47
+ return candidate if File.exists?(candidate)
48
+ end
49
+
50
+ raise LocatorError, "Could not locate '#{File.join(args)}'!"
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
data/lib/ztk/version.rb CHANGED
@@ -21,6 +21,6 @@
21
21
  module ZTK
22
22
 
23
23
  # ZTK Version String
24
- VERSION = "1.0.11"
24
+ VERSION = "1.1.0"
25
25
 
26
26
  end
data/spec/spec_helper.rb CHANGED
@@ -17,42 +17,15 @@
17
17
  # limitations under the License.
18
18
  #
19
19
  ################################################################################
20
+ require 'coveralls'
21
+ Coveralls.wear!
22
+ ################################################################################
20
23
  require 'tempfile'
21
-
22
- require 'simplecov'
23
- SimpleCov.start do
24
- add_filter '/spec/'
25
- end if ENV["COVERAGE"]
26
-
27
24
  require 'ztk'
28
25
 
29
26
  ENV['LOG_LEVEL'] = "DEBUG"
30
27
 
31
- WAIT_SMALL = 3
28
+ WAIT_SMALL = 5
32
29
  READ_PARTIAL_CHUNK = 2048
33
30
 
34
- RSpec.configure do |config|
35
-
36
- config.before(:all) do
37
- $stdout = File.open("/dev/null", "w")
38
- $stderr = File.open("/dev/null", "w")
39
- $stdin = File.open("/dev/null", "r")
40
- $logger = ZTK::Logger.new(File.join("/tmp", "test.log"))
41
-
42
- $logger.info { "=" * 80 }
43
- $logger.info { "STARTING ZTK v#{ZTK::VERSION} TEST RUN @ #{Time.now.utc}" }
44
- $logger.info { "=" * 80 }
45
- end
46
-
47
- config.before(:each) do
48
- $ui = ZTK::UI.new(
49
- :stdout => StringIO.new,
50
- :stderr => StringIO.new,
51
- :stdin => StringIO.new
52
- )
53
- end
54
-
55
- end
56
-
57
-
58
31
  ################################################################################
@@ -22,6 +22,14 @@ require "spec_helper"
22
22
 
23
23
  describe ZTK::Benchmark do
24
24
 
25
+ before(:each) do
26
+ @ui = ZTK::UI.new(
27
+ :stdout => StringIO.new,
28
+ :stderr => StringIO.new,
29
+ :stdin => StringIO.new
30
+ )
31
+ end
32
+
25
33
  subject { ZTK::Benchmark }
26
34
 
27
35
  describe "class" do
@@ -49,28 +57,28 @@ describe ZTK::Benchmark do
49
57
 
50
58
  it "should throw an exception if executed with a message but without a mark" do
51
59
  lambda {
52
- ZTK::Benchmark.bench(:ui => $ui, :message => "Hello World")
60
+ ZTK::Benchmark.bench(:ui => @ui, :message => "Hello World")
53
61
  }.should raise_error ZTK::BenchmarkError
54
62
  end
55
63
 
56
64
  it "should throw an exception if executed without a message but with a mark" do
57
65
  lambda {
58
- ZTK::Benchmark.bench(:ui => $ui, :mark => "%0.4f")
66
+ ZTK::Benchmark.bench(:ui => @ui, :mark => "%0.4f")
59
67
  }.should raise_error ZTK::BenchmarkError
60
68
  end
61
69
 
62
70
  it "should not write to STDOUT if not given a message or mark" do
63
- ZTK::Benchmark.bench(:ui => $ui) do
71
+ ZTK::Benchmark.bench(:ui => @ui) do
64
72
  sleep(0.1)
65
73
  end
66
- $ui.stdout.size.should == 0
74
+ @ui.stdout.size.should == 0
67
75
  end
68
76
 
69
77
  it "should write to STDOUT if given a message and mark" do
70
- ZTK::Benchmark.bench(:ui => $ui, :message => "Hello World", :mark => "%0.4f") do
78
+ ZTK::Benchmark.bench(:ui => @ui, :message => "Hello World", :mark => "%0.4f") do
71
79
  sleep(0.1)
72
80
  end
73
- $ui.stdout.size.should > 0
81
+ @ui.stdout.size.should > 0
74
82
  end
75
83
 
76
84
  end
@@ -22,7 +22,15 @@ require "spec_helper"
22
22
 
23
23
  describe ZTK::Command do
24
24
 
25
- subject { ZTK::Command.new }
25
+ before(:each) do
26
+ @ui = ZTK::UI.new(
27
+ :stdout => StringIO.new,
28
+ :stderr => StringIO.new,
29
+ :stdin => StringIO.new
30
+ )
31
+ end
32
+
33
+ subject { ZTK::Command.new(:ui => @ui) }
26
34
 
27
35
  describe "class" do
28
36
 
@@ -38,18 +46,18 @@ describe ZTK::Command do
38
46
 
39
47
  it "should be able to execute the command \"hostname\"" do
40
48
  subject.config do |config|
41
- config.ui = $ui
49
+ config.ui = @ui
42
50
  end
43
51
  hostname = %x(hostname).chomp
44
52
  status = subject.exec("hostname")
45
53
  status.exit_code.should == 0
46
- $ui.stdout.rewind
47
- $ui.stdout.read.chomp.should == hostname
54
+ @ui.stdout.rewind
55
+ @ui.stdout.read.chomp.should == hostname
48
56
  end
49
57
 
50
58
  it "should timeout after the period specified" do
51
59
  subject.config do |config|
52
- config.ui = $ui
60
+ config.ui = @ui
53
61
  config.timeout = WAIT_SMALL
54
62
  end
55
63
  hostname = %x(hostname).chomp
@@ -58,14 +66,14 @@ describe ZTK::Command do
58
66
 
59
67
  it "should throw an exception if the exit status is not as expected" do
60
68
  subject.config do |config|
61
- config.ui = $ui
69
+ config.ui = @ui
62
70
  end
63
71
  lambda { subject.exec("/bin/bash -c 'exit 64'") }.should raise_error ZTK::CommandError
64
72
  end
65
73
 
66
74
  it "should return a instance of an OpenStruct object" do
67
75
  subject.config do |config|
68
- config.ui = $ui
76
+ config.ui = @ui
69
77
  end
70
78
  result = subject.exec(%q{echo "Hello World"})
71
79
  result.should be_an_instance_of OpenStruct
@@ -73,7 +81,7 @@ describe ZTK::Command do
73
81
 
74
82
  it "should return the exit code" do
75
83
  subject.config do |config|
76
- config.ui = $ui
84
+ config.ui = @ui
77
85
  end
78
86
  data = 64
79
87
 
@@ -83,7 +91,7 @@ describe ZTK::Command do
83
91
 
84
92
  it "should return the output" do
85
93
  subject.config do |config|
86
- config.ui = $ui
94
+ config.ui = @ui
87
95
  end
88
96
  data = "Hello World @ #{Time.now.utc}"
89
97
 
@@ -93,7 +101,7 @@ describe ZTK::Command do
93
101
 
94
102
  it "should allow us to change the expected exit code" do
95
103
  subject.config do |config|
96
- config.ui = $ui
104
+ config.ui = @ui
97
105
  end
98
106
  data = 32
99
107
  result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
@@ -103,20 +111,20 @@ describe ZTK::Command do
103
111
 
104
112
  it "should capture STDOUT and send it to the appropriate pipe" do
105
113
  subject.config do |config|
106
- config.ui = $ui
114
+ config.ui = @ui
107
115
  end
108
116
  data = "Hello World @ #{Time.now.utc}"
109
117
 
110
118
  subject.exec(%Q{echo "#{data}" >&1})
111
119
 
112
- $ui.stdout.rewind
113
- $ui.stdout.read.match(data).should_not be nil
120
+ @ui.stdout.rewind
121
+ @ui.stdout.read.match(data).should_not be nil
114
122
 
115
- $ui.stderr.rewind
116
- $ui.stderr.read.match(data).should be nil
123
+ @ui.stderr.rewind
124
+ @ui.stderr.read.match(data).should be nil
117
125
 
118
- $ui.stdin.rewind
119
- $ui.stdin.read.match(data).should be nil
126
+ @ui.stdin.rewind
127
+ @ui.stdin.read.match(data).should be nil
120
128
  end
121
129
 
122
130
  end
@@ -125,20 +133,20 @@ describe ZTK::Command do
125
133
 
126
134
  it "should capture STDERR and send it to the appropriate pipe" do
127
135
  subject.config do |config|
128
- config.ui = $ui
136
+ config.ui = @ui
129
137
  end
130
138
  data = "Hello World @ #{Time.now.utc}"
131
139
 
132
140
  subject.exec(%Q{echo "#{data}" >&2})
133
141
 
134
- $ui.stdout.rewind
135
- $ui.stdout.read.match(data).should be nil
142
+ @ui.stdout.rewind
143
+ @ui.stdout.read.match(data).should be nil
136
144
 
137
- $ui.stderr.rewind
138
- $ui.stderr.read.match(data).should_not be nil
145
+ @ui.stderr.rewind
146
+ @ui.stderr.read.match(data).should_not be nil
139
147
 
140
- $ui.stdin.rewind
141
- $ui.stdin.read.match(data).should be nil
148
+ @ui.stdin.rewind
149
+ @ui.stdin.read.match(data).should be nil
142
150
  end
143
151
  end
144
152