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_root, #get_views, #interpolate, #livetext, #new_dotfile, #new_sequence, #put_config, #read_config, #subdirs, #try_read_config, #write_config

Constructor Details

#initializePost

Returns a new instance of Post.



65
66
67
68
# File 'lib/post.rb', line 65

def initialize
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
  @meta = OpenStruct.new
end

Instance Attribute Details

#blogObject

Returns the value of attribute blog.



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

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.



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

def draft
  @draft
end

#metaObject

Returns the value of attribute meta.



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

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"), other_views: []) ⇒ Object



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 70

def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
                other_views:[])
  post = self.new
  # 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] + other_views
  post.meta.tags = []
  post.blog.make_slug(post.meta)  # adds to meta

  # create_draft
  viewhome = post.blog.view.publisher.url
  meta = post.meta
  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/"
  verify(Dir.exist?(srcdir) => "#{srcdir} not found",
         meta.slug.is_a?(String) => "slug #{meta.slug.inspect} is invalid")
  fname  = meta.slug + ".lt3"
  post.draft = srcdir + fname
  dump(text, post.draft)
  return post
end

.files(num, root) ⇒ Object



13
14
15
16
17
# File 'lib/post.rb', line 13

def self.files(num, root)
  files = Find.find(root).to_a
  result = files.grep(/#{prefix(num)}-/)
  result
end

.load(post) ⇒ Object

Raises:

  • (NoBlogAccessor)


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

def self.load(post)
  raise "Doesn't work right now"
  raise NoBlogAccessor if RuneBlog.blog.nil?
  # "post" is a slug
  pdir = RuneBlog.blog.view.dir + "/" + post
  verify(Dir.exist?(pdir) => "Directory #{pdir} not found")
  meta = nil
  Dir.chdir(pdir) do
    verify(File.exist?("metadata.txt") => "metadata.txt not found",
           File.exist?("teaser.txt") => "teaser.txt not found")
#            File.exist?("body.txt") => "body.txt not found")
    meta = read_config("metadata.txt")
    verify(meta.date  => "meta.date is nil",
           meta.views => "meta.views is nil",
           meta.tags  => "meta.tags is nil")
    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
# File 'lib/post.rb', line 108

def build
  post = self
  views = post.meta.views
  text = File.read(@draft)
  @blog.generate_post(@draft)
end

#editObject



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

def edit
  verify(File.exist?(@draft) => "File #{@draft} not found")
  result = system("vi #@draft +8")  # TODO improve this
  raise EditorProblem(draft) unless result
  nil
rescue => err
  error(err)
end

#write_metadata(meta) ⇒ Object

FIXME ???



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/post.rb', line 43

def (meta)   # FIXME ???
  debug "=== write_metadata:"
  debug "-----\n#{meta.inspect}\n-----"
  fname2 = "metadata.txt"
  hash = meta.to_h

  File.write("teaser.txt", hash[:teaser])
# STDERR.puts ">>>> #{__method__}: writing #{@live.body.size} bytes to #{Dir.pwd}/body.txt"
#     File.write("body.txt", hash[:body])
  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