tagfu 1.0.1 → 1.0.2

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/lib/tagfu/tagger.rb CHANGED
@@ -54,32 +54,44 @@ module Tagfu
54
54
  end
55
55
 
56
56
  def delete_all(lines)
57
- lines_to_delete = []
57
+ lines_to_delete = lines_to_delete(lines, "@")
58
+ delete_lines(lines, lines_to_delete)
59
+ end
60
+
61
+ def lines_to_delete(lines, regex)
62
+ tmp = []
58
63
  lines.each_with_index do |line, index|
59
- if line.match(/@/)
60
- lines_to_delete << index
64
+ if line.match(/#{regex}/)
65
+ tmp << index
61
66
  end
62
67
  end
63
- running_index = 0
68
+ tmp
69
+ end
70
+
71
+ def delete_lines(lines, lines_to_delete)
72
+ lines_to_delete = lines_to_delete.sort
73
+ index_adjustment = 0
64
74
  lines_to_delete.each do |line_index|
65
- lines.delete_at(line_index - running_index)
66
- running_index += 1
75
+ lines.delete_at(line_index - index_adjustment)
76
+ index_adjustment += 1
67
77
  end
68
78
  end
69
79
 
70
80
  def delete_tags(lines)
81
+ lines_to_delete = []
71
82
  @delete_tags.each do |tag|
72
- lines.each_with_index do |line, index|
83
+ lines.each_with_index do |line, line_index|
73
84
  if only_tag?(line, tag)
74
- lines.delete_at(index)
85
+ lines_to_delete << line_index
75
86
  else
76
- indent = lines[index][/^\s+/].to_s
87
+ indent = lines[line_index][/^\s+/].to_s
77
88
  line = line.strip
78
89
  next if line.empty?
79
- lines[index] = indent + line.chomp.split(' ').delete_if {|word| word.match(/#{tag}/)}.join(' ') + "\n" if line.match(/^@/)
90
+ lines[line_index] = indent + line.chomp.split(' ').delete_if {|word| word.match(/#{tag}/)}.join(' ') + "\n" if line.match(/^@/)
80
91
  end
81
92
  end
82
93
  end
94
+ delete_lines(lines, lines_to_delete.flatten)
83
95
  end
84
96
 
85
97
  def only_tag?(line, tag)
data/lib/tagfu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tagfu
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
data/spec/tagger_spec.rb CHANGED
@@ -54,6 +54,33 @@ RSpec.configure do |config|
54
54
  When I run it through the tagger
55
55
  Then I see that the tag has been updated
56
56
  """,
57
+ :two_tags_to_delete =>
58
+ """
59
+ @smoke
60
+ @smoke
61
+ Feature: Two tags to delete in feature file
62
+
63
+ @wip
64
+ @wip
65
+ @wip
66
+ Scenario: sample story
67
+ Given I have a feature file with one tag
68
+ When I run it through the tagger
69
+ Then I see that the tag has been updated
70
+ """,
71
+ :two_tags_to_update =>
72
+ """
73
+ @wip
74
+ @wip
75
+ Feature: Two tags to delete in feature file
76
+
77
+ @wip
78
+ @wip
79
+ Scenario: sample story
80
+ Given I have a feature file with one tag
81
+ When I run it through the tagger
82
+ Then I see that the tag has been updated
83
+ """,
57
84
  :three_tags_delete_update =>
58
85
  """
59
86
  Feature: Three tags to update in feature file
@@ -98,7 +125,6 @@ RSpec.configure do |config|
98
125
  end
99
126
 
100
127
  config.after(:all) do
101
- #FileUtils.remove_entry_secure @dir
102
128
  files = Dir.glob("*.feature")
103
129
  files.each {|file| File.unlink(file)}
104
130
  end
@@ -155,6 +181,20 @@ RSpec.configure do |config|
155
181
  File.readlines(file).any? {|line| line =~ /@story3/}.should be_true
156
182
  end
157
183
 
184
+ it "should delete duplicate tags in consecutive lines" do
185
+ file = "two_tags_to_delete.feature"
186
+ Tagfu::Tagger.new({:path => file, :delete_tags => ['@wip', '@smoke']}).get_files
187
+ File.readlines(file).any? {|line| line =~ /@smoke/}.should be_false
188
+ File.readlines(file).any? {|line| line =~ /@wip/}.should be_false
189
+ end
190
+
191
+ it "should update duplicate tags in consecutive lines" do
192
+ file = "two_tags_to_update.feature"
193
+ Tagfu::Tagger.new({:path => file, :update_tags => ['@wip', '@smoke']}).get_files
194
+ File.readlines(file).any? {|line| line =~ /@wip/}.should be_false
195
+ File.readlines(file).any? {|line| line =~ /@smoke/}.should be_true
196
+ end
197
+
158
198
  it "should delete all tags in feature file" do
159
199
  file = "all_tags_delete.feature"
160
200
  Tagfu::Tagger.new({:path => file, :delete_all => true}).get_files
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tagfu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: