moving zebra to zebra-broken
[zcc.git] / lib / zcc / subfieldeditor.rb
blobb1b2b45e3d90fe15f622310bd012d053f4fb3887
1 module MARC
3   #edit is a wrapper method to loop until done
4   class Record
7     def edit
8       puts "Subfield Editing"
9       puts "To denote which subfield you want to edit put it in the form of 245a.\nIn the case of repeating fields or subfields you will be prompted\nto choose the one you wish to edit. "
10       continue = true
11       while continue
12               fs = ask("What field and subfield would you like to edit (in form 245a) or quit?\n>   "){|q| q.readline = true}
13         if fs == 'q' || fs == 'quit'
14           continue = false
15         next
16         end
17         if !(fs =~/\d\d\d\w/ )
18           puts "That's not a valid value"
19           next
20         end
21         self.change_subfield(fs)
22       end
23     end
25     #edit_subfield is passed to a MARC::Record object and give a subfield
26     def change_subfield(fs)
27       field_subfield = subfield_parse(fs)
28       field = field_subfield[0]
29       subfield = field_subfield[1]
31       fields = self.find_all {|f| f.tag == field}
32       subfields = []
33       for field in fields
34               subfields << field.find_all {|s| s.code == subfield}
35       end
36       subfields.flatten!
37       if subfields.length > 1
38         i = 0
39         for subfield in subfields
40                 puts "#{i}\t#{subfield}"
41           i += 1
42         end
43               num_to_change = ask("Which subfield do you want to change?"){|q| q.readline = true}
44               subfield_to_change = subfields[num_to_change.to_i]
45       elsif subfields.length == 1
46         subfield_to_change = subfields[0]
47       elsif subfields.empty?
48         puts "No such subfield!"
49               return nil
50       end
51       
53       puts self; puts
55       print "Currently:\t"
56       puts subfield_to_change.value 
57       edit = ask("Your edit:\t"){|q| q.readline = true}
58       subfield_to_change.value = edit
59       puts; puts self; puts
61     end
63     #subfield_parse method for getting from '245a' to ['245','a']
64     def subfield_parse(combined)
65       field_subfield = []
66       field_subfield << combined[0, 3]
67       field_subfield << combined[3,1]
68     end
69   end
70 end