runeblog 0.3.05 → 0.3.06
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 +4 -4
- data/lib/helpers-blog.rb +4 -51
- data/lib/liveblog.rb +5 -6
- data/lib/lowlevel.rb +33 -9
- data/lib/post.rb +16 -38
- data/lib/repl.rb +8 -22
- data/lib/runeblog.rb +18 -60
- data/lib/runeblog_version.rb +1 -2
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 70bd6e1889a61c19c606616bcb0a4ace993b9f7cb7c993a9e4c2c41e7f47a7f9
         | 
| 4 | 
            +
              data.tar.gz: c178b2630acfadbeddbbd51dc050bf41cf636372421fdda3b9003991f31c2b26
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 6c736c15fe20f800cc6393e5ad008983c0cb15eb2e90b1db60ac02361fb3ff65fc526266009d15f9ab1b99324055388bf52c9d487101e2ce6ce3dab1f3b1ba97
         | 
| 7 | 
            +
              data.tar.gz: 7eb2bc828f8969fd15524ec4a010de4ecda475e636dc6fd0b8e4cbc0736def5aaf504db801440059644d1080423807f5abc078e79047d9b19cb8c4b79e336e26
         | 
    
        data/lib/helpers-blog.rb
    CHANGED
    
    | @@ -22,16 +22,10 @@ module RuneBlog::Helpers | |
| 22 22 | 
             
                  dir = @root/:views/self.view/:settings
         | 
| 23 23 | 
             
                end
         | 
| 24 24 | 
             
                file = dir/"features.txt"
         | 
| 25 | 
            -
                 | 
| 26 | 
            -
                 | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                  next if line =~ /^ *#/  # leading
         | 
| 30 | 
            -
                  next if line.empty?
         | 
| 31 | 
            -
                  name, status = line.split
         | 
| 32 | 
            -
                  hash[name] = (status == "1")  # enabled
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
                @features = hash
         | 
| 25 | 
            +
                pairs = read_pairs(file)
         | 
| 26 | 
            +
                enabled = {}
         | 
| 27 | 
            +
                pairs.each {|k,v| enabled[k] = (v == "1") }
         | 
| 28 | 
            +
                @features = enabled
         | 
| 35 29 | 
             
              end
         | 
| 36 30 |  | 
| 37 31 | 
             
              def get_repo_config
         | 
| @@ -72,47 +66,6 @@ module RuneBlog::Helpers | |
| 72 66 | 
             
                stop_RubyText rescue nil
         | 
| 73 67 | 
             
              end
         | 
| 74 68 |  | 
| 75 | 
            -
              def read_config(file, *syms)
         | 
| 76 | 
            -
                log!(enter: __method__, args: [file, *syms], level: 3)
         | 
| 77 | 
            -
                lines = File.readlines(file).map(&:chomp)
         | 
| 78 | 
            -
                obj = ::OpenStruct.new
         | 
| 79 | 
            -
                skip = ["\n", "#", "."]
         | 
| 80 | 
            -
                lines.each do |line|
         | 
| 81 | 
            -
                  next if skip.include?(line[0])
         | 
| 82 | 
            -
                  key, val = line.split(/: +/, 2)
         | 
| 83 | 
            -
                  obj.send(key+"=", val)
         | 
| 84 | 
            -
                end
         | 
| 85 | 
            -
                return obj if syms.empty?
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                vals = []
         | 
| 88 | 
            -
                if syms.empty?
         | 
| 89 | 
            -
                  vals = obj.to_hash.values
         | 
| 90 | 
            -
                else
         | 
| 91 | 
            -
                  syms.each {|sym| vals << obj.send(sym) }
         | 
| 92 | 
            -
                end
         | 
| 93 | 
            -
                return vals
         | 
| 94 | 
            -
              rescue => err
         | 
| 95 | 
            -
                puts "Can't read config file '#{file}': #{err}"
         | 
| 96 | 
            -
                puts err.backtrace.join("\n")
         | 
| 97 | 
            -
                puts "dir = #{Dir.pwd}"
         | 
| 98 | 
            -
                stop_RubyText
         | 
| 99 | 
            -
              end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
              def try_read_config(file, hash)
         | 
| 102 | 
            -
                log!(enter: __method__, args: [file, hash], level: 3)
         | 
| 103 | 
            -
                return hash.values unless File.exist?(file)
         | 
| 104 | 
            -
                vals = read_config(file, *hash.keys)
         | 
| 105 | 
            -
                vals
         | 
| 106 | 
            -
              end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
              def write_config(obj, file)
         | 
| 109 | 
            -
                log!(enter: __method__, args: [obj, file], level: 2)
         | 
| 110 | 
            -
                hash = obj.to_h
         | 
| 111 | 
            -
                File.open(file, "w") do |out|
         | 
| 112 | 
            -
                  hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
         | 
| 113 | 
            -
                end
         | 
| 114 | 
            -
              end
         | 
| 115 | 
            -
             | 
| 116 69 | 
             
              def retrieve_views   # read from filesystem
         | 
| 117 70 | 
             
                log!(enter: __method__, level: 3)
         | 
| 118 71 | 
             
                dirs = subdirs("#@root/views/").sort
         | 
    
        data/lib/liveblog.rb
    CHANGED
    
    | @@ -775,9 +775,9 @@ end | |
| 775 775 | 
             
            def _write_metadata
         | 
| 776 776 | 
             
              File.write("teaser.txt", @meta.teaser)
         | 
| 777 777 | 
             
              fields = [:num, :title, :date, :pubdate, :views, :tags, :pinned]
         | 
| 778 | 
            -
               | 
| 779 | 
            -
               | 
| 780 | 
            -
                fields.each {|fld|  | 
| 778 | 
            +
              fname = "metadata.txt"
         | 
| 779 | 
            +
              File.open(fname, "w") do |f| 
         | 
| 780 | 
            +
                fields.each {|fld| f.puts "#{'%8s' % fld}  #{@meta.send(fld)}" }
         | 
| 781 781 | 
             
              end
         | 
| 782 782 | 
             
            end
         | 
| 783 783 |  | 
| @@ -789,9 +789,8 @@ def _post_lookup(postid)    # side-effect | |
| 789 789 | 
             
              posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
         | 
| 790 790 | 
             
              posts.select! {|x| File.directory?(x) }
         | 
| 791 791 |  | 
| 792 | 
            -
               | 
| 793 | 
            -
               | 
| 794 | 
            -
              postdir = post.first
         | 
| 792 | 
            +
              posts = posts.select {|x| File.basename(x).to_i == postid }
         | 
| 793 | 
            +
              postdir = exactly_one(posts)
         | 
| 795 794 | 
             
              vp = RuneBlog::ViewPost.new(@blog.view, postdir)
         | 
| 796 795 | 
             
              vp
         | 
| 797 796 | 
             
            end
         | 
    
        data/lib/lowlevel.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
              def _tmp_error(err)
         | 
| 3 3 | 
             
                out = "/tmp/blog#{rand(100)}.txt"
         | 
| 4 4 | 
             
                File.open(out, "w") do |f|
         | 
| 5 | 
            -
                  f.puts err + "\n--------"
         | 
| 5 | 
            +
                  f.puts err.to_s + "\n--------"
         | 
| 6 6 | 
             
                  f.puts err.backtrace.join("\n")
         | 
| 7 7 | 
             
                end
         | 
| 8 8 | 
             
                puts "Error: See #{out}"
         | 
| @@ -28,22 +28,40 @@ | |
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              def _get_data?(file)   # File need not exist
         | 
| 31 | 
            -
                 | 
| 32 | 
            -
                  _get_data(file)
         | 
| 33 | 
            -
                else
         | 
| 34 | 
            -
                  []
         | 
| 35 | 
            -
                end
         | 
| 31 | 
            +
                File.exist?(file) ? _get_data(file) : []
         | 
| 36 32 | 
             
              end
         | 
| 37 33 |  | 
| 38 34 | 
             
              def _get_data(file)
         | 
| 39 35 | 
             
                lines = File.readlines(file)
         | 
| 40 | 
            -
                lines.reject! {|line| line[0] == "-" }  # allow rejection of lines
         | 
| 41 36 | 
             
                lines = lines.map do |line|
         | 
| 42 | 
            -
                  line | 
| 37 | 
            +
                  line = line.chomp.strip
         | 
| 38 | 
            +
                  line.sub(/ *# .*$/, "")    # allow leading/trailing comments
         | 
| 43 39 | 
             
                end
         | 
| 40 | 
            +
                lines.reject! {|x| x.empty? }
         | 
| 44 41 | 
             
                lines
         | 
| 45 42 | 
             
              end
         | 
| 46 43 |  | 
| 44 | 
            +
              def read_pairs(file)       # returns a hash
         | 
| 45 | 
            +
                lines = _get_data(file)
         | 
| 46 | 
            +
                hash = {}
         | 
| 47 | 
            +
                lines.each do |line|
         | 
| 48 | 
            +
                  key, val = line.split(" ", 2)
         | 
| 49 | 
            +
                  hash[key] = val
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
                hash
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              def read_pairs!(file)       # returns an openstruct
         | 
| 55 | 
            +
                lines = _get_data(file)
         | 
| 56 | 
            +
                obj = OpenStruct.new
         | 
| 57 | 
            +
                lines.each do |line|
         | 
| 58 | 
            +
                  key, val = line.split(" ", 2)
         | 
| 59 | 
            +
                  val ||= ""
         | 
| 60 | 
            +
                  obj.send("#{key}=", val)
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
                obj
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 47 65 | 
             
              def copy(src, dst)
         | 
| 48 66 | 
             
                log!(enter: __method__, args: [src, dst], level: 2)
         | 
| 49 67 | 
             
                cmd = "cp #{src} #{dst} 2>/dev/null"
         | 
| @@ -74,9 +92,15 @@ | |
| 74 92 | 
             
              end
         | 
| 75 93 |  | 
| 76 94 | 
             
              def error(err)
         | 
| 77 | 
            -
                log!(str: err, enter: __method__, args: [err], level: 2)
         | 
| 95 | 
            +
                # log!(str: err, enter: __method__, args: [err], level: 2)
         | 
| 78 96 | 
             
                str = "\n  Error: #{err}"
         | 
| 79 97 | 
             
                puts str
         | 
| 80 98 | 
             
                puts err.backtrace.join("\n")
         | 
| 81 99 | 
             
              end
         | 
| 82 100 |  | 
| 101 | 
            +
              def exactly_one(list)
         | 
| 102 | 
            +
                raise "List: Zero instances" if list.empty?
         | 
| 103 | 
            +
                raise "List: More than one instance" if list.size > 1
         | 
| 104 | 
            +
                list.first
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
    
        data/lib/post.rb
    CHANGED
    
    | @@ -13,41 +13,20 @@ class RuneBlog::Post | |
| 13 13 | 
             
                log!(enter: __method__, args: [post], level: 3)
         | 
| 14 14 | 
             
                raise "Doesn't work right now"
         | 
| 15 15 | 
             
                raise NoBlogAccessor if RuneBlog.blog.nil?
         | 
| 16 | 
            -
                # "post" is a slug
         | 
| 16 | 
            +
                # "post" is a slug?
         | 
| 17 17 | 
             
                pdir = RuneBlog.blog.root/:drafts/post
         | 
| 18 18 | 
             
                meta = nil
         | 
| 19 19 | 
             
                Dir.chdir(pdir) do
         | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 20 | 
            +
            #     meta = read_config("metadata.txt")
         | 
| 21 | 
            +
            #     meta.date = Date.parse(meta.date)
         | 
| 22 | 
            +
            #     meta.views = meta.views.split
         | 
| 23 | 
            +
            #     meta.tags = meta.tags.split
         | 
| 24 | 
            +
            #     meta.teaser = File.read("teaser.txt")
         | 
| 25 25 | 
             
            #     meta.body = File.read("body.txt")
         | 
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
                meta
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 | 
            -
              def write_metadata(meta)   # FIXME ???
         | 
| 31 | 
            -
                log!(enter: __method__, args: [meta], level: 3)
         | 
| 32 | 
            -
                debug "=== write_metadata:"
         | 
| 33 | 
            -
                debug "-----\n#{meta.inspect}\n-----"
         | 
| 34 | 
            -
                fname2 = "metadata.txt"
         | 
| 35 | 
            -
                hash = meta.to_h
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                File.write("teaser.txt", hash[:teaser])
         | 
| 38 | 
            -
                hash.delete(:teaser)
         | 
| 39 | 
            -
                hash.delete(:body)
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                hash[:views] = hash[:views].join(" ")
         | 
| 42 | 
            -
                hash[:tags]  = hash[:tags].join(" ")
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                fields = [:num, :title, :date, :pubdate, :views, :tags]
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                f2 = File.new(fname2, "w")
         | 
| 47 | 
            -
                fields.each {|fld| f2.puts "#{fld}: #{hash[fld]}" }
         | 
| 48 | 
            -
                f2.close
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
             | 
| 51 30 | 
             
              def initialize
         | 
| 52 31 | 
             
                log!(enter: __method__, level: 3)
         | 
| 53 32 | 
             
                @blog = RuneBlog.blog || raise(NoBlogAccessor)
         | 
| @@ -87,10 +66,9 @@ class RuneBlog::Post | |
| 87 66 | 
             
              end
         | 
| 88 67 |  | 
| 89 68 | 
             
              def edit
         | 
| 90 | 
            -
                log!(enter: __method__)
         | 
| 91 | 
            -
                 | 
| 92 | 
            -
                 | 
| 93 | 
            -
                nil
         | 
| 69 | 
            +
                # log!(enter: __method__)
         | 
| 70 | 
            +
                edit_file(@draft, vim: "+8")
         | 
| 71 | 
            +
                build
         | 
| 94 72 | 
             
              rescue => err
         | 
| 95 73 | 
             
                error(err)
         | 
| 96 74 | 
             
              end 
         | 
| @@ -99,8 +77,8 @@ class RuneBlog::Post | |
| 99 77 | 
             
                log!(enter: __method__)
         | 
| 100 78 | 
             
                post = self
         | 
| 101 79 | 
             
                views = post.meta.views
         | 
| 102 | 
            -
                text = File.read(@draft)
         | 
| 103 80 | 
             
                @blog.generate_post(@draft)
         | 
| 81 | 
            +
                @blog.generate_index(@blog.view)
         | 
| 104 82 | 
             
              end
         | 
| 105 83 | 
             
            end
         | 
| 106 84 |  | 
| @@ -184,12 +162,12 @@ class RuneBlog::ViewPost | |
| 184 162 | 
             
                @aslug = @nslug[5..-1]
         | 
| 185 163 | 
             
                fname = "#{postdir}/teaser.txt"            # ???
         | 
| 186 164 | 
             
                @teaser_text = File.read(fname).chomp
         | 
| 187 | 
            -
                 | 
| 188 | 
            -
                 | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 165 | 
            +
                
         | 
| 166 | 
            +
                Dir.chdir(postdir) do 
         | 
| 167 | 
            +
                  meta = @blog.read_metadata
         | 
| 168 | 
            +
                  @title = meta.title
         | 
| 169 | 
            +
                  @date  = meta.pubdate
         | 
| 170 | 
            +
                end
         | 
| 193 171 | 
             
              rescue => err
         | 
| 194 172 | 
             
                STDERR.puts "--- #{err}\n #{err.backtrace.join("\n  ")}"
         | 
| 195 173 | 
             
              end
         | 
    
        data/lib/repl.rb
    CHANGED
    
    | @@ -8,31 +8,31 @@ make_exception(:EditorProblem, "Could not edit $1") | |
| 8 8 |  | 
| 9 9 | 
             
            module RuneBlog::REPL
         | 
| 10 10 | 
             
              def edit_file(file, vim: "")
         | 
| 11 | 
            -
             | 
| 11 | 
            +
            #   STDSCR.saveback
         | 
| 12 12 | 
             
                ed = @blog.editor
         | 
| 13 13 | 
             
                params = vim if ed =~ /vim$/
         | 
| 14 14 | 
             
                result = system!("#{@blog.editor} #{file} #{params}")
         | 
| 15 15 | 
             
                raise EditorProblem(file) unless result
         | 
| 16 | 
            -
             | 
| 16 | 
            +
            #   STDSCR.restback
         | 
| 17 17 | 
             
                cmd_clear
         | 
| 18 18 | 
             
              end
         | 
| 19 19 |  | 
| 20 20 | 
             
              def cmd_quit
         | 
| 21 21 | 
             
                STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
         | 
| 22 22 | 
             
                # FIXME please?
         | 
| 23 | 
            -
                sleep 0.1
         | 
| 23 | 
            +
                # sleep 0.1
         | 
| 24 24 | 
             
                STDSCR.clear
         | 
| 25 25 | 
             
                sleep 0.1
         | 
| 26 26 | 
             
                RubyText.stop
         | 
| 27 27 | 
             
                sleep 0.1
         | 
| 28 28 | 
             
                system("clear")
         | 
| 29 | 
            -
                sleep 0.1
         | 
| 29 | 
            +
                # sleep 0.1
         | 
| 30 30 | 
             
                exit
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 33 | 
             
              def cmd_clear
         | 
| 34 34 | 
             
                STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
         | 
| 35 | 
            -
                sleep 0.1
         | 
| 35 | 
            +
                # sleep 0.1
         | 
| 36 36 | 
             
                STDSCR.clear
         | 
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| @@ -223,9 +223,9 @@ module RuneBlog::REPL | |
| 223 223 | 
             
              def cmd_rebuild
         | 
| 224 224 | 
             
                debug "Starting cmd_rebuild..."
         | 
| 225 225 | 
             
                puts
         | 
| 226 | 
            +
                regen_posts
         | 
| 226 227 | 
             
                @blog.generate_view(@blog.view)
         | 
| 227 228 | 
             
                @blog.generate_index(@blog.view)
         | 
| 228 | 
            -
                regen_posts
         | 
| 229 229 | 
             
              rescue => err
         | 
| 230 230 | 
             
                _tmp_error(err)
         | 
| 231 231 | 
             
              end
         | 
| @@ -301,22 +301,8 @@ module RuneBlog::REPL | |
| 301 301 | 
             
                tag = "#{'%04d' % id}"
         | 
| 302 302 | 
             
                files = ::Find.find(@blog.root/:drafts).to_a
         | 
| 303 303 | 
             
                files = files.grep(/#{tag}-.*lt3/)
         | 
| 304 | 
            -
                 | 
| 305 | 
            -
                 | 
| 306 | 
            -
                  msg = "Multiple files: #{files}"
         | 
| 307 | 
            -
                  puts msg
         | 
| 308 | 
            -
                  return [false, msg]
         | 
| 309 | 
            -
                end
         | 
| 310 | 
            -
                if files.empty?
         | 
| 311 | 
            -
                  msg = "\n  Can't edit post #{id}"
         | 
| 312 | 
            -
                  puts msg
         | 
| 313 | 
            -
                  return [false, msg]
         | 
| 314 | 
            -
                end
         | 
| 315 | 
            -
             | 
| 316 | 
            -
                file = files.first
         | 
| 317 | 
            -
                draft = @blog.root/:drafts/file
         | 
| 318 | 
            -
                vim_params = '-c G'
         | 
| 319 | 
            -
                result = edit_file(draft)
         | 
| 304 | 
            +
                draft = exactly_one(files)
         | 
| 305 | 
            +
                result = edit_file(draft, vim: '-c$')
         | 
| 320 306 | 
             
                @blog.generate_post(draft)
         | 
| 321 307 | 
             
              rescue => err
         | 
| 322 308 | 
             
                _tmp_error(err)
         | 
    
        data/lib/runeblog.rb
    CHANGED
    
    | @@ -189,11 +189,20 @@ class RuneBlog | |
| 189 189 | 
             
                _generate_settings
         | 
| 190 190 | 
             
              end
         | 
| 191 191 |  | 
| 192 | 
            +
              # FIXME reconcile with _get_draft data
         | 
| 193 | 
            +
             | 
| 194 | 
            +
              def read_metadata
         | 
| 195 | 
            +
                meta = read_pairs!("metadata.txt")
         | 
| 196 | 
            +
                meta.views = meta.views.split
         | 
| 197 | 
            +
                meta.tags  = meta.tags.split
         | 
| 198 | 
            +
                meta
         | 
| 199 | 
            +
              end
         | 
| 200 | 
            +
             | 
| 192 201 | 
             
              def _deploy_local(dir)
         | 
| 193 202 | 
             
                log!(enter: __method__, args: [dir], level: 1)
         | 
| 194 203 | 
             
                Dir.chdir(dir) do
         | 
| 195 | 
            -
                   | 
| 196 | 
            -
                  views.each do |v| 
         | 
| 204 | 
            +
                  meta = read_metadata
         | 
| 205 | 
            +
                  meta.views.each do |v| 
         | 
| 197 206 | 
             
                    next unless _check_view?(v)
         | 
| 198 207 | 
             
                    system!("cp *html #@root/views/#{v}/remote", show: true)
         | 
| 199 208 | 
             
                  end
         | 
| @@ -202,33 +211,6 @@ class RuneBlog | |
| 202 211 | 
             
                _tmp_error(err)
         | 
| 203 212 | 
             
              end
         | 
| 204 213 |  | 
| 205 | 
            -
              # FIXME reconcile with _get_draft data
         | 
| 206 | 
            -
             | 
| 207 | 
            -
              def _retrieve_metadata(key)
         | 
| 208 | 
            -
                key = key.to_s
         | 
| 209 | 
            -
                lines = File.readlines("metadata.txt")
         | 
| 210 | 
            -
                lines = lines.grep(/^#{key}: /)
         | 
| 211 | 
            -
                case lines.size
         | 
| 212 | 
            -
                  when 0
         | 
| 213 | 
            -
                    result = nil  # not found
         | 
| 214 | 
            -
                  when 1
         | 
| 215 | 
            -
                    front = "#{key}: "
         | 
| 216 | 
            -
                    n = front.size
         | 
| 217 | 
            -
                    str = lines.first.chomp[n..-1]
         | 
| 218 | 
            -
                    case key
         | 
| 219 | 
            -
                      when "views", "tags"   # plurals
         | 
| 220 | 
            -
                        result = str.split
         | 
| 221 | 
            -
                    else
         | 
| 222 | 
            -
                      result = str
         | 
| 223 | 
            -
                    end
         | 
| 224 | 
            -
                else 
         | 
| 225 | 
            -
                  raise "Too many #{key} instances in metadata.txt!"
         | 
| 226 | 
            -
                end
         | 
| 227 | 
            -
                return result
         | 
| 228 | 
            -
              rescue => err
         | 
| 229 | 
            -
                _tmp_error(err)
         | 
| 230 | 
            -
              end
         | 
| 231 | 
            -
             | 
| 232 214 | 
             
              def process_post(sourcefile)
         | 
| 233 215 | 
             
                log!(enter: __method__, args: [sourcefile], level: 2)
         | 
| 234 216 | 
             
                nslug = sourcefile.sub(/.lt3/, "")
         | 
| @@ -401,9 +383,8 @@ class RuneBlog | |
| 401 383 | 
             
                posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
         | 
| 402 384 | 
             
                posts.select! {|x| File.directory?(x) }
         | 
| 403 385 |  | 
| 404 | 
            -
                 | 
| 405 | 
            -
                 | 
| 406 | 
            -
                postdir = post.first
         | 
| 386 | 
            +
                posts = posts.select {|x| File.basename(x).to_i == postid }
         | 
| 387 | 
            +
                postdir = exactly_one(posts)
         | 
| 407 388 | 
             
                vp = RuneBlog::ViewPost.new(self.view, postdir)
         | 
| 408 389 | 
             
                vp
         | 
| 409 390 | 
             
              rescue => err
         | 
| @@ -563,34 +544,10 @@ class RuneBlog | |
| 563 544 | 
             
                # _tmp_error(err)
         | 
| 564 545 | 
             
              end
         | 
| 565 546 |  | 
| 566 | 
            -
              def _get_draft_data(num, sym)
         | 
| 567 | 
            -
                tag = prefix(num)
         | 
| 568 | 
            -
                front = @blog.root/:drafts/tag
         | 
| 569 | 
            -
                files = Dir[front + "*"]
         | 
| 570 | 
            -
                raise "No draft #{num} found" if files.empty?
         | 
| 571 | 
            -
                raise "Too many files found for #{num}!" if files.size > 1
         | 
| 572 | 
            -
                file = files.first
         | 
| 573 | 
            -
                lines = File.readlines(file)
         | 
| 574 | 
            -
                case sym
         | 
| 575 | 
            -
                  when :views
         | 
| 576 | 
            -
                    view_line = lines.grep(/^.views /)
         | 
| 577 | 
            -
                    raise "More than one .views call in #{draft}" if view_line.size > 1
         | 
| 578 | 
            -
                    raise "No .views call in #{draft}" if view_line.size < 1
         | 
| 579 | 
            -
                    view_line = view_line.first
         | 
| 580 | 
            -
                    views = view_line[7..-1].split
         | 
| 581 | 
            -
                    return views.uniq 
         | 
| 582 | 
            -
                else
         | 
| 583 | 
            -
                  raise "Unknown symbol #{sym.inspect}"
         | 
| 584 | 
            -
                end
         | 
| 585 | 
            -
              end
         | 
| 586 | 
            -
             | 
| 587 547 | 
             
              def _get_views(draft)
         | 
| 588 548 | 
             
                log!(enter: __method__, args: [draft], level: 2)
         | 
| 589 549 | 
             
                # FIXME dumb code
         | 
| 590 | 
            -
                view_line = File.readlines(draft).grep(/^.views /)
         | 
| 591 | 
            -
                raise "More than one .views call in #{draft}" if view_line.size > 1
         | 
| 592 | 
            -
                raise "No .views call in #{draft}" if view_line.size < 1
         | 
| 593 | 
            -
                view_line = view_line.first
         | 
| 550 | 
            +
                view_line = exactly_one(File.readlines(draft).grep(/^.views /))
         | 
| 594 551 | 
             
                views = view_line[7..-1].split
         | 
| 595 552 | 
             
                views.uniq 
         | 
| 596 553 | 
             
              rescue => err
         | 
| @@ -621,10 +578,11 @@ class RuneBlog | |
| 621 578 | 
             
                pnum = nslug[0..3]                 # 0001
         | 
| 622 579 | 
             
                Dir.chdir(pdraft) do 
         | 
| 623 580 | 
             
                  excerpt = File.read("teaser.txt")
         | 
| 624 | 
            -
                   | 
| 581 | 
            +
                  meta = read_metadata
         | 
| 582 | 
            +
                  date = meta.date
         | 
| 625 583 | 
             
                  longdate = ::Date.parse(date).strftime("%B %e, %Y")
         | 
| 626 | 
            -
                  title =  | 
| 627 | 
            -
                  tags =  | 
| 584 | 
            +
                  title = meta.title
         | 
| 585 | 
            +
                  tags = meta.tags
         | 
| 628 586 | 
             
                  # FIXME simplify
         | 
| 629 587 | 
             
                  vars = <<~LIVE
         | 
| 630 588 | 
             
                    .set post.num = #{pnum}
         | 
    
        data/lib/runeblog_version.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ if !defined?(RuneBlog::Path) | |
| 3 3 | 
             
            # if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
         | 
| 4 4 |  | 
| 5 5 | 
             
            class RuneBlog
         | 
| 6 | 
            -
              VERSION = "0.3. | 
| 6 | 
            +
              VERSION = "0.3.06"
         | 
| 7 7 |  | 
| 8 8 | 
             
              path = Gem.find_files("runeblog").grep(/runeblog-/).first
         | 
| 9 9 | 
             
              Path  = File.dirname(path)
         | 
| @@ -46,5 +46,4 @@ def prefix(num) | |
| 46 46 | 
             
              "#{'%04d' % num.to_i}"
         | 
| 47 47 | 
             
            end
         | 
| 48 48 |  | 
| 49 | 
            -
             | 
| 50 49 | 
             
            end
         |