1 #!/usr/bin/env ruby
     
2 
     3 $books_path = '/home/dave/wiki/ratf/src/b'
     
4 
     5 if ARGV.count < 1
     
6   puts "ERROR: You gotta send me a line of text!"
     
7   exit 1
     
8 end
     
9 
    10 bookline = ARGV[0]
    
11 
    12 date, title, author, pages = nil
    
13 
    14 # Now the input, bookline, is one of two things:
    
15 # * A journal entry
    
16 # * A website link
    
17 if bookline.match?(/^[0-9-]+  /)
    
18   bits = bookline.rstrip.split(/\s{2,}/)
    
19   if bits.size != 4
    
20     puts "ERROR: Line didn't match expected book journal format:"
    
21     puts bookline
    
22     exit 1
    
23   end
    
24   date, title, author, pages = bits
    
25 
    26   # =======================================================
    
27   # Journal entry, create website link
    
28 
    29   index_page = "#{$books_path}/index.adoc"
    
30   index_page_temp = "#{$books_path}/index.adoc.temp"
    
31   fname = title.downcase.gsub(/ +/, '_').gsub(/[^a-z0-9_-]+/, '')
    
32 
    33   # Read lines of existing books page, collect
    
34   my_lines = []
    
35   File.foreach(index_page) do |line|
    
36     my_lines << line
    
37 
    38     # insert new link in books page
    
39     if line.match(/ENTRIES_HERE/)
    
40       my_lines << "* #{date} link:#{fname}[#{title}] by #{author}, #{pages} pages"
    
41     end
    
42   end
    
43 
    44   # Write new books page with link added
    
45   File.open(index_page_temp, 'w') do |f|
    
46     f.puts my_lines # writes all lines
    
47   end
    
48 
    49   # if the OLD page is bigger than the new one, do NOT continue!
    
50   if File.size(index_page) > File.size(index_page_temp)
    
51     puts "ERROR: Books page is smaller after writing link...so something went wrong!"
    
52     puts "Check it at: #{index_page_temp}"
    
53     puts "Exiting and not doing anything else."
    
54     exit 1
    
55   end
    
56 
    57   # the NEW page is bigger than the old, so replacing old with new
    
58   File.unlink(index_page)
    
59   File.rename(index_page_temp, index_page)
    
60 
    61   # now write the filename out so vim can open it
    
62   puts index_page
    
63 
    64 elsif bits = bookline.match(/^\* ([0-9-]+) link:(.*)\[(.*)\] by (.*), (\d+) pages/)
    
65 
    66   # =======================================================
    
67   # Books page link. Create review page.
    
68 
    69   _, date, fname, title, author, pages = bits.to_a
    
70   fname = "#{$books_path}/#{fname}.adoc"
    
71 
    72   if File.exist?(fname)
    
73     puts "ERROR: #{fname} already exists."
    
74     exit 1
    
75   end
    
76 
    77   # Write new books page with link added
    
78   File.open(fname, 'w') do |f|
    
79     f.puts <<~HTML
    
80       :title: Dave's book review for #{title}
    
81       :created: #{Time.new.strftime('%Y-%m-%d')}
    
82       :updated:
    
83 
    84       ++++
    
85       <div style="background-color: #EFC;">
    
86       Book: <b>#{title}</b><br>
    
87       Author: <b>#{author}</b><br>
    
88       Pages: <b>#{pages}</b><br>
    
89       Finished reading: <b>#{date}</b><br>
    
90       Back to <a href=".">my books page</a> for more reviews, etc.
    
91       </div>
    
92       ++++
    
93 
    94       == My Review
    
95     HTML
    
96   end
    
97 
    98   # Return file name so vim can open it
    
99   puts fname
   
100 
   101   exit
   
102 else
   
103   puts "ERROR: Input param does not look like journal entry or web link!"
   
104   exit 1
   
105 end