Class: Weblog

Inherits:
Object
  • Object
show all
Defined in:
lib/weblog.rb,
lib/weblog/post.rb,
lib/weblog/index.rb,
lib/weblog/month.rb,
lib/weblog/helpers.rb,
lib/weblog/snippet.rb

Defined Under Namespace

Modules: Helpers Classes: Index, Month, Post, Snippet

Constant Summary collapse

DIRECTORIES =
%w(
  public/javascripts
  public/stylesheets
  draft
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cwd, options = {}) ⇒ Weblog

Returns a new instance of Weblog.



46
47
48
49
50
51
# File 'lib/weblog.rb', line 46

def initialize(cwd, options={})
  @options = options
  unless @path = self.class.find_working_directory(cwd)
    puts "[!] Please use this tool from somewhere within the working directory"
  end
end

Instance Attribute Details

#pathObject

— Attributes



63
64
65
# File 'lib/weblog.rb', line 63

def path
  @path
end

Class Method Details

.find_working_directory(cwd) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/weblog.rb', line 33

def self.find_working_directory(cwd)
  candidate = cwd
  while(candidate)
    directory = File.join(candidate, 'public')
    if File.exist?(directory)
      return candidate
    else
      parts = candidate.split('/')
      candidate = parts.empty? ? false : parts[0..-2].join('/')
    end
  end; nil
end

.generate(options) ⇒ Object



138
139
140
141
142
# File 'lib/weblog.rb', line 138

def self.generate(options)
  weblog = new(Dir.pwd, options)
  weblog.generate
  weblog
end

.init(options) ⇒ Object



130
131
132
133
134
135
136
# File 'lib/weblog.rb', line 130

def self.init(options)
  DIRECTORIES.each { |path| FileUtils.mkdir_p(path) }
  unless File.exist?('templates')
    FileUtils.cp_r(template_path, 'templates')
    FileUtils.rm_rf('templates/.svn')
  end
end


150
151
152
153
154
# File 'lib/weblog.rb', line 150

def self.print_info(options)
  weblog = new(Dir.pwd, options)
  weblog.print_info
  weblog
end

.publish(options, *directories) ⇒ Object



144
145
146
147
148
# File 'lib/weblog.rb', line 144

def self.publish(options, *directories)
  weblog = new(Dir.pwd, options)
  weblog.publish(*directories)
  weblog
end

.source_rootObject

— Utilities



25
26
27
# File 'lib/weblog.rb', line 25

def self.source_root
  File.expand_path('../../', __FILE__)
end

.template_pathObject



29
30
31
# File 'lib/weblog.rb', line 29

def self.template_path
  File.join(source_root, 'templates')
end

Instance Method Details

#authorObject



91
92
93
# File 'lib/weblog.rb', line 91

def author
  git.config('user.name')
end

#generateObject



101
102
103
104
105
# File 'lib/weblog.rb', line 101

def generate
  posts.each { |post| post.generate }
  months.each { |month| month.generate }
  index.generate
end

#gitObject



53
54
55
# File 'lib/weblog.rb', line 53

def git
  @git ||= Git.open(@path)
end

#indexObject

— Commands



97
98
99
# File 'lib/weblog.rb', line 97

def index
  Weblog::Index.new(self)
end

#monthsObject



69
70
71
# File 'lib/weblog.rb', line 69

def months
  Month.all(self)
end

#postsObject



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/weblog.rb', line 73

def posts
  if @posts.nil?
    paths       = Set.new
    base_path   = File.join(@path, 'public')
    path_length = base_path.split('/').length
    Dir.glob(File.join(base_path, '**/post.*')).each do |file|
      paths << file.split('/')[path_length..-2].join('/')
    end
    @posts = paths.map do |path|
      Weblog::Post.new(self, path)
    end
  end; @posts
end


118
119
120
121
122
123
124
125
126
127
128
# File 'lib/weblog.rb', line 118

def print_info
  months.each do |month|
    puts "#{month.path}: #{month.size} #{month.size == 1 ? 'post' : 'posts'}"
  end
  puts [
    "Directory:   #{@path}",
    "Title:       #{title}",
    "Author:      #{author}",
    "Total posts: #{size} #{size == 1 ? 'post' : 'posts'}"
  ].join("\n")
end

#publish(*directories) ⇒ Object



107
108
109
110
111
112
113
114
115
116
# File 'lib/weblog.rb', line 107

def publish(*directories)
  year  = Time.now.year.to_s
  month = "%02d" % Time.now.month
  directories.each do |directory|
    name        = directory.split('/').last
    destination = File.join(@path, 'public', year, month, name)
    FileUtils.mkdir_p(File.dirname(destination))
    FileUtils.mv(directory, destination)
  end
end

#sizeObject



87
88
89
# File 'lib/weblog.rb', line 87

def size
  posts.size
end

#titleObject



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

def title
  @path.split('/').last.gsub(/[_-]/, ' ').capitalize
end

#verbose?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/weblog.rb', line 57

def verbose?
  @options[:verbose]
end