beggar 0.0.1.alpha → 0.0.2.alpha

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ - ruby-head
5
+ script: bundle exec rspec spec
6
+ notifications:
7
+ email:
8
+ - bkzl@me.com
data/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ TODO
data/Gemfile.lock CHANGED
@@ -1,12 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- beggar (0.0.1)
4
+ beggar (0.0.1.alpha)
5
+ basecamp
5
6
 
6
7
  GEM
7
8
  remote: http://rubygems.org/
8
9
  specs:
10
+ activemodel (3.1.3)
11
+ activesupport (= 3.1.3)
12
+ builder (~> 3.0.0)
13
+ i18n (~> 0.6)
14
+ activeresource (3.1.3)
15
+ activemodel (= 3.1.3)
16
+ activesupport (= 3.1.3)
17
+ activesupport (3.1.3)
18
+ multi_json (~> 1.0)
19
+ addressable (2.2.6)
20
+ basecamp (0.0.7)
21
+ activeresource (>= 2.3.0)
22
+ oauth2
23
+ xml-simple
24
+ builder (3.0.0)
9
25
  diff-lcs (1.1.3)
26
+ faraday (0.7.5)
27
+ addressable (~> 2.2.6)
28
+ multipart-post (~> 1.1.3)
29
+ rack (>= 1.1.0, < 2)
30
+ i18n (0.6.0)
31
+ multi_json (1.0.4)
32
+ multipart-post (1.1.4)
33
+ oauth2 (0.5.1)
34
+ faraday (~> 0.7.4)
35
+ multi_json (~> 1.0.3)
36
+ rack (1.3.5)
10
37
  rspec (2.7.0)
11
38
  rspec-core (~> 2.7.0)
12
39
  rspec-expectations (~> 2.7.0)
@@ -15,6 +42,8 @@ GEM
15
42
  rspec-expectations (2.7.0)
16
43
  diff-lcs (~> 1.1.2)
17
44
  rspec-mocks (2.7.0)
45
+ timecop (0.3.5)
46
+ xml-simple (1.1.1)
18
47
 
19
48
  PLATFORMS
20
49
  ruby
@@ -22,3 +51,4 @@ PLATFORMS
22
51
  DEPENDENCIES
23
52
  beggar!
24
53
  rspec
54
+ timecop
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
- # Beggar
1
+ # Beggar [![Build Status](https://secure.travis-ci.org/bkzl/beggar.png)](http://travis-ci.org/bkzl/beggar)
2
2
 
3
3
  Tool for generating time reports from Basecamp
4
4
 
5
5
  ## Installation
6
+ TODO
6
7
 
7
8
  ## Usage
9
+ TODO
data/beggar.gemspec CHANGED
@@ -1,4 +1,5 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
+
2
3
  $:.push File.expand_path("../lib", __FILE__)
3
4
  require "beggar/version"
4
5
 
@@ -7,7 +8,7 @@ Gem::Specification.new do |s|
7
8
  s.version = Beggar::VERSION
8
9
  s.authors = ["Bartlomiej Kozal"]
9
10
  s.email = ["bkzl@me.com"]
10
- s.homepage = ""
11
+ s.homepage = "https://github.com/bkzl/beggar"
11
12
  s.summary = %q{Tool for generating time reports from Basecamp}
12
13
  s.description = %q{Tool for generating time reports from Basecamp. You can specify rate for each project and get value of your month salary.}
13
14
 
@@ -20,5 +21,6 @@ Gem::Specification.new do |s|
20
21
 
21
22
  # specify any dependencies here; for example:
22
23
  s.add_development_dependency "rspec"
23
- # s.add_runtime_dependency "rest-client"
24
+ s.add_development_dependency "timecop"
25
+ s.add_runtime_dependency "basecamp"
24
26
  end
data/bin/beggar CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "beggar"
4
+ runner = Beggar::CLI.new(ARGV)
5
+ runner.start
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ module Beggar
4
+ class Base
5
+ def initialize(config)
6
+ Basecamp.establish_connection!("#{config['company']}.basecamphq.com", config['token'], 'X', true)
7
+
8
+ Hours.project_id = config['project']['id']
9
+ Salary.rate = config['project']['rate']
10
+ end
11
+
12
+ def summary
13
+ [CurrentMonth, Hours, Salary].join(' || ') + "\n"
14
+ end
15
+ end
16
+ end
data/lib/beggar/cli.rb ADDED
@@ -0,0 +1,17 @@
1
+ module Beggar
2
+ class CLI
3
+ def initialize(args = nil)
4
+ @config = load_config
5
+ end
6
+
7
+ def start
8
+ $stdout << Beggar::Base.new(@config).summary
9
+ end
10
+
11
+ private
12
+
13
+ def load_config
14
+ YAML.load_file(File.join(ENV['HOME'], '.beggar'))
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module Beggar
2
+ class CurrentMonth
3
+ class << self
4
+ def first_day
5
+ Date.new(Date.today.year, Date.today.month, 1)
6
+ end
7
+
8
+ def last_day
9
+ first_day.next_month - 1
10
+ end
11
+
12
+ def working_days(last_day = last_day)
13
+ (first_day..last_day).reject { |d| [0,6].include? d.wday }.size
14
+ end
15
+
16
+ def working_days_up_today
17
+ working_days(Date.today)
18
+ end
19
+
20
+ def to_s
21
+ %[#{(working_days_up_today.to_f / working_days * 100).round}%]
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Beggar
4
+ class Hours
5
+ class << self
6
+ attr_accessor :project_id
7
+
8
+ def from_basecamp
9
+ @@from_basecamp ||= Basecamp::TimeEntry.report(project_id: project_id, from: CurrentMonth.first_day, to: Date.today).map(&:hours).inject(&:+)
10
+ end
11
+
12
+ def up_today
13
+ CurrentMonth.working_days_up_today * 8
14
+ end
15
+
16
+ def difference
17
+ up_today - from_basecamp
18
+ end
19
+
20
+ def to_s
21
+ %[#{from_basecamp}h ± #{difference}h]
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Beggar
4
+ class Salary
5
+ class << self
6
+ attr_accessor :rate
7
+
8
+ def from_basecamp
9
+ Hours.from_basecamp * rate
10
+ end
11
+
12
+ def up_today
13
+ Hours.up_today * rate
14
+ end
15
+
16
+ def difference
17
+ up_today - from_basecamp
18
+ end
19
+
20
+ def to_s
21
+ %[#{from_basecamp} PLN ± #{difference} PLN]
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Beggar
2
- VERSION = "0.0.1.alpha"
2
+ VERSION = "0.0.2.alpha"
3
3
  end
data/lib/beggar.rb CHANGED
@@ -1,5 +1,8 @@
1
- require "beggar/version"
2
-
3
- module Beggar
4
- # Your code goes here...
5
- end
1
+ require 'basecamp'
2
+ require 'yaml'
3
+ require 'beggar/version'
4
+ require 'beggar/cli'
5
+ require 'beggar/base'
6
+ require 'beggar/current_month'
7
+ require 'beggar/hours'
8
+ require 'beggar/salary'
data/spec/base_spec.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Beggar::Base do
4
+ before do
5
+ Basecamp.stub(:establish_connection!)
6
+ Beggar::CurrentMonth.stub(to_s: 'a')
7
+ Beggar::Hours.stub(to_s: 'b')
8
+ Beggar::Salary.stub(to_s: 'c')
9
+ end
10
+
11
+ subject do
12
+ config = double(:[] => { company: 'abc', token: 'xyz', project: { id: 1, rate: 1.0 }})
13
+ Beggar::Base.new(config)
14
+ end
15
+
16
+ its(:summary) { should == %(a || b || c\n) }
17
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Beggar::CurrentMonth do
4
+ context 'today is the 24th December 2011' do
5
+ before(:all) { Timecop.travel(Date.new(2011, 12, 24)) }
6
+ after(:all) { Timecop.return }
7
+
8
+ subject { Beggar::CurrentMonth }
9
+
10
+ its(:first_day) { should == Date.new(2011, 12, 1) }
11
+ its(:last_day) { should == Date.new(2011, 12, 31) }
12
+ its(:working_days) { should == 22 }
13
+ its(:working_days_up_today) { should == 17 }
14
+ its(:to_s) { should == '77%' }
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Beggar::Hours' do
6
+ context 'user was working in current month 2 days (8h and 6h)' do
7
+ before do
8
+ api_response = double(map: [8.0, 6.0])
9
+ Basecamp::TimeEntry.stub(report: api_response)
10
+ Beggar::CurrentMonth.stub(working_days_up_today: 2)
11
+ end
12
+
13
+ subject { Beggar::Hours }
14
+
15
+ its(:from_basecamp) { should == 14.0 }
16
+ its(:up_today) { should == 16.0 }
17
+ its(:difference) { should == 2.0 }
18
+ its(:to_s) { should == '14.0h ± 2.0h' }
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Beggar::Salary' do
6
+ context 'user was working 10h (max: 40h) in current month and his rate per h amount 100.0 PLN' do
7
+ before do
8
+ Beggar::Hours.stub(from_basecamp: 10, up_today: 40)
9
+ Beggar::Salary.stub(rate: 100.0)
10
+ end
11
+
12
+ subject { Beggar::Salary }
13
+
14
+ its(:from_basecamp) { should == 1000.0 }
15
+ its(:up_today) { should == 4000.0 }
16
+ its(:difference) { should == 3000.0 }
17
+ its(:to_s) { should == '1000.0 PLN ± 3000.0 PLN' }
18
+ end
19
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,2 @@
1
1
  require 'beggar'
2
+ require 'timecop'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beggar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha
4
+ version: 0.0.2.alpha
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-11 00:00:00.000000000 Z
12
+ date: 2011-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70322255448200 !ruby/object:Gem::Requirement
16
+ requirement: &70164495032580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,29 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70322255448200
24
+ version_requirements: *70164495032580
25
+ - !ruby/object:Gem::Dependency
26
+ name: timecop
27
+ requirement: &70164495032040 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70164495032040
36
+ - !ruby/object:Gem::Dependency
37
+ name: basecamp
38
+ requirement: &70164495031520 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70164495031520
25
47
  description: Tool for generating time reports from Basecamp. You can specify rate
26
48
  for each project and get value of your month salary.
27
49
  email:
@@ -31,7 +53,10 @@ executables:
31
53
  extensions: []
32
54
  extra_rdoc_files: []
33
55
  files:
56
+ - .gitignore
34
57
  - .rspec
58
+ - .travis.yml
59
+ - CHANGELOG.md
35
60
  - Gemfile
36
61
  - Gemfile.lock
37
62
  - LICENSE
@@ -40,10 +65,18 @@ files:
40
65
  - beggar.gemspec
41
66
  - bin/beggar
42
67
  - lib/beggar.rb
68
+ - lib/beggar/base.rb
69
+ - lib/beggar/cli.rb
70
+ - lib/beggar/current_month.rb
71
+ - lib/beggar/hours.rb
72
+ - lib/beggar/salary.rb
43
73
  - lib/beggar/version.rb
44
- - spec/beggar_spec.rb
74
+ - spec/base_spec.rb
75
+ - spec/current_month_spec.rb
76
+ - spec/hours_spec.rb
77
+ - spec/salary_spec.rb
45
78
  - spec/spec_helper.rb
46
- homepage: ''
79
+ homepage: https://github.com/bkzl/beggar
47
80
  licenses: []
48
81
  post_install_message:
49
82
  rdoc_options: []
@@ -68,5 +101,8 @@ signing_key:
68
101
  specification_version: 3
69
102
  summary: Tool for generating time reports from Basecamp
70
103
  test_files:
71
- - spec/beggar_spec.rb
104
+ - spec/base_spec.rb
105
+ - spec/current_month_spec.rb
106
+ - spec/hours_spec.rb
107
+ - spec/salary_spec.rb
72
108
  - spec/spec_helper.rb
data/spec/beggar_spec.rb DELETED
@@ -1,5 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Beggar do
4
- pending
5
- end