thor 0.14.4 → 0.14.5
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/CHANGELOG.rdoc +11 -0
- data/Thorfile +9 -55
- data/lib/thor.rb +17 -0
- data/lib/thor/actions.rb +11 -6
- data/lib/thor/actions/create_file.rb +2 -2
- data/lib/thor/actions/create_link.rb +57 -0
- data/lib/thor/actions/file_manipulation.rb +36 -12
- data/lib/thor/actions/inject_into_file.rb +15 -10
- data/lib/thor/parser/option.rb +1 -1
- data/lib/thor/task.rb +1 -1
- data/lib/thor/version.rb +1 -1
- data/spec/actions/create_file_spec.rb +27 -27
- data/spec/actions/directory_spec.rb +23 -23
- data/spec/actions/empty_directory_spec.rb +12 -12
- data/spec/actions/file_manipulation_spec.rb +65 -42
- data/spec/actions/inject_into_file_spec.rb +24 -24
- data/spec/actions_spec.rb +63 -58
- data/spec/base_spec.rb +60 -60
- data/spec/core_ext/hash_with_indifferent_access_spec.rb +14 -14
- data/spec/core_ext/ordered_hash_spec.rb +28 -28
- data/spec/group_spec.rb +39 -39
- data/spec/invocation_spec.rb +21 -21
- data/spec/parser/argument_spec.rb +7 -7
- data/spec/parser/arguments_spec.rb +11 -11
- data/spec/parser/option_spec.rb +45 -45
- data/spec/parser/options_spec.rb +75 -75
- data/spec/rake_compat_spec.rb +10 -10
- data/spec/register_spec.rb +92 -0
- data/spec/runner_spec.rb +32 -32
- data/spec/shell/basic_spec.rb +18 -18
- data/spec/shell/color_spec.rb +3 -3
- data/spec/shell_spec.rb +10 -10
- data/spec/spec_helper.rb +9 -10
- data/spec/task_spec.rb +8 -8
- data/spec/thor_spec.rb +62 -62
- data/spec/util_spec.rb +35 -35
- metadata +100 -68
- data/spec/spec.opts +0 -1
@@ -28,8 +28,8 @@ describe Thor::Actions::Directory do
|
|
28
28
|
source = File.join(source_root, source_path, file)
|
29
29
|
destination = File.join(destination_root, destination_path, file)
|
30
30
|
|
31
|
-
File.exists?(destination).
|
32
|
-
FileUtils.identical?(source, destination).
|
31
|
+
File.exists?(destination).should be_true
|
32
|
+
FileUtils.identical?(source, destination).should be_true
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -37,12 +37,12 @@ describe Thor::Actions::Directory do
|
|
37
37
|
it "raises an error if the source does not exist" do
|
38
38
|
lambda {
|
39
39
|
invoke! "unknown"
|
40
|
-
}.
|
40
|
+
}.should raise_error(Thor::Error, /Could not find "unknown" in any of your source paths/)
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should not create a directory in pretend mode" do
|
44
44
|
invoke! "doc", "ghost", :pretend => true
|
45
|
-
File.exists?("ghost").
|
45
|
+
File.exists?("ghost").should be_false
|
46
46
|
end
|
47
47
|
|
48
48
|
it "copies the whole directory recursively to the default destination" do
|
@@ -59,13 +59,13 @@ describe Thor::Actions::Directory do
|
|
59
59
|
invoke! ".", "tasks", :recursive => false
|
60
60
|
|
61
61
|
file = File.join(destination_root, "tasks", "group.thor")
|
62
|
-
File.exists?(file).
|
62
|
+
File.exists?(file).should be_true
|
63
63
|
|
64
64
|
file = File.join(destination_root, "tasks", "doc")
|
65
|
-
File.exists?(file).
|
65
|
+
File.exists?(file).should be_false
|
66
66
|
|
67
67
|
file = File.join(destination_root, "tasks", "doc", "README")
|
68
|
-
File.exists?(file).
|
68
|
+
File.exists?(file).should be_false
|
69
69
|
end
|
70
70
|
|
71
71
|
it "copies files from the source relative to the current path" do
|
@@ -78,40 +78,40 @@ describe Thor::Actions::Directory do
|
|
78
78
|
it "copies and evaluates templates" do
|
79
79
|
invoke! "doc", "docs"
|
80
80
|
file = File.join(destination_root, "docs", "rdoc.rb")
|
81
|
-
File.exists?(file).
|
82
|
-
File.read(file).
|
81
|
+
File.exists?(file).should be_true
|
82
|
+
File.read(file).should == "FOO = FOO\n"
|
83
83
|
end
|
84
84
|
|
85
85
|
it "copies directories" do
|
86
86
|
invoke! "doc", "docs"
|
87
87
|
file = File.join(destination_root, "docs", "components")
|
88
|
-
File.exists?(file).
|
89
|
-
File.directory?(file).
|
88
|
+
File.exists?(file).should be_true
|
89
|
+
File.directory?(file).should be_true
|
90
90
|
end
|
91
91
|
|
92
92
|
it "does not copy .empty_directory files" do
|
93
93
|
invoke! "doc", "docs"
|
94
94
|
file = File.join(destination_root, "docs", "components", ".empty_directory")
|
95
|
-
File.exists?(file).
|
95
|
+
File.exists?(file).should be_false
|
96
96
|
end
|
97
97
|
|
98
98
|
it "copies directories even if they are empty" do
|
99
99
|
invoke! "doc/components", "docs/components"
|
100
100
|
file = File.join(destination_root, "docs", "components")
|
101
|
-
File.exists?(file).
|
101
|
+
File.exists?(file).should be_true
|
102
102
|
end
|
103
103
|
|
104
104
|
it "does not copy empty directories twice" do
|
105
105
|
content = invoke!("doc/components", "docs/components")
|
106
|
-
content.
|
106
|
+
content.should_not =~ /exist/
|
107
107
|
end
|
108
108
|
|
109
109
|
it "logs status" do
|
110
110
|
content = invoke!("doc")
|
111
|
-
content.
|
112
|
-
content.
|
113
|
-
content.
|
114
|
-
content.
|
111
|
+
content.should =~ /create doc\/README/
|
112
|
+
content.should =~ /create doc\/config\.rb/
|
113
|
+
content.should =~ /create doc\/rdoc\.rb/
|
114
|
+
content.should =~ /create doc\/components/
|
115
115
|
end
|
116
116
|
|
117
117
|
it "yields a block" do
|
@@ -119,7 +119,7 @@ describe Thor::Actions::Directory do
|
|
119
119
|
invoke!("doc") do |content|
|
120
120
|
checked ||= !!(content =~ /FOO/)
|
121
121
|
end
|
122
|
-
checked.
|
122
|
+
checked.should be_true
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
@@ -128,9 +128,9 @@ describe Thor::Actions::Directory do
|
|
128
128
|
invoke! "doc"
|
129
129
|
revoke! "doc"
|
130
130
|
|
131
|
-
File.exists?(File.join(destination_root, "doc", "README")).
|
132
|
-
File.exists?(File.join(destination_root, "doc", "config.rb")).
|
133
|
-
File.exists?(File.join(destination_root, "doc", "components")).
|
131
|
+
File.exists?(File.join(destination_root, "doc", "README")).should be_false
|
132
|
+
File.exists?(File.join(destination_root, "doc", "config.rb")).should be_false
|
133
|
+
File.exists?(File.join(destination_root, "doc", "components")).should be_false
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
@@ -19,17 +19,17 @@ describe Thor::Actions::EmptyDirectory do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def base
|
22
|
-
@base ||= MyCounter.new([1,2],
|
22
|
+
@base ||= MyCounter.new([1,2], {}, { :destination_root => destination_root })
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "#destination" do
|
26
26
|
it "returns the full destination with the destination_root" do
|
27
|
-
empty_directory('doc').destination.
|
27
|
+
empty_directory('doc').destination.should == File.join(destination_root, 'doc')
|
28
28
|
end
|
29
29
|
|
30
30
|
it "takes relative root into account" do
|
31
31
|
base.inside('doc') do
|
32
|
-
empty_directory('contents').destination.
|
32
|
+
empty_directory('contents').destination.should == File.join(destination_root, 'doc', 'contents')
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -37,7 +37,7 @@ describe Thor::Actions::EmptyDirectory do
|
|
37
37
|
describe "#relative_destination" do
|
38
38
|
it "returns the relative destination to the original destination root" do
|
39
39
|
base.inside('doc') do
|
40
|
-
empty_directory('contents').relative_destination.
|
40
|
+
empty_directory('contents').relative_destination.should == 'doc/contents'
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -45,7 +45,7 @@ describe Thor::Actions::EmptyDirectory do
|
|
45
45
|
describe "#given_destination" do
|
46
46
|
it "returns the destination supplied by the user" do
|
47
47
|
base.inside('doc') do
|
48
|
-
empty_directory('contents').given_destination.
|
48
|
+
empty_directory('contents').given_destination.should == 'contents'
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -54,26 +54,26 @@ describe Thor::Actions::EmptyDirectory do
|
|
54
54
|
it "copies the file to the specified destination" do
|
55
55
|
empty_directory("doc")
|
56
56
|
invoke!
|
57
|
-
File.exists?(File.join(destination_root, "doc")).
|
57
|
+
File.exists?(File.join(destination_root, "doc")).should be_true
|
58
58
|
end
|
59
59
|
|
60
60
|
it "shows created status to the user" do
|
61
61
|
empty_directory("doc")
|
62
|
-
invoke!.
|
62
|
+
invoke!.should == " create doc\n"
|
63
63
|
end
|
64
64
|
|
65
65
|
it "does not create a directory if pretending" do
|
66
66
|
base.inside("foo", :pretend => true) do
|
67
67
|
empty_directory("ghost")
|
68
68
|
end
|
69
|
-
File.exists?(File.join(base.destination_root, "ghost")).
|
69
|
+
File.exists?(File.join(base.destination_root, "ghost")).should be_false
|
70
70
|
end
|
71
71
|
|
72
72
|
describe "when directory exists" do
|
73
73
|
it "shows exist status" do
|
74
74
|
empty_directory("doc")
|
75
75
|
invoke!
|
76
|
-
invoke!.
|
76
|
+
invoke!.should == " exist doc\n"
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -83,16 +83,16 @@ describe Thor::Actions::EmptyDirectory do
|
|
83
83
|
empty_directory("doc")
|
84
84
|
invoke!
|
85
85
|
revoke!
|
86
|
-
File.exists?(@action.destination).
|
86
|
+
File.exists?(@action.destination).should be_false
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
90
|
describe "#exists?" do
|
91
91
|
it "returns true if the destination file exists" do
|
92
92
|
empty_directory("doc")
|
93
|
-
@action.exists?.
|
93
|
+
@action.exists?.should be_false
|
94
94
|
invoke!
|
95
|
-
@action.exists?.
|
95
|
+
@action.exists?.should be_true
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
@@ -13,10 +13,10 @@ describe Thor::Actions do
|
|
13
13
|
|
14
14
|
def exists_and_identical?(source, destination)
|
15
15
|
destination = File.join(destination_root, destination)
|
16
|
-
File.exists?(destination).
|
16
|
+
File.exists?(destination).should be_true
|
17
17
|
|
18
18
|
source = File.join(source_root, source)
|
19
|
-
FileUtils.
|
19
|
+
FileUtils.should be_identical(source, destination)
|
20
20
|
end
|
21
21
|
|
22
22
|
def file
|
@@ -41,12 +41,12 @@ describe Thor::Actions do
|
|
41
41
|
|
42
42
|
it "logs status" do
|
43
43
|
FileUtils.should_receive(:chmod_R).with(0755, file)
|
44
|
-
action(:chmod, "foo", 0755).
|
44
|
+
action(:chmod, "foo", 0755).should == " chmod foo\n"
|
45
45
|
end
|
46
46
|
|
47
47
|
it "does not log status if required" do
|
48
48
|
FileUtils.should_receive(:chmod_R).with(0755, file)
|
49
|
-
action(:chmod, "foo", 0755, :verbose => false).
|
49
|
+
action(:chmod, "foo", 0755, :verbose => false).should be_empty
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -69,14 +69,37 @@ describe Thor::Actions do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "logs status" do
|
72
|
-
action(:copy_file, "task.thor").
|
72
|
+
action(:copy_file, "task.thor").should == " create task.thor\n"
|
73
73
|
end
|
74
74
|
|
75
75
|
it "accepts a block to change output" do
|
76
76
|
action :copy_file, "task.thor" do |content|
|
77
77
|
"OMG" + content
|
78
78
|
end
|
79
|
-
File.read(File.join(destination_root, "task.thor")).
|
79
|
+
File.read(File.join(destination_root, "task.thor")).should =~ /^OMG/
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#link_file" do
|
84
|
+
it "links file from source to default destination" do
|
85
|
+
action :link_file, "task.thor"
|
86
|
+
exists_and_identical?("task.thor", "task.thor")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "links file from source to the specified destination" do
|
90
|
+
action :link_file, "task.thor", "foo.thor"
|
91
|
+
exists_and_identical?("task.thor", "foo.thor")
|
92
|
+
end
|
93
|
+
|
94
|
+
it "links file from the source relative to the current path" do
|
95
|
+
runner.inside("doc") do
|
96
|
+
action :link_file, "README"
|
97
|
+
end
|
98
|
+
exists_and_identical?("doc/README", "doc/README")
|
99
|
+
end
|
100
|
+
|
101
|
+
it "logs status" do
|
102
|
+
action(:link_file, "task.thor").should == " create task.thor\n"
|
80
103
|
end
|
81
104
|
end
|
82
105
|
|
@@ -98,19 +121,19 @@ describe Thor::Actions do
|
|
98
121
|
|
99
122
|
it "yields file content to a block" do
|
100
123
|
action :get, "doc/README" do |content|
|
101
|
-
content.
|
124
|
+
content.should == "__start__\nREADME\n__end__\n"
|
102
125
|
end
|
103
126
|
end
|
104
127
|
|
105
128
|
it "logs status" do
|
106
|
-
action(:get, "doc/README", "docs/README").
|
129
|
+
action(:get, "doc/README", "docs/README").should == " create docs/README\n"
|
107
130
|
end
|
108
131
|
|
109
132
|
it "accepts http remote sources" do
|
110
133
|
body = "__start__\nHTTPFILE\n__end__\n"
|
111
134
|
FakeWeb.register_uri(:get, 'http://example.com/file.txt', :body => body)
|
112
135
|
action :get, 'http://example.com/file.txt' do |content|
|
113
|
-
content.
|
136
|
+
content.should == body
|
114
137
|
end
|
115
138
|
FakeWeb.clean_registry
|
116
139
|
end
|
@@ -119,7 +142,7 @@ describe Thor::Actions do
|
|
119
142
|
body = "__start__\nHTTPSFILE\n__end__\n"
|
120
143
|
FakeWeb.register_uri(:get, 'https://example.com/file.txt', :body => body)
|
121
144
|
action :get, 'https://example.com/file.txt' do |content|
|
122
|
-
content.
|
145
|
+
content.should == body
|
123
146
|
end
|
124
147
|
FakeWeb.clean_registry
|
125
148
|
end
|
@@ -130,7 +153,7 @@ describe Thor::Actions do
|
|
130
153
|
action :template, "doc/block_helper.rb"
|
131
154
|
|
132
155
|
file = File.join(destination_root, "doc/block_helper.rb")
|
133
|
-
File.read(file).
|
156
|
+
File.read(file).should == "Hello world!"
|
134
157
|
end
|
135
158
|
|
136
159
|
it "evaluates the template given as source" do
|
@@ -138,31 +161,31 @@ describe Thor::Actions do
|
|
138
161
|
action :template, "doc/config.rb"
|
139
162
|
|
140
163
|
file = File.join(destination_root, "doc/config.rb")
|
141
|
-
File.read(file).
|
164
|
+
File.read(file).should == "class Config; end\n"
|
142
165
|
end
|
143
166
|
|
144
167
|
it "copies the template to the specified destination" do
|
145
168
|
action :template, "doc/config.rb", "doc/configuration.rb"
|
146
169
|
file = File.join(destination_root, "doc/configuration.rb")
|
147
|
-
File.exists?(file).
|
170
|
+
File.exists?(file).should be_true
|
148
171
|
end
|
149
172
|
|
150
173
|
it "converts enconded instructions" do
|
151
174
|
runner.should_receive(:file_name).and_return("rdoc")
|
152
175
|
action :template, "doc/%file_name%.rb.tt"
|
153
176
|
file = File.join(destination_root, "doc/rdoc.rb.tt")
|
154
|
-
File.exists?(file).
|
177
|
+
File.exists?(file).should be_true
|
155
178
|
end
|
156
179
|
|
157
180
|
it "logs status" do
|
158
|
-
capture(:stdout){ runner.template("doc/config.rb") }.
|
181
|
+
capture(:stdout){ runner.template("doc/config.rb") }.should == " create doc/config.rb\n"
|
159
182
|
end
|
160
183
|
|
161
184
|
it "accepts a block to change output" do
|
162
185
|
action :template, "doc/config.rb" do |content|
|
163
186
|
"OMG" + content
|
164
187
|
end
|
165
|
-
File.read(File.join(destination_root, "doc/config.rb")).
|
188
|
+
File.read(File.join(destination_root, "doc/config.rb")).should =~ /^OMG/
|
166
189
|
end
|
167
190
|
end
|
168
191
|
|
@@ -178,84 +201,84 @@ describe Thor::Actions do
|
|
178
201
|
describe "#remove_file" do
|
179
202
|
it "removes the file given" do
|
180
203
|
action :remove_file, "doc/README"
|
181
|
-
File.exists?(file).
|
204
|
+
File.exists?(file).should be_false
|
182
205
|
end
|
183
206
|
|
184
207
|
it "removes directories too" do
|
185
208
|
action :remove_dir, "doc"
|
186
|
-
File.exists?(File.join(destination_root, "doc")).
|
209
|
+
File.exists?(File.join(destination_root, "doc")).should be_false
|
187
210
|
end
|
188
211
|
|
189
212
|
it "does not remove if pretending" do
|
190
213
|
runner(:pretend => true)
|
191
214
|
action :remove_file, "doc/README"
|
192
|
-
File.exists?(file).
|
215
|
+
File.exists?(file).should be_true
|
193
216
|
end
|
194
217
|
|
195
218
|
it "logs status" do
|
196
|
-
action(:remove_file, "doc/README").
|
219
|
+
action(:remove_file, "doc/README").should == " remove doc/README\n"
|
197
220
|
end
|
198
221
|
|
199
222
|
it "does not log status if required" do
|
200
|
-
action(:remove_file, "doc/README", :verbose => false).
|
223
|
+
action(:remove_file, "doc/README", :verbose => false).should be_empty
|
201
224
|
end
|
202
225
|
end
|
203
226
|
|
204
227
|
describe "#gsub_file" do
|
205
228
|
it "replaces the content in the file" do
|
206
229
|
action :gsub_file, "doc/README", "__start__", "START"
|
207
|
-
File.binread(file).
|
230
|
+
File.binread(file).should == "START\nREADME\n__end__\n"
|
208
231
|
end
|
209
232
|
|
210
233
|
it "does not replace if pretending" do
|
211
234
|
runner(:pretend => true)
|
212
235
|
action :gsub_file, "doc/README", "__start__", "START"
|
213
|
-
File.binread(file).
|
236
|
+
File.binread(file).should == "__start__\nREADME\n__end__\n"
|
214
237
|
end
|
215
238
|
|
216
239
|
it "accepts a block" do
|
217
240
|
action(:gsub_file, "doc/README", "__start__"){ |match| match.gsub('__', '').upcase }
|
218
|
-
File.binread(file).
|
241
|
+
File.binread(file).should == "START\nREADME\n__end__\n"
|
219
242
|
end
|
220
243
|
|
221
244
|
it "logs status" do
|
222
|
-
action(:gsub_file, "doc/README", "__start__", "START").
|
245
|
+
action(:gsub_file, "doc/README", "__start__", "START").should == " gsub doc/README\n"
|
223
246
|
end
|
224
247
|
|
225
248
|
it "does not log status if required" do
|
226
|
-
action(:gsub_file, file, "__", :verbose => false){ |match| match * 2 }.
|
249
|
+
action(:gsub_file, file, "__", :verbose => false){ |match| match * 2 }.should be_empty
|
227
250
|
end
|
228
251
|
end
|
229
252
|
|
230
|
-
describe "#
|
253
|
+
describe "#append_to_file" do
|
231
254
|
it "appends content to the file" do
|
232
|
-
action :
|
233
|
-
File.binread(file).
|
255
|
+
action :append_to_file, "doc/README", "END\n"
|
256
|
+
File.binread(file).should == "__start__\nREADME\n__end__\nEND\n"
|
234
257
|
end
|
235
258
|
|
236
259
|
it "accepts a block" do
|
237
|
-
action(:
|
238
|
-
File.binread(file).
|
260
|
+
action(:append_to_file, "doc/README"){ "END\n" }
|
261
|
+
File.binread(file).should == "__start__\nREADME\n__end__\nEND\n"
|
239
262
|
end
|
240
263
|
|
241
264
|
it "logs status" do
|
242
|
-
action(:
|
265
|
+
action(:append_to_file, "doc/README", "END").should == " append doc/README\n"
|
243
266
|
end
|
244
267
|
end
|
245
268
|
|
246
|
-
describe "#
|
269
|
+
describe "#prepend_to_file" do
|
247
270
|
it "prepends content to the file" do
|
248
|
-
action :
|
249
|
-
File.binread(file).
|
271
|
+
action :prepend_to_file, "doc/README", "START\n"
|
272
|
+
File.binread(file).should == "START\n__start__\nREADME\n__end__\n"
|
250
273
|
end
|
251
274
|
|
252
275
|
it "accepts a block" do
|
253
|
-
action(:
|
254
|
-
File.binread(file).
|
276
|
+
action(:prepend_to_file, "doc/README"){ "START\n" }
|
277
|
+
File.binread(file).should == "START\n__start__\nREADME\n__end__\n"
|
255
278
|
end
|
256
279
|
|
257
280
|
it "logs status" do
|
258
|
-
action(:
|
281
|
+
action(:prepend_to_file, "doc/README", "START").should == " prepend doc/README\n"
|
259
282
|
end
|
260
283
|
end
|
261
284
|
|
@@ -266,21 +289,21 @@ describe Thor::Actions do
|
|
266
289
|
|
267
290
|
it "appends content to a class" do
|
268
291
|
action :inject_into_class, "application.rb", Application, " filter_parameters :password\n"
|
269
|
-
File.binread(file).
|
292
|
+
File.binread(file).should == "class Application < Base\n filter_parameters :password\nend\n"
|
270
293
|
end
|
271
294
|
|
272
295
|
it "accepts a block" do
|
273
296
|
action(:inject_into_class, "application.rb", Application){ " filter_parameters :password\n" }
|
274
|
-
File.binread(file).
|
297
|
+
File.binread(file).should == "class Application < Base\n filter_parameters :password\nend\n"
|
275
298
|
end
|
276
299
|
|
277
300
|
it "logs status" do
|
278
|
-
action(:inject_into_class, "application.rb", Application, " filter_parameters :password\n").
|
301
|
+
action(:inject_into_class, "application.rb", Application, " filter_parameters :password\n").should == " insert application.rb\n"
|
279
302
|
end
|
280
303
|
|
281
304
|
it "does not append if class name does not match" do
|
282
305
|
action :inject_into_class, "application.rb", "App", " filter_parameters :password\n"
|
283
|
-
File.binread(file).
|
306
|
+
File.binread(file).should == "class Application < Base\nend\n"
|
284
307
|
end
|
285
308
|
end
|
286
309
|
end
|