Class: Diary::Item

Inherits:
Object
  • Object
show all
Includes:
Message
Defined in:
lib/diary/item.rb

Direct Known Subclasses

Draft, Page, Post

Constant Summary collapse

ACCENTS =
{ 
['á','à','â','ä','ã'] => 'a',
['Ã','Ä','Â','À','�?'] => 'A',
['é','è','ê','ë'] => 'e',
['Ë','É','È','Ê'] => 'E',
['í','ì','î','ï'] => 'i',
['�?','Î','Ì','�?'] => 'I',
['ó','ò','ô','ö','õ'] => 'o',
['Õ','Ö','Ô','Ò','Ó'] => 'O',
['ú','ù','û','ü'] => 'u',
['Ú','Û','Ù','Ü'] => 'U',
['ç'] => 'c', ['Ç'] => 'C',
['ñ'] => 'n', ['Ñ'] => 'N'
}

Constants included from Message

Message::Create, Message::Error, Message::Exist, Message::Identical, Message::Invoke, Message::Publish, Message::Skip, Message::Update

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Message

#say

Constructor Details

#initialize(title_or_file, attributes = {}) ⇒ Item

Returns a new instance of Item.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/diary/item.rb', line 24

def initialize(title_or_file, attributes = {})
  case title_or_file
  when File
    @new_file   = false
    @file       = title_or_file
  else
    @new_file   = true
    @attributes = attributes
    @directory  = extract_directory!
    @title      = title_or_file
    @slug       = nice_slug
    
    create!
  end
end

Instance Attribute Details

#fileObject (readonly)

Returns the value of attribute file.



22
23
24
# File 'lib/diary/item.rb', line 22

def file
  @file
end

Class Method Details

.allObject



60
61
62
63
64
# File 'lib/diary/item.rb', line 60

def self.all
  Dir[File.join(self.class_variable_get(:@@base_directory), "**", "*.md")].map do |p|
    self.new File.new(p, 'r')
  end
end

.firstObject



66
67
68
# File 'lib/diary/item.rb', line 66

def self.first
  all.first
end

.lastObject



70
71
72
# File 'lib/diary/item.rb', line 70

def self.last
  all.last
end

Instance Method Details

#dataObject



56
57
58
# File 'lib/diary/item.rb', line 56

def data
  OpenStruct.new(YAML.load_file(path))
end

#directoryObject



52
53
54
# File 'lib/diary/item.rb', line 52

def directory
  @directory || File.dirname(path).gsub("#{base_directory}/", "")
end

#pathObject



48
49
50
# File 'lib/diary/item.rb', line 48

def path
  file ? file.path : File.join(base_directory, directory, "#{slug}.md")
end

#slugObject



40
41
42
# File 'lib/diary/item.rb', line 40

def slug
  @slug || basename
end

#titleObject



44
45
46
# File 'lib/diary/item.rb', line 44

def title
  @title || data.title
end