thor 0.16.0 → 1.2.1

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.
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