From 9c6068f026fb14d6baa929a2bea635564fcffd20 Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Sat, 16 Apr 2016 23:20:36 +0200 Subject: [PATCH 1/4] Avoid nil bug in detect_since_tag --- .../generator/generator_tags.rb | 15 ++++---- spec/unit/generator/generator_tags_spec.rb | 37 ++++++++++--------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/lib/github_changelog_generator/generator/generator_tags.rb b/lib/github_changelog_generator/generator/generator_tags.rb index fa0f40f..97e43b0 100644 --- a/lib/github_changelog_generator/generator/generator_tags.rb +++ b/lib/github_changelog_generator/generator/generator_tags.rb @@ -54,13 +54,14 @@ module GitHubChangelogGenerator # @return [Object] try to find newest tag using #Reader and :base option if specified otherwise returns nil def detect_since_tag - @since_tag ||= @options[:since_tag] - if @since_tag.nil? && @options[:base] && File.file?(@options[:base]) - reader = GitHubChangelogGenerator::Reader.new - content = reader.read(@options[:base]) - @since_tag = content[0]["version"] if content.count && content - end - @since_tag + @since_tag ||= @options.fetch(:since_tag) { version_of_first_item } + end + + def version_of_first_item + return unless File.file?(@options[:base].to_s) + + sections = GitHubChangelogGenerator::Reader.new.read(@options[:base]) + sections.first["version"] if sections && sections.any? end # Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags diff --git a/spec/unit/generator/generator_tags_spec.rb b/spec/unit/generator/generator_tags_spec.rb index 04c9b50..c4aec07 100644 --- a/spec/unit/generator/generator_tags_spec.rb +++ b/spec/unit/generator/generator_tags_spec.rb @@ -206,7 +206,7 @@ describe GitHubChangelogGenerator::Generator do @generator.instance_variable_set :@fetcher, mock end subject do - of_tag = @generator.get_time_of_tag tag_mash_with_name("valid_tag") + of_tag = @generator.get_time_of_tag(tag_mash_with_name("valid_tag")) of_tag end it { is_expected.to be_a_kind_of(Time) } @@ -215,31 +215,32 @@ describe GitHubChangelogGenerator::Generator do end describe "#sort_tags_by_date" do - time1 = Time.now - time2 = Time.now - time3 = Time.now + let(:time1) { Time.now } + let(:time2) { Time.now } + let(:time3) { Time.now } + before(:all) do @generator = GitHubChangelogGenerator::Generator.new end + + before do + @generator.instance_variable_set(:@tag_times_hash, "valid_tag1" => time1, + "valid_tag2" => time2, + "valid_tag3" => time3) + end + + subject do + @generator.sort_tags_by_date(tags) + end context "sort unsorted tags" do - tags = tags_mash_from_strings %w(valid_tag1 valid_tag2 valid_tag3) - before do - @generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3 - end - subject do - @generator.sort_tags_by_date tags - end + let(:tags) { tags_mash_from_strings %w(valid_tag1 valid_tag2 valid_tag3) } + it { is_expected.to be_a_kind_of(Array) } it { is_expected.to match_array(tags.reverse!) } end context "sort sorted tags" do - tags = tags_mash_from_strings %w(valid_tag3 valid_tag2 valid_tag1) - before do - @generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3 - end - subject do - @generator.sort_tags_by_date tags - end + let(:tags) { tags_mash_from_strings %w(valid_tag3 valid_tag2 valid_tag1) } + it { is_expected.to be_a_kind_of(Array) } it { is_expected.to match_array(tags) } end From 86ca388ecff280f82d22c04c58ecd4323c65d243 Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Sun, 17 Apr 2016 00:06:54 +0200 Subject: [PATCH 2/4] Spec: Smaller help functions --- spec/unit/generator/generator_tags_spec.rb | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/spec/unit/generator/generator_tags_spec.rb b/spec/unit/generator/generator_tags_spec.rb index c4aec07..057bb88 100644 --- a/spec/unit/generator/generator_tags_spec.rb +++ b/spec/unit/generator/generator_tags_spec.rb @@ -1,19 +1,14 @@ -def tag_mash_with_name(tag) - mash_tag = Hashie::Mash.new - mash_tag.name = tag - mash_tag -end - -def tags_mash_from_strings(tags_strings) - mash_array = [] - tags_strings.each do |tag| - mash_tag = tag_mash_with_name(tag) - mash_array << mash_tag - end - mash_array -end - describe GitHubChangelogGenerator::Generator do + def tag_mash_with_name(tag) + Hashie::Mash.new.tap {|mash_tag| mash_tag.name = tag } + end + + def tags_mash_from_strings(tags_strings) + tags_strings.map do |tag| + tag_mash_with_name(tag) + end + end + describe "#filter_between_tags" do context "when between_tags nil" do before do From 9ce5c76d4a6b8cc15cdcf255693936aead734807 Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Mon, 18 Apr 2016 16:46:58 +0200 Subject: [PATCH 3/4] Linting --- spec/unit/generator/generator_tags_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/unit/generator/generator_tags_spec.rb b/spec/unit/generator/generator_tags_spec.rb index 057bb88..b837247 100644 --- a/spec/unit/generator/generator_tags_spec.rb +++ b/spec/unit/generator/generator_tags_spec.rb @@ -1,6 +1,6 @@ describe GitHubChangelogGenerator::Generator do def tag_mash_with_name(tag) - Hashie::Mash.new.tap {|mash_tag| mash_tag.name = tag } + Hashie::Mash.new.tap { |mash_tag| mash_tag.name = tag } end def tags_mash_from_strings(tags_strings) From cc653b6b21119d02ec1e66119663b7b11770c662 Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Mon, 18 Apr 2016 16:53:45 +0200 Subject: [PATCH 4/4] linting --- spec/unit/generator/generator_tags_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/unit/generator/generator_tags_spec.rb b/spec/unit/generator/generator_tags_spec.rb index b837247..57fb8ba 100644 --- a/spec/unit/generator/generator_tags_spec.rb +++ b/spec/unit/generator/generator_tags_spec.rb @@ -100,13 +100,13 @@ describe GitHubChangelogGenerator::Generator do subject { generator.filter_excluded_tags(tags_mash_from_strings(%w(1 2 3))) } context "with matching regex" do - let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags_regex: '[23]') } + let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags_regex: "[23]") } it { is_expected.to be_a Array } it { is_expected.to match_array(tags_mash_from_strings(%w(1))) } end context "with non-matching regex" do - let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags_regex: '[45]') } + let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags_regex: "[45]") } it { is_expected.to be_a Array } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) } end