changes_since 0.0.7 → 0.0.8
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +2 -0
- data/Rakefile +8 -8
- data/changes_since.gemspec +2 -0
- data/lib/changes_since/changelog_printer.rb +79 -69
- data/lib/changes_since/commit_parser.rb +43 -41
- data/lib/changes_since/version.rb +1 -1
- data/lib/changes_since.rb +1 -6
- data/test/changes_since/changelog_printer_test.rb +150 -0
- data/test/changes_since_test.rb +1 -2
- data/test/helper.rb +6 -0
- metadata +35 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7905ff2ff3853d73c2af20d6437613cf816f87e6
         | 
| 4 | 
            +
              data.tar.gz: 5d568661ae3872052038b0b138e1a9c4359bafc9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 6fd0894a4e7f79ca610c344c68f4848d9e5c8df3be18a9973f610de3f8284c61872bc32d88b26be4876379a0c487bdbed545c2c84e8261269fef899afd382b18
         | 
| 7 | 
            +
              data.tar.gz: 6efd92684c8ef27822425a18ad91d2c333057c3dfa46a1a72e064472d84e1b5e0eaa82ee06fa0aeb3e2339f140c8922d78f0df54cee50bf26f0effa3721adc84
         | 
    
        data/.travis.yml
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            language: ruby
         | 
    
        data/README.md
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
            task : | 
| 1 | 
            +
            require 'rake/testtask'
         | 
| 2 | 
            +
            Rake::TestTask.new(:test) do |test|
         | 
| 3 | 
            +
              test.libs << 'lib' << 'test'
         | 
| 4 | 
            +
              test.pattern = 'test/**/*_test.rb'
         | 
| 5 | 
            +
              test.verbose = true
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
            desc "Run tests"
         | 
| 8 | 
            +
            task :default => :test
         | 
    
        data/changes_since.gemspec
    CHANGED
    
    | @@ -21,5 +21,7 @@ Gem::Specification.new do |spec| | |
| 21 21 | 
             
              spec.add_development_dependency "bundler", "~> 1.5"
         | 
| 22 22 | 
             
              spec.add_development_dependency "rake", '10.1.1'
         | 
| 23 23 | 
             
              spec.add_development_dependency 'test-unit'
         | 
| 24 | 
            +
              spec.add_development_dependency 'mocha'
         | 
| 25 | 
            +
              spec.add_development_dependency 'shoulda'
         | 
| 24 26 | 
             
              spec.add_dependency "git"
         | 
| 25 27 | 
             
            end
         | 
| @@ -1,89 +1,99 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
               | 
| 1 | 
            +
            module ChangesSince
         | 
| 2 | 
            +
              class ChangelogPrinter
         | 
| 3 | 
            +
                attr_reader :teams, :options, :repo
         | 
| 3 4 |  | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 5 | 
            +
                TAGS = {
         | 
| 6 | 
            +
                  :public   => 'Public',
         | 
| 7 | 
            +
                  :bug      => 'Bugs',
         | 
| 8 | 
            +
                  :internal => 'Internal'
         | 
| 9 | 
            +
                }
         | 
| 9 10 |  | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 11 | 
            +
                def initialize(commits, teams, options, repo)
         | 
| 12 | 
            +
                  @commits = commits
         | 
| 13 | 
            +
                  @teams   = teams
         | 
| 14 | 
            +
                  @options = options
         | 
| 15 | 
            +
                  @repo    = repo
         | 
| 16 | 
            +
                end
         | 
| 16 17 |  | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 18 | 
            +
                def print!
         | 
| 19 | 
            +
                  if teams
         | 
| 20 | 
            +
                    print_team_commits!
         | 
| 21 | 
            +
                  else
         | 
| 22 | 
            +
                    print_commits!(@commits)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  return
         | 
| 22 25 | 
             
                end
         | 
| 23 | 
            -
                return
         | 
| 24 | 
            -
              end
         | 
| 25 26 |  | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 27 | 
            +
                def print_team_commits!
         | 
| 28 | 
            +
                  teams.each do |team, members|
         | 
| 29 | 
            +
                    author_re = /#{members.join("|")}/i
         | 
| 30 | 
            +
                    team_commits = @commits.select do |commit|
         | 
| 31 | 
            +
                      [commit.author.name, commit.author.email].any? do |str|
         | 
| 32 | 
            +
                        str =~ author_re
         | 
| 33 | 
            +
                      end
         | 
| 32 34 | 
             
                    end
         | 
| 35 | 
            +
                    next if team_commits.empty?
         | 
| 36 | 
            +
                    @commits -= team_commits
         | 
| 37 | 
            +
                    print_team_name(team)
         | 
| 38 | 
            +
                    print_commits!(team_commits)
         | 
| 33 39 | 
             
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  @commits | 
| 40 | 
            +
             | 
| 41 | 
            +
                  return if @commits.empty?
         | 
| 42 | 
            +
                  print_team_name("Other")
         | 
| 43 | 
            +
                  print_commits!(@commits)
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def print_team_name(name)
         | 
| 36 47 | 
             
                  if options[:markdown]
         | 
| 37 | 
            -
                     | 
| 48 | 
            +
                    row = "||*#{name}*||Author||PR||"
         | 
| 49 | 
            +
                    row << "Commit||" if options[:sha]
         | 
| 50 | 
            +
                    row << "Risks||" if options[:risks]
         | 
| 51 | 
            +
                    puts row
         | 
| 38 52 | 
             
                  else
         | 
| 39 | 
            -
                    puts "\n*#{ | 
| 53 | 
            +
                    puts "\n*#{name}*\n"
         | 
| 40 54 | 
             
                  end
         | 
| 41 | 
            -
                  print_commits!(team_commits)
         | 
| 42 55 | 
             
                end
         | 
| 43 56 |  | 
| 44 | 
            -
                 | 
| 45 | 
            -
             | 
| 46 | 
            -
                @commits.each { |commit| print_message(commit, nil) }
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
              def print_commits!(output_commits)
         | 
| 50 | 
            -
                output_commits.sort! { |a, b| a.author.name <=> b.author.name }
         | 
| 57 | 
            +
                def print_commits!(output_commits)
         | 
| 58 | 
            +
                  output_commits.sort! { |a, b| a.author.name <=> b.author.name }
         | 
| 51 59 |  | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 60 | 
            +
                  if options[:tags]
         | 
| 61 | 
            +
                    TAGS.each do |type, title|
         | 
| 62 | 
            +
                      tagged_commits = output_commits.select { |commit| commit.message.include?("##{type}") }
         | 
| 63 | 
            +
                      next if tagged_commits.empty?
         | 
| 56 64 |  | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 65 | 
            +
                      puts "\n#{title}:\n\n"
         | 
| 66 | 
            +
                      tagged_commits.each { |commit| print_message(commit, type) }
         | 
| 67 | 
            +
                      output_commits -= tagged_commits
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                    return if output_commits.empty?
         | 
| 70 | 
            +
                    puts "\nUnclassified:\n\n"
         | 
| 60 71 | 
             
                  end
         | 
| 61 | 
            -
                  return if output_commits.empty?
         | 
| 62 | 
            -
                  puts "\nUnclassified:\n\n"
         | 
| 63 | 
            -
                end
         | 
| 64 72 |  | 
| 65 | 
            -
             | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              def print_message(commit, type)
         | 
| 69 | 
            -
                message_lines = commit.message.split("\n\n")
         | 
| 70 | 
            -
                if message_lines.first =~ /Merge pull request/
         | 
| 71 | 
            -
                  title = message_lines.last
         | 
| 72 | 
            -
                  pr    = message_lines.first.split(" from ").first.split("#").last
         | 
| 73 | 
            -
                else
         | 
| 74 | 
            -
                  title = message_lines.first
         | 
| 73 | 
            +
                  output_commits.each { |commit| print_message(commit) }
         | 
| 75 74 | 
             
                end
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                 | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
                   | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
                   | 
| 75 | 
            +
             | 
| 76 | 
            +
                def print_message(commit, tag=nil)
         | 
| 77 | 
            +
                  message_lines = commit.message.split("\n\n")
         | 
| 78 | 
            +
                  if message_lines.first =~ /Merge pull request/
         | 
| 79 | 
            +
                    title = message_lines.last
         | 
| 80 | 
            +
                    pr    = message_lines.first.split(" from ").first.split("#").last
         | 
| 81 | 
            +
                  else
         | 
| 82 | 
            +
                    title = message_lines.first
         | 
| 83 | 
            +
                    sha   = options[:sha] ? commit.sha[0..9] : ''
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
                  title.gsub!("##{tag}", "") if tag
         | 
| 86 | 
            +
                  branch_author = commit.author.name
         | 
| 87 | 
            +
                  if options[:markdown]
         | 
| 88 | 
            +
                    text = "|#{title}|"
         | 
| 89 | 
            +
                    text << "#{branch_author}|"
         | 
| 90 | 
            +
                    text << "[##{pr}|#{@repo}/pull/#{pr}]|" if @repo && pr
         | 
| 91 | 
            +
                    text << "[#{sha}|#{@repo}/commit/#{sha}]|" if sha
         | 
| 92 | 
            +
                    text << "|" if options[:risks]
         | 
| 93 | 
            +
                  else
         | 
| 94 | 
            +
                    text = "* #{title} (#{branch_author})"
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                  puts text
         | 
| 86 97 | 
             
                end
         | 
| 87 | 
            -
                puts text
         | 
| 88 98 | 
             
              end
         | 
| 89 99 | 
             
            end
         | 
| @@ -1,56 +1,58 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
               | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 1 | 
            +
            module ChangesSince
         | 
| 2 | 
            +
              class CommitParser
         | 
| 3 | 
            +
                attr_reader :log, :options
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(tag, options)
         | 
| 6 | 
            +
                  git   = Git.open(Dir.pwd)
         | 
| 7 | 
            +
                  @log  = git.log(100000).between(tag)
         | 
| 8 | 
            +
                  @options = options
         | 
| 9 | 
            +
                end
         | 
| 9 10 |  | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 11 | 
            +
                def parse_all_commits
         | 
| 12 | 
            +
                  interesting = Set.new
         | 
| 13 | 
            +
                  all_commits = log.to_a
         | 
| 13 14 |  | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 15 | 
            +
                  link_re = /^\s*\[(.*?)\]/m
         | 
| 16 | 
            +
                  linked_commits, remaining_commits = all_commits.partition do |commit|
         | 
| 17 | 
            +
                    commit.message =~ link_re
         | 
| 18 | 
            +
                  end
         | 
| 18 19 |  | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 20 | 
            +
                  linked_commits.uniq! do |commit|
         | 
| 21 | 
            +
                    commit.message[link_re,1]
         | 
| 22 | 
            +
                  end
         | 
| 22 23 |  | 
| 23 | 
            -
             | 
| 24 | 
            +
                  interesting = interesting + linked_commits
         | 
| 24 25 |  | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 26 | 
            +
                  interesting_re = /
         | 
| 27 | 
            +
                    (?:\#(bug|public|internal)) | # anything explicitly tagged
         | 
| 28 | 
            +
                    (?:closes\s\#\d+) | # a squash-merge commit closing the linked PR
         | 
| 29 | 
            +
                    (?:Merge\spull\srequest) # a straight PR merge
         | 
| 30 | 
            +
                  /xmi
         | 
| 30 31 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 32 | 
            +
                  remaining_commits.each do |commit|
         | 
| 33 | 
            +
                    if commit.message =~ interesting_re
         | 
| 34 | 
            +
                      interesting << commit
         | 
| 35 | 
            +
                    end
         | 
| 34 36 | 
             
                  end
         | 
| 37 | 
            +
                  commits = interesting.to_a
         | 
| 35 38 | 
             
                end
         | 
| 36 | 
            -
                commits = interesting.to_a
         | 
| 37 | 
            -
              end
         | 
| 38 39 |  | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 40 | 
            +
                def parse
         | 
| 41 | 
            +
                  commits = if options[:all]
         | 
| 42 | 
            +
                    parse_all_commits
         | 
| 43 | 
            +
                  else
         | 
| 44 | 
            +
                    log.select { |commit| commit.message =~ /Merge pull request/ }
         | 
| 45 | 
            +
                  end
         | 
| 45 46 |  | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 47 | 
            +
                  if options[:author_filter]
         | 
| 48 | 
            +
                    author_re = /#{options[:author_filter].join("|")}/i
         | 
| 49 | 
            +
                    commits = commits.select do |commit|
         | 
| 50 | 
            +
                      [commit.author.name, commit.author.email].any? do |str|
         | 
| 51 | 
            +
                        str =~ author_re
         | 
| 52 | 
            +
                      end
         | 
| 51 53 | 
             
                    end
         | 
| 52 54 | 
             
                  end
         | 
| 55 | 
            +
                  commits
         | 
| 53 56 | 
             
                end
         | 
| 54 | 
            -
                commits
         | 
| 55 57 | 
             
              end
         | 
| 56 58 | 
             
            end
         | 
    
        data/lib/changes_since.rb
    CHANGED
    
    | @@ -1,13 +1,8 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # Usage: To get all merged pull requests since v1.37.0
         | 
| 4 | 
            -
            #        script/changes_since v1.37.0
         | 
| 5 | 
            -
             | 
| 6 1 | 
             
            require 'git'
         | 
| 7 2 | 
             
            require 'optparse'
         | 
| 8 3 | 
             
            require 'set'
         | 
| 9 4 |  | 
| 10 | 
            -
             | 
| 5 | 
            +
            module ChangesSince
         | 
| 11 6 | 
             
              def self.fetch(tag, teams=nil, repo=nil)
         | 
| 12 7 | 
             
                options = parse_options
         | 
| 13 8 | 
             
                parser  = CommitParser.new(tag, options)
         | 
| @@ -0,0 +1,150 @@ | |
| 1 | 
            +
            require File.expand_path("../../helper", __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class ChangelogPrinterTest < Test::Unit::TestCase
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def stub_commits
         | 
| 6 | 
            +
                [
         | 
| 7 | 
            +
                  stub(:author => stub(:name => "Rajesh", :email => "rajesh@gmail.com"), :message => "abcd"),
         | 
| 8 | 
            +
                  stub(:author => stub(:name => "Rajesh", :email => "rajesh@gmail.com"), :message => "def #bug"),
         | 
| 9 | 
            +
                  stub(:author => stub(:name => "Ankita", :email => "ankita@gmail.com"), :message => "sad #internal"),
         | 
| 10 | 
            +
                  stub(:author => stub(:name => "Rajesh", :email => "rajesh@gmail.com"), :message => "dasd"),
         | 
| 11 | 
            +
                  stub(:author => stub(:name => "Susan",  :email => "susan@gmail.com"),  :message => "aaaa" ),
         | 
| 12 | 
            +
                  stub(:author => stub(:name => "Rajesh", :email => "rajesh@gmail.com"), :message => "dsss"),
         | 
| 13 | 
            +
                  stub(:author => stub(:name => "Ankita", :email => "ankita@gmail.com"), :message => "ver"),
         | 
| 14 | 
            +
                  stub(:author => stub(:name => "Rajesh", :email => "rajesh@gmail.com"), :message => "sdfs #public"),
         | 
| 15 | 
            +
                  stub(:author => stub(:name => "Derek",  :email => "derek@gmail.com"),  :message => "sds"),
         | 
| 16 | 
            +
                  stub(:author => stub(:name => "Bob",    :email => "bob@gmail.com"),    :message => "bbbb")
         | 
| 17 | 
            +
                ]
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def stub_teams
         | 
| 21 | 
            +
                {
         | 
| 22 | 
            +
                  "Team 1" => ["Bob", "Ankita"],
         | 
| 23 | 
            +
                  "Team 2" => ["Rajesh", "susan@gmail.com"]
         | 
| 24 | 
            +
                }
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              context "ChangelogPrinter" do
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                context 'initialization' do
         | 
| 30 | 
            +
                  should "setup instance variables" do
         | 
| 31 | 
            +
                    commits = stub
         | 
| 32 | 
            +
                    teams   = stub
         | 
| 33 | 
            +
                    options = stub
         | 
| 34 | 
            +
                    repo    = stub
         | 
| 35 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(commits, teams, options, repo)
         | 
| 36 | 
            +
                    assert_equal printer.instance_variable_get('@commits'), commits
         | 
| 37 | 
            +
                    assert_equal printer.instance_variable_get('@teams'), teams
         | 
| 38 | 
            +
                    assert_equal printer.instance_variable_get('@options'), options
         | 
| 39 | 
            +
                    assert_equal printer.instance_variable_get('@repo'), repo
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                context 'print!' do
         | 
| 44 | 
            +
                  should "print team commits if present" do
         | 
| 45 | 
            +
                    commits = stub
         | 
| 46 | 
            +
                    teams   = stub
         | 
| 47 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(commits, teams, stub, stub)
         | 
| 48 | 
            +
                    printer.expects(:print_team_commits!)
         | 
| 49 | 
            +
                    printer.print!
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  should "print commits if no teams present" do
         | 
| 53 | 
            +
                    commits = stub
         | 
| 54 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(commits, nil, stub, stub)
         | 
| 55 | 
            +
                    printer.expects(:print_commits!)
         | 
| 56 | 
            +
                    printer.print!
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                context "print_team_commits!" do
         | 
| 61 | 
            +
                  setup do
         | 
| 62 | 
            +
                    @commits = stub_commits
         | 
| 63 | 
            +
                    @teams = stub_teams
         | 
| 64 | 
            +
                    @team_commits = {
         | 
| 65 | 
            +
                      "Team 1" => @commits.select { |commit|
         | 
| 66 | 
            +
                        [commit.author.name, commit.author.email].any? { |str| str =~ /Bob|Ankita/i }
         | 
| 67 | 
            +
                      },
         | 
| 68 | 
            +
                      "Team 2" => @commits.select { |commit|
         | 
| 69 | 
            +
                        [commit.author.name, commit.author.email].any? { |str| str =~ /Rajesh|susan@gmail.com/i }
         | 
| 70 | 
            +
                      },
         | 
| 71 | 
            +
                      "Other"  => @commits.select { |commit|
         | 
| 72 | 
            +
                        [commit.author.name, commit.author.email].any? { |str| str =~ /Derek/ }
         | 
| 73 | 
            +
                      }
         | 
| 74 | 
            +
                    }
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  should "divide by teams and call print commits" do
         | 
| 78 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(@commits, @teams, stub, stub)
         | 
| 79 | 
            +
                    @team_commits.each do |name, commit_set|
         | 
| 80 | 
            +
                      printer.expects(:print_team_name).with(name)
         | 
| 81 | 
            +
                      printer.expects(:print_commits!).with(commit_set)
         | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
                    printer.print_team_commits!
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  should "not print other if no commits are present" do
         | 
| 87 | 
            +
                    @commits.reject! { |commit| commit.author.name == "Derek" }
         | 
| 88 | 
            +
                    @team_commits.delete("Other")
         | 
| 89 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(@commits, @teams, stub, stub)
         | 
| 90 | 
            +
                    @team_commits.each do |name, commit_set|
         | 
| 91 | 
            +
                      printer.expects(:print_team_name).with(name)
         | 
| 92 | 
            +
                      printer.expects(:print_commits!).with(commit_set)
         | 
| 93 | 
            +
                    end
         | 
| 94 | 
            +
                    printer.expects(:print_team_name).with("Other").never
         | 
| 95 | 
            +
                    printer.print_team_commits!
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                context "print_commits!" do
         | 
| 100 | 
            +
                  should "call print message for each commit" do
         | 
| 101 | 
            +
                    commits = stub_commits
         | 
| 102 | 
            +
                    options = {}
         | 
| 103 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(commits, stub, options, stub)
         | 
| 104 | 
            +
                    commits.each { |commit| printer.expects(:print_message).with(commit) }
         | 
| 105 | 
            +
                    printer.print_commits!(commits)
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  should "call print message for each commit when tags are enabled" do
         | 
| 109 | 
            +
                    commits = stub_commits
         | 
| 110 | 
            +
                    options = { :tags => true }
         | 
| 111 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(commits, stub, options, stub)
         | 
| 112 | 
            +
                    tagged_commits = commits.select { |commit| commit.message =~ /public|bug|internal/ }
         | 
| 113 | 
            +
                    tagged_commits.each { |commit|
         | 
| 114 | 
            +
                      tag = commit.message.slice(commit.message.index("#") + 1, commit.message.length).to_sym
         | 
| 115 | 
            +
                      printer.expects(:print_message).with(commit, tag)
         | 
| 116 | 
            +
                    }
         | 
| 117 | 
            +
                    untagged_commits = commits - tagged_commits
         | 
| 118 | 
            +
                    untagged_commits.each { |commit| printer.expects(:print_message).with(commit) }
         | 
| 119 | 
            +
                    printer.expects(:puts).with("\nPublic:\n\n")
         | 
| 120 | 
            +
                    printer.expects(:puts).with("\nBugs:\n\n")
         | 
| 121 | 
            +
                    printer.expects(:puts).with("\nInternal:\n\n")
         | 
| 122 | 
            +
                    printer.expects(:puts).with("\nUnclassified:\n\n")
         | 
| 123 | 
            +
                    printer.print_commits!(commits)
         | 
| 124 | 
            +
                  end
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                context "print_team_name" do
         | 
| 128 | 
            +
                  should "print the team name" do
         | 
| 129 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(stub, stub, {}, stub)
         | 
| 130 | 
            +
                    printer.expects(:puts).with("\n*abc*\n")
         | 
| 131 | 
            +
                    printer.print_team_name("abc")
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                  should "print the team name with markdown" do
         | 
| 135 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(stub, stub, { :markdown => true }, stub)
         | 
| 136 | 
            +
                    printer.expects(:puts).with("||*abc*||Author||PR||")
         | 
| 137 | 
            +
                    printer.print_team_name("abc")
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                  should "print the team name with markdown and risks" do
         | 
| 141 | 
            +
                    printer = ChangesSince::ChangelogPrinter.new(stub, stub, { :markdown => true, :risks => true }, stub)
         | 
| 142 | 
            +
                    printer.expects(:puts).with("||*abc*||Author||PR||Risks||")
         | 
| 143 | 
            +
                    printer.print_team_name("abc")
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                context "print_message" do
         | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
              end
         | 
| 150 | 
            +
            end
         | 
    
        data/test/changes_since_test.rb
    CHANGED
    
    
    
        data/test/helper.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: changes_since
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ashwin Hegde
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-04- | 
| 11 | 
            +
            date: 2014-04-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -52,6 +52,34 @@ dependencies: | |
| 52 52 | 
             
                - - '>='
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: mocha
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - '>='
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: shoulda
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - '>='
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - '>='
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 55 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 84 | 
             
              name: git
         | 
| 57 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -75,6 +103,7 @@ extensions: [] | |
| 75 103 | 
             
            extra_rdoc_files: []
         | 
| 76 104 | 
             
            files:
         | 
| 77 105 | 
             
            - .gitignore
         | 
| 106 | 
            +
            - .travis.yml
         | 
| 78 107 | 
             
            - Gemfile
         | 
| 79 108 | 
             
            - LICENSE.txt
         | 
| 80 109 | 
             
            - README.md
         | 
| @@ -84,7 +113,9 @@ files: | |
| 84 113 | 
             
            - lib/changes_since/changelog_printer.rb
         | 
| 85 114 | 
             
            - lib/changes_since/commit_parser.rb
         | 
| 86 115 | 
             
            - lib/changes_since/version.rb
         | 
| 116 | 
            +
            - test/changes_since/changelog_printer_test.rb
         | 
| 87 117 | 
             
            - test/changes_since_test.rb
         | 
| 118 | 
            +
            - test/helper.rb
         | 
| 88 119 | 
             
            homepage: http://rubygems.org/gems/changes_since
         | 
| 89 120 | 
             
            licenses:
         | 
| 90 121 | 
             
            - MIT
         | 
| @@ -110,4 +141,6 @@ signing_key: | |
| 110 141 | 
             
            specification_version: 4
         | 
| 111 142 | 
             
            summary: Git Changes since a tag
         | 
| 112 143 | 
             
            test_files:
         | 
| 144 | 
            +
            - test/changes_since/changelog_printer_test.rb
         | 
| 113 145 | 
             
            - test/changes_since_test.rb
         | 
| 146 | 
            +
            - test/helper.rb
         |