debt_ceiling 0.1.0 → 0.1.1

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OWNlZGJlMzY1M2EyZTg5ZDJmNDhlM2RiYzc5MGVlZmYyZmQ0YWU4ZQ==
5
+ data.tar.gz: !binary |-
6
+ ZDdmOWM0NWE1NmVkOGQ4NWIyNTFkZjFiNTA0NWNmMTQ2OWRiZDQ1NQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OWJhMDhhMTM3ZDAyNjBlNDg4OThhYjhhYWQ5ZjA3MTZlODUyYjg2OGNjNjA3
10
+ YzEyY2Y1OGQ2YTllNzU2NDJhY2VlZjhkNzFjNjEyZDgxOTY5MWQzYzZlZWUw
11
+ NTFlNmMyZjFkZTkwNzI4NjY4Yjg4M2M3MDc1NGUyNGJmMTJmYjI=
12
+ data.tar.gz: !binary |-
13
+ NzI3ZGNhMzJlOTBiNDY2MDNmOTBlM2I3OWQxYjQ2MWFiZTAwMjEyMzIyOWJh
14
+ ZDc5ZWFlZDZhNWNmYmY1M2MwMzc0NTdmZjUxYjkxMTFmM2IyY2Q4ZjcwZDU4
15
+ YTlmZWJhZmIzYjcxYmM1YTZjNDk1NDUzNGU2M2U2ZTQ4ZjAxM2U=
data/.travis.yml CHANGED
@@ -3,3 +3,4 @@ rvm:
3
3
  - 1.9.3
4
4
  - jruby-19mode # JRuby in 1.9 mode
5
5
  - 2.1.1
6
+ - rbx-2.2
data/README.md CHANGED
@@ -1,30 +1,31 @@
1
- [![Gem Version](https://badge.fury.io/rb/debt_ceiling.svg)](http://badge.fury.io/rb/debt_ceiling)
1
+ [![Gem Version](https://badge.fury.io/rb/debt_ceiling.svg)](http://badge.fury.io/rb/debt_ceiling)
2
2
  [![Build Status](https://travis-ci.org/bglusman/debt_ceiling.svg?branch=master)](https://travis-ci.org/bglusman/debt_ceiling)
3
- [![Debt Ceiling Chat](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/bglusman/debt_ceiling)
4
- [![debt_ceiling API Documentation](https://www.omniref.com/ruby/gems/debt_ceiling.png)](https://www.omniref.com/ruby/gems/debt_ceiling)
5
-
3
+ [![Coverage Status](https://img.shields.io/coveralls/bglusman/debt_ceiling.svg)](https://coveralls.io/r/bglusman/debt_ceiling?branch=master)
4
+ [![Debt Ceiling Chat](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/bglusman/debt_ceiling)
5
+ [![Stories in Ready](https://badge.waffle.io/bglusman/debt_ceiling.png?label=ready&title=Ready)](https://waffle.io/bglusman/debt_ceiling)
6
+ [![Code Climate](https://codeclimate.com/github/bglusman/debt_ceiling/badges/gpa.svg)](https://codeclimate.com/github/bglusman/debt_ceiling)
6
7
  #DebtCeiling
7
8
 
8
9
  Main goal is to enforce a technical debt ceiling and tech debt reduction deadlines for your Ruby project programmatically via a configurable combination of static analysis and/or manual assignment/recognition from explicit source code references as part of your application's test suite. Eventually perhaps will aid in visualizing this quantification as a graph or graphs, and breaking down debt into various categories and sources. Currently it highlights the single largest source of debt as a suggestion for reduction, as well out outputting the total quantity, both in test suite integration or by manually running `debt_ceiling` binary.
9
10
 
10
- Travis tests are running on 1.9.3, 2.1.1 and JRuby 1.9 mode.
11
+ Travis tests are running on 1.9.3, 2.1.1, Rubinius 2.2 and JRuby 1.9 mode.
11
12
 
12
13
  Current features include:
13
14
  * configuring points per [RubyCritic](https://github.com/whitesmith/rubycritic) grade per file line (add FULL_ANALYSIS=true for a lengthier analysis by RubyCritic including churn and more code smells, but same grading logic, made available for use by hooks)
14
- * Comment added explicit/manual debt assignment, via #TECH DEBT +100 or custom phrases
15
+ * Comment added explicit/manual debt assignment, via `#TECH DEBT +100` or custom word/phrase
15
16
  * Whitelisting/blacklisting files by matching path/filename
16
17
  * Modifying or replacing default calculation on a per file basis
17
18
  * Reporting the single greatest source of debt based on your definitions
18
19
  * Reporting total debt for the git repo based on your definitions
19
- * Adding cost for TODOs or deprecated references you specify (see .debt_ceiling.example)
20
+ * Adding cost for TODOs or deprecated references you specify (see [.debt_ceiling.rb.example](https://github.com/bglusman/debt_ceiling/blob/master/examples/.debt_ceiling.rb.example))
20
21
  * Running from a test suite to fail if debt ceiling is exceeded
21
22
  * Running from a test suite to fail if debt deadline is missed (currently only supports a single deadline, could add support for multiple targets if there's interest)
22
23
 
23
24
  To integrate in a test suite, set a value for `debt_ceiling` and/or `reduction_target` and `reduction_date` in your configuration and call `DebtCeiling.calculate(root_dir)` from your test helper as an additional test. It will exit with a non-zero failure if you exceed your ceiling or miss your target, failing the test suite.
24
25
 
25
- These features are largely are demonstrated/discussed in [examples/.debt_ceiling.rb.example](https://github.com/bglusman/debt_ceiling/blob/master/examples/.debt_ceiling.rb.example) which demonstrates configuring debt ceiling
26
+ These features are largely demonstrated/discussed in [examples/.debt_ceiling.rb.example](https://github.com/bglusman/debt_ceiling/blob/master/examples/.debt_ceiling.rb.example) or below snippet which demonstrates configuring debt ceiling around a team or maintainer's agreed ideas about how to quantify debt automatically and/or manually in the project source code.
26
27
 
27
- Additional customization is supported via two method hooks in the debt class, which debt_ceiling will load from a provided extension_file_path in the main config file, which should look like the [example file](https://github.com/bglusman/debt_ceiling/blob/master/examples/debt.rb.example)
28
+ Additional customization is supported via two method hooks in the debt class, which DebtCeiling will load from a provided extension_path in the main config file, which should look like the [example file](https://github.com/bglusman/debt_ceiling/blob/master/examples/debt.rb.example)
28
29
 
29
30
  You can configure/customize the debt calculated using a few simple commands in a .debt_ceiling.rb file in the project's home directory:
30
31
 
@@ -48,29 +49,31 @@ DebtCeiling.configure do |c|
48
49
  c.whitelist = %w(app lib)
49
50
  #or
50
51
  #exclude debt scores for files/folders matching these strings (commented as mutually exclusive)
51
- #c.blacklist = %w(config version debt_ceiling.rb)
52
+ #c.blacklist = %w(config schema routes)
52
53
  end
53
54
  ```
54
55
 
55
- As mentioned/linked above, additional customization is supported.
56
+ As mentioned/linked above, additional customization is supported via a debt.rb file which may define one or both of two methods DebtCeiling will call if defined when calculating debt for each module scanned (if it passes the whitelist/blacklist stage of filtering).
56
57
 
57
- As shown in example file, set a path for `extension_path` pointing to a file defining DebtCeiling::Debt like the one in examples directory, and define its methods for your own additional calculation per file.
58
+ As shown in example file, set a path for `extension_path` pointing to a file defining `DebtCeiling::Debt` like the one in examples directory, and define its methods for your own additional calculation per file.
58
59
 
59
60
  ### Improvement ideas/suggestsions for contributing:
60
61
 
61
62
  * rubocop/cane integration debt for style violations
62
63
 
63
- * default/custom points per reek smell detected (not currently part of rubycritic grading, despite integration)
64
+ * default/custom points per reek smell detected (not currently part of RubyCritic grading, but available in full analysis)
64
65
 
65
66
  * every line over x ideal file size is y points of debt
66
67
 
67
68
  * multipliers for important files
68
69
 
69
- * command line options to configure options per run/without a .debt_ceiling file (could be done with [ENVied](https://github.com/eval/envied) gem perhaps, or [commander](https://github.com/tj/commander) or [one of these](https://www.ruby-toolbox.com/categories/CLI_Option_Parsers)
70
+ * `debt_ceiling_per_file` option to cap max debt for any one analyzed module
71
+
72
+ * command line options to configure options per run/without a `.debt_ceiling.rb` file (could be done with [ENVied](https://github.com/eval/envied) gem perhaps, or [commander](https://github.com/tj/commander) or [one of these](https://www.ruby-toolbox.com/categories/CLI_Option_Parsers)
70
73
 
71
74
  * visualization/history of debt would be nice, but unclear how to best support... one possibility is running it against each commit in a repo, and using git-notes to add score data (and some metadata perhaps?) to store it for comparing/graphing, and for comparing branches etc. optionally configured could do this for every commit that doesn't already have a note attached, or for which the note's metadata/version is out of sync with current definitions.
72
75
 
73
- * optionally include/integrate with one of these JS analysis libraries, or another if anyone had another suggestion: [plato](https://github.com/es-analysis/plato) [jsprime](https://github.com/dpnishant/jsprime) [doctorjs](https://github.com/mozilla/doctorjs)
76
+ * optionally include/integrate with one of these JS analysis libraries, or another if anyone had another suggestion: [plato](https://github.com/es-analysis/plato) [jsprime](https://github.com/dpnishant/jsprime) [doctorjs](https://github.com/mozilla/doctorjs) Could also create a plugin architecture and do JS that way, and allow any other language to add plugin handling so it could be a multi-language standard tool.
74
77
 
75
78
  ## License
76
79
 
data/debt_ceiling.gemspec CHANGED
@@ -29,4 +29,5 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency 'pry', '~> 0.10'
30
30
  s.add_development_dependency 'rake', '~> 10.3'
31
31
  s.add_development_dependency 'rspec', '~> 3.1'
32
+ s.add_development_dependency 'coveralls', '~> 0.7'
32
33
  end
data/lib/debt_ceiling.rb CHANGED
@@ -66,7 +66,7 @@ module DebtCeiling
66
66
  if debt_ceiling && debt_ceiling <= debt
67
67
  fail_test
68
68
  elsif reduction_target && reduction_target <= debt &&
69
- Time.now > reduction_date
69
+ Time.now > Chronic.parse(reduction_date)
70
70
  fail_test
71
71
  end
72
72
  debt
@@ -65,11 +65,11 @@ module DebtCeiling
65
65
  end
66
66
 
67
67
  def self.whitelist_includes?(debt)
68
- DebtCeiling.whitelist.find { |filename| filename.match debt.path }
68
+ DebtCeiling.whitelist.find { |filename| debt.path.match filename }
69
69
  end
70
70
 
71
71
  def self.blacklist_includes?(debt)
72
- DebtCeiling.blacklist.find { |filename| filename.match debt.path }
72
+ DebtCeiling.blacklist.find { |filename| debt.path.match filename }
73
73
  end
74
74
 
75
75
  def name
@@ -1,3 +1,3 @@
1
1
  module DebtCeiling
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
1
3
  RSpec.configure do |config|
2
4
  config.before { allow($stdout).to receive(:puts) }
3
5
  config.after(:each) { DebtCeiling.configure {|c| c.debt_ceiling = nil; c.reduction_target = nil; c.reduction_date = nil } }
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debt_ceiling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian Glusman
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-11-03 00:00:00.000000000 Z
11
+ date: 2015-01-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rubycritic
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: chronic
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: configurations
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: pry
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rake
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,11 +90,24 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
109
96
  version: '3.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '0.7'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.7'
110
111
  description: ! ' Get a grip on your technical debt
111
112
 
112
113
  '
@@ -139,27 +140,26 @@ files:
139
140
  - spec/support/todo_example.rb
140
141
  homepage: https://github.com/bglusman/debt_ceiling
141
142
  licenses: []
143
+ metadata: {}
142
144
  post_install_message:
143
145
  rdoc_options: []
144
146
  require_paths:
145
147
  - lib
146
148
  required_ruby_version: !ruby/object:Gem::Requirement
147
- none: false
148
149
  requirements:
149
150
  - - ! '>='
150
151
  - !ruby/object:Gem::Version
151
152
  version: '0'
152
153
  required_rubygems_version: !ruby/object:Gem::Requirement
153
- none: false
154
154
  requirements:
155
155
  - - ! '>='
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  requirements: []
159
159
  rubyforge_project: debt_ceiling
160
- rubygems_version: 1.8.24
160
+ rubygems_version: 2.4.5
161
161
  signing_key:
162
- specification_version: 3
162
+ specification_version: 4
163
163
  summary: DebtCeiling helps you track Tech Debt
164
164
  test_files: []
165
165
  has_rdoc: