poper 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +48 -2
- data/lib/poper.rb +6 -2
- data/lib/poper/config.rb +20 -0
- data/lib/poper/config_file.rb +48 -0
- data/lib/poper/rule/capitalization.rb +11 -3
- data/lib/poper/rule/character_limit.rb +25 -0
- data/lib/poper/rule/generic.rb +18 -6
- data/lib/poper/rule/rule.rb +4 -0
- data/lib/poper/rule/single_word.rb +11 -3
- data/lib/poper/rule/summary_character_limit.rb +23 -0
- data/lib/poper/runner.rb +5 -1
- data/lib/poper/version.rb +1 -1
- metadata +38 -8
- data/lib/poper/rule/fifty_char_summary.rb +0 -11
- data/lib/poper/rule/seventy_two_char_limit.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91ce853722b93b72d992dc75390b80c5f79d8ba2
|
4
|
+
data.tar.gz: 9627c465d6d4e6526f40a676a1ae77516adfbea2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42a89ba0bc33f310933dc3010f8fe325aa4f38b88c6a8af132e6401468f64d616867121957e21598c3264c3eed4168fc1e5cd69419e2f9e9cb2b68ef9bfebf27
|
7
|
+
data.tar.gz: 54c9061775f67d4a5c5faebb60ec1401d653f40dabf11952d55fea4b82d3283308d76a7275d36109defdf50f72878012f7788eacf78fcd0acd7672bc8fc7dee2
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Poper
|
2
2
|
|
3
|
-
|
4
|
-
[](https://codeclimate.com/github/mmozuras/poper)
|
5
3
|
[](https://travis-ci.org/mmozuras/poper)
|
4
|
+
+[](https://codeclimate.com/github/mmozuras/poper)
|
5
|
+
+[](https://codeclimate.com/github/mmozuras/poper)
|
6
6
|
[](http://badge.fury.io/rb/poper)
|
7
7
|
[](https://gemnasium.com/mmozuras/poper)
|
8
8
|
|
@@ -32,3 +32,49 @@ Every commit between current HEAD and specified commit will be checked.
|
|
32
32
|
[tpope]: https://twitter.com/tpope
|
33
33
|
[Poper rules]: https://github.com/mmozuras/poper/tree/master/lib/poper/rule
|
34
34
|
[Pronto]: https://github.com/mmozuras/pronto
|
35
|
+
|
36
|
+
## Configuration
|
37
|
+
|
38
|
+
The behavior of Poper can be controlled via the `.poper.yml` configuration
|
39
|
+
file. It must be placed in your project directory. A sample file, `.poper.sample.yml`, is included for easy setup.
|
40
|
+
|
41
|
+
The file has the following format:
|
42
|
+
|
43
|
+
```yaml
|
44
|
+
disallow_single_word:
|
45
|
+
enabled: true
|
46
|
+
|
47
|
+
character_limit:
|
48
|
+
enabled: true
|
49
|
+
number: 72
|
50
|
+
|
51
|
+
summary_character_limit:
|
52
|
+
enabled: true
|
53
|
+
number: 50
|
54
|
+
|
55
|
+
disallow_generic:
|
56
|
+
enabled: true
|
57
|
+
words:
|
58
|
+
- fix
|
59
|
+
- fixed
|
60
|
+
- fixes
|
61
|
+
- oops
|
62
|
+
- todo
|
63
|
+
- fixme
|
64
|
+
- commit
|
65
|
+
- changes
|
66
|
+
- hm
|
67
|
+
- hmm
|
68
|
+
- hmmm
|
69
|
+
- test
|
70
|
+
- tests
|
71
|
+
- quickfix
|
72
|
+
|
73
|
+
enforce_capitalized:
|
74
|
+
enabled: true
|
75
|
+
```
|
76
|
+
|
77
|
+
All properties that can be specified via `.poper.yml`, can also be specified
|
78
|
+
via environment variables. Their names will be the upcased path to the property.
|
79
|
+
For example: `POPER_ENFORCE_CAPITALIZED_ENABLED` or `POPER_DISALLOW_GENERIC_WORDS`. (In the case of the latter, since environment variables don't support arrays, use a comma-separated list of words and poper will parse them appropriately.) Environment variables
|
80
|
+
will always take precedence over values in configuration file.
|
data/lib/poper.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'rugged'
|
2
|
+
require 'yaml'
|
2
3
|
require 'poper/runner'
|
3
4
|
require 'poper/rule/rule'
|
4
5
|
require 'poper/rule/capitalization'
|
5
6
|
require 'poper/rule/single_word'
|
6
|
-
require 'poper/rule/
|
7
|
-
require 'poper/rule/
|
7
|
+
require 'poper/rule/summary_character_limit'
|
8
|
+
require 'poper/rule/character_limit'
|
8
9
|
require 'poper/rule/generic'
|
10
|
+
|
11
|
+
require 'poper/config_file'
|
12
|
+
require 'poper/config'
|
data/lib/poper/config.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Poper
|
2
|
+
class Config
|
3
|
+
def initialize(config_hash = ConfigFile.new.to_h)
|
4
|
+
@config_hash = config_hash
|
5
|
+
end
|
6
|
+
|
7
|
+
%w(
|
8
|
+
disallow_single_word
|
9
|
+
character_limit
|
10
|
+
summary_character_limit
|
11
|
+
disallow_generic
|
12
|
+
enforce_capitalized
|
13
|
+
).each do |rule|
|
14
|
+
ConfigFile::EMPTY[rule].each do |key, _|
|
15
|
+
name = "#{rule}_#{key}"
|
16
|
+
define_method(name) { ENV["POPER_#{name.upcase}"] || @config_hash[rule][key] }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Poper
|
2
|
+
class ConfigFile
|
3
|
+
EMPTY = {
|
4
|
+
'disallow_single_word' => {
|
5
|
+
'enabled' => true
|
6
|
+
},
|
7
|
+
'character_limit' => {
|
8
|
+
'enabled' => true,
|
9
|
+
'number' => 72
|
10
|
+
},
|
11
|
+
'summary_character_limit' => {
|
12
|
+
'enabled' => true,
|
13
|
+
'number' => 50
|
14
|
+
},
|
15
|
+
'disallow_generic' => {
|
16
|
+
'enabled' => true,
|
17
|
+
'words' => %w(fix fixed fixes oops todo fixme commit changes hm hmm hmmm
|
18
|
+
test tests quickfix)
|
19
|
+
},
|
20
|
+
'enforce_capitalized' => {
|
21
|
+
'enabled' => true
|
22
|
+
},
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
def initialize(path = '.poper.yml')
|
26
|
+
@path = path
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_h
|
30
|
+
hash = File.exist?(@path) ? YAML.load_file(@path) : {}
|
31
|
+
deep_merge(hash)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def deep_merge(hash)
|
37
|
+
merger = proc do |_, oldval, newval|
|
38
|
+
if oldval.is_a?(Hash) && newval.is_a?(Hash)
|
39
|
+
oldval.merge(newval, &merger)
|
40
|
+
else
|
41
|
+
oldval || newval
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
hash.merge(EMPTY, &merger)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,10 +1,18 @@
|
|
1
1
|
module Poper
|
2
2
|
module Rule
|
3
3
|
class Capitalization < Rule
|
4
|
-
MSG = 'Git commit message should start with a capital letter'
|
5
|
-
|
6
4
|
def check(message)
|
7
|
-
|
5
|
+
error_message unless message[0] == message[0].capitalize
|
6
|
+
end
|
7
|
+
|
8
|
+
def enabled?
|
9
|
+
@config.enforce_capitalized_enabled.to_s == 'true'
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def error_message
|
15
|
+
'Git commit message should start with a capital letter'
|
8
16
|
end
|
9
17
|
end
|
10
18
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Poper
|
2
|
+
module Rule
|
3
|
+
class CharacterLimit < Rule
|
4
|
+
def check(message)
|
5
|
+
error_message if message.lines.any? do |line|
|
6
|
+
line.length > character_limit
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def enabled?
|
11
|
+
@config.character_limit_enabled.to_s == 'true'
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def character_limit
|
17
|
+
@config.character_limit_number.to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
def error_message
|
21
|
+
"Every line of git commit message should be #{character_limit} chars or less"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/poper/rule/generic.rb
CHANGED
@@ -1,19 +1,31 @@
|
|
1
1
|
module Poper
|
2
2
|
module Rule
|
3
3
|
class Generic < Rule
|
4
|
-
MSG = 'Consider writing a more detailed, not as generic, commit message'
|
5
|
-
GENERIC = %w(fix fixed fixes oops todo fixme commit changes hm hmm hmmm
|
6
|
-
test tests quickfix)
|
7
|
-
|
8
4
|
def check(message)
|
9
5
|
words = message.scan(/[\w-]+/).compact
|
10
|
-
|
6
|
+
error_message if words.all? { |word| generic?(word) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def enabled?
|
10
|
+
@config.disallow_generic_enabled.to_s == 'true'
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def generic?(word)
|
16
|
-
|
16
|
+
disallowed_words.include?(word.downcase)
|
17
|
+
end
|
18
|
+
|
19
|
+
def disallowed_words
|
20
|
+
if @config.disallow_generic_words.is_a? Array
|
21
|
+
@config.disallow_generic_words
|
22
|
+
else
|
23
|
+
@config.disallow_generic_words.split(',').map(&:strip)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def error_message
|
28
|
+
'Consider writing a more detailed, not as generic, commit message'
|
17
29
|
end
|
18
30
|
end
|
19
31
|
end
|
data/lib/poper/rule/rule.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
module Poper
|
2
2
|
module Rule
|
3
3
|
class SingleWord < Rule
|
4
|
-
MSG = 'Git commit message should consist of more than a single word'
|
5
|
-
|
6
4
|
def check(message)
|
7
|
-
|
5
|
+
error_message if message.split.count < 2
|
6
|
+
end
|
7
|
+
|
8
|
+
def enabled?
|
9
|
+
@config.disallow_single_word_enabled.to_s == 'true'
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def error_message
|
15
|
+
'Git commit message should consist of more than a single word'
|
8
16
|
end
|
9
17
|
end
|
10
18
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Poper
|
2
|
+
module Rule
|
3
|
+
class SummaryCharacterLimit < Rule
|
4
|
+
def check(message)
|
5
|
+
error_message if message.lines.first.chomp.length > character_limit
|
6
|
+
end
|
7
|
+
|
8
|
+
def enabled?
|
9
|
+
@config.summary_character_limit_enabled.to_s == 'true'
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def character_limit
|
15
|
+
@config.summary_character_limit_number.to_i
|
16
|
+
end
|
17
|
+
|
18
|
+
def error_message
|
19
|
+
"Git commit message summary (first line) should be #{character_limit} chars or less"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/poper/runner.rb
CHANGED
data/lib/poper/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mindaugas Mozūras
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '12.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '12.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rspec
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,14 +106,42 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0.
|
109
|
+
version: '0.14'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: '0.
|
116
|
+
version: '0.14'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: codeclimate-test-reporter
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '1.0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '1.0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: pry
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
117
145
|
description:
|
118
146
|
email: mindaugas.mozuras@gmail.com
|
119
147
|
executables:
|
@@ -126,12 +154,14 @@ files:
|
|
126
154
|
- bin/poper
|
127
155
|
- lib/poper.rb
|
128
156
|
- lib/poper/cli.rb
|
157
|
+
- lib/poper/config.rb
|
158
|
+
- lib/poper/config_file.rb
|
129
159
|
- lib/poper/rule/capitalization.rb
|
130
|
-
- lib/poper/rule/
|
160
|
+
- lib/poper/rule/character_limit.rb
|
131
161
|
- lib/poper/rule/generic.rb
|
132
162
|
- lib/poper/rule/rule.rb
|
133
|
-
- lib/poper/rule/seventy_two_char_limit.rb
|
134
163
|
- lib/poper/rule/single_word.rb
|
164
|
+
- lib/poper/rule/summary_character_limit.rb
|
135
165
|
- lib/poper/runner.rb
|
136
166
|
- lib/poper/version.rb
|
137
167
|
homepage: http://github.org/mmozuras/poper
|