wizard 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,209 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ describe Wizard::Spells::UpdateFile do
4
+ subject do
5
+ Wizard::Spells::UpdateFile
6
+ end
7
+
8
+ describe "#initialize" do
9
+ it "should set given filename" do
10
+ subject.new("/path/to/file").filename.should == "/path/to/file"
11
+ end
12
+
13
+ context "given content" do
14
+ it "should be set" do
15
+ subject.new("/path/to/file", "hello world!").content.should == "hello world!"
16
+ end
17
+ end
18
+
19
+ it "should set default chmod" do
20
+ subject.new("/path/to/file").chmod.should == 644
21
+ end
22
+
23
+ context "given :mode option" do
24
+ it "should set it" do
25
+ subject.new("/path/to/file", nil, :mode => 755).chmod.should == 755
26
+ end
27
+ end
28
+
29
+ context "given :force option" do
30
+ it "should run in force mode" do
31
+ subject.new("/path/to/file", nil, :force => true).should be_forced
32
+ end
33
+ end
34
+
35
+ context "given :before option" do
36
+ it "should set it" do
37
+ subject.new("/path/to/file", nil, :before => /test/).before.should == /test/
38
+ end
39
+ end
40
+
41
+ context "given :after option" do
42
+ it "should set it" do
43
+ subject.new("/path/to/file", nil, :after => /test/).after.should == /test/
44
+ end
45
+ end
46
+
47
+ context "given :replace option" do
48
+ it "should set it" do
49
+ subject.new("/path/to/file", nil, :replace => /test/).replace.should == /test/
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#perform" do
55
+ context "when specified file doesn't exist" do
56
+ context "and given content only" do
57
+ subject do
58
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing")
59
+ end
60
+
61
+ it "should create this file" do
62
+ spell = subject
63
+ File.expects(:exist?).with("/path/to/file").returns(false)
64
+ spell.expects(:perform_without_content_update).returns(:created)
65
+ spell.perform.should == :created
66
+ end
67
+ end
68
+
69
+ context "and given :before option" do
70
+ subject do
71
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing", :before => /test/)
72
+ end
73
+
74
+ it "should create this file" do
75
+ spell = subject
76
+ File.expects(:exist?).with("/path/to/file").returns(false)
77
+ spell.perform.should == :missing
78
+ end
79
+ end
80
+
81
+ context "and given :after option" do
82
+ subject do
83
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing", :after => /test/)
84
+ end
85
+
86
+ it "should create this file" do
87
+ spell = subject
88
+ File.expects(:exist?).with("/path/to/file").returns(false)
89
+ spell.perform.should == :missing
90
+ end
91
+ end
92
+
93
+ context "and given :replace option" do
94
+ subject do
95
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing", :replace => /test/)
96
+ end
97
+
98
+ it "should create this file" do
99
+ spell = subject
100
+ File.expects(:exist?).with("/path/to/file").returns(false)
101
+ spell.perform.should == :missing
102
+ end
103
+ end
104
+ end
105
+
106
+ context "when some error has been raised" do
107
+ subject do
108
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing")
109
+ end
110
+
111
+ it "should set :error status" do
112
+ spell = subject
113
+ File.expects(:exist?).with("/path/to/file").raises(Exception)
114
+ spell.perform.should == :error
115
+ end
116
+ end
117
+
118
+ context "when specified file exists" do
119
+ context "and given content only" do
120
+ subject do
121
+ Wizard::Spells::UpdateFile.new("/path/to/file", "testing")
122
+ end
123
+
124
+ it "should replace file content" do
125
+ spell = subject
126
+ File.expects(:exist?).with("/path/to/file").returns(true)
127
+ spell.expects(:perform_without_content_update).returns(:updated)
128
+ spell.perform.should == :updated
129
+ spell.content.should == "testing"
130
+ end
131
+ end
132
+
133
+ context "and given :replace option" do
134
+ subject do
135
+ Wizard::Spells::UpdateFile.new("/path/to/file", "Sparta", :replace => /persia/i)
136
+ end
137
+
138
+ it "should replace file content" do
139
+ spell = subject
140
+ File.expects(:exist?).with("/path/to/file").returns(true)
141
+ File.expects(:read).with("/path/to/file").returns("This is Persia!")
142
+ spell.expects(:perform_without_content_update).returns(:updated)
143
+ spell.perform.should == :updated
144
+ spell.content.should == "This is Sparta!"
145
+ end
146
+ end
147
+
148
+ context "and given :after option" do
149
+ subject do
150
+ Wizard::Spells::UpdateFile.new("/path/to/file", "not", :after => /^is$/i)
151
+ end
152
+
153
+ it "should put given content after matching line" do
154
+ spell = subject
155
+ File.expects(:exist?).with("/path/to/file").returns(true)
156
+ File.expects(:read).with("/path/to/file").returns("This\nis\nPersia!")
157
+ spell.expects(:perform_without_content_update).returns(:updated)
158
+ spell.perform.should == :updated
159
+ spell.content.should == "This\nis\nnot\nPersia!"
160
+ end
161
+ end
162
+
163
+ context "and given :after is :BOF" do
164
+ subject do
165
+ Wizard::Spells::UpdateFile.new("/path/to/file", "This", :after => :BOF)
166
+ end
167
+
168
+ it "should put given content at the begining of file" do
169
+ spell = subject
170
+ File.expects(:exist?).with("/path/to/file").returns(true)
171
+ File.expects(:read).with("/path/to/file").returns("is\nSparta!")
172
+ spell.expects(:perform_without_content_update).returns(:updated)
173
+ spell.perform.should == :updated
174
+ spell.content.should == "This\nis\nSparta!"
175
+ end
176
+ end
177
+
178
+ context "and given :before option" do
179
+ subject do
180
+ Wizard::Spells::UpdateFile.new("/path/to/file", "not", :before => /^persia/i)
181
+ end
182
+
183
+ it "should put given content before matching line" do
184
+ spell = subject
185
+ File.expects(:exist?).with("/path/to/file").returns(true)
186
+ File.expects(:read).with("/path/to/file").returns("This\nis\nPersia!")
187
+ spell.expects(:perform_without_content_update).returns(:updated)
188
+ spell.perform.should == :updated
189
+ spell.content.should == "This\nis\nnot\nPersia!"
190
+ end
191
+ end
192
+
193
+ context "and given :before is :EOF" do
194
+ subject do
195
+ Wizard::Spells::UpdateFile.new("/path/to/file", "Sparta!", :before => :EOF)
196
+ end
197
+
198
+ it "should put given content at the end of file" do
199
+ spell = subject
200
+ File.expects(:exist?).with("/path/to/file").returns(true)
201
+ File.expects(:read).with("/path/to/file").returns("This\nis")
202
+ spell.expects(:perform_without_content_update).returns(:updated)
203
+ spell.perform.should == :updated
204
+ spell.content.should == "This\nis\nSparta!"
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,142 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe Wizard::Spells do
4
+
5
+ end
6
+
7
+ describe Wizard::Spells::Base do
8
+ subject do
9
+ Wizard::Spells::Base
10
+ end
11
+
12
+ describe ".all_forced?" do
13
+ it "should return false by default" do
14
+ subject.should_not be_all_forced
15
+ end
16
+ end
17
+
18
+ describe ".force_all!" do
19
+ it "should set force mode for all Spells" do
20
+ subject.force_all!
21
+ subject.should be_all_forced
22
+ end
23
+
24
+ after do
25
+ subject.send(:class_variable_set, "@@force_all", false)
26
+ end
27
+ end
28
+
29
+ describe "#force!" do
30
+ it "should set force mode for current action" do
31
+ base = subject.new
32
+ base.force!
33
+ base.instance_variable_get("@force").should == true
34
+ end
35
+ end
36
+
37
+ describe "#force?" do
38
+ context "when local force mode is enabled" do
39
+ context "and global disabled" do
40
+ it "should return true" do
41
+ base = subject.new
42
+ base.force!
43
+ base.should be_forced
44
+ end
45
+ end
46
+ end
47
+
48
+ context "when local force mode is disabled" do
49
+ context "and global disabled" do
50
+ it "should return false" do
51
+ base = subject.new
52
+ base.should_not be_forced
53
+ end
54
+ end
55
+
56
+ context "and global enabled" do
57
+ it "should return true" do
58
+ base = subject.new
59
+ base.force_all!
60
+ base.should be_forced
61
+ end
62
+ end
63
+
64
+ after do
65
+ subject.send(:class_variable_set, "@@force_all", false)
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "#status" do
71
+ it "should be nil by default" do
72
+ subject.new.status.should == nil
73
+ end
74
+
75
+ it "should return actual status" do
76
+ base = subject.new
77
+ base.instance_variable_set("@status", :test)
78
+ base.status.should == :test
79
+ end
80
+ end
81
+
82
+ it "#status! should set actual status" do
83
+ base = subject.new
84
+ base.send(:status!, :test)
85
+ base.status.should == :test
86
+ end
87
+
88
+ describe "#status?" do
89
+ before do
90
+ @base = subject.new
91
+ @base.send(:status!, :test)
92
+ end
93
+
94
+ it "should return true when given status is the same as actual" do
95
+ @base.should be_status(:test)
96
+ end
97
+
98
+ it "should return false when given status is different than actual" do
99
+ @base.should_not be_status(:invalid)
100
+ end
101
+ end
102
+
103
+ describe ".attr_status" do
104
+ before do
105
+ klass = Class.new(subject)
106
+ klass.attr_status :testing
107
+ @test = klass.new
108
+ end
109
+
110
+ it "should define shortcut for setting given status" do
111
+ @test.should respond_to(:testing!)
112
+ end
113
+
114
+ it "should define shortcut for checking given status" do
115
+ @test.should respond_to(:testing?)
116
+ end
117
+ end
118
+
119
+ describe "shortcuts created by .status" do
120
+ before do
121
+ klass = Class.new(subject)
122
+ klass.attr_status :testing
123
+ @test = klass.new
124
+ end
125
+
126
+ context "for setting status" do
127
+ it "should work properly" do
128
+ @test.send :testing!
129
+ @test.should be_status(:testing)
130
+ end
131
+ end
132
+
133
+ context "for checking status" do
134
+ it "should work properly" do
135
+ @test.send :testing!
136
+ @test.should be_testing
137
+ @test.send :status!, :another
138
+ @test.should_not be_testing
139
+ end
140
+ end
141
+ end
142
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wizard
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Kriss 'nu7hatch' Kowalik
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-31 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 0
33
+ version: "2.0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: mocha
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 25
45
+ segments:
46
+ - 0
47
+ - 9
48
+ version: "0.9"
49
+ type: :development
50
+ version_requirements: *id002
51
+ description: " Projects generator...\n"
52
+ email: chris@nu7hat.ch
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README.md
59
+ files:
60
+ - .gitignore
61
+ - CHANGELOG.md
62
+ - README.md
63
+ - Rakefile
64
+ - VERSION
65
+ - lib/wizard.rb
66
+ - lib/wizard/formula.rb
67
+ - lib/wizard/helpers.rb
68
+ - lib/wizard/spells.rb
69
+ - lib/wizard/spells/base.rb
70
+ - lib/wizard/spells/compile_template.rb
71
+ - lib/wizard/spells/execute_shell.rb
72
+ - lib/wizard/spells/make_dir.rb
73
+ - lib/wizard/spells/make_file.rb
74
+ - lib/wizard/spells/update_file.rb
75
+ - spec/helpers_spec.rb
76
+ - spec/spec_helper.rb
77
+ - spec/spells/compile_template_spec.rb
78
+ - spec/spells/execute_shell_spec.rb
79
+ - spec/spells/make_dir_spec.rb
80
+ - spec/spells/make_file_spec.rb
81
+ - spec/spells/update_file_spec.rb
82
+ - spec/spells_spec.rb
83
+ has_rdoc: true
84
+ homepage: http://github.com/nu7hatch/wizard
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --charset=UTF-8
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirements: []
111
+
112
+ rubyforge_project:
113
+ rubygems_version: 1.3.7
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: Projects generator and recipes compiler.
117
+ test_files:
118
+ - spec/helpers_spec.rb
119
+ - spec/spec_helper.rb
120
+ - spec/spells/make_file_spec.rb
121
+ - spec/spells/compile_template_spec.rb
122
+ - spec/spells/execute_shell_spec.rb
123
+ - spec/spells/make_dir_spec.rb
124
+ - spec/spells/update_file_spec.rb
125
+ - spec/spells_spec.rb