tailor 0.1.5 → 1.0.0.alpha

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 (124) hide show
  1. data/.gitignore +9 -1
  2. data/.rspec +2 -1
  3. data/.tailor +6 -0
  4. data/Gemfile.lock +47 -78
  5. data/{ChangeLog.rdoc → History.rdoc} +0 -0
  6. data/README.rdoc +157 -24
  7. data/Rakefile +0 -9
  8. data/bin/tailor +16 -69
  9. data/features/configurable.feature +78 -0
  10. data/features/horizontal_spacing.feature +262 -0
  11. data/features/indentation.feature +17 -21
  12. data/features/indentation/bad_files_with_no_trailing_newline.feature +90 -0
  13. data/features/indentation/good_files_with_no_trailing_newline.feature +206 -0
  14. data/features/name_detection.feature +72 -0
  15. data/features/step_definitions/indentation_steps.rb +10 -133
  16. data/features/support/env.rb +7 -15
  17. data/features/support/file_cases/horizontal_spacing_cases.rb +265 -0
  18. data/features/support/file_cases/indentation_cases.rb +972 -0
  19. data/features/support/file_cases/naming_cases.rb +52 -0
  20. data/features/support/file_cases/vertical_spacing_cases.rb +70 -0
  21. data/features/support/hooks.rb +8 -0
  22. data/features/support/{1_file_with_bad_operator_spacing → legacy}/bad_op_spacing.rb +0 -0
  23. data/features/support/{1_file_with_bad_ternary_colon_spacing → legacy}/bad_ternary_colon_spacing.rb +0 -0
  24. data/features/support/{1_long_file_with_indentation/my_project.rb → legacy/long_file_with_indentation.rb} +1 -1
  25. data/features/support/world.rb +14 -0
  26. data/features/vertical_spacing.feature +114 -0
  27. data/lib/ext/string_ext.rb +5 -0
  28. data/lib/tailor.rb +6 -252
  29. data/lib/tailor/cli.rb +49 -0
  30. data/lib/tailor/cli/options.rb +251 -0
  31. data/lib/tailor/composite_observable.rb +56 -0
  32. data/lib/tailor/configuration.rb +263 -0
  33. data/lib/tailor/critic.rb +162 -0
  34. data/lib/tailor/formatters/text.rb +126 -0
  35. data/lib/tailor/lexed_line.rb +246 -0
  36. data/lib/tailor/lexer.rb +428 -0
  37. data/lib/tailor/lexer/token.rb +103 -0
  38. data/lib/tailor/lexer_constants.rb +75 -0
  39. data/lib/tailor/logger.rb +28 -0
  40. data/lib/tailor/problem.rb +100 -0
  41. data/lib/tailor/reporter.rb +48 -0
  42. data/lib/tailor/ruler.rb +39 -0
  43. data/lib/tailor/rulers.rb +7 -0
  44. data/lib/tailor/rulers/allow_camel_case_methods_ruler.rb +30 -0
  45. data/lib/tailor/rulers/allow_hard_tabs_ruler.rb +22 -0
  46. data/lib/tailor/rulers/allow_screaming_snake_case_classes_ruler.rb +32 -0
  47. data/lib/tailor/rulers/allow_trailing_line_spaces_ruler.rb +33 -0
  48. data/lib/tailor/rulers/indentation_spaces_ruler.rb +199 -0
  49. data/lib/tailor/rulers/indentation_spaces_ruler/indentation_manager.rb +362 -0
  50. data/lib/tailor/rulers/max_code_lines_in_class_ruler.rb +84 -0
  51. data/lib/tailor/rulers/max_code_lines_in_method_ruler.rb +84 -0
  52. data/lib/tailor/rulers/max_line_length_ruler.rb +31 -0
  53. data/lib/tailor/rulers/spaces_after_comma_ruler.rb +83 -0
  54. data/lib/tailor/rulers/spaces_after_lbrace_ruler.rb +114 -0
  55. data/lib/tailor/rulers/spaces_after_lbracket_ruler.rb +123 -0
  56. data/lib/tailor/rulers/spaces_after_lparen_ruler.rb +116 -0
  57. data/lib/tailor/rulers/spaces_before_comma_ruler.rb +67 -0
  58. data/lib/tailor/rulers/spaces_before_lbrace_ruler.rb +93 -0
  59. data/lib/tailor/rulers/spaces_before_rbrace_ruler.rb +98 -0
  60. data/lib/tailor/rulers/spaces_before_rbracket_ruler.rb +70 -0
  61. data/lib/tailor/rulers/spaces_before_rparen_ruler.rb +70 -0
  62. data/lib/tailor/rulers/spaces_in_empty_braces_ruler.rb +94 -0
  63. data/lib/tailor/rulers/trailing_newlines_ruler.rb +36 -0
  64. data/lib/tailor/runtime_error.rb +3 -0
  65. data/lib/tailor/tailorrc.erb +88 -0
  66. data/lib/tailor/version.rb +2 -2
  67. data/spec/spec_helper.rb +7 -5
  68. data/spec/tailor/cli_spec.rb +94 -0
  69. data/spec/tailor/configuration_spec.rb +147 -0
  70. data/spec/tailor/critic_spec.rb +63 -0
  71. data/spec/tailor/lexed_line_spec.rb +569 -0
  72. data/spec/tailor/lexer/token_spec.rb +46 -0
  73. data/spec/tailor/lexer_spec.rb +181 -0
  74. data/spec/tailor/options_spec.rb +6 -0
  75. data/spec/tailor/problem_spec.rb +74 -0
  76. data/spec/tailor/reporter_spec.rb +53 -0
  77. data/spec/tailor/ruler_spec.rb +56 -0
  78. data/spec/tailor/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +454 -0
  79. data/spec/tailor/rulers/indentation_spaces_ruler_spec.rb +128 -0
  80. data/spec/tailor/rulers/spaces_after_comma_spec.rb +31 -0
  81. data/spec/tailor/rulers/spaces_after_lbrace_ruler_spec.rb +145 -0
  82. data/spec/tailor/rulers/spaces_before_lbrace_ruler_spec.rb +63 -0
  83. data/spec/tailor/rulers/spaces_before_rbrace_ruler_spec.rb +63 -0
  84. data/spec/tailor/rulers_spec.rb +9 -0
  85. data/spec/tailor/version_spec.rb +6 -0
  86. data/spec/tailor_spec.rb +9 -21
  87. data/tailor.gemspec +22 -35
  88. data/tasks/features.rake +7 -0
  89. data/tasks/roodi.rake +9 -0
  90. data/tasks/roodi_config.yaml +14 -0
  91. data/tasks/spec.rake +16 -0
  92. data/tasks/yard.rake +14 -0
  93. metadata +224 -77
  94. data/features/case_checking.feature +0 -38
  95. data/features/spacing.feature +0 -97
  96. data/features/spacing/commas.feature +0 -44
  97. data/features/step_definitions/case_checking_steps.rb +0 -42
  98. data/features/step_definitions/spacing_steps.rb +0 -156
  99. data/features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb +0 -43
  100. data/features/support/1_file_with_bad_curly_brace_spacing/bad_curly_brace_spacing.rb +0 -60
  101. data/features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb +0 -4
  102. data/features/support/1_file_with_bad_square_brackets/bad_square_brackets.rb +0 -62
  103. data/features/support/1_file_with_camel_case_class/camel_case_class.rb +0 -5
  104. data/features/support/1_file_with_camel_case_method/camel_case_method.rb +0 -3
  105. data/features/support/1_file_with_hard_tabs/hard_tab.rb +0 -3
  106. data/features/support/1_file_with_long_lines/long_lines.rb +0 -5
  107. data/features/support/1_file_with_snake_case_class/snake_case_class.rb +0 -5
  108. data/features/support/1_file_with_snake_case_method/snake_case_method.rb +0 -3
  109. data/features/support/1_file_with_trailing_whitespace/trailing_whitespace.rb +0 -5
  110. data/features/support/1_good_simple_file/simple_project.rb +0 -5
  111. data/features/support/common.rb +0 -102
  112. data/features/support/matchers.rb +0 -11
  113. data/lib/tailor/file_line.rb +0 -220
  114. data/lib/tailor/indentation.rb +0 -245
  115. data/lib/tailor/spacing.rb +0 -237
  116. data/spec/file_line_spec.rb +0 -70
  117. data/spec/indentation_spec.rb +0 -259
  118. data/spec/spacing/colon_spacing_spec.rb +0 -71
  119. data/spec/spacing/comma_spacing_spec.rb +0 -159
  120. data/spec/spacing/curly_brace_spacing_spec.rb +0 -257
  121. data/spec/spacing/parentheses_spacing_spec.rb +0 -28
  122. data/spec/spacing/square_bracket_spacing_spec.rb +0 -116
  123. data/spec/spacing_spec.rb +0 -167
  124. data/tasks/metrics.rake +0 -23
@@ -0,0 +1,206 @@
1
+ @indentation
2
+ Feature: Indentation check on good files without trailing newlines
3
+
4
+ Background:
5
+ Given my configuration file ".tailor" looks like:
6
+ """
7
+ Tailor.config do |config|
8
+ config.file_set do
9
+ trailing_newlines 0
10
+ end
11
+ end
12
+ """
13
+
14
+ @good_files
15
+ Scenario Outline: Don't detect problems on properly indented files with no newlines at the end
16
+ Given <File> exists without a newline at the end
17
+ When I successfully run `tailor -d -c .tailor <File>`
18
+ Then the output should match /Total Problems.*0/
19
+ And the exit status should be 0
20
+
21
+ Scenarios: Good class uses
22
+ | File |
23
+ | indent/ok/class |
24
+ | indent/ok/nested_class |
25
+ | indent/ok/class_empty |
26
+ | indent/ok/class_empty_trailing_comment |
27
+ | indent/ok/one_line_class |
28
+ | indent/ok/one_line_subclass |
29
+ | indent/ok/one_line_subclass_with_inheritance |
30
+
31
+ Scenarios: Good single-line statement uses
32
+ | File |
33
+ | indent/ok/class_singlestatement |
34
+ | indent/ok/require_class_singlestatement |
35
+
36
+ @multi_line
37
+ Scenarios: Good multi-line statement uses
38
+ | File |
39
+ | indent/ok/assignment_addition_multistatement |
40
+ | indent/ok/assignment_addition_multistatement_trailing_comment |
41
+ | indent/ok/assignment_hash_multistatement |
42
+ | indent/ok/assignment_hash_multistatement_trailing_comment |
43
+ | indent/ok/assignment_array_multistatement |
44
+ | indent/ok/assignment_array_multistatement_trailing_comment |
45
+ | indent/ok/assignment_paren_multistatement |
46
+ | indent/ok/assignment_paren_multistatement_trailing_comment |
47
+ | indent/ok/assignment_twolevel_hash_multistatement |
48
+ | indent/ok/assignment_twolevel_array_multistatement |
49
+ | indent/ok/assignment_twolevel_paren_multistatement |
50
+ | indent/ok/method_call_multistatement |
51
+ | indent/ok/method_call_multistatement_trailing_comment |
52
+ | indent/ok/method_call_multistatement_lonely_paren |
53
+ | indent/ok/method_call_multistatement_lonely_paren_trailing_comment |
54
+ | indent/ok/rescue_ending_with_comma |
55
+ | indent/ok/rescue_ending_with_comma_trailing_comment |
56
+ | indent/ok/keyword_ending_with_period |
57
+ | indent/ok/keyword_ending_with_period_trailing_comment |
58
+
59
+ Scenarios: Good def uses
60
+ | File |
61
+ | indent/ok/def |
62
+ | indent/ok/def_empty |
63
+ | indent/ok/nested_def |
64
+ | indent/ok/require_class_singlestatement_def |
65
+ | indent/ok/require_class_singlestatement_def_content |
66
+
67
+ @single_line
68
+ Scenarios: Good single-line modifiers
69
+ | File |
70
+ | indent/ok/if_modifier |
71
+ | indent/ok/if_modifier2 |
72
+ | indent/ok/def_return_if_modifier |
73
+ | indent/ok/unless_modifier |
74
+ | indent/ok/def_return_unless_modifier |
75
+ | indent/ok/while_within_single_line_block |
76
+
77
+ @multi_line
78
+ Scenarios: Good multi-line modifiers
79
+ | File |
80
+ | indent/ok/multi_line_if_with_trailing_andop |
81
+
82
+ @case
83
+ Scenarios: Good case statements
84
+ | File |
85
+ | indent/ok/case_whens_level |
86
+ | indent/ok/case_strings_in_strings |
87
+
88
+ Scenarios: Good 'do' loops
89
+ | File |
90
+ | indent/ok/while_do_loop |
91
+ | indent/ok/while_do_loop2 |
92
+ | indent/ok/until_do_loop |
93
+ | indent/ok/until_do_loop2 |
94
+ | indent/ok/for_do_loop |
95
+ | indent/ok/loop_do_loop |
96
+
97
+ Scenarios: Good non-'do' loops
98
+ | File |
99
+ | indent/ok/while_as_modifier_loop |
100
+ | indent/ok/until_as_modifier_loop |
101
+ | indent/ok/for_with_break_loop |
102
+ | indent/ok/for_with_next_loop |
103
+ | indent/ok/for_with_redo_loop |
104
+ | indent/ok/for_with_retry_loop |
105
+ | indent/ok/loop_with_braces |
106
+
107
+ @single_line @braces
108
+ Scenarios: Good single-line brace uses
109
+ | File |
110
+ | indent/ok/single_line_braces |
111
+ | indent/ok/single_line_braces_as_t_string |
112
+
113
+ @multi_line @braces
114
+ Scenarios: Good multi-line brace uses
115
+ | File |
116
+ | indent/ok/multi_line_braces |
117
+ | indent/ok/multi_line_braces_as_t_string |
118
+ | indent/ok/multi_line_lonely_braces |
119
+ | indent/ok/multi_line_lonely_braces_as_t_string |
120
+ | indent/ok/multi_line_braces_embedded_arrays |
121
+ | indent/ok/braces_combo |
122
+
123
+ @single_line @brackets
124
+ Scenarios: Good single-line bracket uses
125
+ | File |
126
+ | indent/ok/single_line_brackets |
127
+ | indent/ok/single_line_brackets_as_t_string |
128
+
129
+ @multi_line @brackets
130
+ Scenarios: Good multi-line bracket uses
131
+ | File |
132
+ | indent/ok/multi_line_brackets |
133
+ | indent/ok/multi_line_brackets_as_t_string |
134
+ | indent/ok/multi_line_lonely_brackets |
135
+ | indent/ok/multi_line_lonely_brackets_as_t_string |
136
+ | indent/ok/multi_line_brackets_embedded_hashes |
137
+ | indent/ok/brackets_combo |
138
+
139
+ @single_line @parens
140
+ Scenarios: Good single-line paren uses
141
+ | File |
142
+ | indent/ok/single_line_parens |
143
+ | indent/ok/single_line_parens_as_t_string |
144
+
145
+ @multi_line @parens
146
+ Scenarios: Good multi-line paren uses
147
+ | File |
148
+ | indent/ok/multi_line_parens |
149
+ | indent/ok/multi_line_parens_as_t_string |
150
+ | indent/ok/multi_line_lonely_parens |
151
+ | indent/ok/multi_line_lonely_parens_with_commas |
152
+ | indent/ok/multi_line_lonely_parens_as_t_string |
153
+ | indent/ok/parens_combo |
154
+
155
+ @multi_line @ops
156
+ Scenarios: Good multi-line operator uses
157
+ | File |
158
+ | indent/ok/multi_line_ops |
159
+ | indent/ok/multi_line_andop_in_method |
160
+ | indent/ok/multi_line_rshift_in_method |
161
+ | indent/ok/multi_line_string_concat_with_plus |
162
+ | indent/ok/multi_line_string_concat_with_plus_in_parens |
163
+ | indent/ok/multi_line_string_concat_twice |
164
+
165
+ @multi_line
166
+ Scenarios: Good multi-line method calls
167
+ | File |
168
+ | indent/ok/multi_line_method_call |
169
+ | indent/ok/multi_line_method_call_ends_with_period |
170
+ | indent/ok/multi_line_method_call_ends_with_many_periods |
171
+
172
+ @multi_line @ops
173
+ Scenarios: Good multi-line if + logical operators
174
+ | File |
175
+ | indent/ok/multi_line_if_logical_and |
176
+
177
+ @multi_line @blocks
178
+ Scenarios: Good multi-line blocks
179
+ | File |
180
+ | indent/ok/multi_line_each_block |
181
+ | indent/ok/multi_line_each_block_with_op_and_parens |
182
+ | indent/ok/do_end_block_in_parens |
183
+
184
+ @single_line @keywords
185
+ Scenarios: Good use of single-line keyword statements
186
+ | File |
187
+ | indent/ok/single_line_begin_rescue_end |
188
+
189
+ @multi_line @combos
190
+ Scenarios: Good combinations of many things
191
+ | File |
192
+ | indent/ok/combo1 |
193
+ | indent/ok/combo2 |
194
+ | indent/ok/combo3 |
195
+ | indent/ok/brace_bracket_paren_combo1 |
196
+ | indent/ok/paren_comma_combo1 |
197
+
198
+ @wip
199
+ Scenarios: WIPs
200
+ | File |
201
+ | indent/ok/case_whens_in |
202
+ | indent/ok/method_closing_lonely_paren |
203
+ | indent/ok/method_lonely_args |
204
+ | indent/ok/line_ends_with_label |
205
+ | indent/ok/rparen_and_do_same_line |
206
+
@@ -0,0 +1,72 @@
1
+ Feature: Name detection
2
+ As a Ruby developer, I want to be able to detect improper class and method
3
+ names so that I can fix them.
4
+
5
+ Background:
6
+ Given my configuration file ".tailor" looks like:
7
+ """
8
+ Tailor.config do |config|
9
+ config.file_set do
10
+ trailing_newlines 0
11
+ end
12
+ end
13
+ """
14
+
15
+ @method_naming @good_files
16
+ Scenario Outline: Method naming
17
+ Given <File> exists without a newline at the end
18
+ When I run `tailor -d -c .tailor <File>`
19
+ Then the output should match /Total Problems.*0/
20
+ And the exit status should be 0
21
+
22
+ Scenarios: Good method naming
23
+ | File |
24
+ | naming/ok/single_word_method |
25
+ | naming/ok/two_word_method |
26
+
27
+ @method_naming @bad_files
28
+
29
+ Scenario Outline: Bad method naming
30
+ Given <File> exists without a newline at the end
31
+ When I run `tailor -d -c .tailor <File>`
32
+ Then the output should match /Total Problems.*<Count>/
33
+ And the output should match /position: <Position>/
34
+ And the exit status should be 1
35
+
36
+ Scenarios: Bad method naming
37
+ | File | Count | Position |
38
+ | naming/1/one_caps_camel_case_method | 1 | 1:4 |
39
+ | naming/1/one_caps_camel_case_method_trailing_comment | 1 | 1:4 |
40
+
41
+ @class_naming @good_files
42
+
43
+ Scenario Outline: Good class naming
44
+ Given <File> exists without a newline at the end
45
+ When I run `tailor -d -c .tailor <File>`
46
+ Then the output should match /Total Problems.*0/
47
+ And the exit status should be 0
48
+
49
+ Scenarios: Good class/module naming
50
+ | File |
51
+ | naming/ok/single_word_class |
52
+ | naming/ok/single_word_module |
53
+ | naming/ok/two_word_class |
54
+ | naming/ok/two_word_module |
55
+
56
+ @class_naming @bad_files
57
+
58
+ Scenario Outline: Bad class/module naming
59
+ Given <File> exists without a newline at the end
60
+ When I run `tailor -d -c .tailor <File>`
61
+ Then the output should match /Total Problems.*<Count>/
62
+ And the output should match /position: <Position>/
63
+ And the exit status should be 1
64
+
65
+ Scenarios: Bad method naming
66
+ | File | Count | Position |
67
+ | naming/1/one_screaming_snake_case_class | 1 | 1:6 |
68
+ | naming/1/one_screaming_snake_module_class | 1 | 1:7 |
69
+ | naming/1/two_screaming_snake_case_class | 1 | 1:6 |
70
+ | naming/1/two_screaming_snake_module_class | 1 | 1:7 |
71
+
72
+
@@ -1,139 +1,16 @@
1
- require 'tailor/indentation'
2
- require 'tailor/file_line'
1
+ Given /^(.+) exists with(\w*) a newline at the end$/ do |file_name, no_newline|
2
+ file_contents = get_file_contents(file_name)
3
+ file_contents.should_not be_nil
3
4
 
4
- Given /^that file is indented properly$/ do
5
- pending
6
- current_line = 1
7
-
8
- file_path = Pathname.new(File.expand_path(@file_list[0]))
9
-
10
- current_level = 0.0
11
- problem_count = 0
12
- next_proper_level = 0.0
13
-
14
- check_file do |line|
15
- line = Tailor::FileLine.new(line, file_path, current_line)
16
-
17
- puts '----'
18
- puts "line = #{current_line}"
19
- puts "current = #{current_level}"
20
- actual_level = line.is_at_level
21
- puts "actual = #{actual_level}"
22
- should_be_at = line.should_be_at_level(current_level)
23
- puts "should = #{should_be_at}"
24
-
25
- problem_count += 1 if line.at_proper_level?(actual_level, should_be_at)
26
- next_proper_level = line.next_line_should_be_at_level current_level
27
- puts "next proper = #{next_proper_level}"
28
- current_level = next_proper_level
29
-
30
- current_line += 1
31
- end
32
- end
33
-
34
- Given /^the indentation of that file starts at level (\d*)$/ do |level|
35
- current_line = 1
36
- result = nil
37
-
38
- file_path = Pathname.new(File.expand_path(@file_list[0]))
39
-
40
- check_file do |line|
41
- line = FileLine.new(line, file_path, current_line)
42
- result = line.is_at_level
43
- break line
44
- end
45
-
46
- result.should == 0
47
- end
48
-
49
- Given /^the line (\d*) is a "([^\"]*)" statement$/ do |line_num, statement_type|
50
- current_line = 1
51
- result = nil
52
-
53
- check_file do |line|
54
- result = line.strip =~ /^#{statement_type}/
55
- current_line == line_num.to_i ? (break line) : current_line += 1
56
- end
57
- result.should_not be_nil
58
- end
59
-
60
- Then "the checker should tell me my indentation is OK" do
61
- pending
62
- end
63
-
64
- =begin
65
- Then /^the level of line 1 should be 0.0$/ do
66
- file_path = Pathname.new(File.expand_path(@file_list[0]))
67
- @current_level = nil
68
-
69
- check_file do |line|
70
- line = FileLine.new(line, file_path, 1)
71
-
72
- @current_level = line.is_at_level
73
- @level_change = @current_level + line.next_line_level_change
74
- break line
5
+ if no_newline.empty?
6
+ file_contents << "\n" unless file_contents[-1] == "\n"
7
+ else
8
+ file_contents[-1] = '' if file_contents[-1] == "\n"
75
9
  end
76
- @current_level.should.eql? 0.0
77
- end
78
- =end
79
-
80
-
81
- Then /^the level of line (\d*) should be (\d+\.\d+)$/ do |line_num_to_check, level_to_check|
82
- file_path = Pathname.new(File.expand_path(@file_list[0]))
83
- current_line_num = 1
84
- next_proper_level = 0.0
85
- current_proper_level = 0.0
86
-
87
- check_file do |line|
88
- line = FileLine.new(line, file_path, current_line_num)
89
10
 
90
- if current_line_num == line_num_to_check
91
- line.is_at_level.should == level_to_check.to_f
92
-
93
- # Determine what the next line's level should be at, based on the current line's
94
- # level.
95
- next_proper_level = current_proper_level + line.indent_next_line_by
96
- end
97
-
98
- current_line_num += 1
99
- end
11
+ write_file(file_name, file_contents)
100
12
  end
101
13
 
102
- =begin
103
- Then /^the level of line (\d*) should be (\d+\.\d+)$/ do |line_num_to_check, level_to_check|
104
- file_path = Pathname.new(File.expand_path(@file_list[0]))
105
- current_line = 1
106
- actual_level = nil
107
- current_level = 0.0 # new
108
- level_change = nil # new
109
-
110
- check_file do |line|
111
- line = FileLine.new(line, file_path, current_line)
112
-
113
- # If the first line of the file,
114
- if current_line == 1 # new
115
- level_change = current_level + line.next_line_level_change #new
116
- break line #new
117
- else # new
118
- actual_level = line.is_at_level
119
- end # new
120
-
121
- # Only check the line specified; skip if it's the first line.
122
- if (current_line == line_num_to_check) and (line_num_to_check > 1)
123
- this_level = current_level + level_change # new
124
- this_level < 0.0 ? (this_level = 0.0) : this_level # new
125
- this_level.should == level_to_check # new
126
- actual_level.should == this_level
127
- level_change = line.next_line_level_change
128
- break line
129
- else
130
- current_line += 1
131
- end
132
- end
133
- if current_line == 1
134
- current_level.should.eql? level_to_check
135
- else
136
- current_level += level_change #new
137
- end
14
+ Given /^my configuration file "([^"]*)" looks like:$/ do |file_name, string|
15
+ write_file(file_name, string)
138
16
  end
139
- =end
@@ -1,17 +1,9 @@
1
- $:.unshift File.dirname(__FILE__) + "/../../lib/tailor"
2
- require "tailor"
1
+ require 'aruba/cucumber'
2
+ require 'simplecov'
3
3
 
4
- gem 'cucumber'
5
- require 'cucumber'
6
- gem 'rspec'
7
- require 'rspec'
8
-
9
- Before do
10
- @tmp_root = File.dirname(__FILE__) + "/../../tmp"
11
- @home_path = File.expand_path(File.join(@tmp_root, "home"))
12
- @lib_path = File.expand_path(File.dirname(__FILE__) + "/../../lib")
13
- @features_path = File.dirname(__FILE__) + "/../"
14
- FileUtils.rm_rf @tmp_root
15
- FileUtils.mkdir_p @home_path
16
- ENV['HOME'] = @home_path
4
+ SimpleCov.start do
5
+ add_group "Features", "features/"
6
+ add_group "Lib", "lib"
17
7
  end
8
+
9
+