Class: RuneBlog::Post

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

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

Constructor Details

#initializePost

Returns a new instance of Post.



59
60
61
62
63
# File 'lib/post.rb', line 59

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



65
66
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
# File 'lib/post.rb', line 65

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



106
107
108
109
110
111
112
# File 'lib/post.rb', line 106

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

#editObject



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

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
# 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

  File.write("teaser.txt", hash[:teaser])
  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