pain 0.0.3 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 18ce563eae08ef8d490873ac46bbdb7956db3c22
4
- data.tar.gz: 718e6be6cc82460d955b024cbdd740e7510c0f2e
2
+ SHA256:
3
+ metadata.gz: 7ed10c1b52b39337e13741f8cc57fb41e8b116c5e7f41a8438af2bb441d19a68
4
+ data.tar.gz: 10fb7b20f0fafaf75c2e2c3e06c638939b50dae86eca5e1f54442e1a2abb044b
5
5
  SHA512:
6
- metadata.gz: 1e1604a734977f2db5d5f5becbf3f94968635185eb013ea9a7dabd6261e619ae530f3029296601b586a0f4bec68587ae5b6e3d39ab2ebbe7a15b2321e6205c4d
7
- data.tar.gz: 6bc02a62493ae684f9fb7e447d6c36ff5f83581e750fae359abc35b62a90ad4118994761527963639238cf0d25ce1ca2d4b7b061ee897ae8cbe68cf6e8a30f10
6
+ metadata.gz: fc3fc6de280eac3f11662545ee19d6dea0d982fe56a8fc994f637c6a3f61bf6778c84483a2503c2ee8c47e3c23169e991e9fc325b4cc2c4054012b4d6824ab90
7
+ data.tar.gz: 24f06280c62da6d1a3e745f27d35b109bc29c4512ad0c1160452c886c7356b1da70e6bd3d1dc995798f0f6ca535ddcbc0b22d804bf1a3181e27f0b81240c43a9
data/.rubocop.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - spec/**
4
- - pain.gemspec
3
+ - spec/**
4
+ - pain.gemspec
5
+ NewCops: enable
5
6
 
6
7
  Documentation:
7
8
  Enabled: false
data/Gemfile CHANGED
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in user_pain.gemspec
4
6
  gemspec
5
7
 
6
- gem 'rubocop'
7
8
  gem 'coveralls', require: false
8
-
9
+ gem 'rubocop', '< 2'
10
+ gem 'rubocop-rspec'
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'bundler/gem_tasks'
data/bin/.rubocop.yml CHANGED
File without changes
data/bin/pain CHANGED
@@ -1,140 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
- require 'term/ansicolor'
5
5
  require 'pain'
6
6
 
7
- include Pain
8
-
9
- class String
10
- include Term::ANSIColor
11
- end
12
-
13
- def get_color(value)
14
- offset = case value
15
- when :trivial
16
- 40
17
- when :minor
18
- 69
19
- when :standard
20
- 184
21
- when :major
22
- 202
23
- when :critical
24
- 9
25
- else
26
- 252
27
- end
28
- Term::ANSIColor::Attribute[offset]
29
- end
30
-
31
- def case_danger(danger)
32
- if danger < 0.21
33
- :trivial
34
- elsif danger < 0.41
35
- :minor
36
- elsif danger < 0.65
37
- :standard
38
- elsif danger < 0.81
39
- :major
40
- else
41
- :critical
42
- end
43
- end
44
-
45
- def total_danger(danger)
46
- if danger < 21
47
- :trivial
48
- elsif danger < 31
49
- :minor
50
- elsif danger < 51
51
- :standard
52
- elsif danger < 75
53
- :major
54
- else
55
- :critical
56
- end
57
- end
58
-
59
- def color_output(msg, danger = :normal)
60
- level = if danger == :normal
61
- :default
62
- elsif danger.is_a? Symbol
63
- danger
64
- else
65
- case_danger(danger)
66
- end
67
- puts msg.color(get_color(level))
68
- end
69
-
70
- def display_options_for(input)
71
- ceiling = Pain::OPTIONS[input].count
72
- Pain::OPTIONS[input].each do |v, msg|
73
- color_output("#{v}: #{msg}", (v / ceiling.to_f))
74
- end
75
- puts
76
- end
77
-
78
- def ask_question_for(input)
79
- color_output Pain::INPUT_MESSAGE[input]
80
- end
81
-
82
- def print_report_for(o)
83
- pain = Pain.user_pain(o[:bug_type], o[:likelihood], o[:impact])
84
-
85
- levels = o.reduce({}) do |hash, (input, level)|
86
- hash[input] = case_danger(level.to_f / Pain::MAX[input])
87
- hash
88
- end
89
-
90
- color_output "Type: #{o[:bug_type]} - #{Pain::OPTIONS[:bug_type][o[:bug_type]]}" , levels[:bug_type]
91
- color_output "Likelihood: #{o[:likelihood]} - #{Pain::OPTIONS[:likelihood][o[:likelihood]]}", levels[:likelihood]
92
- color_output "Impact: #{o[:impact]} - #{Pain::OPTIONS[:impact][o[:impact]]}" , levels[:impact]
93
- puts
94
- color_output "User Pain: #{pain}", total_danger(pain)
95
- end
96
-
97
- options = {}
98
-
99
- OptionParser.new do |opts|
100
- opts.on(
101
- '-l',
102
- '--likelihood [LIKELIHOOD]',
103
- OptionParser::DecimalInteger,
104
- Pain::INPUT_MESSAGE[:likelihood]
105
- ) do |like|
106
- options[:likelihood] = Pain.normalize(like, :likelihood)
107
- end
108
-
109
- opts.on(
110
- '-i',
111
- '--impact [IMPACT]',
112
- OptionParser::DecimalInteger,
113
- Pain::INPUT_MESSAGE[:impact]
114
- ) do |impact|
115
- options[:impact] = Pain.normalize(impact, :impact)
116
- end
117
-
118
- opts.on(
119
- '-t',
120
- '--type [TYPE]',
121
- OptionParser::DecimalInteger,
122
- Pain::INPUT_MESSAGE[:bug_type]
123
- ) do |bug_type|
124
- options[:bug_type] = Pain.normalize(bug_type, :bug_type)
125
- end
126
- end.parse!
127
-
128
- [:bug_type, :likelihood, :impact].each do |input|
129
- first = true
130
- until options[input]
131
- ask_question_for input
132
- display_options_for(input) if first
133
-
134
- response = gets.chomp
135
- options[input] = Pain.normalize(response, input)
136
- first = false
137
- end
138
- end
139
-
140
- print_report_for options
7
+ Pain::Cli.new.run!
data/lib/pain.rb CHANGED
@@ -1,62 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pain/color_strings'
4
+ require 'pain/model'
5
+ require 'pain/cli'
1
6
  require 'pain/version'
2
- require 'optparse'
3
- require 'ostruct'
4
7
 
5
8
  module Pain
6
- MAX = {
7
- bug_type: 7,
8
- likelihood: 5,
9
- impact: 5
10
- }
11
-
12
- INPUT_MESSAGE = {
13
- bug_type: 'What kind of bug is this?',
14
- likelihood: 'How likely is this bug to occur?',
15
- impact: 'How much impact will this bug have?'
16
- }
17
-
18
- OPTIONS = {
19
- bug_type: {
20
- 1 => 'Documentation: a documentation issue',
21
- 2 => 'Localization: missing translations',
22
- 3 => 'Visual Polish: Aesthetic issues',
23
- 4 => 'Balancing: allows poor usage strategy',
24
- 5 => 'Minor UX: Impairs UX in secondary scenarios',
25
- 6 => 'Major UX: Impairs UX in key scenarios',
26
- 7 => 'Crash: Causes crash or data loss'
27
- },
28
- likelihood: {
29
- 1 => 'Will affect almost no one',
30
- 2 => 'Will only affect a few users',
31
- 3 => 'Will affect average number of users',
32
- 4 => 'Will affect most users',
33
- 5 => 'Will affect all users'
34
- },
35
-
36
- impact: {
37
- 1 => 'Nuisance: not a big deal but noticeable.',
38
- 2 => 'A Pain: Users won\'t like this once they notice it.',
39
- 3 => 'Affects Buy-in. Will show up in review. Clearly noticeable.',
40
- 4 => 'A user would return the product. Should not deploy until fixed',
41
- 5 => 'Affects system build'
42
- }
43
- }
44
-
45
- def max_pain
46
- MAX.values.reduce(&:*)
47
- end
48
-
49
- def user_pain(type, likelihood, impact)
50
- 100 * (type * likelihood * impact) / max_pain
51
- end
52
-
53
- def normalize(value, variable)
54
- value = value.to_i
55
- max = MAX[variable]
56
-
57
- return nil if max.nil? || value.nil?
58
- return nil if value < 1
59
- return max if value > max
60
- value
61
- end
62
9
  end
data/lib/pain/cli.rb ADDED
@@ -0,0 +1,164 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+
5
+ module Pain
6
+ class Cli
7
+ using Pain::ColorStrings
8
+
9
+ def initialize
10
+ @options = {}
11
+ @model = Pain::Model.new
12
+ @option_parser = Options.create(@options, @model)
13
+ end
14
+
15
+ def run!
16
+ @option_parser.parse!
17
+
18
+ %i[bug_type likelihood impact].each { |input| fill_question(input) }
19
+
20
+ puts
21
+ print_report_for options
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :model, :options, :option_parser
27
+
28
+ def fill_question(input, first: true)
29
+ return unless options[input].nil?
30
+
31
+ ask_question_for input
32
+ display_choices_for(input) if first
33
+
34
+ response = gets.chomp
35
+ options[input] = model.normalize(response, input)
36
+
37
+ fill_question(input, first: false) if options[input].nil?
38
+ end
39
+
40
+ def get_color(value)
41
+ offset = case value
42
+ when :trivial
43
+ 40
44
+ when :minor
45
+ 69
46
+ when :standard
47
+ 184
48
+ when :major
49
+ 202
50
+ when :critical
51
+ 9
52
+ else
53
+ 252
54
+ end
55
+ Term::ANSIColor::Attribute[offset]
56
+ end
57
+
58
+ def case_danger(danger)
59
+ if danger < 0.21
60
+ :trivial
61
+ elsif danger < 0.41
62
+ :minor
63
+ elsif danger < 0.65
64
+ :standard
65
+ elsif danger < 0.81
66
+ :major
67
+ else
68
+ :critical
69
+ end
70
+ end
71
+
72
+ def total_danger(danger)
73
+ if danger < 21
74
+ :trivial
75
+ elsif danger < 31
76
+ :minor
77
+ elsif danger < 51
78
+ :standard
79
+ elsif danger < 75
80
+ :major
81
+ else
82
+ :critical
83
+ end
84
+ end
85
+
86
+ def color_output(msg, danger = :normal)
87
+ level = case danger
88
+ when :normal
89
+ :default
90
+ when Symbol
91
+ danger
92
+ else
93
+ case_danger(danger)
94
+ end
95
+ puts msg.color(get_color(level))
96
+ end
97
+
98
+ def display_choices_for(input)
99
+ choices = model.choices_for(input)
100
+ ceiling = choices.count
101
+ choices.each do |v, msg|
102
+ color_output("#{v}: #{msg}", (v / ceiling.to_f))
103
+ end
104
+ puts
105
+ end
106
+
107
+ def ask_question_for(input)
108
+ color_output model.input_message(input)
109
+ end
110
+
111
+ # rubocop:disable Metrics/AbcSize
112
+ def print_report_for(scores)
113
+ pain = model.user_pain(scores[:bug_type], scores[:likelihood], scores[:impact])
114
+
115
+ levels = scores.each_with_object({}) do |(input, level), hash|
116
+ hash[input] = case_danger(level.to_f / model.max_for(input))
117
+ end
118
+
119
+ color_output "Type: #{scores[:bug_type]} - #{model.level_string(:bug_type, scores[:bug_type])}",
120
+ levels[:bug_type]
121
+ color_output "Likelihood: #{scores[:likelihood]} - #{model.level_string(:likelihood, scores[:likelihood])}",
122
+ levels[:likelihood]
123
+ color_output "Impact: #{scores[:impact]} - #{model.level_string(:impact, scores[:impact])}", levels[:impact]
124
+ puts
125
+ color_output "User Pain: #{pain}", total_danger(pain)
126
+ end
127
+ # rubocop:enable Metrics/AbcSize
128
+ end
129
+
130
+ # rubocop:disable Metrics/MethodLength
131
+ class Options
132
+ def self.create(options, model)
133
+ OptionParser.new do |opts|
134
+ opts.on(
135
+ '-l',
136
+ '--likelihood [LIKELIHOOD]',
137
+ OptionParser::DecimalInteger,
138
+ model.input_message(:likelihood)
139
+ ) do |like|
140
+ options[:likelihood] = model.normalize(like, :likelihood)
141
+ end
142
+
143
+ opts.on(
144
+ '-i',
145
+ '--impact [IMPACT]',
146
+ OptionParser::DecimalInteger,
147
+ model.input_message(:impact)
148
+ ) do |impact|
149
+ options[:impact] = model.normalize(impact, :impact)
150
+ end
151
+
152
+ opts.on(
153
+ '-t',
154
+ '--type [TYPE]',
155
+ OptionParser::DecimalInteger,
156
+ model.input_message(:bug_type)
157
+ ) do |bug_type|
158
+ options[:bug_type] = model.normalize(bug_type, :bug_type)
159
+ end
160
+ end
161
+ end
162
+ end
163
+ # rubocop:enable Metrics/MethodLength
164
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'term/ansicolor'
4
+
5
+ module Pain
6
+ module ColorStrings
7
+ refine String do
8
+ include Term::ANSIColor
9
+ end
10
+ end
11
+ end
data/lib/pain/model.rb ADDED
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pain
4
+ class Model
5
+ MAX = {
6
+ bug_type: 7,
7
+ likelihood: 5,
8
+ impact: 5
9
+ }.freeze
10
+
11
+ INPUT_MESSAGE = {
12
+ bug_type: 'What kind of bug is this?',
13
+ likelihood: 'How likely is this bug to occur?',
14
+ impact: 'How much impact will this bug have?'
15
+ }.freeze
16
+
17
+ OPTIONS = {
18
+ bug_type: {
19
+ 1 => 'Documentation: a documentation issue',
20
+ 2 => 'Localization: missing translations',
21
+ 3 => 'Visual Polish: Aesthetic issues',
22
+ 4 => 'Balancing: allows poor usage strategy',
23
+ 5 => 'Minor UX: Impairs UX in secondary scenarios',
24
+ 6 => 'Major UX: Impairs UX in key scenarios',
25
+ 7 => 'Crash: Causes crash or data loss'
26
+ },
27
+ likelihood: {
28
+ 1 => 'Will affect almost no one',
29
+ 2 => 'Will only affect a few users',
30
+ 3 => 'Will affect average number of users',
31
+ 4 => 'Will affect most users',
32
+ 5 => 'Will affect all users'
33
+ },
34
+
35
+ impact: {
36
+ 1 => 'Nuisance: not a big deal but noticeable.',
37
+ 2 => 'A Pain: Users won\'t like this once they notice it.',
38
+ 3 => 'Affects Buy-in. Will show up in review. Clearly noticeable.',
39
+ 4 => 'A user would return the product. Should not deploy until fixed',
40
+ 5 => 'Affects system build'
41
+ }
42
+ }.freeze
43
+
44
+ def choices_for(category)
45
+ OPTIONS[category]
46
+ end
47
+
48
+ def level_string(category, score)
49
+ OPTIONS.dig(category, score)
50
+ end
51
+
52
+ def max_for(category)
53
+ MAX[category]
54
+ end
55
+
56
+ def input_message(category)
57
+ INPUT_MESSAGE[category]
58
+ end
59
+
60
+ def max_pain
61
+ MAX.values.reduce(&:*)
62
+ end
63
+
64
+ def user_pain(type, likelihood, impact)
65
+ 100 * (type * likelihood * impact) / max_pain
66
+ end
67
+
68
+ def normalize(value, variable)
69
+ value = value.to_i
70
+ max = MAX[variable]
71
+
72
+ return nil if max.nil? || value.nil?
73
+ return nil if value < 1
74
+ return max if value > max
75
+
76
+ value
77
+ end
78
+ end
79
+ end
data/lib/pain/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Pain
2
- VERSION = '0.0.3'
4
+ VERSION = '0.1.1'
3
5
  end
data/pain.gemspec CHANGED
@@ -14,17 +14,18 @@ Gem::Specification.new do |spec|
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.executables = spec.files.grep(%r{^bin/pain}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_dependency 'term-ansicolor'
22
22
  spec.add_dependency 'tins'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.6'
24
+ spec.add_development_dependency 'bundler', '~> 2'
25
25
  spec.add_development_dependency 'rake'
26
- spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'rspec', '< 4'
27
27
  spec.add_development_dependency 'simplecov'
28
28
  spec.add_development_dependency 'simplecov-rcov'
29
29
  spec.add_development_dependency 'pry'
30
+ spec.add_development_dependency 'rubygems-update'
30
31
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Pain
4
+ RSpec.describe Model do
5
+ describe '#user_pain' do
6
+ it 'calculates_correctly' do
7
+ expect(subject.user_pain(7, 5, 5)).to eq(100)
8
+ expect(subject.user_pain(1, 1, 1)).to eq(0)
9
+ expect(subject.user_pain(4, 3, 3)).to eq(20)
10
+ end
11
+ end
12
+
13
+ describe '#normalize' do
14
+ it 'doesn\'t allow numbers too small' do
15
+ expect(subject.normalize(0, :impact)).to be_nil
16
+ expect(subject.normalize(-1, :impact)).to be_nil
17
+ end
18
+
19
+ it 'doesn\'t allow numbers too big' do
20
+ expect(subject.normalize(10, :bug_type)).to eq(7)
21
+ expect(subject.normalize(7, :impact)).to eq(5)
22
+ expect(subject.normalize(7, :bug_type)).to eq(7)
23
+ end
24
+ end
25
+ end
26
+ end
data/spec/spec_helper.rb CHANGED
@@ -26,7 +26,6 @@ SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
26
26
  require 'pain'
27
27
 
28
28
  RSpec.configure do |config|
29
- config.treat_symbols_as_metadata_keys_with_true_values = true
30
29
  config.run_all_when_everything_filtered = true
31
30
  config.filter_run :focus
32
31
 
metadata CHANGED
@@ -1,139 +1,152 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Nicholson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
11
+ date: 2021-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: tins
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.6'
47
+ version: '2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.6'
54
+ version: '2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - "<"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '4'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - "<"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '4'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: simplecov-rcov
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pry
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubygems-update
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
131
  version: '0'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - '>='
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  description: 'Based on http://www.lostgarden.com/2008/05/improving-bug-triage-with-user-pain.html '
126
140
  email:
127
141
  - andrew@anicholson.net
128
142
  executables:
129
- - .rubocop.yml
130
143
  - pain
131
144
  extensions: []
132
145
  extra_rdoc_files: []
133
146
  files:
134
- - .gitignore
135
- - .rspec
136
- - .rubocop.yml
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".rubocop.yml"
137
150
  - Gemfile
138
151
  - LICENSE.txt
139
152
  - README.md
@@ -141,37 +154,36 @@ files:
141
154
  - bin/.rubocop.yml
142
155
  - bin/pain
143
156
  - lib/pain.rb
157
+ - lib/pain/cli.rb
158
+ - lib/pain/color_strings.rb
159
+ - lib/pain/model.rb
144
160
  - lib/pain/version.rb
145
161
  - pain.gemspec
146
- - spec/normalize_spec.rb
162
+ - spec/model_spec.rb
147
163
  - spec/spec_helper.rb
148
- - spec/user_pain_spec.rb
149
164
  homepage: http://github.com/anicholson/pain.git
150
165
  licenses:
151
166
  - MIT
152
167
  metadata: {}
153
- post_install_message:
168
+ post_install_message:
154
169
  rdoc_options: []
155
170
  require_paths:
156
171
  - lib
157
172
  required_ruby_version: !ruby/object:Gem::Requirement
158
173
  requirements:
159
- - - '>='
174
+ - - ">="
160
175
  - !ruby/object:Gem::Version
161
176
  version: '0'
162
177
  required_rubygems_version: !ruby/object:Gem::Requirement
163
178
  requirements:
164
- - - '>='
179
+ - - ">="
165
180
  - !ruby/object:Gem::Version
166
181
  version: '0'
167
182
  requirements: []
168
- rubyforge_project:
169
- rubygems_version: 2.1.11
170
- signing_key:
183
+ rubygems_version: 3.1.6
184
+ signing_key:
171
185
  specification_version: 4
172
186
  summary: Quickly calculate User Pain for a bug
173
187
  test_files:
174
- - spec/normalize_spec.rb
188
+ - spec/model_spec.rb
175
189
  - spec/spec_helper.rb
176
- - spec/user_pain_spec.rb
177
- has_rdoc:
@@ -1,16 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'normalize' do
4
- subject { Class.new { include Pain }.new }
5
-
6
- it 'doesn\'t allow numbers too small' do
7
- expect(subject.normalize(0, :impact)).to be_nil
8
- expect(subject.normalize(-1, :impact)).to be_nil
9
- end
10
-
11
- it 'doesn\'t allow numbers too big' do
12
- expect(subject.normalize(10, :bug_type)).to eq(7)
13
- expect(subject.normalize(7, :impact)).to eq(5)
14
- expect(subject.normalize(7, :bug_type)).to eq(7)
15
- end
16
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe 'pain' do
5
- subject { Class.new { include Pain }.new }
6
-
7
- it 'calculates_correctly' do
8
- expect(subject.user_pain(7, 5, 5)).to eq(100)
9
- expect(subject.user_pain(1, 1, 1)).to eq(0)
10
- expect(subject.user_pain(4, 3, 3)).to eq(20)
11
- end
12
- end