blammo 0.2.2 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
- blammo.gemspec
1
+ .bundle
2
+ changelog.html
2
3
  changelog.yml
3
4
  pkg
5
+ vendor
data/Gemfile CHANGED
@@ -1,8 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'fancypath'
4
3
  gem 'git'
5
- gem 'tilt'
6
4
  gem 'thor'
7
5
 
8
6
  group :development do
@@ -14,4 +12,5 @@ end
14
12
  group :test do
15
13
  gem 'rr'
16
14
  gem 'rspec'
15
+ gem 'timecop'
17
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.5
data/blammo.gemspec ADDED
@@ -0,0 +1,94 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{blammo}
8
+ s.version = "0.2.5"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Josh Bassett"]
12
+ s.date = %q{2010-06-30}
13
+ s.default_executable = %q{blam}
14
+ s.description = %q{ Changelog generator.
15
+ }
16
+ s.email = %q{josh.bassett@gmail.com}
17
+ s.executables = ["blam"]
18
+ s.extra_rdoc_files = [
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".gitignore",
23
+ "Gemfile",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/blam",
28
+ "blammo.gemspec",
29
+ "lib/blammo.rb",
30
+ "lib/blammo/alone.rb",
31
+ "lib/blammo/changelog.rb",
32
+ "lib/blammo/cli.rb",
33
+ "lib/blammo/commit.rb",
34
+ "lib/blammo/git.rb",
35
+ "lib/blammo/release.rb",
36
+ "lib/core_ext/blank.rb",
37
+ "spec/blammo/changelog_spec.rb",
38
+ "spec/blammo/cli_spec.rb",
39
+ "spec/blammo/commit_spec.rb",
40
+ "spec/blammo/git_spec.rb",
41
+ "spec/blammo/release_spec.rb",
42
+ "spec/spec.opts",
43
+ "spec/spec_helper.rb",
44
+ "templates/changelog.html.erb"
45
+ ]
46
+ s.homepage = %q{http://github.com/nullobject/blammo}
47
+ s.rdoc_options = ["--charset=UTF-8"]
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.3.6}
50
+ s.summary = %q{CHANGELOG from Blammo.}
51
+ s.test_files = [
52
+ "spec/blammo/changelog_spec.rb",
53
+ "spec/blammo/cli_spec.rb",
54
+ "spec/blammo/commit_spec.rb",
55
+ "spec/blammo/git_spec.rb",
56
+ "spec/blammo/release_spec.rb",
57
+ "spec/spec_helper.rb"
58
+ ]
59
+
60
+ if s.respond_to? :specification_version then
61
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
62
+ s.specification_version = 3
63
+
64
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
65
+ s.add_runtime_dependency(%q<git>, [">= 0"])
66
+ s.add_runtime_dependency(%q<thor>, [">= 0"])
67
+ s.add_development_dependency(%q<hirb>, [">= 0"])
68
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
69
+ s.add_development_dependency(%q<rake>, [">= 0"])
70
+ s.add_development_dependency(%q<rr>, [">= 0"])
71
+ s.add_development_dependency(%q<rspec>, [">= 0"])
72
+ s.add_development_dependency(%q<timecop>, [">= 0"])
73
+ else
74
+ s.add_dependency(%q<git>, [">= 0"])
75
+ s.add_dependency(%q<thor>, [">= 0"])
76
+ s.add_dependency(%q<hirb>, [">= 0"])
77
+ s.add_dependency(%q<jeweler>, [">= 0"])
78
+ s.add_dependency(%q<rake>, [">= 0"])
79
+ s.add_dependency(%q<rr>, [">= 0"])
80
+ s.add_dependency(%q<rspec>, [">= 0"])
81
+ s.add_dependency(%q<timecop>, [">= 0"])
82
+ end
83
+ else
84
+ s.add_dependency(%q<git>, [">= 0"])
85
+ s.add_dependency(%q<thor>, [">= 0"])
86
+ s.add_dependency(%q<hirb>, [">= 0"])
87
+ s.add_dependency(%q<jeweler>, [">= 0"])
88
+ s.add_dependency(%q<rake>, [">= 0"])
89
+ s.add_dependency(%q<rr>, [">= 0"])
90
+ s.add_dependency(%q<rspec>, [">= 0"])
91
+ s.add_dependency(%q<timecop>, [">= 0"])
92
+ end
93
+ end
94
+
data/lib/blammo.rb CHANGED
@@ -1,5 +1,7 @@
1
- require 'fancypath'
1
+ require 'core_ext/blank'
2
2
 
3
3
  require 'blammo/changelog'
4
+ require 'blammo/commit'
4
5
  require 'blammo/cli'
5
6
  require 'blammo/git'
7
+ require 'blammo/release'
@@ -2,30 +2,59 @@ require 'yaml'
2
2
 
3
3
  module Blammo
4
4
  class Changelog
5
- attr_accessor :releases
5
+ attr_reader :releases
6
6
 
7
7
  def initialize(path)
8
- @path = path.to_fancypath
9
- @releases = @path.exists? ? YAML.load_file(@path) : []
8
+ releases_hash = File.exists?(path) ? YAML.load_file(path) : []
9
+ @releases = Changelog.parse_releases(releases_hash)
10
10
  end
11
11
 
12
- def update
13
- commits = Git.commits(@path.dir, last_sha)
12
+ def refresh(dir)
13
+ # TODO: allow release name to be specified from CLI.
14
+ name = Time.now.strftime("%Y%m%d%H%M%S")
15
+ release = Release.new(name)
16
+ since = Changelog.last_sha(@releases)
14
17
 
15
- unless commits.empty?
16
- release = Time.now.strftime("%Y%m%d%H%M%S")
17
- releases.unshift(release => commits)
18
+ Git.each_commit(dir, since) do |sha, message|
19
+ if message =~ Commit::COMMIT_RE
20
+ commit = Commit.new(sha, message)
21
+ release.add_commit(commit) if commit.tag
22
+ end
18
23
  end
19
24
 
20
- @releases.to_yaml(open(@path, "w"))
25
+ add_release(release)
21
26
  end
22
27
 
23
- def last_sha
24
- return if @releases.empty?
25
- release = @releases.first
26
- commits = release.first.last
27
- commit = commits.detect {|commit| commit.is_a?(Hash)}
28
- commit ? commit.first.first : nil
28
+ def add_release(release)
29
+ @releases.unshift(release) unless release.commits.empty?
30
+ end
31
+
32
+ def to_yaml(options = {})
33
+ @releases.to_yaml(options)
34
+ end
35
+
36
+ def self.last_sha(releases)
37
+ commit = nil
38
+
39
+ releases.each do |release|
40
+ commit = release.commits.detect {|commit| commit.sha}
41
+ break if commit
42
+ end
43
+
44
+ commit ? commit.sha : nil
45
+ end
46
+
47
+ def self.parse_releases(releases)
48
+ releases.map do |release|
49
+ name, commits = release.first
50
+
51
+ commits = commits.map do |commit|
52
+ sha, message = commit.is_a?(Hash) ? commit.first : [nil, commit]
53
+ Commit.new(sha, message)
54
+ end.compact
55
+
56
+ Release.new(name, commits)
57
+ end
29
58
  end
30
59
  end
31
60
  end
data/lib/blammo/cli.rb CHANGED
@@ -1,21 +1,30 @@
1
1
  require 'thor'
2
- require 'tilt'
3
2
 
4
3
  module Blammo
5
4
  class CLI < Thor
6
- desc "generate [PATH]", "Generates a changelog.yml file"
5
+ include Thor::Actions
6
+
7
+ def self.source_root
8
+ File.dirname(__FILE__)
9
+ end
10
+
11
+ desc "generate [PATH]", %q(Generates a changelog.yml file (short-cut alias: "g"))
12
+ method_options :force => :boolean
13
+ map "g" => :generate
7
14
  def generate(path = "changelog.yml")
15
+ path = File.expand_path(path, destination_root)
8
16
  changelog = Changelog.new(path)
9
- changelog.update
10
- puts changelog.releases.to_yaml
17
+ changelog.refresh(destination_root)
18
+ create_file(path, changelog.to_yaml)
11
19
  end
12
20
 
13
- desc "render [PATH]", "Renders the given changelog.yml file"
21
+ desc "render [PATH]", %q(Renders the given changelog.yml file (short-cut alias: "r"))
22
+ method_options :force => :boolean
23
+ map "r" => :render
14
24
  def render(path = "changelog.yml")
15
- changelog = Changelog.new(path)
16
- template_path = __FILE__.to_fancypath.dir / "../../templates/changelog.html.erb".to_fancypath
17
- template = Tilt.new(template_path)
18
- puts template.render(nil, :changelog => changelog)
25
+ @changelog = Changelog.new(path)
26
+ source = "../../templates/changelog.html.erb"
27
+ template(source, "changelog.html")
19
28
  end
20
29
  end
21
30
  end
@@ -0,0 +1,40 @@
1
+ module Blammo
2
+ class Commit
3
+ COMMIT_RE = /^(\[\w+\]) (.*)/
4
+
5
+ TAGS_RE_MAP = {
6
+ :added => /(ADDED|NEW)/,
7
+ :changed => /(CHANGED)/,
8
+ :fixed => /(FIXED)/,
9
+ }
10
+
11
+ attr_reader :sha, :message, :tag
12
+
13
+ def initialize(sha, message)
14
+ @sha = sha
15
+
16
+ if message && message.match(Commit::COMMIT_RE)
17
+ @tag, @message = Commit.parse_tag($1), $2
18
+ end
19
+ end
20
+
21
+ def to_s
22
+ @message
23
+ end
24
+
25
+ def to_yaml(options = {})
26
+ message = "[#{@tag.to_s.upcase}] #{@message}"
27
+
28
+ if @sha
29
+ {@sha => message}
30
+ else
31
+ message
32
+ end.to_yaml(options)
33
+ end
34
+
35
+ def self.parse_tag(value)
36
+ tag, regexp = TAGS_RE_MAP.detect {|tag, regexp| value =~ regexp}
37
+ tag
38
+ end
39
+ end
40
+ end
data/lib/blammo/git.rb CHANGED
@@ -4,33 +4,19 @@ module Blammo
4
4
  class Git
5
5
  CHUNK_SIZE = 10
6
6
 
7
- # Returns commits to the repo in the given path since the given SHA.
8
- def self.commits(path, last_sha = nil)
9
- commits = []
10
- git = ::Git.open(path)
11
- log = ::Git::Log.new(git, CHUNK_SIZE)
12
-
13
- log.between(last_sha, "head") if last_sha
14
-
15
- each_commit(log) do |commit|
16
- commits << {commit.sha => commit.message}
17
- end
18
-
19
- commits
20
- end
21
-
22
- private
23
- def self.each_commit(log, &block)
24
- chunk = 0
25
-
26
- begin
27
- log.skip(chunk * CHUNK_SIZE)
28
- chunk += 1
29
-
30
- log.each do |commit|
31
- yield commit
32
- end
33
- end until log.size == 0
34
- end
7
+ # Yield each commit in the given repository since the given SHA.
8
+ def self.each_commit(path, since = nil, &block)
9
+ git = ::Git.open(path)
10
+ log = ::Git::Log.new(git, CHUNK_SIZE)
11
+ chunk = 0
12
+
13
+ log.between(since, "head") if since
14
+
15
+ begin
16
+ log.skip(chunk * CHUNK_SIZE)
17
+ log.each {|commit| block.call(commit.sha, commit.message.strip)}
18
+ chunk += 1
19
+ end until log.size == 0
35
20
  end
21
+ end
36
22
  end
@@ -0,0 +1,33 @@
1
+ module Blammo
2
+ class Release
3
+ attr_reader :name, :commits
4
+
5
+ def initialize(name, commits = [])
6
+ @name = name
7
+ @commits = commits
8
+ end
9
+
10
+ def add_commit(commit)
11
+ @commits << commit
12
+ end
13
+
14
+ def to_s
15
+ @name
16
+ end
17
+
18
+ def to_yaml(options = {})
19
+ {@name => @commits}.to_yaml(options)
20
+ end
21
+
22
+ def each_commit(tag = nil, &block)
23
+ if tag
24
+ tag = tag.to_sym
25
+ commits = @commits.select {|commit| commit.tag == tag}
26
+ else
27
+ commits = @commits
28
+ end
29
+
30
+ commits.each {|commit| block.call(commit)}
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ class String
2
+ # Play nice with Rails.
3
+ unless method_defined?(:blank?)
4
+ def blank?
5
+ empty?
6
+ end
7
+ end
8
+ end
9
+
10
+ class NilClass
11
+ # Play nice with Rails.
12
+ unless method_defined?(:blank?)
13
+ def blank?
14
+ true
15
+ end
16
+ end
17
+ end
@@ -1,26 +1,124 @@
1
1
  require 'spec_helper'
2
2
 
3
- CHANGELOG_PATH = __FILE__.to_fancypath.dir / "../fixtures/changelog.yml"
4
-
5
3
  describe Blammo::Changelog do
6
- describe ".last_sha" do
7
- context "with no releases" do
8
- before do
9
- @changelog = Blammo::Changelog.new("foobar.yml")
4
+ before(:all) do
5
+ @releases_hash = [
6
+ {"1.1" => [
7
+ "[ADDED] commit one",
8
+ ]},
9
+ {"1.0" => [
10
+ {"867b20e695e2b3770e150b0e844cdb6addd48ba4" => nil},
11
+ {"3b183d9d1ec270fc63ef54695db1cd2df5d597cf" => "[FIXED] commit three"},
12
+ ]}
13
+ ]
14
+
15
+ @releases = [
16
+ Blammo::Release.new("1.1", [
17
+ Blammo::Commit.new(nil, "[ADDED] commit one"),
18
+ ]),
19
+ Blammo::Release.new("1.0", [
20
+ Blammo::Commit.new("867b20e695e2b3770e150b0e844cdb6addd48ba4", nil),
21
+ Blammo::Commit.new("3b183d9d1ec270fc63ef54695db1cd2df5d597cf", "[FIXED] commit three"),
22
+ ])
23
+ ]
24
+
25
+ @tagged_commits = [
26
+ Blammo::Commit.new("867b20e695e2b3770e150b0e844cdb6addd48ba4", "[ADDED] Lorem ipsum dolor sit amet, consectetur adipiscing elit."),
27
+ Blammo::Commit.new("3b183d9d1ec270fc63ef54695db1cd2df5d597cf", "[CHANGED] Fusce accumsan laoreet semper."),
28
+ Blammo::Commit.new("a7324e86b19ec68249ca0f9752a3277b0ad8c0c2", "[FIXED] Nunc ut magna eget libero porttitor mattis."),
29
+ ]
30
+
31
+ @non_tagged_commits = [
32
+ Blammo::Commit.new("5fd6e8dea3d8c79700fccb324ba4a9b00918afa3", "Donec rhoncus lorem sed lorem vestibulum ultricies.")
33
+ ]
34
+ end
35
+
36
+ describe "#initialize" do
37
+ before do
38
+ @path = "changelog.yml"
39
+
40
+ stub(Blammo::Changelog).parse_releases {[]}
41
+ stub(File).exists? {true}
42
+ stub(YAML).load_file {[]}
43
+
44
+ Blammo::Changelog.new(@path)
45
+ end
46
+
47
+ it "should load the given YAML file and parse it" do
48
+ YAML.should have_received.load_file(@path)
49
+ Blammo::Changelog.should have_received.parse_releases(anything)
50
+ end
51
+
52
+ context "with an invalid YAML file" do
53
+ it "should warn the user" do
54
+ pending
10
55
  end
56
+ end
57
+ end
58
+
59
+ describe "#refresh" do
60
+ before do
61
+ @dir = "foo/bar"
62
+ @last_sha = "867b20e695e2b3770e150b0e844cdb6addd48ba4"
63
+ @changelog = Blammo::Changelog.new("changelog.yml")
64
+ @time_str = "20100501155804"
65
+ @time = Time.parse(@time_str)
11
66
 
67
+ stub(Blammo::Changelog).last_sha {@last_sha}
68
+ stub(Blammo::Git).each_commit
69
+
70
+ Timecop.freeze(@time) do
71
+ @changelog.refresh(@dir)
72
+ end
73
+ end
74
+
75
+ it "should process commits since the last SHA" do
76
+ Blammo::Git.should have_received.each_commit(@dir, @last_sha)
77
+ end
78
+
79
+ it "should name the release with the current timestamp" do
80
+ pending
81
+ end
82
+ end
83
+
84
+ describe "#to_yaml" do
85
+ before do
86
+ stub(Blammo::Changelog).parse_releases {@releases}
87
+ stub(@releases).to_yaml
88
+
89
+ @changelog = Blammo::Changelog.new("changelog.yml")
90
+ @changelog.to_yaml
91
+ end
92
+
93
+ it "should return the releases YAML" do
94
+ @releases.should have_received.to_yaml({})
95
+ end
96
+ end
97
+
98
+ describe ".last_sha" do
99
+ context "with no releases" do
12
100
  it "should return nil" do
13
- @changelog.last_sha.should be_nil
101
+ Blammo::Changelog.last_sha([]).should be_nil
14
102
  end
15
103
  end
16
104
 
17
105
  context "with a release" do
18
- before do
19
- @changelog = Blammo::Changelog.new(CHANGELOG_PATH)
106
+ it "should return the SHA of the last commit" do
107
+ Blammo::Changelog.last_sha(@releases).should == "867b20e695e2b3770e150b0e844cdb6addd48ba4"
20
108
  end
109
+ end
110
+ end
21
111
 
22
- it "should return the SHA of the last commit" do
23
- @changelog.last_sha.should == "867b20e695e2b3770e150b0e844cdb6addd48ba4"
112
+ describe ".parse_releases" do
113
+ context "with no releases" do
114
+ it "should return an empty array" do
115
+ Blammo::Changelog.parse_releases([]).should be_empty
116
+ end
117
+ end
118
+
119
+ context "with a release" do
120
+ it "should should parse the releases hash" do
121
+ pending
24
122
  end
25
123
  end
26
124
  end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blammo::Commit do
4
+ before do
5
+ @sha = "foo"
6
+ @message = "[ADDED] bar"
7
+ @commit = Blammo::Commit.new(@sha, @message)
8
+ end
9
+
10
+ describe "#initialize" do
11
+ subject {@commit}
12
+
13
+ its(:sha) {should == @sha}
14
+ its(:message) {should == "bar"}
15
+ its(:tag) {should == :added}
16
+ end
17
+
18
+ describe "#to_s" do
19
+ subject {@commit.to_s}
20
+ it {should == "bar"}
21
+ end
22
+
23
+ describe "#to_yaml" do
24
+ context "with a SHA" do
25
+ subject {@commit.to_yaml}
26
+ it {should == {@sha => @message}.to_yaml}
27
+ end
28
+
29
+ context "without a SHA" do
30
+ subject {Blammo::Commit.new(nil, @message).to_yaml}
31
+ it {should == @message.to_yaml}
32
+ end
33
+ end
34
+
35
+ describe ".parse_tag" do
36
+ context "with an 'added' tag" do
37
+ %w(added new).each do |tag|
38
+ subject {Blammo::Commit.parse_tag(tag.to_s.upcase)}
39
+ it {should == :added}
40
+ end
41
+ end
42
+
43
+ context "with a 'changed' tag" do
44
+ %w(changed).each do |tag|
45
+ subject {Blammo::Commit.parse_tag(tag.to_s.upcase)}
46
+ it {should == :changed}
47
+ end
48
+ end
49
+
50
+ context "with a 'fixed' tag" do
51
+ %w(fixed).each do |tag|
52
+ subject {Blammo::Commit.parse_tag(tag.to_s.upcase)}
53
+ it {should == :fixed}
54
+ end
55
+ end
56
+
57
+ context "with an unknown tag" do
58
+ subject {Blammo::Commit.parse_tag("FOO")}
59
+ it {should be_nil}
60
+ end
61
+ end
62
+ end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Blammo::Git do
4
4
  before do
5
- @git = Git.init
6
- @log = Git::Log.new(@git)
5
+ @git = Git.init
6
+ @log = Git::Log.new(@git)
7
7
 
8
8
  stub(Git).open(anything) {@git}
9
9
  stub(Git::Log).new(anything, numeric) {@log}
@@ -11,11 +11,12 @@ describe Blammo::Git do
11
11
 
12
12
  describe ".commits" do
13
13
  before do
14
+ @path = "foo/bar"
15
+
14
16
  stub(@log).between.with_any_args
15
- stub(Blammo::Git).each_commit(anything)
16
17
 
17
- @path = "foo/bar"
18
- Blammo::Git.commits(@path)
18
+ Blammo::Git.each_commit(@path) do
19
+ end
19
20
  end
20
21
 
21
22
  it "should open the repo at the given path" do
@@ -26,38 +27,39 @@ describe Blammo::Git do
26
27
  Git::Log.should have_received.new(@git, 10)
27
28
  end
28
29
 
29
- it "should loop through each commit in the log" do
30
- Blammo::Git.should have_received.each_commit(@log)
31
- end
32
-
33
30
  it "should not scope the log" do
34
31
  @log.should_not have_received.between.with_any_args
35
32
  end
36
33
 
37
34
  context "with a SHA" do
38
35
  before do
39
- @sha = "abcd"
40
- Blammo::Git.commits(@path, @sha)
36
+ @since = "abcd"
37
+
38
+ Blammo::Git.each_commit(@path, @since) do
39
+ end
41
40
  end
42
41
 
43
42
  it "should scope the log" do
44
- @log.should have_received.between(@sha, "head")
43
+ @log.should have_received.between(@since, "head")
45
44
  end
46
45
  end
47
- end
48
46
 
49
- describe ".each_commit" do
50
- before do
51
- @commit = Object.new
52
- stub(@log).each.yields(@commit)
53
- end
47
+ context "with commits" do
48
+ before do
49
+ @commit = Object.new
50
+
51
+ stub(@commit).sha {"foo"}
52
+ stub(@commit).message {" bar "}
53
+
54
+ stub(@log).each.yields(@commit)
55
+ end
54
56
 
55
- it "should yield each commit in the log" do
56
- commits = []
57
- Blammo::Git.each_commit(@log) do |commit|
58
- commits << commit
57
+ it "should yield each commit" do
58
+ Blammo::Git.each_commit(@log) do |sha, message|
59
+ sha.should == "foo"
60
+ message.should == "bar"
61
+ end
59
62
  end
60
- commits.should include(@commit)
61
63
  end
62
64
  end
63
65
  end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blammo::Release do
4
+ before do
5
+ @name = "foo"
6
+ @commits = []
7
+ @release = Blammo::Release.new(@name, @commits)
8
+ end
9
+
10
+ describe "#initialize" do
11
+ subject {@release}
12
+
13
+ its(:name) {should == @name}
14
+ its(:commits) {should == @commits}
15
+ end
16
+
17
+ describe "#add_commit" do
18
+ it "should add the given commit" do
19
+ commit = Object.new
20
+ @release.commits.should_not include(commit)
21
+ @release.add_commit(commit)
22
+ @release.commits.should include(commit)
23
+ end
24
+ end
25
+
26
+ describe "#to_s" do
27
+ subject {@release.to_s}
28
+ it {should == @name}
29
+ end
30
+
31
+ describe "#to_yaml" do
32
+ subject {@release.to_yaml}
33
+ it {should == {@name => @commits}.to_yaml}
34
+ end
35
+
36
+ describe "#each_commit" do
37
+ before do
38
+ stub(@tagged_commit = Object.new).tag {:foo}
39
+ stub(@untagged_commit = Object.new).tag
40
+
41
+ @commits = [@tagged_commit, @untagged_commit]
42
+ @release = Blammo::Release.new("bar", @commits)
43
+ end
44
+
45
+ context "with a tag" do
46
+ it "should yield each commit which has the given tag" do
47
+ commits = []
48
+ @release.each_commit(:foo) do |commit|
49
+ commits << commit
50
+ end
51
+ commits.should == [@tagged_commit]
52
+ end
53
+ end
54
+
55
+ context "without a tag" do
56
+ it "should yield each commit" do
57
+ commits = []
58
+ @release.each_commit do |commit|
59
+ commits << commit
60
+ end
61
+ commits.should == @commits
62
+ end
63
+ end
64
+ end
65
+ end
@@ -3,18 +3,19 @@
3
3
  <body>
4
4
  <h1>Changelog</h1>
5
5
 
6
- <% changelog.releases.each do |release_hash| %>
7
- <% release, commits = release_hash.first %>
8
- <h2><%= release %></h2>
6
+ <%- @changelog.releases.each do |release| -%>
7
+ <h2>Release <%= release %></h2>
9
8
 
10
9
  <ul>
11
- <% commits.each do |commit_hash| %>
12
- <% sha, message = commit_hash.first %>
13
- <% if message && !message.empty? %>
14
- <li><%= message %></li>
15
- <% end %>
16
- <% end %>
10
+ <%- %w(added changed fixed).each do |tag| -%>
11
+ <%- release.each_commit(tag) do |commit| -%>
12
+ <li>
13
+ <span class="<%= tag %>"><%= tag.to_s.upcase %></span>
14
+ <%= commit %>
15
+ </li>
16
+ <%- end -%>
17
+ <%- end -%>
17
18
  </ul>
18
- <% end %>
19
+ <%- end -%>
19
20
  </body>
20
21
  </html>
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 5
9
+ version: 0.2.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Josh Bassett
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-30 00:00:00 +10:00
17
+ date: 2010-06-30 00:00:00 +10:00
18
18
  default_executable: blam
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -27,7 +27,7 @@ dependencies:
27
27
  version: "0"
28
28
  prerelease: false
29
29
  type: :runtime
30
- name: fancypath
30
+ name: git
31
31
  version_requirements: *id001
32
32
  - !ruby/object:Gem::Dependency
33
33
  requirement: &id002 !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: "0"
40
40
  prerelease: false
41
41
  type: :runtime
42
- name: git
42
+ name: thor
43
43
  version_requirements: *id002
44
44
  - !ruby/object:Gem::Dependency
45
45
  requirement: &id003 !ruby/object:Gem::Requirement
@@ -50,8 +50,8 @@ dependencies:
50
50
  - 0
51
51
  version: "0"
52
52
  prerelease: false
53
- type: :runtime
54
- name: tilt
53
+ type: :development
54
+ name: hirb
55
55
  version_requirements: *id003
56
56
  - !ruby/object:Gem::Dependency
57
57
  requirement: &id004 !ruby/object:Gem::Requirement
@@ -62,8 +62,8 @@ dependencies:
62
62
  - 0
63
63
  version: "0"
64
64
  prerelease: false
65
- type: :runtime
66
- name: thor
65
+ type: :development
66
+ name: jeweler
67
67
  version_requirements: *id004
68
68
  - !ruby/object:Gem::Dependency
69
69
  requirement: &id005 !ruby/object:Gem::Requirement
@@ -75,7 +75,7 @@ dependencies:
75
75
  version: "0"
76
76
  prerelease: false
77
77
  type: :development
78
- name: hirb
78
+ name: rake
79
79
  version_requirements: *id005
80
80
  - !ruby/object:Gem::Dependency
81
81
  requirement: &id006 !ruby/object:Gem::Requirement
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: "0"
88
88
  prerelease: false
89
89
  type: :development
90
- name: jeweler
90
+ name: rr
91
91
  version_requirements: *id006
92
92
  - !ruby/object:Gem::Dependency
93
93
  requirement: &id007 !ruby/object:Gem::Requirement
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: "0"
100
100
  prerelease: false
101
101
  type: :development
102
- name: rake
102
+ name: rspec
103
103
  version_requirements: *id007
104
104
  - !ruby/object:Gem::Dependency
105
105
  requirement: &id008 !ruby/object:Gem::Requirement
@@ -111,20 +111,8 @@ dependencies:
111
111
  version: "0"
112
112
  prerelease: false
113
113
  type: :development
114
- name: rr
114
+ name: timecop
115
115
  version_requirements: *id008
116
- - !ruby/object:Gem::Dependency
117
- requirement: &id009 !ruby/object:Gem::Requirement
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- segments:
122
- - 0
123
- version: "0"
124
- prerelease: false
125
- type: :development
126
- name: rspec
127
- version_requirements: *id009
128
116
  description: " Changelog generator.\n"
129
117
  email: josh.bassett@gmail.com
130
118
  executables:
@@ -134,21 +122,26 @@ extensions: []
134
122
  extra_rdoc_files:
135
123
  - README.md
136
124
  files:
137
- - .bundle/config
138
125
  - .gitignore
139
126
  - Gemfile
140
127
  - README.md
141
128
  - Rakefile
142
129
  - VERSION
143
130
  - bin/blam
131
+ - blammo.gemspec
144
132
  - lib/blammo.rb
145
133
  - lib/blammo/alone.rb
146
134
  - lib/blammo/changelog.rb
147
135
  - lib/blammo/cli.rb
136
+ - lib/blammo/commit.rb
148
137
  - lib/blammo/git.rb
138
+ - lib/blammo/release.rb
139
+ - lib/core_ext/blank.rb
149
140
  - spec/blammo/changelog_spec.rb
150
141
  - spec/blammo/cli_spec.rb
142
+ - spec/blammo/commit_spec.rb
151
143
  - spec/blammo/git_spec.rb
144
+ - spec/blammo/release_spec.rb
152
145
  - spec/spec.opts
153
146
  - spec/spec_helper.rb
154
147
  - templates/changelog.html.erb
@@ -185,5 +178,7 @@ summary: CHANGELOG from Blammo.
185
178
  test_files:
186
179
  - spec/blammo/changelog_spec.rb
187
180
  - spec/blammo/cli_spec.rb
181
+ - spec/blammo/commit_spec.rb
188
182
  - spec/blammo/git_spec.rb
183
+ - spec/blammo/release_spec.rb
189
184
  - spec/spec_helper.rb
data/.bundle/config DELETED
@@ -1,2 +0,0 @@
1
- ---
2
- BUNDLE_WITHOUT: ""