Class: RuneBlog::Post

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/post.rb,
lib/global.rb

Overview

require ‘pathmagic’

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#copy, #copy!, #copy_data, #create_dirs, #dump, #error, #find_draft_slugs, #get_views, #interpolate, #new_dotfile, #new_sequence, #read_config, #subdirs

Constructor Details

#initializePost

Returns a new instance of Post.



61
62
63
64
65
# File 'lib/post.rb', line 61

def initialize
  log!(enter: __method__, level: 3)
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
  @meta = OpenStruct.new
end

Instance Attribute Details

#blogObject

Returns the value of attribute blog.



8
9
10
# File 'lib/post.rb', line 8

def blog
  @blog
end

#dateObject (readonly)

Returns the value of attribute date.



7
8
9
# File 'lib/post.rb', line 7

def date
  @date
end

#draftObject

Returns the value of attribute draft.



8
9
10
# File 'lib/post.rb', line 8

def draft
  @draft
end

#metaObject

Returns the value of attribute meta.



8
9
10
# File 'lib/post.rb', line 8

def meta
  @meta
end

#numObject (readonly)

Returns the value of attribute num.



7
8
9
# File 'lib/post.rb', line 7

def num
  @num
end

#slugObject (readonly)

Returns the value of attribute slug.



7
8
9
# File 'lib/post.rb', line 7

def slug
  @slug
end

#titleObject (readonly)

Returns the value of attribute title.



7
8
9
# File 'lib/post.rb', line 7

def title
  @title
end

#viewsObject (readonly)

Returns the value of attribute views.



7
8
9
# File 'lib/post.rb', line 7

def views
  @views
end

Class Method Details

.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"), views: [], file: nil) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/post.rb', line 67

def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
                views:[], file: nil)
  log!(enter: __method__, args: [title, teaser, body, pubdate, views], stderr: true)
  post = self.new
  # NOTE: This is the ONLY place next_sequence is called!
  num = post.meta.num   = post.blog.next_sequence

  # new_metadata
  post.meta.title, post.meta.teaser, post.meta.body, post.meta.pubdate = 
    title, teaser, body, pubdate
  post.meta.views = [post.blog.view.to_s] + views
  post.meta.tags = []
  post.blog.make_slug(post.meta)  # adds to meta

  # create_draft
  viewhome = post.blog.view.publisher.url
  meta = post.meta
  if file.nil?
    text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate, 
               view: meta.view, teaser: meta.teaser, body: meta.body,
               views: meta.views, tags: meta.tags, home: viewhome)
    srcdir = post.blog.root/:drafts + "/"
    vpdir = post.blog.root/:drafts + "/"
    fname  = meta.slug + ".lt3"
    post.draft = srcdir + fname
    dump(text, post.draft)
  else
    dump(File.read(file), post.draft)
  end
  return post
end

.load(post) ⇒ Object

def self.files(num, root)

log!(enter: __method__, args: [num, root], level: 3)
files = ::Find.find(root).to_a
result = files.grep(/#{prefix(num)}-/)
result

end

Raises:

  • (NoBlogAccessor)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/post.rb', line 19

def self.load(post)
  log!(enter: __method__, args: [post], level: 3)
  raise "Doesn't work right now"
  raise NoBlogAccessor if RuneBlog.blog.nil?
  # "post" is a slug
  pdir = RuneBlog.blog.root/:drafts/post
puts "-- load: opening #{pdir}"
  meta = nil
  Dir.chdir(pdir) do
    meta = read_config("metadata.txt")
    meta.date = Date.parse(meta.date)
    meta.views = meta.views.split
    meta.tags = meta.tags.split
    meta.teaser = File.read("teaser.txt")
#     meta.body = File.read("body.txt")
  end
  meta
end

Instance Method Details

#buildObject



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/post.rb', line 108

def build
  log!(enter: __method__)
  post = self
p :bld1
  views = post.meta.views
p :bld2
  text = File.read(@draft)
p :bld3
p @draft
  @blog.generate_post(@draft)
p :bld4
end

#editObject



99
100
101
102
103
104
105
106
# File 'lib/post.rb', line 99

def edit
  log!(enter: __method__)
  result = system!("vi #@draft +8")  # TODO improve this
  raise EditorProblem(draft) unless result
  nil
rescue => err
  error(err)
end

#write_metadata(meta) ⇒ Object

FIXME ???



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/post.rb', line 38

def (meta)   # FIXME ???
  log!(enter: __method__, args: [meta], level: 3)
  debug "=== write_metadata:"
  debug "-----\n#{meta.inspect}\n-----"
  fname2 = "metadata.txt"
  hash = meta.to_h

p :wmd1
  File.write("teaser.txt", hash[:teaser])
p :wmd2
  hash.delete(:teaser)
  hash.delete(:body)

  hash[:views] = hash[:views].join(" ")
  hash[:tags]  = hash[:tags].join(" ")

  fields = [:num, :title, :date, :pubdate, :views, :tags]

  f2 = File.new(fname2, "w")
  fields.each {|fld| f2.puts "#{fld}: #{hash[fld]}" }
  f2.close
end