Class: Blogue::Post

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Naming
Includes:
ActiveModel::Conversion
Defined in:
app/models/blogue/post.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Post

Returns a new instance of Post.



52
53
54
# File 'app/models/blogue/post.rb', line 52

def initialize(path)
  @path = path
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



50
51
52
# File 'app/models/blogue/post.rb', line 50

def path
  @path
end

Class Method Details

.allObject



13
14
15
16
17
18
19
# File 'app/models/blogue/post.rb', line 13

def all
  posts = all_post_paths.
    map(&method(:new)).
    sort(&method(:sort_posts))

  Rails.env.production? ? posts.reject(&:private?) : posts
end

.all_paths_in_posts_dirObject



25
26
27
# File 'app/models/blogue/post.rb', line 25

def all_paths_in_posts_dir
  Dir["#{Blogue.posts_path}/*"]
end

.all_post_pathsObject



21
22
23
# File 'app/models/blogue/post.rb', line 21

def all_post_paths
  all_paths_in_posts_dir.select(&method(:post_file?))
end

.extract_post_id(path) ⇒ Object



33
34
35
# File 'app/models/blogue/post.rb', line 33

def extract_post_id(path)
  File.basename(path)[/[^\.]+/]
end

.find(id) ⇒ Object



9
10
11
# File 'app/models/blogue/post.rb', line 9

def find(id)
  all.find{ |p| p.id == id }
end

.load_meta(text) ⇒ Object



41
42
43
44
45
46
47
# File 'app/models/blogue/post.rb', line 41

def load_meta(text)
  YAML.load(
    text.lines.select do |line|
      !!(line[/^<!--\s*meta/]..line[/--!>$/])
    end[1..-2].try(:join, "\n") || ''
  ) || {}
end

.post_file?(path) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'app/models/blogue/post.rb', line 29

def post_file?(path)
  File.file?(path) && !File.basename(path).starts_with?('.')
end

.sort_posts(post_a, post_b) ⇒ Object



37
38
39
# File 'app/models/blogue/post.rb', line 37

def sort_posts(post_a, post_b)
  post_b.time <=> post_a.time
end

Instance Method Details

#author_nameObject



84
85
86
# File 'app/models/blogue/post.rb', line 84

def author_name
  meta_author_name || config_author_name
end

#bodyObject



76
77
78
# File 'app/models/blogue/post.rb', line 76

def body
  File.read(path)
end

#cache_keyObject



96
97
98
# File 'app/models/blogue/post.rb', line 96

def cache_key
  "blogue/posts/#{id}/#{Blogue.posts_cache_keys[id]}"
end

#dateObject



64
65
66
# File 'app/models/blogue/post.rb', line 64

def date
  time.try(:to_date)
end

#idObject



60
61
62
# File 'app/models/blogue/post.rb', line 60

def id
  self.class.extract_post_id(path)
end

#metaObject



92
93
94
# File 'app/models/blogue/post.rb', line 92

def meta
  self.class.load_meta(body)
end

#persisted?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/models/blogue/post.rb', line 56

def persisted?
  true
end

#private?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'app/models/blogue/post.rb', line 88

def private?
  filename_with_underscore? || meta_private?
end

#timeObject



68
69
70
# File 'app/models/blogue/post.rb', line 68

def time
  meta_time || file_ctime
end

#titleObject



72
73
74
# File 'app/models/blogue/post.rb', line 72

def title
  meta_title || parsed_title || filename_title
end

#tldrObject



80
81
82
# File 'app/models/blogue/post.rb', line 80

def tldr
  meta['tldr']
end

#to_helper_nameObject



104
105
106
# File 'app/models/blogue/post.rb', line 104

def to_helper_name
  id.underscore
end

#to_partial_pathObject



100
101
102
# File 'app/models/blogue/post.rb', line 100

def to_partial_path
  'posts/post'
end