diary 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -22
- data/Gemfile +4 -0
- data/Gemfile.lock +28 -0
- data/Rakefile +2 -20
- data/bin/diary +1 -40
- data/diary.gemspec +19 -60
- data/lib/diary.rb +23 -20
- data/lib/diary/cli.rb +5 -43
- data/lib/diary/cli/commands.rb +23 -0
- data/lib/diary/cli/commands/compile.rb +16 -0
- data/lib/diary/cli/commands/init.rb +40 -0
- data/lib/diary/cli/commands/new_item.rb +9 -0
- data/lib/diary/cli/commands/server.rb +13 -0
- data/lib/diary/cli/commands/sync.rb +20 -0
- data/lib/diary/cli/parser.rb +37 -0
- data/lib/diary/item/base.rb +26 -0
- data/lib/diary/item/creator.rb +80 -0
- data/lib/diary/item/data.rb +37 -0
- data/lib/diary/item/finder.rb +37 -0
- data/lib/diary/item/output.rb +58 -0
- data/lib/diary/item/snippet.rb +9 -0
- data/lib/diary/item/template.rb +38 -0
- data/lib/diary/item/url.rb +9 -0
- data/lib/diary/items/page.rb +7 -0
- data/lib/diary/items/post.rb +10 -0
- data/lib/diary/message.rb +40 -19
- data/lib/diary/server.rb +5 -0
- data/lib/diary/snippet.rb +19 -0
- data/lib/diary/version.rb +3 -0
- metadata +85 -38
- data/LICENSE +0 -20
- data/README.rdoc +0 -3
- data/VERSION +0 -1
- data/lib/diary/draft.rb +0 -14
- data/lib/diary/item.rb +0 -138
- data/lib/diary/output.rb +0 -57
- data/lib/diary/page.rb +0 -6
- data/lib/diary/post.rb +0 -22
- data/lib/diary/site.rb +0 -55
- data/lib/diary/template.rb +0 -27
- data/test/helper.rb +0 -10
- data/test/test_diary.rb +0 -7
data/.gitignore
CHANGED
@@ -1,22 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
## TEXTMATE
|
5
|
-
*.tmproj
|
6
|
-
tmtags
|
7
|
-
|
8
|
-
## EMACS
|
9
|
-
*~
|
10
|
-
\#*
|
11
|
-
.\#*
|
12
|
-
|
13
|
-
## VIM
|
14
|
-
*.swp
|
15
|
-
|
16
|
-
## PROJECT::GENERAL
|
17
|
-
coverage
|
18
|
-
rdoc
|
19
|
-
pkg
|
20
|
-
|
21
|
-
## PROJECT::SPECIFIC
|
22
|
-
.document
|
1
|
+
pkg/*
|
2
|
+
*.gem
|
3
|
+
.bundle
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
diary (0.2.0)
|
5
|
+
activesupport (>= 3.0.0)
|
6
|
+
bluecloth (>= 2.0.11)
|
7
|
+
sinatra (>= 1.1.0)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activesupport (3.0.3)
|
13
|
+
bluecloth (2.0.11)
|
14
|
+
rack (1.2.1)
|
15
|
+
sinatra (1.2.0)
|
16
|
+
rack (~> 1.1)
|
17
|
+
tilt (>= 1.2.2, < 2.0)
|
18
|
+
tilt (1.2.2)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
activesupport (>= 3.0.0)
|
25
|
+
bluecloth (>= 2.0.11)
|
26
|
+
bundler (>= 1.0.0.rc.6)
|
27
|
+
diary!
|
28
|
+
sinatra (>= 1.1.0)
|
data/Rakefile
CHANGED
@@ -1,20 +1,2 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "diary"
|
8
|
-
gem.summary = "Dead Simple, Static Blog Generator"
|
9
|
-
|
10
|
-
gem.email = "robin@clart.me"
|
11
|
-
gem.homepage = "http://github.com/robinclart/diary"
|
12
|
-
gem.authors = ["Robin Clart"]
|
13
|
-
|
14
|
-
gem.add_dependency('liquid', '>= 2.0.0')
|
15
|
-
gem.add_dependency('bluecloth', '>= 2.0.7')
|
16
|
-
end
|
17
|
-
Jeweler::GemcutterTasks.new
|
18
|
-
rescue LoadError
|
19
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
|
-
end
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
data/bin/diary
CHANGED
@@ -1,43 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
-
|
5
2
|
require 'diary'
|
6
|
-
require 'diary/cli'
|
7
|
-
|
8
|
-
options = Diary::CLI.parse(ARGV)
|
9
|
-
# Diary.config(options)
|
10
3
|
|
11
|
-
|
12
|
-
when 1
|
13
|
-
case ARGV[0]
|
14
|
-
when "compile"
|
15
|
-
Diary::Site.compile(options.force)
|
16
|
-
when "init"
|
17
|
-
Diary::Site.new(options)
|
18
|
-
else
|
19
|
-
puts "Invalid option. Run `diary --help`."
|
20
|
-
end
|
21
|
-
when 2
|
22
|
-
case ARGV[0]
|
23
|
-
when "draft"
|
24
|
-
Draft.new(ARGV[1])
|
25
|
-
when "page"
|
26
|
-
Page.new(ARGV[1])
|
27
|
-
when "post"
|
28
|
-
Post.new(ARGV[1])
|
29
|
-
when "publish"
|
30
|
-
Draft.new(ARGV[1]).publish
|
31
|
-
else
|
32
|
-
puts "Invalid option. Run `diary --help`."
|
33
|
-
end
|
34
|
-
when 3
|
35
|
-
case ARGV[0]
|
36
|
-
when "publish"
|
37
|
-
Draft.new(ARGV[1]).publish(ARGV[2])
|
38
|
-
else
|
39
|
-
puts "Invalid option. Run `diary --help`."
|
40
|
-
end
|
41
|
-
else
|
42
|
-
puts "Invalid option(s). Run `diary --help`."
|
43
|
-
end
|
4
|
+
Diary::CLI.command(*ARGV)
|
data/diary.gemspec
CHANGED
@@ -1,67 +1,26 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/diary/version", __FILE__)
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
5
|
+
s.name = "diary"
|
6
|
+
s.version = Diary::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Robin Clart"]
|
9
|
+
s.email = ["robin@charlin.be"]
|
10
|
+
s.homepage = "http://rubygems.org/gems/diary"
|
11
|
+
s.summary = "Another static blog generator"
|
12
|
+
s.description = "Diary makes it easy to maintain a file based website with template blog posts and pages."
|
9
13
|
|
10
|
-
s.required_rubygems_version =
|
11
|
-
s.
|
12
|
-
s.date = %q{2010-07-02}
|
13
|
-
s.default_executable = %q{diary}
|
14
|
-
s.email = %q{robin@clart.me}
|
15
|
-
s.executables = ["diary"]
|
16
|
-
s.extra_rdoc_files = [
|
17
|
-
"LICENSE",
|
18
|
-
"README.rdoc"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".gitignore",
|
22
|
-
"LICENSE",
|
23
|
-
"README.rdoc",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"bin/diary",
|
27
|
-
"diary.gemspec",
|
28
|
-
"lib/diary.rb",
|
29
|
-
"lib/diary/cli.rb",
|
30
|
-
"lib/diary/draft.rb",
|
31
|
-
"lib/diary/item.rb",
|
32
|
-
"lib/diary/message.rb",
|
33
|
-
"lib/diary/output.rb",
|
34
|
-
"lib/diary/page.rb",
|
35
|
-
"lib/diary/post.rb",
|
36
|
-
"lib/diary/site.rb",
|
37
|
-
"lib/diary/template.rb",
|
38
|
-
"test/helper.rb",
|
39
|
-
"test/test_diary.rb"
|
40
|
-
]
|
41
|
-
s.homepage = %q{http://github.com/robinclart/diary}
|
42
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
43
|
-
s.require_paths = ["lib"]
|
44
|
-
s.rubygems_version = %q{1.3.6}
|
45
|
-
s.summary = %q{Dead Simple, Static Blog Generator}
|
46
|
-
s.test_files = [
|
47
|
-
"test/helper.rb",
|
48
|
-
"test/test_diary.rb"
|
49
|
-
]
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
15
|
+
s.rubyforge_project = "diary"
|
50
16
|
|
51
|
-
|
52
|
-
|
53
|
-
|
17
|
+
s.add_dependency "activesupport", ">= 3.0.0"
|
18
|
+
s.add_dependency "bluecloth", ">= 2.0.11"
|
19
|
+
s.add_dependency "sinatra", ">= 1.1.0"
|
54
20
|
|
55
|
-
|
56
|
-
s.add_runtime_dependency(%q<liquid>, [">= 2.0.0"])
|
57
|
-
s.add_runtime_dependency(%q<bluecloth>, [">= 2.0.7"])
|
58
|
-
else
|
59
|
-
s.add_dependency(%q<liquid>, [">= 2.0.0"])
|
60
|
-
s.add_dependency(%q<bluecloth>, [">= 2.0.7"])
|
61
|
-
end
|
62
|
-
else
|
63
|
-
s.add_dependency(%q<liquid>, [">= 2.0.0"])
|
64
|
-
s.add_dependency(%q<bluecloth>, [">= 2.0.7"])
|
65
|
-
end
|
66
|
-
end
|
21
|
+
s.add_development_dependency "bundler", ">= 1.0.0.rc.6"
|
67
22
|
|
23
|
+
s.files = `git ls-files`.split("\n")
|
24
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
25
|
+
s.require_path = 'lib'
|
26
|
+
end
|
data/lib/diary.rb
CHANGED
@@ -1,30 +1,33 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__)
|
2
|
-
|
3
|
-
# rubygems
|
4
|
-
require 'rubygems'
|
5
|
-
|
6
|
-
# stdlib
|
7
1
|
require 'fileutils'
|
8
2
|
require 'date'
|
9
3
|
require 'yaml'
|
10
4
|
require 'ostruct'
|
5
|
+
require 'singleton'
|
6
|
+
require 'erb'
|
11
7
|
|
12
|
-
|
13
|
-
require 'liquid'
|
8
|
+
require 'active_support/inflector'
|
14
9
|
require 'bluecloth'
|
15
10
|
|
16
|
-
# internals
|
17
|
-
require 'diary/message'
|
18
|
-
require 'diary/site'
|
19
|
-
require 'diary/template'
|
20
|
-
require 'diary/output'
|
21
|
-
require 'diary/item'
|
22
|
-
require 'diary/draft'
|
23
|
-
require 'diary/page'
|
24
|
-
require 'diary/post'
|
25
|
-
|
26
11
|
module Diary
|
27
|
-
|
28
|
-
|
12
|
+
autoload :CLI, "diary/cli"
|
13
|
+
autoload :Message, "diary/message"
|
14
|
+
autoload :Snippet, "diary/snippet"
|
15
|
+
autoload :VERSION, "diary/version"
|
16
|
+
|
17
|
+
module Item
|
18
|
+
autoload :Base, "diary/item/base"
|
19
|
+
autoload :Data, "diary/item/data"
|
20
|
+
autoload :Template, "diary/item/template"
|
21
|
+
autoload :Url, "diary/item/url"
|
22
|
+
autoload :Snippet, "diary/item/snippet"
|
23
|
+
autoload :Output, "diary/item/output"
|
24
|
+
autoload :Creator, "diary/item/creator"
|
25
|
+
autoload :Finder, "diary/item/finder"
|
29
26
|
end
|
27
|
+
|
28
|
+
extend Message::Shorthand
|
29
|
+
end
|
30
|
+
|
31
|
+
Dir["#{File.dirname(__FILE__)}/diary/items/*.rb"].sort.each do |path|
|
32
|
+
require "diary/items/#{File.basename(path, '.rb')}"
|
30
33
|
end
|
data/lib/diary/cli.rb
CHANGED
@@ -1,47 +1,9 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
1
|
module Diary
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# We set default values here.
|
8
|
-
options = OpenStruct.new
|
9
|
-
options.verbose = false
|
10
|
-
options.force = false
|
11
|
-
|
12
|
-
opts = OptionParser.new do |opts|
|
13
|
-
opts.banner = "Usage: diary ACTION [-vf]"
|
14
|
-
|
15
|
-
opts.separator "\nSpecific options:"
|
16
|
-
|
17
|
-
# Verbose
|
18
|
-
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
19
|
-
options.verbose = v
|
20
|
-
end
|
21
|
-
|
22
|
-
# Force
|
23
|
-
opts.on("-f", "--[no-]force", "Force all items to compile") do |f|
|
24
|
-
options.force = f
|
25
|
-
end
|
26
|
-
|
27
|
-
opts.separator "\nCommon options:"
|
28
|
-
|
29
|
-
# No argument, shows at tail. This will print an options summary.
|
30
|
-
# Try it and see!
|
31
|
-
opts.on_tail("-h", "--help", "Show this message") do
|
32
|
-
puts opts
|
33
|
-
exit
|
34
|
-
end
|
35
|
-
|
36
|
-
# Another typical switch to print the version.
|
37
|
-
opts.on_tail("--version", "Show version") do
|
38
|
-
puts "diary #{Diary.version}"
|
39
|
-
exit
|
40
|
-
end
|
41
|
-
end
|
2
|
+
module CLI
|
3
|
+
autoload :Parser, "diary/cli/parser"
|
4
|
+
autoload :Commands, "diary/cli/commands"
|
42
5
|
|
43
|
-
|
44
|
-
|
45
|
-
end
|
6
|
+
extend Parser
|
7
|
+
extend Commands
|
46
8
|
end
|
47
9
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Dir["#{File.dirname(__FILE__)}/commands/*.rb"].sort.each do |path|
|
2
|
+
require "diary/cli/commands/#{File.basename(path, '.rb')}"
|
3
|
+
end
|
4
|
+
|
5
|
+
module Diary
|
6
|
+
module CLI
|
7
|
+
module Commands
|
8
|
+
def command(*args)
|
9
|
+
options = Diary::CLI.parse(args)
|
10
|
+
|
11
|
+
if args.size == 0
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
if respond_to?(args.first)
|
16
|
+
self.send(args.shift, args, options)
|
17
|
+
elsif
|
18
|
+
Diary.message :error, "No command found", :red
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Diary
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
def compile(args, options)
|
5
|
+
if (args.first == "all") or (args.size == 0)
|
6
|
+
Post.all.each { |p| p.output(options.force) }
|
7
|
+
Page.all.each { |p| p.output(options.force) }
|
8
|
+
elsif args.size >= 2
|
9
|
+
const_get(args.shift.capitalize).find(args.first).output(options.force)
|
10
|
+
else
|
11
|
+
const_get(args.shift.capitalize).all.each { |p| p.output(options.force) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Diary
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
def init(args, options)
|
5
|
+
# Create directories
|
6
|
+
%w{ templates posts pages snippets public }.each do |directory|
|
7
|
+
create_dir directory
|
8
|
+
end
|
9
|
+
|
10
|
+
# Create files
|
11
|
+
create_file "templates/index.html.erb", "<%= content %>"
|
12
|
+
create_file "config.yml", "sync:\n user: \n server: \n path: \n"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def create_dir(path)
|
18
|
+
unless File.exists?(path)
|
19
|
+
FileUtils.mkdir_p(path)
|
20
|
+
|
21
|
+
Diary.message :create, path, :green
|
22
|
+
else
|
23
|
+
Diary.message :exist, path, :yellow
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_file(path, content)
|
28
|
+
unless File.exists?(path)
|
29
|
+
f = File.new(path, "w+")
|
30
|
+
f.puts(content)
|
31
|
+
f.close
|
32
|
+
|
33
|
+
Diary.message :create, path, :green
|
34
|
+
else
|
35
|
+
Diary.message :exist, path, :yellow
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Diary
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
def server(args, options)
|
5
|
+
Diary.message :start, "Diary server is starting...", :green
|
6
|
+
`ruby #{File.expand_path("../../../server.rb", __FILE__)}`
|
7
|
+
rescue Interrupt
|
8
|
+
Diary.message :close, "Diary server is closing...", :red
|
9
|
+
sleep(2)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Diary
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
def sync(args, options)
|
5
|
+
Diary.message :sync, sync_path, :magenta
|
6
|
+
`rsync --verbose --progress --stats --compress --recursive --times --perms --links --delete --exclude "*bak" ./public/* #{sync_path}`
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def sync_path
|
12
|
+
"#{sync_config.user}@#{sync_config.server}:#{sync_config.path}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def sync_config
|
16
|
+
OpenStruct.new(YAML.load_file("config.yml")["sync"]) if File.exists?("config.yml")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|