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 +22 -10
- data/lib/tagfu/version.rb +1 -1
- data/spec/tagger_spec.rb +41 -1
- metadata +1 -1
    
        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 | 
            -
            					 | 
| 64 | 
            +
            				if line.match(/#{regex}/)
         | 
| 65 | 
            +
            					tmp << index
         | 
| 61 66 | 
             
            				end
         | 
| 62 67 | 
             
            			end
         | 
| 63 | 
            -
            			 | 
| 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 -  | 
| 66 | 
            -
            				 | 
| 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,  | 
| 83 | 
            +
            				lines.each_with_index do |line, line_index|
         | 
| 73 84 | 
             
            					if only_tag?(line, tag)
         | 
| 74 | 
            -
            						 | 
| 85 | 
            +
            						lines_to_delete << line_index
         | 
| 75 86 | 
             
            					else	
         | 
| 76 | 
            -
            						indent = lines[ | 
| 87 | 
            +
            						indent = lines[line_index][/^\s+/].to_s
         | 
| 77 88 | 
             
            						line = line.strip
         | 
| 78 89 | 
             
            						next if line.empty?
         | 
| 79 | 
            -
            						lines[ | 
| 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
    
    
    
        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
         |