lib/gitmine.rb in gitmine-0.1.3 vs lib/gitmine.rb in gitmine-0.1.4.pre
- old
+ new
@@ -2,111 +2,8 @@
require 'grit'
require 'yaml'
require 'httparty'
-class Gitmine
- # CLI interface
- def self.run
- gm = Gitmine.new
- gm.commits.each do |commit|
- status = commit.issue ? commit.issue.status : 'N/A'
- puts "#{commit.id[0..6]} #{status.ljust(12)} #{commit.committer.name.ljust(15)} #{commit.message[0..50].gsub("\n", '')}"
- end
- end
-
- def initialize
- @repo = Grit::Repo.new(ENV['PWD'])
- @branch = File.read('./.git/HEAD').match(/^ref: refs\/heads\/(.+)/)[1]
- end
-
- def commits
- @repo.commits(@branch).map do |c|
- Commit.new(c)
- end
- end
-
-
- class Commit
- attr_reader :grit_commit
-
- # Initialize a new Commit objects that delegates methods to the Grit::Commit object passed in
- def initialize(grit_commit)
- @grit_commit = grit_commit
- end
-
- # Issue associated with this commit
- # Return nil if their is no associated issue
- def issue
- @issue ||= Issue.get_for_commit(message)
- end
-
- # Delegate #id to Grit::Commit
- def id
- @grit_commit.id
- end
-
- protected
- # Delegate methods to Grit::Commit
- def method_missing(m, *args, &block)
- return @grit_commit.send(m, args, block) if @grit_commit.respond_to? m
- super
- end
- end
-
- class Issue
- CONFIG_FILE = './.gitmine.yml'
-
- attr_reader :id, :subject, :status
-
- # Extract the issue_id from a commit message.
- # Examples:
- # CommitMsgToIssueId.parse("Message for Issue #123.")
- # => 123
- # CommitMsgToIssueId.parse("#123.")
- # => nil
- #
- def self.parse_for_issue_id(msg)
- match = msg.match(/Issue #(\d+)/)
- match ? match[1] : nil
- end
-
- # Parse the commit_message and get the associated issue if any.
- def self.get_for_commit(commit_message)
- issue_id = parse_for_issue_id(commit_message)
- issue_id ? Issue.get(issue_id) : nil
- end
-
- # Get the issue from redmine
- def self.get(issue_id)
- Issue.new.tap { |issue|
- issue.build_via_issue_id(issue_id)
- }
- end
-
- # Config from .gitmine.yml
- def config
- @config ||= YAML.load_file(CONFIG_FILE)
- end
-
- # Get attributes from redmine and set them all
- def build_via_issue_id(issue_id)
- @id = issue_id
- data = get(issue_id).parsed_response['issue']
- @subject = data['subject']
- @status = data['status']['name']
- end
-
- protected
-
- # Url to redmine/issues
- def url(id)
- "#{config['host']}/issues/#{id}.xml?key=#{config['api_key']}"
- end
-
- # http_get the issue using HTTParty
- def get(issue_id)
- HTTParty.get(url(issue_id))
- end
- end
-
+%w(gitmine issue commit cli).each do |filename|
+ require File.dirname(__FILE__) + "/gitmine/#{filename}.rb"
end