Rspec and README
This commit is contained in:
parent
fbd8207ff4
commit
6c71cf439a
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
*.swp
|
|
48
README.md
48
README.md
|
@ -19,7 +19,7 @@ GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg)
|
||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
|
||||||
|
|
||||||
### Changelog generation has never been so easy:
|
### Changelog generation has never been so easy:
|
||||||
|
|
||||||
**Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according labels) from :octocat: GitHub Issue Tracker.
|
**Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according labels) from :octocat: GitHub Issue Tracker.
|
||||||
|
@ -47,26 +47,26 @@ Because software tools are for people. If you don’t care, why are you contribu
|
||||||
- In general it looks like this:
|
- In general it looks like this:
|
||||||
|
|
||||||
> ## [1.2.5](https://github.com/skywinder/Github-Changelog-Generator/tree/1.2.5) (2015-01-15)
|
> ## [1.2.5](https://github.com/skywinder/Github-Changelog-Generator/tree/1.2.5) (2015-01-15)
|
||||||
>
|
>
|
||||||
> [Full Changelog](https://github.com/skywinder/Github-Changelog-Generator/compare/1.2.4...1.2.5)
|
> [Full Changelog](https://github.com/skywinder/Github-Changelog-Generator/compare/1.2.4...1.2.5)
|
||||||
>
|
>
|
||||||
> **Implemented enhancements:**
|
> **Implemented enhancements:**
|
||||||
>
|
>
|
||||||
> - Use milestone to specify in which version bug was fixed [\#22](https://github.com/skywinder/Github-Changelog-Generator/issues/22)
|
> - Use milestone to specify in which version bug was fixed [\#22](https://github.com/skywinder/Github-Changelog-Generator/issues/22)
|
||||||
>
|
>
|
||||||
> **Fixed bugs:**
|
> **Fixed bugs:**
|
||||||
>
|
>
|
||||||
> - Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/Github-Changelog-Generator/issues/32)
|
> - Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/Github-Changelog-Generator/issues/32)
|
||||||
>
|
>
|
||||||
> **Merged pull requests:**
|
> **Merged pull requests:**
|
||||||
>
|
>
|
||||||
> - PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/Github-Changelog-Generator/pull/43) ([schwing](https://github.com/schwing))
|
> - PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/Github-Changelog-Generator/pull/43) ([schwing](https://github.com/schwing))
|
||||||
>
|
>
|
||||||
> - support enterprise github via command line options [\#42](https://github.com/skywinder/Github-Changelog-Generator/pull/42) ([glenlovett](https://github.com/glenlovett))
|
> - support enterprise github via command line options [\#42](https://github.com/skywinder/Github-Changelog-Generator/pull/42) ([glenlovett](https://github.com/glenlovett))
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
**It's really simple**:
|
**It's really simple**:
|
||||||
|
|
||||||
- If your **git remote** `origin` refers to your GitHub repo, then just go to your project folder and run:
|
- If your **git remote** `origin` refers to your GitHub repo, then just go to your project folder and run:
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ Because software tools are for people. If you don’t care, why are you contribu
|
||||||
- or from anywhere:
|
- or from anywhere:
|
||||||
- `github_changelog_generator -u github_username -p github_project`
|
- `github_changelog_generator -u github_username -p github_project`
|
||||||
- `github_changelog_generator github_username/github_project`
|
- `github_changelog_generator github_username/github_project`
|
||||||
|
|
||||||
As output you will get `CHANGELOG.md` file with pretty *Markdown-formatted* changelog.
|
As output you will get `CHANGELOG.md` file with pretty *Markdown-formatted* changelog.
|
||||||
|
|
||||||
### Params
|
### Params
|
||||||
|
@ -83,6 +83,16 @@ Type `github_changelog_generator --help` for details.
|
||||||
|
|
||||||
More detailed info about params you can find in Wiki page: [**Advanced change log generation examples**](https://github.com/skywinder/github-changelog-generator/wiki/Advanced-change-log-generation-examples)
|
More detailed info about params you can find in Wiki page: [**Advanced change log generation examples**](https://github.com/skywinder/github-changelog-generator/wiki/Advanced-change-log-generation-examples)
|
||||||
|
|
||||||
|
### Params File
|
||||||
|
You can put Params in a .github_changelog_generator file in Project Root to override default params:
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
unreleased=false
|
||||||
|
future-release=5.0.0
|
||||||
|
since-tag=1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
### GitHub token
|
### GitHub token
|
||||||
|
|
||||||
Since GitHub allows you to make only 50 requests without authentication it's recommended to run this script with a token (`-t, --token` option)
|
Since GitHub allows you to make only 50 requests without authentication it's recommended to run this script with a token (`-t, --token` option)
|
||||||
|
@ -91,9 +101,9 @@ Since GitHub allows you to make only 50 requests without authentication it's rec
|
||||||
|
|
||||||
And:
|
And:
|
||||||
|
|
||||||
- Run with key `-t [your-40-digit-token]`
|
- Run with key `-t [your-40-digit-token]`
|
||||||
- Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token.
|
- Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token.
|
||||||
|
|
||||||
i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string :
|
i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string :
|
||||||
|
|
||||||
export CHANGELOG_GITHUB_TOKEN="your-40-digit-github-token"
|
export CHANGELOG_GITHUB_TOKEN="your-40-digit-github-token"
|
||||||
|
@ -138,10 +148,10 @@ All command line options can be passed to the Rake task as `config` parameters.
|
||||||
- Merged pull requests (all `merged` pull-requests) :twisted_rightwards_arrows:
|
- Merged pull requests (all `merged` pull-requests) :twisted_rightwards_arrows:
|
||||||
- Bug fixes (by label `bug` in issue) :beetle:
|
- Bug fixes (by label `bug` in issue) :beetle:
|
||||||
- Enhancements (by label `enhancement` in issue) :star2:
|
- Enhancements (by label `enhancement` in issue) :star2:
|
||||||
- Issues (closed issues `w/o any labels`) :non-potable_water:
|
- Issues (closed issues `w/o any labels`) :non-potable_water:
|
||||||
|
|
||||||
- You can manually set which labels should be included/excluded. :wrench:
|
- You can manually set which labels should be included/excluded. :wrench:
|
||||||
- Apply a lot of other customisations, to fit changelog for your personal style :tophat:
|
- Apply a lot of other customisations, to fit changelog for your personal style :tophat:
|
||||||
(*look `github_changelog_generator --help` for details)*
|
(*look `github_changelog_generator --help` for details)*
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +162,7 @@ Here is a [wikipage list of alternatives](https://github.com/skywinder/Github-Ch
|
||||||
|
|
||||||
|
|
||||||
### Projects using this library
|
### Projects using this library
|
||||||
[Wikipage with list of projects](https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator)
|
[Wikipage with list of projects](https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator)
|
||||||
|
|
||||||
If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it.
|
If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it.
|
||||||
|
|
||||||
|
@ -160,9 +170,9 @@ If you've used this project in a live app, please let me know! Nothing makes me
|
||||||
|
|
||||||
## Am I missing some essential feature?
|
## Am I missing some essential feature?
|
||||||
|
|
||||||
- **Nothing is impossible!**
|
- **Nothing is impossible!**
|
||||||
|
|
||||||
- Open an [issue](https://github.com/skywinder/Github-Changelog-Generator/issues/new) and let's make generator better together!
|
- Open an [issue](https://github.com/skywinder/Github-Changelog-Generator/issues/new) and let's make generator better together!
|
||||||
|
|
||||||
- *Bug reports, feature requests, patches, well-wishes are always welcome* :heavy_exclamation_mark:
|
- *Bug reports, feature requests, patches, well-wishes are always welcome* :heavy_exclamation_mark:
|
||||||
|
|
||||||
|
|
|
@ -9,12 +9,12 @@ module GitHubChangelogGenerator
|
||||||
def self.parse_options
|
def self.parse_options
|
||||||
options = get_default_options
|
options = get_default_options
|
||||||
|
|
||||||
|
parser_file = ParserFile.new options
|
||||||
|
parser_file.parse!
|
||||||
|
|
||||||
parser = setup_parser(options)
|
parser = setup_parser(options)
|
||||||
parser.parse!
|
parser.parse!
|
||||||
|
|
||||||
parser_file = ParseFile.new options
|
|
||||||
parser_file.parse!
|
|
||||||
|
|
||||||
if options[:user].nil? || options[:project].nil?
|
if options[:user].nil? || options[:project].nil?
|
||||||
detect_user_and_project(options, ARGV[0], ARGV[1])
|
detect_user_and_project(options, ARGV[0], ARGV[1])
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
module GitHubChangelogGenerator
|
module GitHubChangelogGenerator
|
||||||
class ParseFile
|
class ParserFile
|
||||||
def initialize(options)
|
def initialize(options)
|
||||||
@options = options
|
@options = options
|
||||||
end
|
end
|
||||||
|
|
||||||
def file
|
def file
|
||||||
File.expand_path(".github_changelog_generator")
|
File.expand_path(@options[:params_file] || ".github_changelog_generator")
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_file?
|
def file?
|
||||||
File.exists?(file)
|
File.exist?(file)
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_open
|
def file_open
|
||||||
|
@ -17,12 +17,20 @@ module GitHubChangelogGenerator
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse!
|
def parse!
|
||||||
return false unless has_file?
|
return unless file?
|
||||||
file_open.each do |line|
|
file_open.each do |line|
|
||||||
key, value = line.split("=")
|
begin
|
||||||
key_sym = key.sub('-', '_').to_sym
|
key, value = line.split("=")
|
||||||
@options[key_sym] = value.gsub(/[\n\r]+/, '')
|
key_sym = key.sub("-", "_").to_sym
|
||||||
|
value = value.gsub(/[\n\r]+/, "")
|
||||||
|
value = true if value =~ (/^(true|t|yes|y|1)$/i)
|
||||||
|
value = false if value =~ (/^(false|f|no|n|0)$/i)
|
||||||
|
@options[key_sym] = value
|
||||||
|
rescue
|
||||||
|
raise "File #{file} is incorrect in line \"#{line.gsub(/[\n\r]+/, '')}\""
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@options
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
0
spec/files/github_changelog_params_empty
Normal file
0
spec/files/github_changelog_params_empty
Normal file
2
spec/files/github_changelog_params_incorrect
Normal file
2
spec/files/github_changelog_params_incorrect
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
unreleased_label: staging
|
||||||
|
unreleased: false
|
2
spec/files/github_changelog_params_override
Normal file
2
spec/files/github_changelog_params_override
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
unreleased_label=staging
|
||||||
|
unreleased=false
|
32
spec/unit/parse_file_spec.rb
Normal file
32
spec/unit/parse_file_spec.rb
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
describe GitHubChangelogGenerator::ParserFile do
|
||||||
|
describe ".github_changelog_generator" do
|
||||||
|
context "when no has file" do
|
||||||
|
let(:options) { {} }
|
||||||
|
let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
|
||||||
|
subject { parse.parse! }
|
||||||
|
it { is_expected.to be_nil }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when file is empty" do
|
||||||
|
let(:options) { { params_file: "spec/files/github_changelog_params_empty" } }
|
||||||
|
let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
|
||||||
|
subject { parse.parse! }
|
||||||
|
it { is_expected.to be_a(Hash) }
|
||||||
|
it { is_expected.to eq(options) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when file is incorrect" do
|
||||||
|
let(:options) { { params_file: "spec/files/github_changelog_params_incorrect" } }
|
||||||
|
let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
|
||||||
|
it { expect { fail.raise! }.to raise_error RuntimeError }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when override default values" do
|
||||||
|
let(:options) { { params_file: "spec/files/github_changelog_params_override" }.merge(GitHubChangelogGenerator::Parser.get_default_options) }
|
||||||
|
let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
|
||||||
|
subject { parse.parse! }
|
||||||
|
it { is_expected.to be_a(Hash) }
|
||||||
|
it { is_expected.to eq(options.merge(unreleased_label: "staging", unreleased: false)) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user