party 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ require "party"
2
+
3
+ fancy_mode
4
+
5
+ participants "Toon", "Rob","Willem", "Johan"
6
+
7
+ "Toon".bought "Booze", 34
8
+ "Rob".bought "Veggies" , 40
9
+ "Toon".bought "Meat" , 50
10
+ "Willem".bought "Nonsense" ,1
11
+
12
+ summarize
@@ -0,0 +1,8 @@
1
+ require "party"
2
+
3
+ participants 'Me', 'Myself', 'I'
4
+
5
+ bought "Me", "Booze", 34
6
+ bought "Myself", "Gift", 20
7
+
8
+ summarize
@@ -0,0 +1,72 @@
1
+ module Party
2
+
3
+ def participants(*args)
4
+ @participants ||= args.flatten
5
+ end
6
+
7
+ def bought(name,item, price)
8
+ list[name] << item if item
9
+ money[name] += price
10
+ end
11
+
12
+ alias bought2 bought
13
+ # monkey-patches String class to have a buys method
14
+ def fancy_mode
15
+ # some minor modifications to the String class ;)
16
+ String.class_eval do
17
+ define_method(:bought) do |*args|
18
+ bought2(self,*args)
19
+ end
20
+ end
21
+ end
22
+
23
+ def summarize(rounding=2)
24
+ print_bill
25
+ puts
26
+ print_money_due(rounding)
27
+ end
28
+
29
+ private
30
+
31
+ def print_money_due(rounding)
32
+ puts "Final balance:"
33
+ participants.each do |par|
34
+ diff = cost_per_participant - money[par]
35
+ print par
36
+ if diff > 0
37
+ print " needs to pay "
38
+ else
39
+ print " has to receive "
40
+ end
41
+ puts "#{diff.abs.round(rounding)} euro"
42
+ end
43
+ end
44
+
45
+ def print_bill
46
+ puts "---Bill---"
47
+ money.keys.each do |par|
48
+ puts "#{par}:\t#{money[par]}\tspend on: #{list[par] * ',' }"
49
+ end
50
+ puts "----------"
51
+ puts "total:\t#{total_cost}"
52
+ end
53
+
54
+ def cost_per_participant
55
+ total_cost.to_f/participants.size
56
+ end
57
+
58
+ def total_cost
59
+ money.values.inject(&:+)
60
+ end
61
+
62
+ def money
63
+ @@money_hash ||= Hash.new(0)
64
+ end
65
+
66
+ def list
67
+ @@list_hash ||= Hash.new() {|h,k| h[k] = []}
68
+ end
69
+
70
+ end
71
+ # so methods can be used like normal
72
+ include Party
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: party
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Toon Willems
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-29 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: a tool to aid calculating how much everybody should pay at a party
17
+ email: willemstoon@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/party.rb
26
+ - examples/example.rb
27
+ - examples/me_myself_i.rb
28
+ has_rdoc: true
29
+ homepage:
30
+ licenses: []
31
+
32
+ post_install_message:
33
+ rdoc_options: []
34
+
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 1.9.1
42
+ version:
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ requirements: []
50
+
51
+ rubyforge_project:
52
+ rubygems_version: 1.3.5
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: easy money splitting
56
+ test_files: []
57
+