swim_roster 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/bin/roster +28 -0
  2. data/lib/classlist.rb +31 -0
  3. data/lib/kid.rb +29 -0
  4. metadata +49 -0
data/bin/roster ADDED
@@ -0,0 +1,28 @@
1
+ #!/user/bin/env ruby
2
+ require_relative '../lib/classlist'
3
+
4
+ path = ARGV.shift || "/Users/zarchary2/mystuff/RubyClass/final_project/lib/roster_test(2).csv"
5
+ roster = ClassList.new path
6
+
7
+ io = $stdout
8
+ IO.popen("pbcopy", "w") { |io|
9
+ roster.sessions.each do |session|
10
+ kids = roster.kids.select { |kid| kid.pro_session == session }
11
+
12
+ max = kids.first.max_class_size
13
+
14
+ bucket_count = (kids.size / max).ceil
15
+ avg = kids.size.to_f / bucket_count
16
+ classes = kids.each_slice(avg.ceil).to_a
17
+
18
+ io.puts session
19
+ io.puts
20
+ classes.each do |klass|
21
+ klass.each do |kid|
22
+ io.puts kid.name
23
+ end
24
+ io.puts
25
+ end
26
+
27
+ end
28
+ }
data/lib/classlist.rb ADDED
@@ -0,0 +1,31 @@
1
+ require_relative './kid'
2
+ require 'csv'
3
+
4
+ class ClassList
5
+
6
+ attr_accessor :kids
7
+
8
+ def initialize(file)
9
+ @kids = []
10
+ CSV.foreach(file, :headers => true) do |row|
11
+ full_name = "#{row["First Name"]} #{row["Last Name"]}"
12
+ @kids << Kid.new(full_name, row["Program"], row["Session"])
13
+ end
14
+ end
15
+
16
+ def sessions
17
+ @kids.reject! { |kid| kid.pro_session.nil? or kid.pro_session.empty? }
18
+ @kids.map { |kid| kid.pro_session }.uniq.sort
19
+ end
20
+
21
+ # def class_max level
22
+ # if level.count <= 5
23
+ # level.count
24
+ # elsif level.count >= 6 <= 10
25
+ # level.count/2
26
+ # else level.count >= 11 <= 15
27
+ # level.count/3
28
+ # end
29
+ # end
30
+
31
+ end
data/lib/kid.rb ADDED
@@ -0,0 +1,29 @@
1
+
2
+ class Kid
3
+ attr_accessor :name, :program, :session
4
+
5
+ def initialize(name, program, session)
6
+ @name = name
7
+ @program = program
8
+ @session = session
9
+ end
10
+
11
+ def pro_slice
12
+ # "Swim Lessons, Preschool 1 - Pike" => "P1 Pike"
13
+ @program.slice(@program.index(/,/) + 2).to_s + @program.slice(@program.index(/\d/), @program.length).to_s
14
+ end
15
+
16
+ def pro_session
17
+ if @program.nil? or @session.nil?
18
+ return ""
19
+ else
20
+ @session.to_s + " " + self.pro_slice
21
+ end
22
+
23
+ end
24
+
25
+ def max_class_size
26
+ 5.0
27
+ end
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swim_roster
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Zachary Bryan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-07 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: build a swim lesson roster
15
+ email: zachx1@gmail.com
16
+ executables:
17
+ - roster
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/classlist.rb
22
+ - lib/kid.rb
23
+ - bin/roster
24
+ homepage: http://rubygems.org/gems/zb_roster
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.23
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: swim lesson roster builder
48
+ test_files: []
49
+ has_rdoc: