thor 0.16.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +15 -0
  3. data/README.md +23 -6
  4. data/bin/thor +1 -1
  5. data/lib/thor/actions/create_file.rb +34 -35
  6. data/lib/thor/actions/create_link.rb +9 -5
  7. data/lib/thor/actions/directory.rb +33 -23
  8. data/lib/thor/actions/empty_directory.rb +75 -85
  9. data/lib/thor/actions/file_manipulation.rb +103 -36
  10. data/lib/thor/actions/inject_into_file.rb +46 -36
  11. data/lib/thor/actions.rb +90 -68
  12. data/lib/thor/base.rb +302 -244
  13. data/lib/thor/command.rb +142 -0
  14. data/lib/thor/core_ext/hash_with_indifferent_access.rb +52 -24
  15. data/lib/thor/error.rb +90 -10
  16. data/lib/thor/group.rb +70 -74
  17. data/lib/thor/invocation.rb +63 -55
  18. data/lib/thor/line_editor/basic.rb +37 -0
  19. data/lib/thor/line_editor/readline.rb +88 -0
  20. data/lib/thor/line_editor.rb +17 -0
  21. data/lib/thor/nested_context.rb +29 -0
  22. data/lib/thor/parser/argument.rb +24 -28
  23. data/lib/thor/parser/arguments.rb +110 -102
  24. data/lib/thor/parser/option.rb +53 -15
  25. data/lib/thor/parser/options.rb +174 -97
  26. data/lib/thor/parser.rb +4 -4
  27. data/lib/thor/rake_compat.rb +12 -11
  28. data/lib/thor/runner.rb +159 -155
  29. data/lib/thor/shell/basic.rb +216 -93
  30. data/lib/thor/shell/color.rb +53 -40
  31. data/lib/thor/shell/html.rb +61 -58
  32. data/lib/thor/shell.rb +29 -36
  33. data/lib/thor/util.rb +231 -213
  34. data/lib/thor/version.rb +1 -1
  35. data/lib/thor.rb +303 -166
  36. data/thor.gemspec +27 -24
  37. metadata +36 -226
  38. data/.gitignore +0 -44
  39. data/.rspec +0 -2
  40. data/.travis.yml +0 -7
  41. data/CHANGELOG.rdoc +0 -134
  42. data/Gemfile +0 -15
  43. data/Thorfile +0 -30
  44. data/bin/rake2thor +0 -86
  45. data/lib/thor/core_ext/dir_escape.rb +0 -0
  46. data/lib/thor/core_ext/file_binary_read.rb +0 -9
  47. data/lib/thor/core_ext/ordered_hash.rb +0 -100
  48. data/lib/thor/task.rb +0 -132
  49. data/spec/actions/create_file_spec.rb +0 -170
  50. data/spec/actions/create_link_spec.rb +0 -81
  51. data/spec/actions/directory_spec.rb +0 -149
  52. data/spec/actions/empty_directory_spec.rb +0 -130
  53. data/spec/actions/file_manipulation_spec.rb +0 -370
  54. data/spec/actions/inject_into_file_spec.rb +0 -135
  55. data/spec/actions_spec.rb +0 -331
  56. data/spec/base_spec.rb +0 -279
  57. data/spec/core_ext/hash_with_indifferent_access_spec.rb +0 -43
  58. data/spec/core_ext/ordered_hash_spec.rb +0 -115
  59. data/spec/exit_condition_spec.rb +0 -19
  60. data/spec/fixtures/application.rb +0 -2
  61. data/spec/fixtures/app{1}/README +0 -3
  62. data/spec/fixtures/bundle/execute.rb +0 -6
  63. data/spec/fixtures/bundle/main.thor +0 -1
  64. data/spec/fixtures/doc/%file_name%.rb.tt +0 -1
  65. data/spec/fixtures/doc/COMMENTER +0 -10
  66. data/spec/fixtures/doc/README +0 -3
  67. data/spec/fixtures/doc/block_helper.rb +0 -3
  68. data/spec/fixtures/doc/components/.empty_directory +0 -0
  69. data/spec/fixtures/doc/config.rb +0 -1
  70. data/spec/fixtures/doc/config.yaml.tt +0 -1
  71. data/spec/fixtures/enum.thor +0 -10
  72. data/spec/fixtures/group.thor +0 -114
  73. data/spec/fixtures/invoke.thor +0 -112
  74. data/spec/fixtures/path with spaces +0 -0
  75. data/spec/fixtures/script.thor +0 -190
  76. data/spec/fixtures/task.thor +0 -10
  77. data/spec/group_spec.rb +0 -216
  78. data/spec/invocation_spec.rb +0 -100
  79. data/spec/parser/argument_spec.rb +0 -53
  80. data/spec/parser/arguments_spec.rb +0 -66
  81. data/spec/parser/option_spec.rb +0 -202
  82. data/spec/parser/options_spec.rb +0 -330
  83. data/spec/rake_compat_spec.rb +0 -72
  84. data/spec/register_spec.rb +0 -135
  85. data/spec/runner_spec.rb +0 -241
  86. data/spec/shell/basic_spec.rb +0 -300
  87. data/spec/shell/color_spec.rb +0 -81
  88. data/spec/shell/html_spec.rb +0 -32
  89. data/spec/shell_spec.rb +0 -47
  90. data/spec/spec_helper.rb +0 -59
  91. data/spec/task_spec.rb +0 -80
  92. data/spec/thor_spec.rb +0 -418
  93. data/spec/util_spec.rb +0 -196
@@ -1,149 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'thor/actions'
3
-
4
- describe Thor::Actions::Directory do
5
- before do
6
- ::FileUtils.rm_rf(destination_root)
7
- invoker.stub!(:file_name).and_return("rdoc")
8
- end
9
-
10
- def invoker
11
- @invoker ||= WhinyGenerator.new([1,2], {}, { :destination_root => destination_root })
12
- end
13
-
14
- def revoker
15
- @revoker ||= WhinyGenerator.new([1,2], {}, { :destination_root => destination_root, :behavior => :revoke })
16
- end
17
-
18
- def invoke!(*args, &block)
19
- capture(:stdout){ invoker.directory(*args, &block) }
20
- end
21
-
22
- def revoke!(*args, &block)
23
- capture(:stdout){ revoker.directory(*args, &block) }
24
- end
25
-
26
- def exists_and_identical?(source_path, destination_path)
27
- %w(config.rb README).each do |file|
28
- source = File.join(source_root, source_path, file)
29
- destination = File.join(destination_root, destination_path, file)
30
-
31
- File.exists?(destination).should be_true
32
- FileUtils.identical?(source, destination).should be_true
33
- end
34
- end
35
-
36
- describe "#invoke!" do
37
- it "raises an error if the source does not exist" do
38
- lambda {
39
- invoke! "unknown"
40
- }.should raise_error(Thor::Error, /Could not find "unknown" in any of your source paths/)
41
- end
42
-
43
- it "should not create a directory in pretend mode" do
44
- invoke! "doc", "ghost", :pretend => true
45
- File.exists?("ghost").should be_false
46
- end
47
-
48
- it "copies the whole directory recursively to the default destination" do
49
- invoke! "doc"
50
- exists_and_identical?("doc", "doc")
51
- end
52
-
53
- it "copies the whole directory recursively to the specified destination" do
54
- invoke! "doc", "docs"
55
- exists_and_identical?("doc", "docs")
56
- end
57
-
58
- it "copies only the first level files if recursive" do
59
- invoke! ".", "tasks", :recursive => false
60
-
61
- file = File.join(destination_root, "tasks", "group.thor")
62
- File.exists?(file).should be_true
63
-
64
- file = File.join(destination_root, "tasks", "doc")
65
- File.exists?(file).should be_false
66
-
67
- file = File.join(destination_root, "tasks", "doc", "README")
68
- File.exists?(file).should be_false
69
- end
70
-
71
- it "copies files from the source relative to the current path" do
72
- invoker.inside "doc" do
73
- invoke! "."
74
- end
75
- exists_and_identical?("doc", "doc")
76
- end
77
-
78
- it "copies and evaluates templates" do
79
- invoke! "doc", "docs"
80
- file = File.join(destination_root, "docs", "rdoc.rb")
81
- File.exists?(file).should be_true
82
- File.read(file).should == "FOO = FOO\n"
83
- end
84
-
85
- it "copies directories" do
86
- invoke! "doc", "docs"
87
- file = File.join(destination_root, "docs", "components")
88
- File.exists?(file).should be_true
89
- File.directory?(file).should be_true
90
- end
91
-
92
- it "does not copy .empty_directory files" do
93
- invoke! "doc", "docs"
94
- file = File.join(destination_root, "docs", "components", ".empty_directory")
95
- File.exists?(file).should be_false
96
- end
97
-
98
- it "copies directories even if they are empty" do
99
- invoke! "doc/components", "docs/components"
100
- file = File.join(destination_root, "docs", "components")
101
- File.exists?(file).should be_true
102
- end
103
-
104
- it "does not copy empty directories twice" do
105
- content = invoke!("doc/components", "docs/components")
106
- content.should_not =~ /exist/
107
- end
108
-
109
- it "logs status" do
110
- content = invoke!("doc")
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
- end
116
-
117
- it "yields a block" do
118
- checked = false
119
- invoke!("doc") do |content|
120
- checked ||= !!(content =~ /FOO/)
121
- end
122
- checked.should be_true
123
- end
124
-
125
- it "works with glob characters in the path" do
126
- content = invoke!("app{1}")
127
- content.should =~ /create app\{1\}\/README/
128
- end
129
- end
130
-
131
- describe "#revoke!" do
132
- it "removes the destination file" do
133
- invoke! "doc"
134
- revoke! "doc"
135
-
136
- File.exists?(File.join(destination_root, "doc", "README")).should be_false
137
- File.exists?(File.join(destination_root, "doc", "config.rb")).should be_false
138
- File.exists?(File.join(destination_root, "doc", "components")).should be_false
139
- end
140
-
141
- it "works with glob characters in the path" do
142
- invoke! "app{1}"
143
- File.exists?(File.join(destination_root, "app{1}", "README")).should be_true
144
-
145
- revoke! "app{1}"
146
- File.exists?(File.join(destination_root, "app{1}", "README")).should be_false
147
- end
148
- end
149
- end
@@ -1,130 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require 'thor/actions'
3
-
4
- describe Thor::Actions::EmptyDirectory do
5
- before do
6
- ::FileUtils.rm_rf(destination_root)
7
- end
8
-
9
- def empty_directory(destination, options={})
10
- @action = Thor::Actions::EmptyDirectory.new(base, destination)
11
- end
12
-
13
- def invoke!
14
- capture(:stdout){ @action.invoke! }
15
- end
16
-
17
- def revoke!
18
- capture(:stdout){ @action.revoke! }
19
- end
20
-
21
- def base
22
- @base ||= MyCounter.new([1,2], {}, { :destination_root => destination_root })
23
- end
24
-
25
- describe "#destination" do
26
- it "returns the full destination with the destination_root" do
27
- empty_directory('doc').destination.should == File.join(destination_root, 'doc')
28
- end
29
-
30
- it "takes relative root into account" do
31
- base.inside('doc') do
32
- empty_directory('contents').destination.should == File.join(destination_root, 'doc', 'contents')
33
- end
34
- end
35
- end
36
-
37
- describe "#relative_destination" do
38
- it "returns the relative destination to the original destination root" do
39
- base.inside('doc') do
40
- empty_directory('contents').relative_destination.should == 'doc/contents'
41
- end
42
- end
43
- end
44
-
45
- describe "#given_destination" do
46
- it "returns the destination supplied by the user" do
47
- base.inside('doc') do
48
- empty_directory('contents').given_destination.should == 'contents'
49
- end
50
- end
51
- end
52
-
53
- describe "#invoke!" do
54
- it "copies the file to the specified destination" do
55
- empty_directory("doc")
56
- invoke!
57
- File.exists?(File.join(destination_root, "doc")).should be_true
58
- end
59
-
60
- it "shows created status to the user" do
61
- empty_directory("doc")
62
- invoke!.should == " create doc\n"
63
- end
64
-
65
- it "does not create a directory if pretending" do
66
- base.inside("foo", :pretend => true) do
67
- empty_directory("ghost")
68
- end
69
- File.exists?(File.join(base.destination_root, "ghost")).should be_false
70
- end
71
-
72
- describe "when directory exists" do
73
- it "shows exist status" do
74
- empty_directory("doc")
75
- invoke!
76
- invoke!.should == " exist doc\n"
77
- end
78
- end
79
- end
80
-
81
- describe "#revoke!" do
82
- it "removes the destination file" do
83
- empty_directory("doc")
84
- invoke!
85
- revoke!
86
- File.exists?(@action.destination).should be_false
87
- end
88
- end
89
-
90
- describe "#exists?" do
91
- it "returns true if the destination file exists" do
92
- empty_directory("doc")
93
- @action.exists?.should be_false
94
- invoke!
95
- @action.exists?.should be_true
96
- end
97
- end
98
-
99
- context "protected methods" do
100
- describe "#convert_encoded_instructions" do
101
- before do
102
- empty_directory("test_dir")
103
- @action.base.stub!(:file_name).and_return("expected")
104
- end
105
-
106
- it "accepts and executes a 'legal' %\w+% encoded instruction" do
107
- @action.send(:convert_encoded_instructions, "%file_name%.txt").should == "expected.txt"
108
- end
109
-
110
- it "ignores an 'illegal' %\w+% encoded instruction" do
111
- @action.send(:convert_encoded_instructions, "%some_name%.txt").should == "%some_name%.txt"
112
- end
113
-
114
- it "ignores incorrectly encoded instruction" do
115
- @action.send(:convert_encoded_instructions, "%some.name%.txt").should == "%some.name%.txt"
116
- end
117
-
118
- it "raises an error if the instruction refers to a private method" do
119
- module PrivExt
120
- private
121
- def private_file_name
122
- "something_hidden"
123
- end
124
- end
125
- @action.base.extend(PrivExt)
126
- expect { @action.send(:convert_encoded_instructions, "%private_file_name%.txt") }.to raise_error Thor::PrivateMethodEncodedError
127
- end
128
- end
129
- end
130
- end
@@ -1,370 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- class Application; end
4
-
5
- describe Thor::Actions do
6
- def runner(options={})
7
- @runner ||= MyCounter.new([1], options, { :destination_root => destination_root })
8
- end
9
-
10
- def action(*args, &block)
11
- capture(:stdout){ runner.send(*args, &block) }
12
- end
13
-
14
- def exists_and_identical?(source, destination)
15
- destination = File.join(destination_root, destination)
16
- File.exists?(destination).should be_true
17
-
18
- source = File.join(source_root, source)
19
- FileUtils.should be_identical(source, destination)
20
- end
21
-
22
- def file
23
- File.join(destination_root, "foo")
24
- end
25
-
26
- before do
27
- ::FileUtils.rm_rf(destination_root)
28
- end
29
-
30
- describe "#chmod" do
31
- it "executes the command given" do
32
- FileUtils.should_receive(:chmod_R).with(0755, file)
33
- action :chmod, "foo", 0755
34
- end
35
-
36
- it "does not execute the command if pretending given" do
37
- FileUtils.should_not_receive(:chmod_R)
38
- runner(:pretend => true)
39
- action :chmod, "foo", 0755
40
- end
41
-
42
- it "logs status" do
43
- FileUtils.should_receive(:chmod_R).with(0755, file)
44
- action(:chmod, "foo", 0755).should == " chmod foo\n"
45
- end
46
-
47
- it "does not log status if required" do
48
- FileUtils.should_receive(:chmod_R).with(0755, file)
49
- action(:chmod, "foo", 0755, :verbose => false).should be_empty
50
- end
51
- end
52
-
53
- describe "#copy_file" do
54
- it "copies file from source to default destination" do
55
- action :copy_file, "task.thor"
56
- exists_and_identical?("task.thor", "task.thor")
57
- end
58
-
59
- it "copies file from source to the specified destination" do
60
- action :copy_file, "task.thor", "foo.thor"
61
- exists_and_identical?("task.thor", "foo.thor")
62
- end
63
-
64
- it "copies file from the source relative to the current path" do
65
- runner.inside("doc") do
66
- action :copy_file, "README"
67
- end
68
- exists_and_identical?("doc/README", "doc/README")
69
- end
70
-
71
- it "logs status" do
72
- action(:copy_file, "task.thor").should == " create task.thor\n"
73
- end
74
-
75
- it "accepts a block to change output" do
76
- action :copy_file, "task.thor" do |content|
77
- "OMG" + content
78
- end
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"
103
- end
104
- end
105
-
106
- describe "#get" do
107
- it "copies file from source to the specified destination" do
108
- action :get, "doc/README", "docs/README"
109
- exists_and_identical?("doc/README", "docs/README")
110
- end
111
-
112
- it "uses just the source basename as destination if none is specified" do
113
- action :get, "doc/README"
114
- exists_and_identical?("doc/README", "README")
115
- end
116
-
117
- it "allows the destination to be set as a block result" do
118
- action(:get, "doc/README"){ |c| "docs/README" }
119
- exists_and_identical?("doc/README", "docs/README")
120
- end
121
-
122
- it "yields file content to a block" do
123
- action :get, "doc/README" do |content|
124
- content.should == "__start__\nREADME\n__end__\n"
125
- end
126
- end
127
-
128
- it "logs status" do
129
- action(:get, "doc/README", "docs/README").should == " create docs/README\n"
130
- end
131
-
132
- it "accepts http remote sources" do
133
- body = "__start__\nHTTPFILE\n__end__\n"
134
- FakeWeb.register_uri(:get, 'http://example.com/file.txt', :body => body)
135
- action :get, 'http://example.com/file.txt' do |content|
136
- content.should == body
137
- end
138
- FakeWeb.clean_registry
139
- end
140
-
141
- it "accepts https remote sources" do
142
- body = "__start__\nHTTPSFILE\n__end__\n"
143
- FakeWeb.register_uri(:get, 'https://example.com/file.txt', :body => body)
144
- action :get, 'https://example.com/file.txt' do |content|
145
- content.should == body
146
- end
147
- FakeWeb.clean_registry
148
- end
149
- end
150
-
151
- describe "#template" do
152
- it "allows using block helpers in the template" do
153
- action :template, "doc/block_helper.rb"
154
-
155
- file = File.join(destination_root, "doc/block_helper.rb")
156
- File.read(file).should == "Hello world!"
157
- end
158
-
159
- it "evaluates the template given as source" do
160
- runner.instance_variable_set("@klass", "Config")
161
- action :template, "doc/config.rb"
162
-
163
- file = File.join(destination_root, "doc/config.rb")
164
- File.read(file).should == "class Config; end\n"
165
- end
166
-
167
- it "copies the template to the specified destination" do
168
- action :template, "doc/config.rb", "doc/configuration.rb"
169
- file = File.join(destination_root, "doc/configuration.rb")
170
- File.exists?(file).should be_true
171
- end
172
-
173
- it "converts enconded instructions" do
174
- runner.should_receive(:file_name).and_return("rdoc")
175
- action :template, "doc/%file_name%.rb.tt"
176
- file = File.join(destination_root, "doc/rdoc.rb")
177
- File.exists?(file).should be_true
178
- end
179
-
180
- it "logs status" do
181
- capture(:stdout){ runner.template("doc/config.rb") }.should == " create doc/config.rb\n"
182
- end
183
-
184
- it "accepts a block to change output" do
185
- action :template, "doc/config.rb" do |content|
186
- "OMG" + content
187
- end
188
- File.read(File.join(destination_root, "doc/config.rb")).should =~ /^OMG/
189
- end
190
-
191
- it "guesses the destination name when given only a source" do
192
- action :template, "doc/config.yaml.tt"
193
-
194
- file = File.join(destination_root, "doc/config.yaml")
195
- File.exists?(file).should be_true
196
- end
197
- end
198
-
199
- describe "when changing existent files" do
200
- before do
201
- ::FileUtils.cp_r(source_root, destination_root)
202
- end
203
-
204
- def file
205
- File.join(destination_root, "doc", "README")
206
- end
207
-
208
- describe "#remove_file" do
209
- it "removes the file given" do
210
- action :remove_file, "doc/README"
211
- File.exists?(file).should be_false
212
- end
213
-
214
- it "removes directories too" do
215
- action :remove_dir, "doc"
216
- File.exists?(File.join(destination_root, "doc")).should be_false
217
- end
218
-
219
- it "does not remove if pretending" do
220
- runner(:pretend => true)
221
- action :remove_file, "doc/README"
222
- File.exists?(file).should be_true
223
- end
224
-
225
- it "logs status" do
226
- action(:remove_file, "doc/README").should == " remove doc/README\n"
227
- end
228
-
229
- it "does not log status if required" do
230
- action(:remove_file, "doc/README", :verbose => false).should be_empty
231
- end
232
- end
233
-
234
- describe "#gsub_file" do
235
- it "replaces the content in the file" do
236
- action :gsub_file, "doc/README", "__start__", "START"
237
- File.binread(file).should == "START\nREADME\n__end__\n"
238
- end
239
-
240
- it "does not replace if pretending" do
241
- runner(:pretend => true)
242
- action :gsub_file, "doc/README", "__start__", "START"
243
- File.binread(file).should == "__start__\nREADME\n__end__\n"
244
- end
245
-
246
- it "accepts a block" do
247
- action(:gsub_file, "doc/README", "__start__"){ |match| match.gsub('__', '').upcase }
248
- File.binread(file).should == "START\nREADME\n__end__\n"
249
- end
250
-
251
- it "logs status" do
252
- action(:gsub_file, "doc/README", "__start__", "START").should == " gsub doc/README\n"
253
- end
254
-
255
- it "does not log status if required" do
256
- action(:gsub_file, file, "__", :verbose => false){ |match| match * 2 }.should be_empty
257
- end
258
- end
259
-
260
- describe "#append_to_file" do
261
- it "appends content to the file" do
262
- action :append_to_file, "doc/README", "END\n"
263
- File.binread(file).should == "__start__\nREADME\n__end__\nEND\n"
264
- end
265
-
266
- it "accepts a block" do
267
- action(:append_to_file, "doc/README"){ "END\n" }
268
- File.binread(file).should == "__start__\nREADME\n__end__\nEND\n"
269
- end
270
-
271
- it "logs status" do
272
- action(:append_to_file, "doc/README", "END").should == " append doc/README\n"
273
- end
274
- end
275
-
276
- describe "#prepend_to_file" do
277
- it "prepends content to the file" do
278
- action :prepend_to_file, "doc/README", "START\n"
279
- File.binread(file).should == "START\n__start__\nREADME\n__end__\n"
280
- end
281
-
282
- it "accepts a block" do
283
- action(:prepend_to_file, "doc/README"){ "START\n" }
284
- File.binread(file).should == "START\n__start__\nREADME\n__end__\n"
285
- end
286
-
287
- it "logs status" do
288
- action(:prepend_to_file, "doc/README", "START").should == " prepend doc/README\n"
289
- end
290
- end
291
-
292
- describe "#inject_into_class" do
293
- def file
294
- File.join(destination_root, "application.rb")
295
- end
296
-
297
- it "appends content to a class" do
298
- action :inject_into_class, "application.rb", Application, " filter_parameters :password\n"
299
- File.binread(file).should == "class Application < Base\n filter_parameters :password\nend\n"
300
- end
301
-
302
- it "accepts a block" do
303
- action(:inject_into_class, "application.rb", Application){ " filter_parameters :password\n" }
304
- File.binread(file).should == "class Application < Base\n filter_parameters :password\nend\n"
305
- end
306
-
307
- it "logs status" do
308
- action(:inject_into_class, "application.rb", Application, " filter_parameters :password\n").should == " insert application.rb\n"
309
- end
310
-
311
- it "does not append if class name does not match" do
312
- action :inject_into_class, "application.rb", "App", " filter_parameters :password\n"
313
- File.binread(file).should == "class Application < Base\nend\n"
314
- end
315
- end
316
- end
317
-
318
- describe "when adjusting comments" do
319
- before do
320
- ::FileUtils.cp_r(source_root, destination_root)
321
- end
322
-
323
- def file
324
- File.join(destination_root, "doc", "COMMENTER")
325
- end
326
-
327
- unmodified_comments_file = /__start__\n # greenblue\n# yellowblue\n#yellowred\n #greenred\norange\n purple\n ind#igo\n # ind#igo\n__end__/
328
-
329
- describe "#uncomment_lines" do
330
- it "uncomments all matching lines in the file" do
331
- action :uncomment_lines, "doc/COMMENTER", "green"
332
- File.binread(file).should =~ /__start__\n greenblue\n# yellowblue\n#yellowred\n greenred\norange\n purple\n ind#igo\n # ind#igo\n__end__/
333
-
334
- action :uncomment_lines, "doc/COMMENTER", "red"
335
- File.binread(file).should =~ /__start__\n greenblue\n# yellowblue\nyellowred\n greenred\norange\n purple\n ind#igo\n # ind#igo\n__end__/
336
- end
337
-
338
- it "correctly uncomments lines with hashes in them" do
339
- action :uncomment_lines, "doc/COMMENTER", "ind#igo"
340
- File.binread(file).should =~ /__start__\n # greenblue\n# yellowblue\n#yellowred\n #greenred\norange\n purple\n ind#igo\n ind#igo\n__end__/
341
- end
342
-
343
- it "does not modify already uncommented lines in the file" do
344
- action :uncomment_lines, "doc/COMMENTER", "orange"
345
- action :uncomment_lines, "doc/COMMENTER", "purple"
346
- File.binread(file).should =~ unmodified_comments_file
347
- end
348
- end
349
-
350
- describe "#comment_lines" do
351
- it "comments lines which are not commented" do
352
- action :comment_lines, "doc/COMMENTER", "orange"
353
- File.binread(file).should =~ /__start__\n # greenblue\n# yellowblue\n#yellowred\n #greenred\n# orange\n purple\n ind#igo\n # ind#igo\n__end__/
354
-
355
- action :comment_lines, "doc/COMMENTER", "purple"
356
- File.binread(file).should =~ /__start__\n # greenblue\n# yellowblue\n#yellowred\n #greenred\n# orange\n # purple\n ind#igo\n # ind#igo\n__end__/
357
- end
358
-
359
- it "correctly comments lines with hashes in them" do
360
- action :comment_lines, "doc/COMMENTER", "ind#igo"
361
- File.binread(file).should =~ /__start__\n # greenblue\n# yellowblue\n#yellowred\n #greenred\norange\n purple\n # ind#igo\n # ind#igo\n__end__/
362
- end
363
-
364
- it "does not modify already commented lines" do
365
- action :comment_lines, "doc/COMMENTER", "green"
366
- File.binread(file).should =~ unmodified_comments_file
367
- end
368
- end
369
- end
370
- end