From: Ilmari Heikkinen Date: 2006-04-02T02:07:37+09:00 Subject: [ANN] blog.rb 1.0 ------=_Part_2573_26931711.1143911253126 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Content-Disposition: inline YmxvZy5yYiAxLjAKCkJsb2dnaW5nIC0gdGhlIFJ1YnkgV2F5LgoKYmxvZy5yYiBpcyBhIGZ1bGwt aGVhcCwgb3Blbi1zb3VyY2UgYmxvZyBmcmFtZXdvcmsgaW4gUnVieSBmb3Igd3JpdGluZwpyZWFs LXdvcmxkIGJsb2dzIHdpdGggam95IGFuZCBsZXNzIGtleXN0cm9rZXMgdGhhbiBtb3N0IGZyYW1l d29ya3MKc3BlbmQgZG9pbmcgbWFya3VwIHNpdC11cHMuCgoKRmVhdHVyZXMgb2YgYmxvZy5yYjoK Ci0gYmxvZy5yYiBoYXMgYSBzaW1wbGUgc3ludGF4LCBwYXJ0aWFsbHkgaW5zcGlyZWQgYnkgdmkg YW5kIGVkLgoKLSBibG9nLnJiIGhhcyBleGNlcHRpb24gaGFuZGxpbmcgZmVhdHVyZXMsIGxpa2Ug ZW1hY3Mgb3IgbmFubywgdG8gbWFrZQppdCBlYXN5IHRvIGhhbmRsZSBlcnJvcnMuCgotIGJsb2cu cmIncyBvcGVyYXRvcnMgYXJlIHN5bnRheCBzdWdhciBmb3IgdGhlIHJlZ2V4cHMuIFlvdSBjYW4K cmVkZWZpbmUgdGhlbSBlYXNpbHkuCgotIGJsb2cucmIgaXMgYSBjb21wbGV0ZSwgZnVsbCwgcHVy ZSBsaW5lIG9yaWVudGVkIGJsb2c6IExPQi4gVGhpcwptZWFucyBhbGwgZGF0YSBpbiBibG9nLnJi IGlzIGEgbGluZSwgaW4gdGhlIHNlbnNlIG9mIGNhdDogbm8KZXhjZXB0aW9ucy4gRXhhbXBsZTog SW4gYmxvZy5yYiwgdGhlIG51bWJlciAxIGlzIGEgbGluZS4KCi0gYmxvZy5yYidzIExPIGlzIGNh cmVmdWxseSBkZXNpZ25lZCB0byBiZSBib3RoIGNvbXBsZXRlIGFuZCBvcGVuIGZvcgppbXByb3Zl bWVudHMuIEV4YW1wbGU6IGJsb2cucmIgaGFzIHRoZSBhYmlsaXR5IHRvIGFkZCBjaGFyYWN0ZXJz IHRvIGEKZmlsZSwgb3IgZXZlbiB0byBhIGxpbmUgZHVyaW5nIHJ1bnRpbWUuIFNvLCBpZiBuZWVk ZWQsIGEgbGluZSBvZiBvbmUKZmlsZSAqY2FuKiBiZWhhdmUgZGlmZmVyZW50bHkgZnJvbSBvdGhl ciBsaW5lcyBvZiB0aGUgc2FtZSBmaWxlLgoKLSBibG9nLnJiIGZlYXR1cmVzIHNpbmdsZSBsaW5l LWZlZWQgb25seSwgKm9uIHB1cnBvc2UqLgoKLSBibG9nLnJiIGZlYXR1cmVzIHRydWUgYnl0ZXMu IE5vdCBqdXN0IG9uZS1ieXRlIGNoYXJhY3RlcnMsIGJ1dAp3aXRob3V0IGVuY29kaW5ncy4KCi0g YmxvZy5yYiBmZWF0dXJlcyBudW1iZXJzIGluIGl0cyBzeW50YXggKGNoYXJhY3RlcnMgaW4gMC4u NSByYW5nZSBvcgo2Li45IHJhbmdlKS4gVGhlc2UgbnVtYmVycyBjYW4gYmUgcGFzc2VkIHRvIHRo ZSBvcGVyYXRvcnMsIG9yCmNvbnZlcnRlZCBpbnRvIGxpbmVzLgoKLSBibG9nLnJiIGZlYXR1cmVz IGEgdHJ1ZSBtb2RpZnktYW5kLW92ZXJ3cml0ZSBJTyBzdWJzeXN0ZW0uIEl0IHdvcmtzCndpdGgg YWxsIGJsb2cucmIgbGluZXMuIFlvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgbWFpbnRhaW5p bmcgcG9zdApjb3VudHMgaW4gY29uY2F0ZW5hdGVkIGZpbGVzLiBUaGlzIGlzIGJldHRlciBmb3Ig eW91ciBoZWFsdGguIDstKQoKLSBXcml0aW5nIHRleHQgZmlsZXMgaW4gYmxvZy5yYiBpcyBlYXNp ZXIgdGhhbiBpbiBCbG9nZ2VyIG9yCk1vdmluZ1R5cGUsIGR1ZSBwYXJ0bHkgdG8gdGhlIElPIHN1 YnN5c3RlbSwgYW5kIHBhcnRseSB0byB0aGUgZmluZQpmaWxlIEFQSS4gUGlwZSBpbnRlcmZhY2Ug aXMgYWxzbyBhdmFpbGFibGUuCgotIExpbmVzIGluIGJsb2cucmIgY2FuIChhbmQgc2hvdWxkKSBi ZSB1c2VkIHdpdGhvdXQgY291bnRpbmcgdGhlaXIKaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uIFRo ZXJlICphcmUqIHVud3JhcHBlZCBsaW5lcyAoc2hvcnRlciB0aGFuCnlvdXIgdGVybWluYWwgd2lk dGgpIGFuZCB3cmFwcGVkIGxpbmVzIChvdmVyLXdpZGUpLCBidXQgeW91IG5lZWQgbm90CndvcnJ5 IG92ZXIgd2hpY2ggb25lIGlzIHVzZWQgY3VycmVudGx5LiBJZiBhIGNoYXJhY3RlciBjb3VudCBp cyBzaG9ydAplbm91Z2gsIGEgbGluZSBpcyBhbiB1bndyYXBwZWQgbGluZSwgb3RoZXJ3aXNlIGl0 IGlzIGEgd3JhcHBlZCBsaW5lLgpDb252ZXJzaW9uIG9jY3VycyBhdXRvbWF0aWNhbGx5LgoKLSBi bG9nLnJiIG5lZWRzIG5vIGNoYXJhY3RlciBkZWNsYXJhdGlvbnMuIEl0IHVzZXMgc2ltcGxlIG5h bWluZwpjb252ZW50aW9ucyB0byBkZW5vdGUgdGhlIGNhc2Ugb2YgdmFyaWFibGVzLiBFeGFtcGxl czogc2ltcGxlICdhJyA9Cmxvd2VyY2FzZSwgJ0EnID0gdXBwZXJjYXNlLCAnIScgPSBwdW5jdHVh dGlvbi4gU28gaXQgaXMgYWxzbyBub3QKbmVjZXNzYXJ5IHRvIHVzZSBhIHRpcmVzb21lICdsaW5l X251bWJlci4nIHByZXBlbmRlZCB0byBldmVyeSB3b3JkLgoKLSBibG9nLnJiIGNhbiBsb2FkIGl0 cyBkYXRhIGZpbGUgaWYgYW4gT1MgYWxsb3dzLgoKLSBibG9nLnJiIGZlYXR1cmVzIGJsb2cgaW5k ZXBlbmRlbnQgbmV0d29ya2luZy4gVGh1cywgZm9yIGFsbApwbGF0Zm9ybXMgb24gd2hpY2ggYmxv Zy5yYiBydW5zLCB5b3UgYWxzbyBoYXZlIHRoZSBwb3NzaWJpbGl0eSBvZgpuZXR3b3JraW5nLCBy ZWdhcmRsZXNzIG9mIGlmIGJsb2cucmIgc3VwcG9ydHMgaXQgb3Igbm90LCBldmVuIG9uCk1TLURP UyEgOy0pCgotIGJsb2cucmIgaXMgaGlnaGx5IHBvcnRhYmxlOiBpdCBpcyBkZXZlbG9wZWQgbW9z dGx5IGluIH4vLCBidXQgd29ya3MKaW4gbWFueSB0eXBlcyBvZiAvaG9tZSwgYzpcLCBoOlxEb2N1 bWVudHMgYW5kIFNldHRpbmdzXCwgfi9Eb2N1bWVudHMsCmZpbGVzOm15X2Jsb2c6LCBldGMuCgoK TElDRU5TRTogUnVieSdzCg== ------=_Part_2573_26931711.1143911253126 Content-Type: application/x-ruby; name=blog.rb Content-Transfer-Encoding: 7bit X-Attachment-Id: file0 Content-Disposition: attachment; filename="blog.rb" begin require 'readline' rescue LoadError module Readline def self.readline(prefix=nil) if prefix STDOUT.print prefix STDOUT.flush end gets.chomp end end end class Blog attr_accessor :entries def initialize(filename) @filename = filename if File.exist?(filename) @entries = File.readlines(filename) else @entries = "" end end def view(index=nil) if index return unless index.between?(0,entries.size-1) entry = entries[index] display_entry entry, index else entries.each_with_index{|entry,i| display_entry entry, i } end end def display_entry entry, index=nil print "#{index}. " if index entry.display end def new entry = Readline.readline("Give new entry: ") + "\n" entries << entry save puts "Committed new." end def edit(entry=nil) loop do case entry when /^c/: return when /[0-9]+/ entry = entry.to_i break if entry.between?(0, entries.size-1) else view end entry = Readline.readline("Give entry id (0-#{entries.size-1}, "+ "enter for list): ") end orig_entry = entries[entry] display_entry orig_entry edited_entry = Readline.readline("Give edited entry (enter to delete): ") + "\n" if edited_entry == "\n" entries.delete_at(entry) save puts "Deleted entry." elsif orig_entry == edited_entry puts "No edits made." else entries[entry] = edited_entry save puts "Committed edit." end end def save File.open(@filename, "w"){|f| f.write @entries } end end if __FILE__ == $0 blog_dat = "blog.dat" blog = Blog.new(blog_dat) begin loop do mode = Readline.readline("new/edit|entry_id/quit/[view]> "). strip.downcase case mode when /^q/ break when /^n/ blog.new when /^e/ blog.edit when /^[0-9]/ blog.edit mode else blog.view end end rescue Exception puts end end ------=_Part_2573_26931711.1143911253126--