planet 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/planet +6 -8
- data/lib/planet/version.rb +1 -1
- data/lib/planet.rb +22 -52
- metadata +1 -1
data/bin/planet
CHANGED
@@ -15,7 +15,7 @@ command :generate do |c|
|
|
15
15
|
c.action do |global_options,options,args|
|
16
16
|
conf = YAML.load File.open('planet.yml', 'r').read
|
17
17
|
|
18
|
-
@planet = Planet.new(conf.fetch('planet', {}))
|
18
|
+
@planet = Planet.new(config: conf.fetch('planet', {}))
|
19
19
|
|
20
20
|
conf['blogs'].each do |blog|
|
21
21
|
@planet.blogs << Planet::Blog.new(
|
@@ -69,11 +69,11 @@ end
|
|
69
69
|
desc 'Creates basic templates on the templates_directory specified in planet.yml'
|
70
70
|
command :create_templates do |c|
|
71
71
|
c.action do |global_options,options,args|
|
72
|
-
conf = YAML.load File.open('planet.yml', 'r').read
|
72
|
+
conf = YAML.load File.open('planet.yml', 'r') { |f| f.read }
|
73
73
|
|
74
74
|
templates_dir = conf.fetch('planet').fetch('templates_directory', '_layouts/')
|
75
75
|
|
76
|
-
|
76
|
+
FileUtils.mkdir_p(templates_dir)
|
77
77
|
|
78
78
|
author = '
|
79
79
|
<div class="author">
|
@@ -109,12 +109,10 @@ end
|
|
109
109
|
|
110
110
|
pre do |global,command,options,args|
|
111
111
|
if command.name == :generate
|
112
|
-
conf = YAML.load File.open('planet.yml', 'r').read
|
113
|
-
|
114
|
-
templates_dir = conf.fetch('planet').fetch('templates_directory', '_layout')
|
112
|
+
conf = YAML.load File.open('planet.yml', 'r') { |f| f.read }
|
115
113
|
|
116
|
-
|
117
|
-
|
114
|
+
templates_dir = conf.fetch('planet').fetch('templates_directory', 'source/_layouts')
|
115
|
+
FileUtils.mkdir_p(templates_dir)
|
118
116
|
|
119
117
|
FILES = [templates_dir, templates_dir + 'author.html', templates_dir + 'header.md']
|
120
118
|
|
data/lib/planet/version.rb
CHANGED
data/lib/planet.rb
CHANGED
@@ -1,80 +1,50 @@
|
|
1
1
|
require 'feedzirra'
|
2
2
|
require 'mustache'
|
3
3
|
|
4
|
-
class Planet
|
4
|
+
class Planet < Struct.new(:config, :blogs)
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@@_config = config
|
11
|
-
end
|
12
|
-
|
13
|
-
def config
|
14
|
-
@@_config
|
6
|
+
def initialize(attributes = {})
|
7
|
+
self.config = attributes[:config]
|
8
|
+
self.blogs = attributes.fetch(:blogs, [])
|
15
9
|
end
|
16
10
|
|
17
|
-
def
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
def posts(options = {})
|
22
|
-
return @@_posts unless options[:filter]
|
23
|
-
|
24
|
-
filtered_posts = @@_posts
|
25
|
-
|
26
|
-
filtered_posts = case options[:filter][:date]
|
27
|
-
when true
|
28
|
-
filtered_posts.reject { |p| p.date.nil? }
|
29
|
-
when false || nil
|
30
|
-
filtered_posts.reject { |p| !p.date.nil? }
|
31
|
-
else
|
32
|
-
filtered_posts
|
33
|
-
end
|
34
|
-
|
35
|
-
filtered_posts = case options[:filter][:order]
|
36
|
-
when :date
|
37
|
-
with_date = filtered_posts.reject { |p| p.date.nil? }
|
38
|
-
without_date = filtered_posts.reject { |p| !p.date.nil? }
|
39
|
-
|
40
|
-
with_date.sort_by { |po| po.date }.reverse + without_date
|
41
|
-
else
|
42
|
-
filtered_posts
|
43
|
-
end
|
44
|
-
|
45
|
-
filtered_posts
|
11
|
+
def posts
|
12
|
+
self.blogs.map { |b| b.posts }.flatten
|
46
13
|
end
|
47
14
|
|
48
15
|
def aggregate
|
49
|
-
|
16
|
+
self.blogs.each do |blog|
|
50
17
|
puts "=> Parsing #{ blog.feed }"
|
51
18
|
feed = Feedzirra::Feed.fetch_and_parse(blog.feed)
|
52
19
|
|
53
20
|
blog.name ||= feed.title || 'the source'
|
54
21
|
blog.url ||= feed.url
|
55
|
-
|
22
|
+
|
23
|
+
## This is slightly gay.
|
24
|
+
if blog.url.nil?
|
25
|
+
raise "#{ blog.author }'s blog does not have a url field on it's feed, you will need to specify it on planet.yml"
|
26
|
+
end
|
56
27
|
|
57
28
|
feed.entries.each do |entry|
|
58
|
-
|
29
|
+
blog.posts << @post = Post.new(
|
59
30
|
title: entry.title.sanitize,
|
60
|
-
content: entry.content.strip.gsub('<img src="', "<img src=\"#{ blog.url }"),
|
61
|
-
date: entry.published,
|
31
|
+
content: entry.content.strip.gsub('<img src="', "<img src=\"#{ blog.url }"), ## => I don't like this that much, move it away
|
32
|
+
date: entry.published, ## and check that it's needed post by post.
|
62
33
|
url: blog.url + entry.url,
|
63
34
|
blog: blog
|
64
35
|
)
|
65
36
|
|
66
|
-
blog.posts << @post
|
67
37
|
puts "=> Found post titled #{ @post.title } - by #{ @post.blog.author }"
|
68
38
|
end
|
69
39
|
end
|
70
40
|
end
|
71
41
|
|
72
42
|
def write_posts
|
73
|
-
posts_dir =
|
74
|
-
|
75
|
-
puts "=> Writing #{ posts.size } posts to the #{ posts_dir } directory"
|
43
|
+
posts_dir = self.config.fetch('posts_directory', '_posts')
|
44
|
+
FileUtils.mkdir_p(posts_dir)
|
45
|
+
puts "=> Writing #{ self.posts.size } posts to the #{ posts_dir } directory"
|
76
46
|
|
77
|
-
posts
|
47
|
+
self.posts.each do |post|
|
78
48
|
file_name = posts_dir + post.file_name
|
79
49
|
|
80
50
|
File.open(file_name + '.markdown', "w+") { |f| f.write(post.to_s) }
|
@@ -109,7 +79,7 @@ class Planet
|
|
109
79
|
def header
|
110
80
|
## TODO: We need categories/tags
|
111
81
|
file = self.blog.planet.config.fetch('templates_directory', '_layouts/') + 'header.md'
|
112
|
-
file_contents = File.open(file, 'r').read
|
82
|
+
file_contents = File.open(file, 'r') { |f| f.read }
|
113
83
|
|
114
84
|
Mustache.render(file_contents, self.to_hash)
|
115
85
|
end
|
@@ -123,13 +93,13 @@ class Planet
|
|
123
93
|
|
124
94
|
def footer
|
125
95
|
file = self.blog.planet.config.fetch('templates_directory', '_layouts/') + 'author.html'
|
126
|
-
file_contents = File.open(file, 'r').read
|
96
|
+
file_contents = File.open(file, 'r') { |f| f.read }
|
127
97
|
|
128
98
|
Mustache.render(file_contents, self.to_hash)
|
129
99
|
end
|
130
100
|
|
131
101
|
def to_s
|
132
|
-
|
102
|
+
"#{ header }#{ content }#{ footer }"
|
133
103
|
end
|
134
104
|
end
|
135
105
|
|