Class: SplitBills
- Inherits:
-
Object
- Object
- SplitBills
- Defined in:
- lib/split_bills.rb
Overview
require ‘money’ #if I get to supporting currency
Class Method Summary collapse
Instance Method Summary collapse
- #alnum_chk(string) ⇒ Object
- #assign_bill_to_mem(mem_key, bill_key, value) ⇒ Object
-
#assign_bill_ui ⇒ Object
ui element.
-
#calculate_and_set_split(bill_key) ⇒ Object
good.
- #calculate_monthly_split ⇒ Object
- #check_split(bill_key, mem_key) ⇒ Object
-
#check_split_total ⇒ Object
total members split for a given bill.
- #check_time ⇒ Object
- #currency_check(string) ⇒ Object
- #del_member!(del_mem) ⇒ Object
-
#eligible_member_test(mem_key, sub_key) ⇒ Object
[:scott_dodson], [:my_garbage].
-
#enter_bill ⇒ Object
Bill methods.
-
#enter_monthly_bill(bill_key, value) ⇒ Object
create monthly instance of bill and set total.
- #get_eligible_member_list(bill_key) ⇒ Object
-
#get_new_member ⇒ Object
Member methods - elements are (member_name), (member_unit), (…).
-
#get_split_bill_list(key) ⇒ Object
evaluate sub_keys for instance of “split” and store key = :rent, sub_key = :mon_rent.
- #gets_currency_from_user(question) ⇒ Object
- #gets_from_user(question) ⇒ Object
-
#initialize ⇒ SplitBills
constructor
attr_accessor :members, :new_bill.
- #list_bills ⇒ Object
-
#list_keys ⇒ Object
end.
-
#list_members ⇒ Object
remove?.
-
#list_members_bills(mem_key) ⇒ Object
working on this.
-
#load_all ⇒ Object
Startup shortcuts.
- #load_bills ⇒ Object
- #load_file(file, data) ⇒ Object
- #load_members ⇒ Object
- #load_monthly_bills ⇒ Object
- #load_monthly_split ⇒ Object
-
#name_to_sym(sym_name) ⇒ Object
good.
- #new_bill(name, split, value) ⇒ Object
- #new_member(first_name, last_name) ⇒ Object
- #remove_bill(del_bill) ⇒ Object
- #remove_bill_from_mem(mem_key, bill_key) ⇒ Object
- #remove_bill_from_mon(del_bill) ⇒ Object
-
#return_mem_sub_sym(sym) ⇒ Object
for getting number to split by.
- #return_sub_sym(sym) ⇒ Object
- #save_all ⇒ Object
- #save_bills ⇒ Object
-
#save_file(file, data) ⇒ Object
good.
- #save_members ⇒ Object
-
#save_monthly_bills ⇒ Object
Monthly bills methods.
-
#save_monthly_split ⇒ Object
Monthly split methods - Working.
- #set_mem_split(mem_key, mem_sub_key, split) ⇒ Object
- #set_save_path(path) ⇒ Object
- #show_bills ⇒ Object
-
#show_divide_by ⇒ Object
Test Methods.
- #show_mem_with_key ⇒ Object
- #show_members ⇒ Object
- #show_members_bills(mem_key) ⇒ Object
-
#show_members_split ⇒ Object
use after split values calculated.
- #show_monthly_bills ⇒ Object
-
#show_monthly_split ⇒ Object
show bill total, members split and total of members split.
-
#sym_to_name(name_sym) ⇒ Object
Class work methods.
Constructor Details
#initialize ⇒ SplitBills
attr_accessor :members, :new_bill
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/split_bills.rb', line 9 def initialize $members = Hash.new $bills = Hash.new $monthly_bills = Hash.new #$monthly_split = Hash.new @save_path = "./data/" @bills_file = "bills.yml" @members_file = "members.yml" date = Time.new @month_year = "#{date.year}_#{date.month}" @dated_split_file = "#{@month_year}_split.yml" @monthly_bills_file = "#{@month_year}_bills.yml" @divide_key = 0 @divide_by = Hash[:empty => 0] @mem_with_key = Array.new @split_bill_list = Array.new end |
Class Method Details
.hi ⇒ Object
369 370 371 |
# File 'lib/split_bills.rb', line 369 def self.hi puts "SplitBills, hello!" end |
Instance Method Details
#alnum_chk(string) ⇒ Object
326 327 328 |
# File 'lib/split_bills.rb', line 326 def alnum_chk(string) string.index(/[^[:alnum:]]/) end |
#assign_bill_to_mem(mem_key, bill_key, value) ⇒ Object
119 120 121 122 123 124 |
# File 'lib/split_bills.rb', line 119 def assign_bill_to_mem(mem_key, bill_key, value) work_mem = $members[mem_key] work_bill = $bills[bill_key] work_merge = work_mem.merge(work_bill) $members[mem_key] = work_merge end |
#assign_bill_ui ⇒ Object
ui element
116 117 |
# File 'lib/split_bills.rb', line 116 def assign_bill_ui #ui element end |
#calculate_and_set_split(bill_key) ⇒ Object
good
215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/split_bills.rb', line 215 def calculate_and_set_split(bill_key) # [:rent] # for each of these set split total and set in members bills sub_key = return_sub_sym(bill_key) mem_sub_key = return_mem_sub_sym(bill_key) bill_total = $monthly_bills[bill_key][sub_key][1] elig_mem = get_eligible_member_list(bill_key) div_by = elig_mem.count split = bill_total.to_f/div_by.to_f elig_mem.each { |mem_key| set_mem_split(mem_key, mem_sub_key, split) } end |
#calculate_monthly_split ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/split_bills.rb', line 179 def calculate_monthly_split # for each bill in monthly # get bills which are "split" # for each split bill # get members who owe # calculate number to split between # calculate what split equals # assign split value to member[:key][:subkey] # split_key_list = list_keys.each { |key| get_split_bill_list(key) } #[:rent], [:garbage] split_key_list.each { |key| get_split_bill_list(key) } @split_bill_list = @split_bill_list.uniq # for each bill in split_bill_list @split_bill_list.each { |key| calculate_and_set_split(key) } # eligible_members = split_key_list.each { |key| get_eligible_member_list(key) } #divide_by = (eligible_members.uniq).count #get_whole = split_key_list.each { |key| calculate_split_value(key) } #calculate_split = get_whole.to_f/divide_by.to_f end |
#check_split(bill_key, mem_key) ⇒ Object
251 252 253 254 255 256 257 258 |
# File 'lib/split_bills.rb', line 251 def check_split(bill_key, mem_key) sub_key = return_mem_sub_sym(bill_key) if $bills[bill_key][sub_key][1].to_f > $members[mem_key][sub_key][1] true else false end end |
#check_split_total ⇒ Object
total members split for a given bill
260 261 |
# File 'lib/split_bills.rb', line 260 def check_split_total #total members split for a given bill end |
#check_time ⇒ Object
322 323 324 |
# File 'lib/split_bills.rb', line 322 def check_time @month_year end |
#currency_check(string) ⇒ Object
330 331 332 333 |
# File 'lib/split_bills.rb', line 330 def currency_check(string) string.index(/[^\d]/) #string.index(/[^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$]/) #if I get to supporting currency end |
#del_member!(del_mem) ⇒ Object
74 75 76 |
# File 'lib/split_bills.rb', line 74 def del_member!(del_mem) $members.delete_if{ |m| m==del_mem } end |
#eligible_member_test(mem_key, sub_key) ⇒ Object
- :scott_dodson], [:my_garbage
234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/split_bills.rb', line 234 def eligible_member_test(mem_key, sub_key) # [:scott_dodson], [:my_garbage] elig_list = Array.new #sub_key = return_mem_sub_sym(key) # [:my_garbage] #puts "#{key}, #{sub_key}" #key work_test = $members[mem_key][sub_key][0] if work_test=="split" elig_list << mem_key else end elig_list end |
#enter_bill ⇒ Object
Bill methods
80 81 82 83 84 85 |
# File 'lib/split_bills.rb', line 80 def enter_bill #ui element name = gets_from_user("Bill name") split = gets_from_user("#{name} is split evenly or a fixed ammount (split/fixed)") value = gets_currency_from_user("if this is a fixed bill enter the ammount in whole numbers, otherwise enter 0") new_bill(name, split, value) end |
#enter_monthly_bill(bill_key, value) ⇒ Object
create monthly instance of bill and set total
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/split_bills.rb', line 142 def enter_monthly_bill(bill_key, value) #create monthly instance of bill and set total #get record from $bills #record_work = $bills[bill_key] # @divide_by = Hash[:empty => 0] # reset divide by count, used in splitting bills key_work = "mon_" + bill_key.to_s old_key = "my_" + bill_key.to_s old_key = old_key.to_sym new_key = key_work.to_sym copy_val = $bills[bill_key][old_key][0] $monthly_bills[bill_key] = { new_key =>[copy_val, value] } end |
#get_eligible_member_list(bill_key) ⇒ Object
227 228 229 230 231 232 |
# File 'lib/split_bills.rb', line 227 def get_eligible_member_list(bill_key) #eligible_members = Array.new mem_keys = $members.keys mem_sub_key = return_mem_sub_sym(bill_key) mem_keys.each { |mem_key| eligible_member_test(mem_key, mem_sub_key) } end |
#get_new_member ⇒ Object
Member methods - elements are (member_name), (member_unit), (…)
46 47 48 49 50 |
# File 'lib/split_bills.rb', line 46 def get_new_member # transfer to UI class/module first_name = gets_from_user("Members first name") last_name = gets_from_user("Members last name") new_member(first_name, last_name) end |
#get_split_bill_list(key) ⇒ Object
evaluate sub_keys for instance of “split” and store key = :rent, sub_key = :mon_rent
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/split_bills.rb', line 199 def get_split_bill_list(key) #evaluate sub_keys for instance of "split" and store key = :rent, sub_key = :mon_rent # for each bill in monthly # get bills which are "split" # evaluate sub_key[0] for "split" # save results into an array # #split_list = Array.new #$monthly_bills[key].each {||} sub_sym = return_sub_sym(key) # [:mon_garbage] if $monthly_bills[key][sub_sym][0]=="split" @split_bill_list << key else end @split_bill_list end |
#gets_currency_from_user(question) ⇒ Object
345 346 347 348 349 350 351 352 353 |
# File 'lib/split_bills.rb', line 345 def gets_currency_from_user(question) puts "#{question}:" user_in = gets.chomp if currency_check(user_in) != nil puts "no special characters please:" else user_in end end |
#gets_from_user(question) ⇒ Object
335 336 337 338 339 340 341 342 343 |
# File 'lib/split_bills.rb', line 335 def gets_from_user(question) puts "#{question}:" user_in = gets.chomp if alnum_chk(user_in) != nil puts "no special characters please:" else user_in end end |
#list_bills ⇒ Object
108 109 110 |
# File 'lib/split_bills.rb', line 108 def list_bills $bills.each { |key, value| puts "#{key}" } end |
#list_keys ⇒ Object
end
175 176 177 |
# File 'lib/split_bills.rb', line 175 def list_keys $monthly_bills.keys end |
#list_members ⇒ Object
remove?
69 70 |
# File 'lib/split_bills.rb', line 69 def list_members #remove? end |
#list_members_bills(mem_key) ⇒ Object
working on this
112 113 114 |
# File 'lib/split_bills.rb', line 112 def list_members_bills(mem_key) #working on this $members[mem_key].each { |key, value| puts "#{sym_to_name(key)}" } end |
#load_all ⇒ Object
Startup shortcuts
29 30 31 32 33 34 35 |
# File 'lib/split_bills.rb', line 29 def load_all load_members load_bills load_monthly_bills #load_monthly_split #populate_divide_by end |
#load_bills ⇒ Object
98 99 100 101 102 |
# File 'lib/split_bills.rb', line 98 def load_bills $bills = load_file(@bills_file, $bills) #load_work = load_file(@bills_file, $bills) #$bills = load_work end |
#load_file(file, data) ⇒ Object
310 311 312 313 314 315 316 |
# File 'lib/split_bills.rb', line 310 def load_file(file, data) if File.exists?("#{@save_path + file}") data = YAML.load_file("#{@save_path + file}") else data = File.new("#{@save_path + file}", "w") end end |
#load_members ⇒ Object
63 64 65 66 67 |
# File 'lib/split_bills.rb', line 63 def load_members $members = load_file(@members_file, $members) #load_work = load_file(@members_file, $members) #$members = load_work end |
#load_monthly_bills ⇒ Object
136 137 138 139 140 |
# File 'lib/split_bills.rb', line 136 def load_monthly_bills $monthly_bills = load_file(@monthly_bills_file, $monthly_bills) #load_work = load_file(@dated_bills_file, $monthly_bills) #$monthly_bills = load_work end |
#load_monthly_split ⇒ Object
164 165 166 167 168 |
# File 'lib/split_bills.rb', line 164 def load_monthly_split $monthly_split = load_file(@dated_split_file, $monthly_split) #load_work = load_file(@dated_split_file, $monthly_split) #$monthly_split = load_work end |
#name_to_sym(sym_name) ⇒ Object
good
302 303 304 |
# File 'lib/split_bills.rb', line 302 def name_to_sym(sym_name) #convert name to symbol sym_name.gsub(/\b\w/){|f| f.downcase}.gsub(' ', '_').to_sym end |
#new_bill(name, split, value) ⇒ Object
87 88 89 90 91 92 |
# File 'lib/split_bills.rb', line 87 def new_bill(name, split, value) bill_sym = name_to_sym(name) bill_name = "my_" + name.downcase bill_name_sym = name_to_sym(bill_name) $bills[bill_sym] = { bill_name_sym =>[split, value] } end |
#new_member(first_name, last_name) ⇒ Object
52 53 54 55 56 |
# File 'lib/split_bills.rb', line 52 def new_member(first_name, last_name) new_mem = [first_name, last_name].reject(&:empty?).join(' ') new_mem = name_to_sym(new_mem) $members[new_mem] = { :my_bills =>["total", 0] } end |
#remove_bill(del_bill) ⇒ Object
104 105 106 |
# File 'lib/split_bills.rb', line 104 def remove_bill(del_bill) $bills.delete_if{ |b| b==del_bill } end |
#remove_bill_from_mem(mem_key, bill_key) ⇒ Object
126 127 128 |
# File 'lib/split_bills.rb', line 126 def remove_bill_from_mem(mem_key, bill_key) $members[mem_key] = $members[mem_key].delete_if{ |m| m==bill_key } end |
#remove_bill_from_mon(del_bill) ⇒ Object
154 155 156 |
# File 'lib/split_bills.rb', line 154 def remove_bill_from_mon(del_bill) $monthly_bills.delete_if{ |b| b==del_bill } end |
#return_mem_sub_sym(sym) ⇒ Object
for getting number to split by
362 363 364 365 366 367 |
# File 'lib/split_bills.rb', line 362 def return_mem_sub_sym(sym) #for getting number to split by ("my_" + sym.to_s).to_sym #key_work = "my_" + sym.to_s #new_sym = key_work.to_sym #new_sym end |
#return_sub_sym(sym) ⇒ Object
355 356 357 358 359 360 |
# File 'lib/split_bills.rb', line 355 def return_sub_sym(sym) ("mon_" + sym.to_s).to_sym #key_work = "mon_" + sym.to_s #new_sym = key_work.to_sym #new_sym end |
#save_all ⇒ Object
37 38 39 40 41 42 |
# File 'lib/split_bills.rb', line 37 def save_all save_members save_bills save_monthly_bills #save_monthly_split end |
#save_bills ⇒ Object
94 95 96 |
# File 'lib/split_bills.rb', line 94 def save_bills save_file(@bills_file, $bills) end |
#save_file(file, data) ⇒ Object
good
306 307 308 |
# File 'lib/split_bills.rb', line 306 def save_file(file, data) File.open("#{@save_path}#{file}", "w"){ |f| f.write data.to_yaml } end |
#save_members ⇒ Object
58 59 60 61 |
# File 'lib/split_bills.rb', line 58 def save_members #File.open("./data/members.yml", "w"){ |f| f.write @members.to_yaml } save_file(@members_file, $members) end |
#save_monthly_bills ⇒ Object
Monthly bills methods
132 133 134 |
# File 'lib/split_bills.rb', line 132 def save_monthly_bills save_file(@dated_bills_file, $monthly_bills) end |
#save_monthly_split ⇒ Object
Monthly split methods - Working
160 161 162 |
# File 'lib/split_bills.rb', line 160 def save_monthly_split save_file(@dated_split_file, $monthly_split) end |
#set_mem_split(mem_key, mem_sub_key, split) ⇒ Object
247 248 249 |
# File 'lib/split_bills.rb', line 247 def set_mem_split(mem_key, mem_sub_key, split) $members[mem_key][mem_sub_key][1] = split end |
#set_save_path(path) ⇒ Object
318 319 320 |
# File 'lib/split_bills.rb', line 318 def set_save_path(path) @save_path = path end |
#show_bills ⇒ Object
280 281 282 |
# File 'lib/split_bills.rb', line 280 def show_bills $bills end |
#show_divide_by ⇒ Object
Test Methods
265 266 267 |
# File 'lib/split_bills.rb', line 265 def show_divide_by @divide_by end |
#show_mem_with_key ⇒ Object
269 270 271 |
# File 'lib/split_bills.rb', line 269 def show_mem_with_key @mem_with_key end |
#show_members ⇒ Object
288 289 290 |
# File 'lib/split_bills.rb', line 288 def show_members $members end |
#show_members_bills(mem_key) ⇒ Object
292 293 294 |
# File 'lib/split_bills.rb', line 292 def show_members_bills(mem_key) $members[mem_key] end |
#show_members_split ⇒ Object
use after split values calculated
277 278 |
# File 'lib/split_bills.rb', line 277 def show_members_split #use after split values calculated end |
#show_monthly_bills ⇒ Object
284 285 286 |
# File 'lib/split_bills.rb', line 284 def show_monthly_bills $monthly_bills end |
#show_monthly_split ⇒ Object
show bill total, members split and total of members split
273 274 275 |
# File 'lib/split_bills.rb', line 273 def show_monthly_split #show bill total, members split and total of members split $monthly_split end |
#sym_to_name(name_sym) ⇒ Object
Class work methods
298 299 300 |
# File 'lib/split_bills.rb', line 298 def sym_to_name(name_sym) #convert symbol to name name_sym.to_s.gsub!('_', ' ').gsub(/\b\w/){|f| f.upcase} end |