goal 0.1.0 → 0.2.0

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
2
  SHA1:
3
- metadata.gz: 3a273a57258b55e11c3d0f61514950efb5026ffa
4
- data.tar.gz: 9e98c87c2cee48f8617f609acdf7388d6f9ede4f
3
+ metadata.gz: 9e6dc9f385d0532851d70b7d1d37a24cb250709f
4
+ data.tar.gz: 636a43dc39b232239589589602b3691f9b23ccf8
5
5
  SHA512:
6
- metadata.gz: 2674f99af748b9e286bf9b04316816e6561c7f3b5599ccf466d8ecfcf7723901f4abb7ed9bd3d2634ea69991827f74523463f78f75d1e90b2e8ac0807fe26bb0
7
- data.tar.gz: 964867d39e49b6d1a4a31ed4aa87fd62f9eaeedc34becd4e6ae54cc36d5110f822ed9ed86417f8f77d1409f33ed575701468b063e14a01555539ff81e0d44e1a
6
+ metadata.gz: 16be09eaf6287db18b6fa0e3aee7e25142b4e705baabbbc733a362e16a8ac4eab8018682637c103d449793b381364ecd0f5442e2e539d88d93ceb25197bc4b22
7
+ data.tar.gz: 1880eda0ab7fb3e59fd0969ed4ccc30223f725381edac0143fff21c867c8b478d85268da348e68c535ed74f1738780878578ae11135c296b142b1314397c617c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ### 0.2.0
2
+
3
+ * bug fix
4
+ * Fix the wrong average when in beginning or end of month, issue #1
5
+
6
+ * new
7
+ * Add a extra option -m, it is used to calculate the current money based on
8
+ the current time.
9
+
1
10
  ### 0.1.0
2
11
 
3
12
  * bug fix
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/goal.png)](http://badge.fury.io/rb/goal)
2
+
1
3
  Goal
2
4
  ====
3
5
 
@@ -27,9 +29,9 @@ $ goal -u freshbooks_user -t freshbooks_token
27
29
  | 250 | 152 | 14.93 |
28
30
  | 300 | 182 | 20.48 |
29
31
  |____________________________|
30
- | Current: 115.66h
31
- | Average: 8.26h
32
- | Days left: 9
32
+ | Current time: 115.66h
33
+ | Current rate: 8.26h
34
+ | Days left: 9
33
35
  ```
34
36
 
35
37
  or
@@ -43,8 +45,25 @@ $ goal -h 115.66
43
45
  | 250 | 152 | 14.93 |
44
46
  | 300 | 182 | 20.48 |
45
47
  |____________________________|
46
- | Current: 115.66h
47
- | Average: 8.26h
48
+ | Current time: 115.66h
49
+ | Current rate: 8.26h
50
+ | Days left: 9
51
+ ```
52
+
53
+ or
54
+
55
+ ```bash
56
+ $ goal -h 115.66 -m 120
57
+
58
+ | Goals | Expected | Average |
59
+ | 160 | 97 | 4.93 |
60
+ | 200 | 121 | 9.37 |
61
+ | 250 | 152 | 14.93 |
62
+ | 300 | 182 | 20.48 |
63
+ |____________________________|
64
+ | Current time: 115.66h
65
+ | Current money: 13.879.20
66
+ | Current rate: 8.26h
48
67
  | Days left: 9
49
68
  ```
50
69
 
@@ -56,6 +75,7 @@ Usage: goal [options]
56
75
  -t, --token=TOKEN Freshbooks token
57
76
  -g, --goals=[GOALS] Your goal list. Ex 160:200:300
58
77
  -h, --hours=HOURS Worked time in hours.
78
+ -m, --money=MONEY The money rate.
59
79
  ```
60
80
 
61
81
  Options `-u` and `-t` are required and specify the user and token to access the
data/bin/goal CHANGED
@@ -23,6 +23,10 @@ optparse = OptionParser.new do |opts|
23
23
  opts.on("-h", "--hours=HOURS", "Worked time in hours.") do |h|
24
24
  options[:hours] = h.to_f
25
25
  end
26
+
27
+ opts.on("-m", "--money=MONEY", "The money rate.") do |m|
28
+ options[:money_rate] = m.to_f
29
+ end
26
30
  end
27
31
 
28
32
  optparse.parse!
@@ -31,7 +31,7 @@ module Goal
31
31
  end
32
32
 
33
33
  def days_left
34
- total_days_until(end_of_month) - total_days_until
34
+ total_days_until(end_of_month) - total_days_until + 1
35
35
  end
36
36
 
37
37
  private
data/lib/goal/report.rb CHANGED
@@ -26,10 +26,17 @@ module Goal
26
26
  end
27
27
 
28
28
  def footer
29
- "|" + ('-' * ((column_width * 3) + 8)) + "|\n" +
30
- "| Current time: #{data[:summary][:total_time]}\n" +
31
- "| Current rate: #{data[:summary][:rate]}\n" +
32
- "| Days left: #{data[:summary][:days_left]}"
29
+ summary = "|" + ('-' * ((column_width * 3) + 8)) + "|\n"
30
+ summary += "| Current time: #{data[:summary][:total_time]}\n"
31
+
32
+ if data[:summary][:money]
33
+ summary += "| Current money: #{number_to_currency(data[:summary][:money])}\n"
34
+ end
35
+
36
+ summary += "| Current rate: #{data[:summary][:rate]}\n"
37
+ summary += "| Days left: #{data[:summary][:days_left]}"
38
+
39
+ summary
33
40
  end
34
41
 
35
42
  def row(columns)
@@ -43,5 +50,13 @@ module Goal
43
50
  c.to_s.ljust(column_width)
44
51
  end
45
52
  end
53
+
54
+ def number_to_currency(value)
55
+ val_str = ("%.2f" % [value.to_s]).gsub('.', ',')
56
+
57
+ while val_str.sub!(/(\d+)(\d\d\d)/, '\1.\2'); end
58
+
59
+ val_str
60
+ end
46
61
  end
47
62
  end
data/lib/goal/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Goal
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/goal.rb CHANGED
@@ -10,6 +10,7 @@ module Goal
10
10
  @username = options[:username]
11
11
  @token = options[:token]
12
12
  @hours = options[:hours]
13
+ @money_rate = options[:money_rate]
13
14
  end
14
15
 
15
16
  def worked_time
@@ -22,6 +23,10 @@ module Goal
22
23
  end.round(2)
23
24
  end
24
25
 
26
+ def total_money
27
+ (worked_time * money_rate).round(2)
28
+ end
29
+
25
30
  # It calculates the current hour rate
26
31
  def rate
27
32
  calculator.hour_rate(worked_time).round(2)
@@ -38,7 +43,8 @@ module Goal
38
43
 
39
44
  private
40
45
 
41
- attr_reader :base, :calculator, :goal_list, :username, :token, :hours
46
+ attr_reader :base, :calculator, :goal_list, :username, :token, :hours,
47
+ :money_rate
42
48
 
43
49
  def freshbooks
44
50
  Goal::FreshbooksCalculator.new(username, token)
@@ -59,11 +65,15 @@ module Goal
59
65
  end
60
66
 
61
67
  def summary
62
- {
68
+ data = {
63
69
  total_time: worked_time,
64
70
  rate: rate,
65
71
  days_left: calculator.days_left
66
72
  }
73
+
74
+ data[:money] = total_money if money_rate
75
+
76
+ data
67
77
  end
68
78
  end
69
79
  end
@@ -53,18 +53,18 @@ describe Goal::Calculator do
53
53
  {
54
54
  goal: 160,
55
55
  expected: 97.39,
56
- average: 7.78
56
+ average: 7.0
57
57
  },
58
58
  {
59
59
  goal: 200,
60
60
  expected: 121.74,
61
- average: 12.22
61
+ average: 11.0
62
62
  }
63
63
  ],
64
64
  summary: {
65
65
  total_time: 90.0,
66
66
  rate: 6.43,
67
- days_left: 9
67
+ days_left: 10
68
68
  }
69
69
  })
70
70
  end
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  describe Goal::HourCalculator do
4
4
  describe '#total_days_until' do
5
5
  it 'should calculate the business days from the beginning of the month until the specified day' do
6
+ Date.stub(today: Date.new(2013, 10, 1))
7
+
6
8
  expect(subject.total_days_until Date.new(2013, 10, 17)).to eq 13 # Thursday
7
9
  expect(subject.total_days_until Date.new(2013, 10, 18)).to eq 14 # Friday
8
10
  expect(subject.total_days_until Date.new(2013, 10, 19)).to eq 14 # Saturday
@@ -32,21 +34,72 @@ describe Goal::HourCalculator do
32
34
 
33
35
  expect(subject.hour_rate(95)).to eq 6.785714285714286
34
36
  end
37
+
38
+ context 'when on the last day of the month' do
39
+ it 'should calculate the hour rate' do
40
+ Date.stub(today: Date.new(2013, 10, 31))
41
+
42
+ expect(subject.hour_rate(200)).to eq 8.695652173913043
43
+ end
44
+ end
45
+
46
+ context 'when on the first day of the month' do
47
+ it 'should calculate the hour rate' do
48
+ Date.stub(today: Date.new(2013, 10, 1))
49
+
50
+ expect(subject.hour_rate(0)).to eq 0.0
51
+ expect(subject.hour_rate(5)).to eq 5.0
52
+ end
53
+ end
35
54
  end
36
55
 
37
56
  describe '#rate_to_goal' do
38
57
  it 'should calculate the hour per day needed to the goal from the left days of the month' do
39
58
  Date.stub(today: Date.new(2013, 10, 18))
40
59
 
41
- expect(subject.rate_to_goal(200, 115.66)).to eq 9.371111111111112
60
+ expect(subject.rate_to_goal(200, 115.66)).to eq 8.434000000000001
61
+ end
62
+
63
+ context 'when on the last day of the month' do
64
+ it 'should calculate rate_to_goal' do
65
+ Date.stub(today: Date.new(2013, 10, 31))
66
+
67
+ expect(subject.rate_to_goal(200, 115.66)).to eq 84.34
68
+ end
69
+ end
70
+
71
+ context 'when on the first day of the month' do
72
+ it 'should calculate the rate to goal' do
73
+ Date.stub(today: Date.new(2013, 10, 1))
74
+
75
+ expect(subject.rate_to_goal(200, 0)).to eq 8.0
76
+ end
42
77
  end
43
78
  end
44
79
 
45
80
  describe '#days_left' do
46
- it 'should return the days left from de month since today' do
47
- Date.stub(today: Date.new(2013, 10, 18))
81
+ context 'when in beginning of the month' do
82
+ it 'should return the days left from de month since today' do
83
+ Date.stub(today: Date.new(2013, 10, 1))
84
+
85
+ expect(subject.days_left).to eq 23
86
+ end
87
+ end
88
+
89
+ context 'when in middle of the month' do
90
+ it 'should return the days left from de month since today' do
91
+ Date.stub(today: Date.new(2013, 10, 18))
92
+
93
+ expect(subject.days_left).to eq 10
94
+ end
95
+ end
96
+
97
+ context 'when in the end of the month' do
98
+ it 'should return the days left from de month since today' do
99
+ Date.stub(today: Date.new(2013, 10, 31))
48
100
 
49
- expect(subject.days_left).to eq 9
101
+ expect(subject.days_left).to eq 1
102
+ end
50
103
  end
51
104
  end
52
105
  end
data/spec/report_spec.rb CHANGED
@@ -23,21 +23,41 @@ describe Goal::Report do
23
23
  }
24
24
  end
25
25
 
26
+
26
27
  subject do
27
28
  described_class.new(data)
28
29
  end
29
30
 
30
31
  describe '#to_s' do
31
- it 'should build the report' do
32
- report = "| Goals | Expected | Average |\n"
33
- report += "| 160 | 97.39 | 7.78 |\n"
34
- report += "| 200 | 121.74 | 12.22 |\n"
35
- report += "|--------------------------------|\n"
36
- report += "| Current time: 90.0\n"
37
- report += "| Current rate: 6.43\n"
38
- report += "| Days left: 9"
39
-
40
- expect(subject.to_s).to eq report
32
+ context 'when has not money setted to summary' do
33
+ it 'should build the report' do
34
+ report = "| Goals | Expected | Average |\n"
35
+ report += "| 160 | 97.39 | 7.78 |\n"
36
+ report += "| 200 | 121.74 | 12.22 |\n"
37
+ report += "|--------------------------------|\n"
38
+ report += "| Current time: 90.0\n"
39
+ report += "| Current rate: 6.43\n"
40
+ report += "| Days left: 9"
41
+
42
+ expect(subject.to_s).to eq report
43
+ end
44
+ end
45
+
46
+ context 'when has money setted to summary' do
47
+ it 'should build the report' do
48
+ data[:summary][:money] = 15000.45
49
+
50
+ report = "| Goals | Expected | Average |\n"
51
+ report += "| 160 | 97.39 | 7.78 |\n"
52
+ report += "| 200 | 121.74 | 12.22 |\n"
53
+ report += "|--------------------------------|\n"
54
+ report += "| Current time: 90.0\n"
55
+ report += "| Current money: 15000.45\n"
56
+ report += "| Current rate: 6.43\n"
57
+ report += "| Days left: 9"
58
+
59
+ expect(subject.to_s).to eq report
60
+ end
41
61
  end
42
62
  end
43
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateus Lorandi dos Santos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-22 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-freshbooks