cdorganizer 0.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aa4b434035147f20ee64f5f93e2572185530995c
4
+ data.tar.gz: 38af5440f5158a8717182a75e6e4c221e144da1d
5
+ SHA512:
6
+ metadata.gz: 000d434848dc69c2ae485642f474fba8eceed793d2a84190fe1aee7f1e6c5b93f18166a569c76847743947a26d0e39da031c74c972ff735111f24922186f25b5
7
+ data.tar.gz: cc1cf9ff3d6bbfebb745795c2e532f67784b5dffcce3ecdba8aea0fccc29c285727f059997d40b1bbbae37a9110bba09ce95f33f1e955e033c278abeb3542123
data/cds/mycds.txt ADDED
@@ -0,0 +1,12 @@
1
+ BACH_SYMPHONIES_1_1985
2
+
3
+ CCR_GREATEST HITS_2_1975
4
+
5
+ CREED_WEATHERED_2_2001
6
+
7
+ CREED_HUMAN CLAY_2_1999
8
+
9
+ EAGLES_GREATEST HITS_2_1977
10
+
11
+ ENYA_SHEPHERD MOONS_8_1991
12
+
data/genres.txt ADDED
@@ -0,0 +1,8 @@
1
+ 1 Classical
2
+ 2 Rock
3
+ 3 Jazz
4
+ 4 Country
5
+ 5 Latin
6
+ 6 Pop
7
+ 7 Gospel
8
+ 8 Contemporary
@@ -0,0 +1,62 @@
1
+ class CDOrganizer
2
+ attr_accessor :cd_list, :table_header_stuff
3
+ def initialize
4
+ Struct.new("CD", :artist, :title, :year, :genre)
5
+ @cd_list = []
6
+ @table_header_stuff = 'Artist Title Genre Year'
7
+ end
8
+ def add(artist, title, year, genre)
9
+ @cd_list << Struct::CD.new(artist.upcase, title.upcase, year, genre)
10
+ @cd_list.sort! { |cd, other| [cd.artist, other.year.to_i] <=> [other.artist, cd.year.to_i] }
11
+ end
12
+ def delete(artist, title)
13
+ @cd_list.delete_if { |cd| cd.artist == artist.upcase && cd.title == title.upcase }
14
+ end
15
+ def search(input, flag)
16
+ puts
17
+ puts @table_header_stuff
18
+ count = 0
19
+ @cd_list.each do |cd|
20
+ case flag
21
+ when 'artist'
22
+ if cd.artist =~ /#{input}/i
23
+ puts build_cd_output(cd)
24
+ count += 1
25
+ end
26
+ when 'genre'
27
+ if cd.genre.to_i == input.to_i
28
+ puts build_cd_output(cd)
29
+ count += 1
30
+ end
31
+ end
32
+ end
33
+ puts
34
+ puts "#{count} record(s) found."
35
+ puts
36
+ end
37
+ def save(filename)
38
+ file = File.open("../cds/#{filename}",'w')
39
+ @cd_list.each { |cd| file.write("#{cd.artist}_#{cd.title}_#{cd.genre}_#{cd.year}\n") }
40
+ system('clear')
41
+ file.close
42
+ end
43
+ def to_s
44
+ puts
45
+ puts @table_header_stuff
46
+ @cd_list.each do |cd|
47
+ puts build_cd_output(cd)
48
+ end
49
+ puts
50
+ end
51
+ def build_cd_output(cd)
52
+ print_space = 17
53
+ s = ''
54
+ s << cd.artist
55
+ (print_space-cd.artist.length).times { s << ' ' }
56
+ s << cd.title
57
+ (print_space-cd.title.length).times { s << ' ' }
58
+ s << cd.genre.to_s
59
+ (print_space-cd.genre.to_s.length).times { s << ' ' }
60
+ s << cd.year.to_s
61
+ end
62
+ end
data/lib/genres.rb ADDED
@@ -0,0 +1,4 @@
1
+ def print_genres
2
+ puts '# Genre'
3
+ File.open('../genres.txt','r').each_line { |line| puts line }
4
+ end
data/lib/main.rb ADDED
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative 'menu.rb'
4
+ require_relative 'cd_organizer.rb'
5
+ require_relative 'genres.rb'
6
+
7
+ print_space = 10
8
+ saved = true
9
+ system 'clear'
10
+
11
+ cd_organizer = CDOrganizer.new
12
+ print 'Please enter the filename for your CD storage collection.
13
+ If you do not yet have a collection, enter a filename where you wish your CDs to be stored.
14
+ Filename: '
15
+
16
+ # check if file exists
17
+ filename = gets.chomp
18
+ if File.file? "../cds/#{filename}"
19
+ File.open("../cds/#{filename}", 'r').each_line do |line|
20
+ begin
21
+ info = line.split('_')
22
+ cd_organizer.add(info[0],info[1],info[3],info[2])
23
+ rescue NoMethodError
24
+ # do nothing, skip this line
25
+ end
26
+ end
27
+ cd_organizer.to_s
28
+ else
29
+ puts
30
+ puts "There are no CDs in the collection"
31
+ puts
32
+ end
33
+
34
+ loop do
35
+ print_menu
36
+ case gets.chomp.to_i
37
+ when 1
38
+ print 'Enter the artist: '
39
+ artist = gets.chomp
40
+ print 'Enter the CD title: '
41
+ title = gets.chomp
42
+ print 'Enter the year of the CD: '
43
+ year = gets.chomp.to_i
44
+ print_genres
45
+ print 'Enter the genre number for this CD: '
46
+ genre = gets.chomp.to_i
47
+ cd_organizer.add(artist,title,year,genre)
48
+ cd_organizer.to_s
49
+ saved = false
50
+ when 2
51
+ cd_organizer.to_s
52
+ when 3
53
+ puts 'Search by (1) Artist or (2) Genre?'
54
+ case gets.chomp.to_i
55
+ when 1
56
+ print 'Enter Arist (all or partial name): '
57
+ input = gets.chomp
58
+ cd_organizer.search(input, 'artist')
59
+ when 2
60
+ print_genres
61
+ print 'Enter Genre # for which to search: '
62
+ input = gets.chomp.to_i
63
+ cd_organizer.search(input, 'genre')
64
+ end
65
+ when 4
66
+ puts 'Enter the title and artist of the CD to delete'
67
+ print 'Artist: '
68
+ artist = gets.chomp
69
+ print 'Title: '
70
+ title = gets.chomp
71
+ orig_size = cd_organizer.cd_list.length
72
+ new_size = cd_organizer.delete(artist,title).length
73
+ if orig_size == new_size
74
+ puts
75
+ puts "**#{artist.upcase}/#{title.upcase} was not found in the list**"
76
+ cd_organizer.to_s
77
+ else
78
+ cd_organizer.to_s
79
+ saved = false
80
+ end
81
+ when 5
82
+ cd_organizer.save(filename)
83
+ puts
84
+ puts '**Save Successful!**'
85
+ puts
86
+ saved = true
87
+ when 9
88
+ if !saved
89
+ puts '**WARNING** Your CD collection has changed since you last saved to disk.'
90
+ print 'Save your changes? (y/n): '
91
+ case gets.chomp
92
+ when 'y','Y','yes','Yes','YES'
93
+ cd_organizer.save(filename)
94
+ break
95
+ when 'n','N','no','No','NO'
96
+ break
97
+ end
98
+ end
99
+ break
100
+ end
101
+ end
data/lib/menu.rb ADDED
@@ -0,0 +1,9 @@
1
+ def print_menu
2
+ puts "** CD Organizer -- Enter you choice **
3
+ 1. Enter a New CD
4
+ 2. View all CDs
5
+ 3. Search for a CD
6
+ 4. Delete a CD
7
+ 5. Save CD collection to disk
8
+ 9. Exit the program"
9
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cdorganizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Logan Bond
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A second attempt at gems with implementation of a CD Organizer
14
+ email: bon56277@obu.edu
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - cds/mycds.txt
20
+ - genres.txt
21
+ - lib/cd_organizer.rb
22
+ - lib/genres.rb
23
+ - lib/main.rb
24
+ - lib/menu.rb
25
+ homepage:
26
+ licenses:
27
+ - Nonstandard
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.6.6
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: An implementation of a CD Organizer
49
+ test_files: []