revenc 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CLONING.rdoc DELETED
@@ -1,108 +0,0 @@
1
- = Cloning from BasicApp
2
-
3
- BasicApp provides no stand-alone functionality. It purpose is to
4
- provide a repository for jump-starting a new RubyGem based CLI
5
- application and provide a point to cloned applications to facilitate
6
- pulling in future enhancements and fixes.
7
-
8
- == Features/Dependencies
9
-
10
- * Jeweler for RubyGem management http://github.com/technicalpickles/jeweler
11
- * Rspec for unit testing http://github.com/dchelimsky/rspec
12
- * Cucumber for functional testing http://github.com/tpope/vim-cucumber
13
- * Aruba for CLI testing http://github.com/aslakhellesoy/aruba
14
-
15
- == Jump-starting a new project with BasicApp
16
-
17
- The following steps illustrate creating a new application called "oct." Oct
18
- is a simple command line utility that prints file listing permissions in octal
19
- notation.
20
-
21
- cd ~/workspace
22
- git clone git://github.com/robertwahler/basic_app.git oct
23
- cd oct
24
-
25
- === Setup repository for cloned project
26
-
27
- We are going to change the origin URL to our own server and setup a remote
28
- for pulling in future BasicApp changes. If our own repo is setup at
29
- git@red:oct.git, change the URL with sed:
30
-
31
- sed -i 's/url =.*\.git$/url = git@red:oct.git/' .git/config
32
-
33
- Push it up
34
-
35
- git push origin master:refs/heads/master
36
-
37
- Add BasicApp as remote
38
-
39
- git remote add basic_app git://github.com/robertwahler/basic_app.git
40
-
41
- === Rename your application
42
-
43
- We need to change the name of the application from basic_app to oct
44
-
45
- git mv bin/basic_app bin/oct
46
- git mv lib/basic_app.rb lib/oct.rb
47
- git mv lib/basic_app lib/oct
48
-
49
- # BasicApp => Oct
50
- find ./bin -type f -exec sed -i 's/BasicApp/Oct/' '{}' +
51
- find . -name *.rb -exec sed -i 's/BasicApp/Oct/' '{}' +
52
- find . -name Rakefile -exec sed -i 's/BasicApp/Oct/' '{}' +
53
- # basic_app => oct
54
- find ./bin -type f -exec sed -i 's/basic_app/oct/' '{}' +
55
- find ./spec -type f -exec sed -i 's/basic_app/oct/' '{}' +
56
- find . -name *.rb -exec sed -i 's/basic_app/oct/' '{}' +
57
- find . -name *.feature -exec sed -i 's/basic_app/oct/' '{}' +
58
- find . -name Rakefile -exec sed -i 's/basic_app/oct/' '{}' +
59
-
60
- Replace TODO's and update documentation
61
-
62
- * Replace README.rdoc
63
- * Replace LICENSE
64
- * (OPTIONAL) git rm CLONING.rdoc
65
- * Replace the TODO's in Rakefile and bin
66
-
67
- Application should now be functional, lets test it
68
-
69
- cucumber
70
-
71
- Looks OK, commit it
72
-
73
- git commit -a -m "renamed basic_app to oct"
74
-
75
- == Merging of future BasicApp changes
76
-
77
- Cherry picking method
78
-
79
- git fetch basic_app
80
- git cherry-pick a0f9745
81
-
82
- Merge 2-step method
83
-
84
- git fetch basic_app
85
- git merge basic_app/master
86
-
87
- Trusting pull of HEAD
88
-
89
- git pull basic_app HEAD
90
-
91
- Conflicted?
92
-
93
- git mergetool
94
- git commit
95
-
96
- == Note on Patches/Pull Requests
97
-
98
- * Fork the project.
99
- * Make your feature addition or bug fix.
100
- * Add tests for it. This is important so I don't break it in a
101
- future version unintentionally.
102
- * Commit, do not mess with rakefile, version, or history.
103
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
104
- * Send me a pull request. Bonus points for topic branches.
105
-
106
- == Copyright
107
-
108
- Copyright (c) 2010 GearheadForHire, LLC. See LICENSE for details.
@@ -1,66 +0,0 @@
1
- module Revenc
2
-
3
- class Lockfile
4
- attr_accessor :lockfile
5
-
6
- def initialize(lockfile=nil)
7
- raise ArgumentError, "lockfile not specified" unless lockfile
8
- @lockfile = lockfile
9
- end
10
-
11
- def locked?
12
- return false unless File.exists?(lockfile)
13
- result = false
14
- open(lockfile, 'w') do |f|
15
- # exclusive non-blocking lock
16
- result = !lock(f, File::LOCK_EX | File::LOCK_NB)
17
- end
18
- result
19
- end
20
-
21
- # flock, get a file lock
22
- #
23
- # Typical usage:
24
- #
25
- # open('output', 'w') do |f|
26
- # flock(f, File::LOCK_EX) do |f|
27
- # f << "write to file"
28
- # end
29
- # end
30
- def lock(file, mode)
31
- result = file.flock(mode)
32
- if result
33
- begin
34
- yield file if block_given?
35
- ensure
36
- file.flock(File::LOCK_UN)
37
- end
38
- end
39
- return result
40
- end
41
- end
42
-
43
- class Mutex < Lockfile
44
-
45
- def initialize(lockfile='revenc.lck')
46
- super lockfile
47
- end
48
-
49
- def execute
50
- result = false
51
- begin
52
- open(@lockfile, 'w') do |f|
53
- # exclusive non-blocking lock
54
- result = lock(f, File::LOCK_EX | File::LOCK_NB) do |f|
55
- yield if block_given?
56
- end
57
- end
58
- ensure
59
- # clean up but only if we have a positive result meaning we wrote the lockfile
60
- FileUtils.rm(@lockfile) if (result && File.exists?(@lockfile))
61
- end
62
- result
63
- end
64
- end
65
-
66
- end
@@ -1,44 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Revenc::Mutex do
4
-
5
- before(:each) do
6
- FileUtils.rm_rf(current_dir)
7
- end
8
-
9
- describe 'mutex' do
10
-
11
- it "should create a mutex, yield, and clean up" do
12
- in_current_dir do
13
- mutex = Revenc::Mutex.new
14
- result = mutex.execute do
15
- File.should be_file('revenc.lck')
16
- mutex.should be_locked
17
- end
18
- result.should be_true
19
- mutex.should_not be_locked
20
- File.should_not be_file('revenc.lck')
21
- end
22
- end
23
-
24
- it "should prevent recursion but not block" do
25
- in_current_dir do
26
- Revenc::Mutex.new.execute do
27
- File.should be_file('revenc.lck')
28
-
29
- mutext = Revenc::Mutex.new
30
- result = mutext.execute do
31
- # This block is protected, should not be here
32
- true.should be(false)
33
- end
34
- result.should be_false
35
- mutext.should be_locked
36
- end
37
- File.should_not be_file('revenc.lck')
38
- end
39
- end
40
-
41
- end
42
- end
43
-
44
-