class JIRADiff::Stories

Attributes

branches[RW]
dir[RW]
directory[RW]
includes[R]
stories[R]

Public Class Methods

new(opts = Options.defaults) click to toggle source
# File lib/jira_diff/stories.rb, line 7
def initialize(opts = Options.defaults)
  @branches  = _get_branches(opts[:master], opts[:source])
  @directory = opts[:directory] || '.'
  @includes  = _get_includes(opts.includes)
  @options   = opts
  @stories   = opts[:stories] || {}

  _get_stories if @stories == {}
end

Public Instance Methods

add_include(story) click to toggle source
# File lib/jira_diff/stories.rb, line 32
def add_include(story)
  @includes << story
end
add_story(branch, story) click to toggle source
# File lib/jira_diff/stories.rb, line 66
def add_story(branch, story)
  (@stories[branch] ||= []).push story
end
diff() click to toggle source
# File lib/jira_diff/stories.rb, line 78
def diff
  stories = []
  opts    = @options

  source_stories.each do |story|
    stories << story unless find(master, story.sha)
  end

  opts.source  = ['diff']
  opts.stories = { 'diff' => stories.flatten }
  Stories.new opts
end
each() { |story| ... } click to toggle source
# File lib/jira_diff/stories.rb, line 22
def each
  @stories.values.each do |stories|
    stories.each { |story| yield story }
  end
end
find(branch, sha) click to toggle source
# File lib/jira_diff/stories.rb, line 70
def find(branch, sha)
  raise ArgumentError, "Invalid environment #{branch}" unless @branches.include?(branch)

  @stories[branch].each { |story| return true if story.sha == sha }

  false
end
includes=(file) click to toggle source
# File lib/jira_diff/stories.rb, line 36
def includes=(file)
  @includes = _get_includes(file)
end
master() click to toggle source
# File lib/jira_diff/stories.rb, line 40
def master
  @branches[0]
end
master=(new_master) click to toggle source
# File lib/jira_diff/stories.rb, line 44
def master=(new_master)
  @stories[master] = []
  @branches[0]     = new_master
  _get_stories(new_master)
end
shas() click to toggle source
# File lib/jira_diff/stories.rb, line 50
def shas
  source.map do |branch|
    stories[branch].map { |s| s.sha }
  end.flatten.reverse
end
source() click to toggle source
# File lib/jira_diff/stories.rb, line 28
def source
  @branches[1, @branches.size]
end
source_stories() click to toggle source
# File lib/jira_diff/stories.rb, line 56
def source_stories
  story_index = {}

  source.each do |branch|
    stories[branch].each { |s| story_index[s.sha] = s }
  end

  story_index.values
end

Private Instance Methods

_get_branches(master, sources) click to toggle source
# File lib/jira_diff/stories.rb, line 93
def _get_branches(master, sources)
  branches = [] << (master.nil? ? 'master' : master)
  branches << (sources.empty? ? ['develop'] : sources)
  branches.flatten
end
_get_includes(includes_file) click to toggle source
# File lib/jira_diff/stories.rb, line 99
def _get_includes(includes_file)
  lines = []
  if includes_file && File.exist?(includes_file)
    File.open(includes_file, 'r') do |f|
      f.each_line { |line| lines << $1 if line =~ /(\w+\-\d+)/ }
    end
  end
  lines
end
_get_stories(branches = @branches) click to toggle source
# File lib/jira_diff/stories.rb, line 109
def _get_stories(branches = @branches)
  git = Git.new(@directory)

  branches.to_a.each do |branch|
    puts "checking #{branch}" if @options.debug
    git.log(branch).each do |line|
      line.strip!
      next if line.empty?
      add_story branch, Story.new(line)
    end
  end
end