PMO_mw 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: da070197e09d78445d320aeacde32b20167b7a8f
4
+ data.tar.gz: 898edbefe350b7907d9c03fb5806f740c7182b1c
5
+ SHA512:
6
+ metadata.gz: 32a30df2d9d332951430362be5ee54bd4aeae21c0ffa310a8a163f753b2ace5eea5fc1d10d3b3f38ad1f7e1f1a9546e2624a8af6eeaafaf57c7d9554f6306687
7
+ data.tar.gz: 952c927efaad384bc83b527c603a38b6e079675ae128e8179a91ab08958ef0c9ddb6df46a7db08f316edc8683b46005bb3ced750a2112cf351aae952ab4a4423
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2015 Michael Walsh
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ - You may not use this Software in other training contexts.
11
+
12
+ - The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,9 @@
1
+ This project represents a software development project.
2
+
3
+ The project has team members
4
+
5
+ The team members get regular ratings
6
+
7
+ The team members acquire new skills and improve existing skills over time
8
+
9
+ The project has a manager
data/bin/PMO ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/runner/project'
4
+ require_relative '../lib/runner/manager'
5
+ require 'CSV'
6
+
7
+ obiee = Runner::Project.new("obiee")
8
+
9
+ member_file = 'members.csv'
10
+ manager_file = 'managers.csv'
11
+
12
+ # Read the members CSV file
13
+ members = CSV.read(member_file)
14
+
15
+ # Read the managers CSV file
16
+ managers = CSV.read(manager_file)
17
+
18
+ #Loop through each row in the array from the members.csv file
19
+ members.each do |member|
20
+ obiee.add_member(Runner::TeamMember.new(member[0], member[1].to_i))
21
+ end
22
+ #Loop through each row in the array from the managers.csv file
23
+ managers.each do |manager|
24
+ obiee.add_member(Runner::Manager.new(manager[0], manager[1].to_i, 'manager'))
25
+ end
26
+
27
+ # mike = Runner::Manager.new('mike',50, 'manager')
28
+
29
+ obiee.show_members
30
+
31
+ loop do
32
+ puts "\nHow many review cycles would you like to do?"
33
+ no_cycles = gets.chomp
34
+ case no_cycles
35
+ when /^\d+$/
36
+ obiee.review(no_cycles.to_i)
37
+ else
38
+ break
39
+ end
40
+ end
41
+
42
+ obiee.save_final_ratings
@@ -0,0 +1,14 @@
1
+ Frederick,185
2
+ Veronica,320
3
+ Dinesh,105
4
+ Rudra,200
5
+ Gopi,250
6
+ Ace,190
7
+ Adwait,165
8
+ Gerri,145
9
+ Remco,170
10
+ Srinath,90
11
+ Mike,210
12
+ David,410
13
+ Cathy,440
14
+ Damian,300
data/bin/managers.csv ADDED
@@ -0,0 +1,4 @@
1
+ mike,50
2
+ david,50
3
+ cathy,50
4
+ damian,50
data/bin/members.csv ADDED
@@ -0,0 +1,10 @@
1
+ frederick,50
2
+ veronica,50
3
+ dinesh,50
4
+ rudra,80
5
+ gopi,70
6
+ ace,70
7
+ adwait,60
8
+ gerri,70
9
+ remco,50
10
+ srinath,20
data/lib/Runner/die.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Runner
2
+ class Die
3
+ attr_reader :number
4
+
5
+ def initialize
6
+ roll
7
+ end
8
+
9
+ def roll
10
+ @number = rand(1..6)
11
+ end
12
+
13
+ if __FILE__ == $PROGRAM_NAME
14
+ dice = Die.new
15
+ puts dice.roll
16
+ puts dice.roll
17
+ puts dice.roll
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'team_member'
2
+
3
+ module Runner
4
+ class Manager < TeamMember
5
+
6
+ def initialize(name, rating, type='manager')
7
+ super(name, rating)
8
+ @type = type.capitalize
9
+ @factor = 2
10
+ end
11
+
12
+ def manager?
13
+ @type == 'Manager'
14
+ end
15
+
16
+ def rated_up(factor=1)
17
+ puts "OMG! This is a Manager!!!"
18
+ super(@factor)
19
+ end
20
+
21
+ def rated_down(factor=1)
22
+ puts "OMG! Bad news for the Manager!!!"
23
+ super(@factor)
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,86 @@
1
+ require_relative 'team_member'
2
+ require_relative 'die'
3
+ require 'CSV'
4
+
5
+ module Runner
6
+ class Project
7
+ attr_accessor :name
8
+ attr_reader :members
9
+
10
+ def initialize(name)
11
+ @name = name.capitalize
12
+ @members = []
13
+ end
14
+
15
+ def add_member(member)
16
+ @members << member
17
+ end
18
+
19
+ def show_members
20
+ puts "#{self.name} has the following members:"
21
+ sorted_members = @members.sort {|a,b| b.rating <=> a.rating}
22
+ sorted_members.each do |member|
23
+ puts "\t - #{member.name} rated #{member.rating}"
24
+ end
25
+
26
+ strong_members, weak_members = @members.partition{|member| member.strong?}
27
+ puts "\n\nThe STRONG team members are:"
28
+ strong_members.each do |member|
29
+ puts "#{member.name}*"
30
+ end
31
+ puts "\n\nThe WEAK team members are:"
32
+ weak_members.each do |member|
33
+ puts "#{member.name}~"
34
+ end
35
+
36
+ end
37
+
38
+ def review(cycles)
39
+ dice = Die.new
40
+ 1.upto(cycles) do |cycle|
41
+ puts "CYCLE #{cycle}:"
42
+ @members.each do |reviewer|
43
+ puts "Review being done by #{reviewer.name}:"
44
+ @members.each do |reviewee|
45
+ if reviewee != reviewer
46
+ puts "#{reviewer.name} is rating #{reviewee.name}"
47
+ case dice.roll
48
+ when 1,2
49
+ reviewee.rated_down
50
+ when 4,5,6
51
+ reviewee.rated_up
52
+ else
53
+ puts "#{reviewer.name} doesn't know enough about #{reviewee.name}'s work"
54
+ end
55
+ end
56
+ end # reviewee
57
+ end # reviewer
58
+ show_members
59
+ end # cycle
60
+ end # review
61
+
62
+ def save_final_ratings
63
+ CSV.open("#{Dir.home}/Runner/bin/final_ratings.csv", 'w') do |csv|
64
+ @members.each do |member|
65
+ csv_string = [member.name,member.rating.to_s]
66
+ csv << csv_string
67
+ end
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ if __FILE__ == $PROGRAM_NAME
74
+ suresh = TeamMember.new('suresh')
75
+ vijay = TeamMember.new('vijay')
76
+ ganesh = TeamMember.new('ganesh')
77
+ r12upgrade = Project.new("R12-Upgrade")
78
+ r12upgrade.add_member(suresh)
79
+ r12upgrade.add_member(vijay)
80
+ r12upgrade.add_member(cd ganesh)
81
+ r12upgrade.show_members
82
+ r12upgrade.review(2)
83
+ r12upgrade.save_final_ratings
84
+ end
85
+
86
+ end
@@ -0,0 +1,23 @@
1
+ module Runner
2
+ module Ratings
3
+
4
+ def rated_up(factor=1)
5
+ @rating += (15*factor)
6
+ @reviews += 1
7
+ puts "Awesome! #{@name} got rated up and is now #{@rating}"
8
+ end
9
+
10
+ def rated_down(factor=1)
11
+ if (@rating -= (15*factor)) < 0
12
+ @rating = 0
13
+ end
14
+ @reviews += 1
15
+ puts "Unluckly! #{@name} got rated down and is now #{@rating}"
16
+ end
17
+
18
+ def strong?
19
+ rating > 79
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+
2
+ require_relative 'ratings'
3
+
4
+ module Runner
5
+ class TeamMember
6
+ attr_reader :name
7
+ attr_accessor :rating
8
+ attr_accessor :reviews
9
+ include Ratings
10
+
11
+ def initialize (name, rating=10, reviews=0)
12
+ @name = name.capitalize
13
+ @rating = rating
14
+ @reviews = reviews
15
+ end
16
+
17
+ def to_s
18
+ "#{@name} has a rating of #{@rating} after having #{@reviews} reviews"
19
+ end
20
+
21
+ end
22
+
23
+ if __FILE__ == $PROGRAM_NAME
24
+ suresh = TeamMember.new('suresh')
25
+ puts suresh.to_s
26
+ 1.upto(20) do
27
+ suresh.rated_up
28
+ end
29
+ 1.upto(15) do
30
+ suresh.rated_down
31
+ end
32
+ puts suresh.to_s
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'spec_helper'
2
+ require 'runner/manager'
3
+
4
+ module Runner
5
+ describe Manager do
6
+ before do
7
+ $stdout = StringIO.new
8
+ @rating = 50
9
+ @manager = Manager.new('mandy', @rating, 'manager')
10
+ end
11
+
12
+ it "can be identified as a manager" do
13
+ @manager.manager?.should == true
14
+ end
15
+
16
+ it "increases by 30 when rated up" do
17
+ @manager.rated_up(2)
18
+ @manager.rating.should == @rating+(15*2)
19
+ end
20
+
21
+ it "decreases by 15 when rated down" do
22
+ @manager.rated_down(2)
23
+ @manager.rating.should == @rating-(15*2)
24
+ end
25
+
26
+ it "is set to zero (0) if rated down below zero" do
27
+ 1.upto(3) do
28
+ @manager.rated_down(2)
29
+ end
30
+ @manager.rating.should == 0
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'spec_helper'
2
+ require 'Runner/project'
3
+
4
+ module Runner
5
+ describe Project do
6
+ before do
7
+ # $stdout = StringIO.new
8
+ @name = "terry"
9
+ @name1 = 'john'
10
+ @rating = 25
11
+ @member = TeamMember.new(@name, @rating)
12
+ @member1 = TeamMember.new(@name1)
13
+ @project = Project.new('r12 upgrade')
14
+ @project.add_member(@member)
15
+ @project.add_member(@member1)
16
+ end
17
+
18
+ it "has a capitalized name" do
19
+ @project.name.should == 'R12 upgrade'
20
+ end
21
+
22
+ it "can have members added" do
23
+ @project.members[0].to_s.should == "Terry has a rating of 25 after having 0 reviews"
24
+ end
25
+
26
+ it "can have multiple members added" do
27
+ @project.members[1].to_s.should == "John has a rating of 10 after having 0 reviews"
28
+ end
29
+
30
+ context "when a high number is rolled" do
31
+ it "adds 15 to the members rating" do
32
+ Die.any_instance.stub(:roll).and_return(5)
33
+ @project.review(2)
34
+ @member.rating.should == @rating + (15*2)
35
+ end
36
+ end
37
+
38
+ context "when a low number is rolled" do
39
+ it "subtracts 15 from the members rating" do
40
+ Die.any_instance.stub(:roll).and_return(2)
41
+ @project.review(1)
42
+ @member.rating.should == @rating - 15
43
+ end
44
+ end
45
+
46
+ context "when the ratings are finished" do
47
+ it "it saves the final results to a file" do
48
+ Die.any_instance.stub(:roll).and_return(5)
49
+ @project.review(1)
50
+ @project.save_final_ratings
51
+ puts Dir.home
52
+ File.exist?("#{Dir.home}/runner/bin/final_ratings.csv").should be true
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,8 @@
1
+ RSpec.configure do |config|
2
+ config.expect_with :rspec do |c|
3
+ c.syntax = [:should, :expect]
4
+ end
5
+ config.mock_with :rspec do |c|
6
+ c.syntax = [:should, :expect]
7
+ end
8
+ end
@@ -0,0 +1,74 @@
1
+ require_relative 'spec_helper'
2
+ require 'Runner/team_member'
3
+
4
+ module Runner
5
+ describe TeamMember do
6
+ before do
7
+ $stdout = StringIO.new
8
+ @name = "terry"
9
+ @name1 = 'john'
10
+ @rating = 25
11
+ @member = TeamMember.new(@name, @rating)
12
+ @member1 = TeamMember.new(@name1)
13
+ end
14
+
15
+ it "has a capitalized name" do
16
+ @member.name.should == 'Terry'
17
+ end
18
+
19
+ it "has an initial rating" do
20
+ @member.rating.should == 25
21
+ end
22
+
23
+ it "has a string representation" do
24
+ @member.to_s.should == "Terry has a rating of 25 after having 0 reviews"
25
+ end
26
+
27
+ it "has a default rating when required" do
28
+ @member1.rating.should == 10
29
+ end
30
+
31
+ it "increases by 15 when rated up" do
32
+ @member.rated_up
33
+ @member.rating.should == @rating+15
34
+ end
35
+
36
+ it "decreases by 15 when rated down" do
37
+ @member.rated_down
38
+ @member.rating.should == @rating-15
39
+ end
40
+
41
+ it "is set to zero (0) if rated down below zero" do
42
+ 1.upto(3) do
43
+ @member.rated_down
44
+ end
45
+ @member.rating.should == 0
46
+ end
47
+
48
+ it "keeps count of the number of reviews a Team Member has had" do
49
+ @member1.rated_up
50
+ @member1.rated_down
51
+ @member1.rated_up
52
+ @member1.reviews.should == 3
53
+ end
54
+
55
+ context "with a rating > 79" do
56
+ before do
57
+ @member1 = TeamMember.new('danny', 80)
58
+ end
59
+ it "is a strong performer" do
60
+ @member1.should be_strong
61
+ end
62
+ end
63
+
64
+ context "with a rating < 50" do
65
+ before do
66
+ @member1 = TeamMember.new('danny', 49)
67
+ end
68
+ it "is a weak performer" do
69
+ @member1.should_not be_strong
70
+ end
71
+ end
72
+
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: PMO_mw
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Walsh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: |
28
+ This project represents a software development project.
29
+
30
+ The project has team members
31
+
32
+ The team members get regular ratings
33
+
34
+ The team members acquire new skills and improve existing skills over time
35
+
36
+ The project has a manager
37
+ email: michael.tom.walsh@gmail.com
38
+ executables:
39
+ - PMO
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - LICENSE
44
+ - README
45
+ - bin/PMO
46
+ - bin/final_ratings.csv
47
+ - bin/managers.csv
48
+ - bin/members.csv
49
+ - lib/Runner/die.rb
50
+ - lib/Runner/manager.rb
51
+ - lib/Runner/project.rb
52
+ - lib/Runner/ratings.rb
53
+ - lib/Runner/team_member.rb
54
+ - spec/Runner/manager_spec.rb
55
+ - spec/Runner/project_spec.rb
56
+ - spec/Runner/spec_helper.rb
57
+ - spec/Runner/team_member_spec.rb
58
+ homepage: https://au.linkedin.com/in/Monkee45
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '1.9'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.2.3
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: basic project and team members with random rating system
82
+ test_files:
83
+ - spec/Runner/manager_spec.rb
84
+ - spec/Runner/project_spec.rb
85
+ - spec/Runner/spec_helper.rb
86
+ - spec/Runner/team_member_spec.rb