devver-construct 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.devver/devver_opts.yml +18 -0
- data/.devver/hooks/build +11 -0
- data/.devver/hooks/install_dependencies +3 -0
- data/.devver/hooks/notify +50 -0
- data/.devver/hooks/prepare_database +1 -0
- data/construct.gemspec +3 -3
- data/lib/construct.rb +16 -1
- data/lib/construct/helpers.rb +12 -14
- data/lib/construct/path_extensions.rb +13 -3
- data/test/construct_test.rb +45 -3
- data/test/test_helper.rb +0 -1
- metadata +8 -4
@@ -0,0 +1,18 @@
|
|
1
|
+
# Your API key authenticates you to Devver.
|
2
|
+
# Be careful to keep it secret. For instance,
|
3
|
+
# ensure that you do not check it into source
|
4
|
+
# control.
|
5
|
+
|
6
|
+
# You can retrieve your API key by logging in to
|
7
|
+
# http://devver.net
|
8
|
+
|
9
|
+
API_KEY: 'f148006f8d6379dbe96f7e5d817c303c7a30bb69f531b5ca875150714fa3654e'
|
10
|
+
|
11
|
+
# set REPORT_FAST to true to print error details as they occur during a run
|
12
|
+
|
13
|
+
REPORT_FAST: 'false'
|
14
|
+
|
15
|
+
# set DISPLAY_OUTPUT to false to hide the stdout and the stderr
|
16
|
+
|
17
|
+
DISPLAY_OUTPUT: true
|
18
|
+
|
data/.devver/hooks/build
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
################################################################################
|
4
|
+
# build
|
5
|
+
#
|
6
|
+
# This hook is responsible for running a full "build" of the project for the
|
7
|
+
# purpose of Continuus Integration
|
8
|
+
#
|
9
|
+
################################################################################
|
10
|
+
|
11
|
+
rake
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
################################################################################
|
4
|
+
# notify
|
5
|
+
#
|
6
|
+
# This hook is reponsible for notifying the user of the results of a task, such
|
7
|
+
# as a Continuous Integration build.
|
8
|
+
#
|
9
|
+
# PARAMETERS:
|
10
|
+
#
|
11
|
+
# This hook will be called with the form:
|
12
|
+
#
|
13
|
+
# .devver/hooks/notify TASK EXIT_STATUS
|
14
|
+
#
|
15
|
+
# * TASK is the name of the task that triggered the notification
|
16
|
+
# * EXIT_STATUS is the numeric exit status of the task. 0 indicates success.
|
17
|
+
#
|
18
|
+
# INPUT:
|
19
|
+
#
|
20
|
+
# This hook will be provided with a transcript of the triggering task's output.
|
21
|
+
# Both STDOUT and STDERR output will be included in the transcript.
|
22
|
+
#
|
23
|
+
# OUTPUT:
|
24
|
+
#
|
25
|
+
# This task should exit with a 0 status if the notification was successful, and
|
26
|
+
# a nonzero status if the notification failed.
|
27
|
+
#
|
28
|
+
################################################################################
|
29
|
+
require 'net/smtp'
|
30
|
+
require 'time'
|
31
|
+
to = "devs@devver.net"
|
32
|
+
|
33
|
+
success = ARGV[0].to_i == 0
|
34
|
+
recipient = ENV.fetch('NOTIFY_RECIPIENT'){to}
|
35
|
+
message = <<"EOF"
|
36
|
+
From: support@devver.net
|
37
|
+
To: #{recipient}
|
38
|
+
Subject: Build #{success ? 'succeeded' : 'failed'}
|
39
|
+
Date: #{Time.now.rfc2822}
|
40
|
+
|
41
|
+
The task "#{ARGV[1]}" #{success ? 'succeeded' : 'failed'}.
|
42
|
+
|
43
|
+
Output:
|
44
|
+
|
45
|
+
#{$stdin.read}
|
46
|
+
EOF
|
47
|
+
|
48
|
+
Net::SMTP.start('localhost', 25) do |smtp|
|
49
|
+
smtp.send_message(message, 'application@devver.net', recipient)
|
50
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
#!/bin/sh
|
data/construct.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{construct}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.1.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Ben Brinckerhoff (ben@devver.net) and Avdi Grimm (avdi@devver.net)"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-09-09}
|
10
10
|
s.default_executable = %q{construct}
|
11
11
|
s.description = %q{}
|
12
12
|
s.email = %q{ben@devver.net, avdi@devver.net}
|
13
13
|
s.executables = ["construct"]
|
14
14
|
s.extra_rdoc_files = ["History.txt", "bin/construct"]
|
15
|
-
s.files = ["History.txt", "README.markdown", "Rakefile", "bin/construct", "bugs/issue-0127c8c6ba1d31b5488f4551f8d869e57d53956d.yaml", "bugs/issue-404e5da7b128e5b34e7a33fbcd56603618010d92.yaml", "bugs/issue-50798912193be32b1dc610d949a557b3860d96fd.yaml", "bugs/issue-5a10ec7298127df3c62255ea59e01dcf831ff1d3.yaml", "bugs/issue-67f704f8b7190ccc1157eec007c3d584779dc805.yaml", "bugs/issue-881ae950569b6ca718fae0060f2751710b972fd2.yaml", "bugs/issue-bc8dfdf3834bb84b1d942ab2a90ac8c82b4389fb.yaml", "bugs/issue-d05e9a907202348d47c4bf92062c1f4673dcae68.yaml", "bugs/issue-f30a3db19d917f8e72ca8689e099ef0cb2681fd3.yaml", "bugs/project.yaml", "construct.gemspec", "geminstaller.yml", "lib/construct.rb", "lib/construct/helpers.rb", "lib/construct/path_extensions.rb", "tasks/ann.rake", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/notes.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/spec.rake", "tasks/svn.rake", "tasks/test.rake", "tasks/zentest.rake", "test/construct_test.rb", "test/test_helper.rb"]
|
15
|
+
s.files = [".devver/devver_opts.yml", ".devver/hooks/build", ".devver/hooks/install_dependencies", ".devver/hooks/notify", ".devver/hooks/prepare_database", "History.txt", "README.markdown", "Rakefile", "bin/construct", "bugs/issue-0127c8c6ba1d31b5488f4551f8d869e57d53956d.yaml", "bugs/issue-404e5da7b128e5b34e7a33fbcd56603618010d92.yaml", "bugs/issue-50798912193be32b1dc610d949a557b3860d96fd.yaml", "bugs/issue-5a10ec7298127df3c62255ea59e01dcf831ff1d3.yaml", "bugs/issue-67f704f8b7190ccc1157eec007c3d584779dc805.yaml", "bugs/issue-881ae950569b6ca718fae0060f2751710b972fd2.yaml", "bugs/issue-bc8dfdf3834bb84b1d942ab2a90ac8c82b4389fb.yaml", "bugs/issue-d05e9a907202348d47c4bf92062c1f4673dcae68.yaml", "bugs/issue-f30a3db19d917f8e72ca8689e099ef0cb2681fd3.yaml", "bugs/project.yaml", "construct.gemspec", "geminstaller.yml", "lib/construct.rb", "lib/construct/helpers.rb", "lib/construct/path_extensions.rb", "tasks/ann.rake", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/notes.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/spec.rake", "tasks/svn.rake", "tasks/test.rake", "tasks/zentest.rake", "test/construct_test.rb", "test/test_helper.rb"]
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.homepage = %q{http://github.com/devver/construct}
|
18
18
|
s.rdoc_options = ["--main", "README.markdown"]
|
data/lib/construct.rb
CHANGED
@@ -5,7 +5,7 @@ require 'English'
|
|
5
5
|
module Construct
|
6
6
|
|
7
7
|
# :stopdoc:
|
8
|
-
VERSION = '1.
|
8
|
+
VERSION = '1.1.0'
|
9
9
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
10
10
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
11
11
|
# :startdoc:
|
@@ -45,6 +45,21 @@ module Construct
|
|
45
45
|
Dir.glob(search_me).sort.each {|rb| require rb}
|
46
46
|
end
|
47
47
|
|
48
|
+
# END Bones boilerplate
|
49
|
+
|
50
|
+
CONTAINER_PREFIX = 'construct_container'
|
51
|
+
|
52
|
+
def self.tmpdir
|
53
|
+
dir = nil
|
54
|
+
Dir.chdir Dir.tmpdir do dir = Dir.pwd end # HACK FOR OSX
|
55
|
+
dir
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.destroy_all!
|
59
|
+
Pathname.glob(File.join(tmpdir, CONTAINER_PREFIX + "*")) do |container|
|
60
|
+
container.rmtree
|
61
|
+
end
|
62
|
+
end
|
48
63
|
|
49
64
|
end # module Construct
|
50
65
|
|
data/lib/construct/helpers.rb
CHANGED
@@ -6,23 +6,21 @@ module Construct
|
|
6
6
|
extend self
|
7
7
|
|
8
8
|
def within_construct(chdir=true)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
path.extend(PathExtensions)
|
13
|
-
path.construct__chdir_default = chdir
|
14
|
-
maybe_change_dir(chdir,path) do
|
15
|
-
yield(path)
|
16
|
-
end
|
17
|
-
ensure
|
18
|
-
path.rmtree
|
9
|
+
container = create_construct(chdir)
|
10
|
+
container.maybe_change_dir(chdir) do
|
11
|
+
yield(container)
|
19
12
|
end
|
13
|
+
ensure
|
14
|
+
container.destroy!
|
20
15
|
end
|
21
16
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
def create_construct(chdir=true)
|
18
|
+
path = (Pathname(Construct.tmpdir) +
|
19
|
+
"#{CONTAINER_PREFIX}-#{$PROCESS_ID}-#{rand(1_000_000_000)}")
|
20
|
+
path.mkpath
|
21
|
+
path.extend(PathExtensions)
|
22
|
+
path.construct__chdir_default = chdir
|
23
|
+
path
|
26
24
|
end
|
27
25
|
|
28
26
|
end
|
@@ -7,7 +7,7 @@ module Construct
|
|
7
7
|
subdir = (self + path)
|
8
8
|
subdir.mkpath
|
9
9
|
subdir.extend(PathExtensions)
|
10
|
-
maybe_change_dir(chdir
|
10
|
+
subdir.maybe_change_dir(chdir) do
|
11
11
|
yield(subdir) if block_given?
|
12
12
|
end
|
13
13
|
subdir
|
@@ -30,13 +30,23 @@ module Construct
|
|
30
30
|
path
|
31
31
|
end
|
32
32
|
|
33
|
-
def maybe_change_dir(chdir,
|
33
|
+
def maybe_change_dir(chdir, &block)
|
34
34
|
if(chdir)
|
35
|
-
|
35
|
+
self.chdir(&block)
|
36
36
|
else
|
37
37
|
block.call
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# Note: Pathname implements #chdir directly, but it is deprecated in favor
|
42
|
+
# of Dir.chdir
|
43
|
+
def chdir(&block)
|
44
|
+
Dir.chdir(self, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy!
|
48
|
+
rmtree
|
49
|
+
end
|
50
|
+
|
41
51
|
end
|
42
52
|
end
|
data/test/construct_test.rb
CHANGED
@@ -9,13 +9,17 @@ require 'mocha'
|
|
9
9
|
class ConstructTest < Test::Unit::TestCase
|
10
10
|
include Construct::Helpers
|
11
11
|
|
12
|
+
def teardown
|
13
|
+
Construct.destroy_all!
|
14
|
+
end
|
15
|
+
|
12
16
|
testing 'using within_construct explicitly' do
|
13
17
|
|
14
18
|
test 'creates construct' do
|
15
19
|
num = rand(1_000_000_000)
|
16
20
|
Construct.stubs(:rand).returns(num)
|
17
21
|
Construct::within_construct do |construct|
|
18
|
-
assert File.directory?(File.join(Construct
|
22
|
+
assert File.directory?(File.join(Construct.tmpdir, "construct_container-#{$PROCESS_ID}-#{num}"))
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -27,7 +31,7 @@ class ConstructTest < Test::Unit::TestCase
|
|
27
31
|
num = rand(1_000_000_000)
|
28
32
|
self.stubs(:rand).returns(num)
|
29
33
|
within_construct do |construct|
|
30
|
-
assert File.directory?(File.join(Construct
|
34
|
+
assert File.directory?(File.join(Construct.tmpdir, "construct_container-#{$PROCESS_ID}-#{num}"))
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
@@ -43,7 +47,7 @@ class ConstructTest < Test::Unit::TestCase
|
|
43
47
|
num = rand(1_000_000_000)
|
44
48
|
self.stubs(:rand).returns(num)
|
45
49
|
within_construct do |container_path|
|
46
|
-
expected_path = (Pathname(Construct
|
50
|
+
expected_path = (Pathname(Construct.tmpdir) +
|
47
51
|
"construct_container-#{$PROCESS_ID}-#{num}")
|
48
52
|
assert_equal(expected_path, container_path)
|
49
53
|
end
|
@@ -417,4 +421,42 @@ Contents
|
|
417
421
|
|
418
422
|
end
|
419
423
|
|
424
|
+
testing "#create_construct" do
|
425
|
+
test "returns a working Construct" do
|
426
|
+
it = create_construct
|
427
|
+
it.directory "foo"
|
428
|
+
it.file "bar", "CONTENTS"
|
429
|
+
assert (it + "foo").directory?
|
430
|
+
assert_equal "CONTENTS", (it + "bar").read
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
testing "#chdir" do
|
435
|
+
test "executes its block in the context of the construct" do
|
436
|
+
it = create_construct
|
437
|
+
assert_not_equal it.to_s, Dir.pwd
|
438
|
+
sensor = :unset
|
439
|
+
it.chdir do
|
440
|
+
sensor = Dir.pwd
|
441
|
+
end
|
442
|
+
assert_equal it.to_s, sensor
|
443
|
+
end
|
444
|
+
|
445
|
+
test "leaves construct directory on block exit" do
|
446
|
+
it = create_construct
|
447
|
+
it.chdir do
|
448
|
+
# NOOP
|
449
|
+
end
|
450
|
+
assert_not_equal it.to_s, Dir.pwd
|
451
|
+
end
|
452
|
+
end
|
453
|
+
|
454
|
+
testing "#destroy!" do
|
455
|
+
test "removes the construct container" do
|
456
|
+
it = create_construct
|
457
|
+
it.destroy!
|
458
|
+
assert !File.exist?(it.to_s)
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
420
462
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devver-construct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Brinckerhoff (ben@devver.net) and Avdi Grimm (avdi@devver.net)
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-09 00:00:00 -07:00
|
13
13
|
default_executable: construct
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,6 +42,11 @@ extra_rdoc_files:
|
|
42
42
|
- History.txt
|
43
43
|
- bin/construct
|
44
44
|
files:
|
45
|
+
- .devver/devver_opts.yml
|
46
|
+
- .devver/hooks/build
|
47
|
+
- .devver/hooks/install_dependencies
|
48
|
+
- .devver/hooks/notify
|
49
|
+
- .devver/hooks/prepare_database
|
45
50
|
- History.txt
|
46
51
|
- README.markdown
|
47
52
|
- Rakefile
|
@@ -78,7 +83,6 @@ files:
|
|
78
83
|
- test/test_helper.rb
|
79
84
|
has_rdoc: true
|
80
85
|
homepage: http://github.com/devver/construct
|
81
|
-
licenses:
|
82
86
|
post_install_message:
|
83
87
|
rdoc_options:
|
84
88
|
- --main
|
@@ -100,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
104
|
requirements: []
|
101
105
|
|
102
106
|
rubyforge_project: construct
|
103
|
-
rubygems_version: 1.
|
107
|
+
rubygems_version: 1.2.0
|
104
108
|
signing_key:
|
105
109
|
specification_version: 2
|
106
110
|
summary: Construct is a DSL for creating temporary files and directories during testing.
|