alula 0.4.6 → 0.4.7
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/VERSION +1 -1
- data/lib/alula/compressors.rb +75 -4
- data/lib/alula/config.rb +17 -7
- data/lib/alula/contents/item.rb +24 -8
- data/lib/alula/generator.rb +22 -8
- data/lib/alula/generators/archive.rb +49 -0
- data/lib/alula/generators/feedbuilder.rb +8 -2
- data/lib/alula/generators/paginate.rb +3 -18
- data/lib/alula/generators/sitemap.rb +15 -3
- data/lib/alula/plugin.rb +1 -0
- data/lib/alula/site.rb +35 -3
- data/locales/en.yml +3 -1
- data/locales/fi.yml +2 -1
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.7
|
data/lib/alula/compressors.rb
CHANGED
@@ -5,12 +5,20 @@ require 'htmlcompressor'
|
|
5
5
|
module Alula
|
6
6
|
class Compressors
|
7
7
|
class DummyCompressor
|
8
|
+
def compresses?(item)
|
9
|
+
return false
|
10
|
+
end
|
11
|
+
|
8
12
|
def compress(content)
|
9
13
|
content
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
17
|
class CSSCompressor
|
18
|
+
def compresses?(item)
|
19
|
+
return true
|
20
|
+
end
|
21
|
+
|
14
22
|
def compress(content)
|
15
23
|
if content.count("\n") > 2
|
16
24
|
Sass::Engine.new(content,
|
@@ -29,6 +37,10 @@ module Alula
|
|
29
37
|
@compressor = Uglifier.new
|
30
38
|
end
|
31
39
|
|
40
|
+
def compresses?(item)
|
41
|
+
return true
|
42
|
+
end
|
43
|
+
|
32
44
|
def compress(content)
|
33
45
|
@compressor.compress(content)
|
34
46
|
end
|
@@ -36,13 +48,72 @@ module Alula
|
|
36
48
|
|
37
49
|
class HTMLCompressor
|
38
50
|
def initialize
|
39
|
-
|
40
|
-
|
41
|
-
|
51
|
+
HtmlCompressor::Compressor.send(:include, HTMLCompressorExt)
|
52
|
+
@compressor = HtmlCompressor::Compressor.new
|
53
|
+
# remove_surrounding_spaces: HtmlCompressor::Compressor::BLOCK_TAGS_MAX + ",source,title,meta,header,footer,div,section,article,time,img,video,script",
|
54
|
+
# remove_intertag_spaces: true,
|
55
|
+
# remove_quotes: true,
|
56
|
+
# remove_script_attributes: true,
|
57
|
+
# remove_style_attributes: true,
|
58
|
+
# remove_link_attributes: true,
|
59
|
+
# simple_boolean_attributes: true,
|
60
|
+
# remove_http_protocol: false,
|
61
|
+
# remove_https_protocol: false,
|
62
|
+
# })
|
63
|
+
@compressor.profile = :high
|
42
64
|
end
|
43
65
|
|
44
|
-
def
|
66
|
+
def compresses?(item)
|
67
|
+
return true if item.generator.nil?
|
68
|
+
|
69
|
+
return item.generator.allow_compressing? != :none
|
70
|
+
end
|
71
|
+
|
72
|
+
def compress(item, content)
|
73
|
+
_old_profile = @compressor.profile
|
74
|
+
unless item.generator.nil?
|
75
|
+
@compressor.profile = item.generator.allow_compressing?
|
76
|
+
end
|
77
|
+
|
45
78
|
@compressor.compress(content)
|
79
|
+
ensure
|
80
|
+
@compressor.profile = _old_profile
|
81
|
+
end
|
82
|
+
|
83
|
+
module HTMLCompressorExt
|
84
|
+
def profile
|
85
|
+
@profile
|
86
|
+
end
|
87
|
+
|
88
|
+
def profile=(profile)
|
89
|
+
@profile = profile
|
90
|
+
case profile
|
91
|
+
when :none
|
92
|
+
@options[:enabled] = false
|
93
|
+
when :normal
|
94
|
+
@options[:enabled] = true
|
95
|
+
@options[:remove_surrounding_spaces] = HtmlCompressor::Compressor::BLOCK_TAGS_MAX + ",source,title,meta,header,footer,div,section,article,time,img,video,script"
|
96
|
+
@options[:remove_intertag_spaces] = true
|
97
|
+
@options[:remove_quotes] = false
|
98
|
+
@options[:remove_script_attributes] = true
|
99
|
+
@options[:remove_style_attributes] = true
|
100
|
+
@options[:remove_link_attributes] = true
|
101
|
+
@options[:simple_boolean_attributes] = true
|
102
|
+
@options[:remove_http_protocol] = false
|
103
|
+
@options[:remove_https_protocol] = false
|
104
|
+
when :high
|
105
|
+
@options[:enabled] = true
|
106
|
+
@options[:remove_surrounding_spaces] = HtmlCompressor::Compressor::BLOCK_TAGS_MAX + ",source,title,meta,header,footer,div,section,article,time,img,video,script"
|
107
|
+
@options[:remove_intertag_spaces] = true
|
108
|
+
@options[:remove_quotes] = true
|
109
|
+
@options[:remove_script_attributes] = true
|
110
|
+
@options[:remove_style_attributes] = true
|
111
|
+
@options[:remove_link_attributes] = true
|
112
|
+
@options[:simple_boolean_attributes] = true
|
113
|
+
@options[:remove_http_protocol] = "href,src,cite,action,data-original,data-hires"
|
114
|
+
@options[:remove_https_protocol] = "href,src,cite,action,data-original,data-hires"
|
115
|
+
end
|
116
|
+
end
|
46
117
|
end
|
47
118
|
end
|
48
119
|
end
|
data/lib/alula/config.rb
CHANGED
@@ -42,7 +42,9 @@ module Alula
|
|
42
42
|
# Tagline of the blog
|
43
43
|
tagline: "This has no tagline.",
|
44
44
|
# The author, default
|
45
|
-
author: "
|
45
|
+
author: "",
|
46
|
+
# The blog description
|
47
|
+
description: "",
|
46
48
|
# The host where blog is available
|
47
49
|
url: "http://localhost:3000",
|
48
50
|
|
@@ -85,21 +87,28 @@ module Alula
|
|
85
87
|
content: {
|
86
88
|
generators: {
|
87
89
|
paginate: {
|
88
|
-
|
90
|
+
items: 10,
|
89
91
|
template: "/:locale/page/:page/",
|
90
92
|
},
|
91
93
|
feedbuilder: {
|
92
|
-
|
93
|
-
|
94
|
-
|
94
|
+
items: 10,
|
95
|
+
name: "feed.xml",
|
96
|
+
slug: "feed",
|
95
97
|
template: "/:locale/:name",
|
96
98
|
},
|
97
|
-
sitemap: {}
|
99
|
+
sitemap: {},
|
100
|
+
archive: {
|
101
|
+
template: "/:locale/:name/",
|
102
|
+
templates: [
|
103
|
+
"/:year/",
|
104
|
+
"/:year/:month/",
|
105
|
+
],
|
106
|
+
},
|
98
107
|
},
|
99
108
|
filters: {
|
100
109
|
smilies: nil,
|
101
110
|
},
|
102
|
-
sidebar: [ :pages, :languages ]
|
111
|
+
sidebar: [ :pages, :languages ],
|
103
112
|
},
|
104
113
|
|
105
114
|
assets: {
|
@@ -108,6 +117,7 @@ module Alula
|
|
108
117
|
gzip: true,
|
109
118
|
},
|
110
119
|
},
|
120
|
+
gzip_types: [ "js", "css", "xml", "html", "ttf", "svg", "eot" ],
|
111
121
|
|
112
122
|
# Attachement Processors
|
113
123
|
attachments: {
|
data/lib/alula/contents/item.rb
CHANGED
@@ -109,6 +109,10 @@ module Alula
|
|
109
109
|
read_payload if has_payload?
|
110
110
|
end
|
111
111
|
|
112
|
+
def inspect
|
113
|
+
"#<#{self.class.to_s} name=#{self.name}>"
|
114
|
+
end
|
115
|
+
|
112
116
|
# Functionality, existence
|
113
117
|
def exists?
|
114
118
|
@item.exists?
|
@@ -181,7 +185,11 @@ module Alula
|
|
181
185
|
|
182
186
|
# Write content to file
|
183
187
|
@site.storage.output_public(self.path(locale)) do
|
184
|
-
self.site.compressors.html.
|
188
|
+
if self.site.compressors.html.compresses?(self)
|
189
|
+
self.site.compressors.html.compress(self, output)
|
190
|
+
else
|
191
|
+
output
|
192
|
+
end
|
185
193
|
end
|
186
194
|
ensure
|
187
195
|
self.current_locale = _old_locale
|
@@ -237,9 +245,11 @@ module Alula
|
|
237
245
|
when :languages
|
238
246
|
# Get index page titles
|
239
247
|
index_page = site.content.by_slug("index")
|
240
|
-
index_page
|
241
|
-
.
|
242
|
-
|
248
|
+
if index_page
|
249
|
+
index_page.languages
|
250
|
+
.reject{|lang| lang == locale}
|
251
|
+
.collect{|lang| Hashie::Mash.new({url: index_page.url(lang), title: I18n.t('language_name', locale: lang)}) }
|
252
|
+
end
|
243
253
|
when Hash
|
244
254
|
item
|
245
255
|
else
|
@@ -257,9 +267,10 @@ module Alula
|
|
257
267
|
@metadata.permalink(locale)
|
258
268
|
else
|
259
269
|
template = @metadata.template || (self.class.to_s == "Alula::Content::Page" ? @site.config.pagelinks : @site.config.permalinks)
|
260
|
-
|
261
|
-
|
262
|
-
|
270
|
+
substitude(template, locale)
|
271
|
+
# self.substitutes(locale).inject(template) { |result, token|
|
272
|
+
# result.gsub(/:#{Regexp.escape token.first}/, token.last)
|
273
|
+
# }.gsub(/\/\//, '/')
|
263
274
|
end
|
264
275
|
# Add .html only if we don't have extension already
|
265
276
|
if ::File.extname(url).empty?
|
@@ -325,9 +336,14 @@ module Alula
|
|
325
336
|
end
|
326
337
|
|
327
338
|
# Substitues for URL
|
339
|
+
def substitude(template, locale = nil)
|
340
|
+
self.substitutes(locale).inject(template) { |result, token|
|
341
|
+
result.gsub(/:#{Regexp.escape token.first}/, token.last)
|
342
|
+
}.gsub(/\/\//, '/')
|
343
|
+
end
|
344
|
+
|
328
345
|
def substitutes(locale = nil)
|
329
346
|
locale ||= self.current_locale || self.site.config.locale
|
330
|
-
|
331
347
|
@substitutes[locale] ||= begin
|
332
348
|
subs = {
|
333
349
|
"year" => @metadata.date.strftime('%Y'),
|
data/lib/alula/generator.rb
CHANGED
@@ -1,21 +1,28 @@
|
|
1
1
|
module Alula
|
2
2
|
class Generator
|
3
|
-
autoload :Paginate, 'alula/generators/paginate'
|
4
|
-
autoload :FeedBuilder, 'alula/generators/feedbuilder'
|
5
|
-
autoload :Sitemap, 'alula/generators/sitemap'
|
3
|
+
# autoload :Paginate, 'alula/generators/paginate'
|
4
|
+
# autoload :FeedBuilder, 'alula/generators/feedbuilder'
|
5
|
+
# autoload :Sitemap, 'alula/generators/sitemap'
|
6
|
+
def self.register(name, klass); generators[name.to_s] = klass; end
|
7
|
+
def self.generators; @@generators ||= {}; end
|
8
|
+
def generators; self.class.generators; end
|
6
9
|
|
7
10
|
attr_reader :options
|
8
11
|
attr_reader :site
|
9
12
|
|
10
13
|
def self.load(opts)
|
11
|
-
|
14
|
+
name = opts.delete(:type).to_s
|
12
15
|
options = opts.delete(:options)
|
13
16
|
|
14
17
|
# Try to find our generator
|
15
|
-
cls_name = self.constants.select {|t| t.to_s.downcase == type.downcase}.first
|
16
|
-
if cls_name
|
17
|
-
cls = self.const_get(cls_name)
|
18
|
-
gen = cls.new(options, opts)
|
18
|
+
# cls_name = self.constants.select {|t| t.to_s.downcase == type.downcase}.first
|
19
|
+
# if cls_name
|
20
|
+
# cls = self.const_get(cls_name)
|
21
|
+
# gen = cls.new(options, opts)
|
22
|
+
# end
|
23
|
+
if generators[name] and !(!!options == options and !options)
|
24
|
+
generator = generators[name]
|
25
|
+
return generator.new(options, opts)
|
19
26
|
end
|
20
27
|
end
|
21
28
|
|
@@ -27,5 +34,12 @@ module Alula
|
|
27
34
|
def substitutes(locale, item)
|
28
35
|
{}
|
29
36
|
end
|
37
|
+
|
38
|
+
def allow_compressing?
|
39
|
+
:high
|
40
|
+
end
|
30
41
|
end
|
31
42
|
end
|
43
|
+
|
44
|
+
# Load all generators
|
45
|
+
Dir[File.join(File.dirname(__FILE__), "generators", "*.rb")].each {|f| require f}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Alula
|
2
|
+
class Archive < Generator
|
3
|
+
def generate
|
4
|
+
# Loop all languages and count posts per language
|
5
|
+
@languages = {}
|
6
|
+
self.site.content.posts.each do |post|
|
7
|
+
post.languages.each do |lang|
|
8
|
+
@languages[lang] ||= []
|
9
|
+
@languages[lang] << post
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
titles = Hash[@languages.collect {|lang, x| [lang, I18n.t("archive.title", locale: lang)]}]
|
14
|
+
|
15
|
+
archives = {}
|
16
|
+
@languages.each do |lang, posts|
|
17
|
+
options.templates.collect do |template|
|
18
|
+
posts.collect do |post|
|
19
|
+
archives[post.substitude(template, lang)] ||= {}
|
20
|
+
archives[post.substitude(template, lang)][lang] ||= []
|
21
|
+
archives[post.substitude(template, lang)][lang] << post
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
archives.each do |name, archive|
|
27
|
+
self.site.content.pages << Alula::Content::Page.new({
|
28
|
+
generator: self,
|
29
|
+
posts: archive,
|
30
|
+
title: titles.select {|lang, title| archive.keys.include?(lang)},
|
31
|
+
name: name,
|
32
|
+
slug: name,
|
33
|
+
sidebar: false,
|
34
|
+
template: "/:locale/:name/",
|
35
|
+
site: self.site,
|
36
|
+
view: "archive"
|
37
|
+
})
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def substitutes(locale, item)
|
42
|
+
{
|
43
|
+
"page" => item.metadata.pagenum.to_s,
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Alula::Generator.register :archive, Alula::Archive
|
@@ -1,7 +1,11 @@
|
|
1
|
-
require 'builder'
|
1
|
+
require 'builder'
|
2
2
|
|
3
3
|
module Alula
|
4
|
-
class
|
4
|
+
class FeedBuilder < Generator
|
5
|
+
def allow_compressing?
|
6
|
+
:normal
|
7
|
+
end
|
8
|
+
|
5
9
|
def generate
|
6
10
|
# Loop all languages and count posts per language
|
7
11
|
@languages = {}
|
@@ -52,3 +56,5 @@ module Alula
|
|
52
56
|
end
|
53
57
|
end
|
54
58
|
end
|
59
|
+
|
60
|
+
Alula::Generator.register :feedbuilder, Alula::FeedBuilder
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Alula
|
2
|
-
class
|
2
|
+
class Paginate < Generator
|
3
3
|
def generate
|
4
4
|
# Loop all languages and count posts per language
|
5
5
|
@languages = {}
|
@@ -68,22 +68,7 @@ module Alula
|
|
68
68
|
"page" => item.metadata.pagenum.to_s,
|
69
69
|
}
|
70
70
|
end
|
71
|
-
|
72
|
-
# def generate_content
|
73
|
-
# # Generate pagination and pages
|
74
|
-
# num_posts = @site.content.posts.count
|
75
|
-
# pages = (num_posts / options.items).ceil
|
76
|
-
#
|
77
|
-
# (0..pages).each do |pagenum|
|
78
|
-
# pagename = "page#{pagenum}"
|
79
|
-
#
|
80
|
-
# @site.generated << Alula::Content::Page.new({
|
81
|
-
# site: @site,
|
82
|
-
# posts: @site.content.posts.slice(options.items * pagenum, options.items),
|
83
|
-
# current_page: (pagenum + 1),
|
84
|
-
# name: pagename,
|
85
|
-
# })
|
86
|
-
# end
|
87
|
-
# end
|
88
71
|
end
|
89
72
|
end
|
73
|
+
|
74
|
+
Alula::Generator.register :paginate, Alula::Paginate
|
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'builder' # For Tilt
|
2
2
|
|
3
3
|
module Alula
|
4
|
-
class
|
4
|
+
class Sitemap < Generator
|
5
|
+
def allow_compressing?
|
6
|
+
return :normal
|
7
|
+
end
|
8
|
+
|
5
9
|
def generate
|
6
10
|
urls_callback = ->(context) {
|
7
11
|
(context.site.content.posts + context.site.content.pages)
|
@@ -17,7 +21,7 @@ module Alula
|
|
17
21
|
}.flatten
|
18
22
|
}
|
19
23
|
|
20
|
-
|
24
|
+
@sitemap_page = Alula::Content::Page.new({
|
21
25
|
generator: self,
|
22
26
|
urls: urls_callback,
|
23
27
|
title: "Sitemap",
|
@@ -28,6 +32,14 @@ module Alula
|
|
28
32
|
site: self.site,
|
29
33
|
layout: "sitemap",
|
30
34
|
})
|
35
|
+
self.site.content.pages << @sitemap_page
|
36
|
+
|
37
|
+
# Add link to head
|
38
|
+
Alula::Plugin.addon(:head, ->(context) {
|
39
|
+
"<link rel=\"sitemap\" type=\"application/xml\" title=\"Sitemap\" href=\"#{context.url_for(@sitemap_page.url(context.locale))}\">"
|
40
|
+
})
|
31
41
|
end
|
32
42
|
end
|
33
|
-
end
|
43
|
+
end
|
44
|
+
|
45
|
+
Alula::Generator.register :sitemap, Alula::Sitemap
|
data/lib/alula/plugin.rb
CHANGED
@@ -15,6 +15,7 @@ module Alula
|
|
15
15
|
|
16
16
|
def self.addons; @@addons ||= Hash.new {|hash, key| hash[key] = []}; end
|
17
17
|
def self.addon(type, content_or_block); addons[type] << content_or_block; end
|
18
|
+
def self.prepend_addon(type, content_or_block); addons[type].unshift content_or_block; end
|
18
19
|
|
19
20
|
def self.script_load_mode=(mode)
|
20
21
|
@@script_load_mode = case mode
|
data/lib/alula/site.rb
CHANGED
@@ -80,6 +80,7 @@ module Alula
|
|
80
80
|
|
81
81
|
title: @config.title,
|
82
82
|
author: @config.author,
|
83
|
+
description: @config.description,
|
83
84
|
tagline: @config.tagline,
|
84
85
|
url: @config.url,
|
85
86
|
|
@@ -134,6 +135,8 @@ module Alula
|
|
134
135
|
|
135
136
|
# Compiles a site to static website
|
136
137
|
def generate
|
138
|
+
banner
|
139
|
+
|
137
140
|
# Load our plugins and filters
|
138
141
|
load_plugins
|
139
142
|
load_filters
|
@@ -150,6 +153,9 @@ module Alula
|
|
150
153
|
render
|
151
154
|
|
152
155
|
cleanup
|
156
|
+
|
157
|
+
compress
|
158
|
+
|
153
159
|
# Store cached version of configuration
|
154
160
|
cached_config = File.join(storage.path(:cache), "config.yml")
|
155
161
|
@config.write_cache(cached_config)
|
@@ -167,12 +173,22 @@ module Alula
|
|
167
173
|
end
|
168
174
|
|
169
175
|
private
|
176
|
+
def banner
|
177
|
+
puts ""
|
178
|
+
puts "Alula #{Alula::VERSION}"
|
179
|
+
end
|
180
|
+
|
170
181
|
def load_plugins
|
171
182
|
config.plugins.each do |name, options|
|
172
183
|
if plugin = Alula::Plugin.load(name, options)
|
173
184
|
@plugins[name] = plugin
|
174
185
|
end
|
175
186
|
end
|
187
|
+
|
188
|
+
if @plugins
|
189
|
+
puts "Plugins: " + @plugins.collect {|name, plugin| "#{name} #{plugin.version}"}.join(" ")
|
190
|
+
end
|
191
|
+
puts ""
|
176
192
|
end
|
177
193
|
|
178
194
|
def load_filters
|
@@ -304,7 +320,7 @@ module Alula
|
|
304
320
|
io.puts "*/"
|
305
321
|
end
|
306
322
|
# Add stlesheet to template
|
307
|
-
Alula::Plugin.
|
323
|
+
Alula::Plugin.prepend_addon(:head, ->(context){ context.stylesheet_link("style") })
|
308
324
|
|
309
325
|
# Generate javascript
|
310
326
|
@storage.output(:cache, "assets/script.js") do |io|
|
@@ -339,7 +355,7 @@ module Alula
|
|
339
355
|
if asset = @environment.find_asset(logical_path)
|
340
356
|
target = File.join(@storage.path(:assets), asset.digest_path)
|
341
357
|
asset.write_to(target)
|
342
|
-
asset.write_to("#{target}.gz") if target =~ /\.(css|js)$/ and self.config.assets.gzip
|
358
|
+
# asset.write_to("#{target}.gz") if target =~ /\.(css|js)$/ and self.config.assets.gzip
|
343
359
|
end
|
344
360
|
|
345
361
|
progress.step :assets
|
@@ -402,7 +418,7 @@ module Alula
|
|
402
418
|
assets = @environment.used.collect do |asset_name|
|
403
419
|
if asset = @environment[asset_name]
|
404
420
|
filename = File.join(asset_path, asset.digest_path)
|
405
|
-
[filename, self.config.assets.gzip ? "#{filename}.gz" : ""]
|
421
|
+
# [filename, self.config.assets.gzip ? "#{filename}.gz" : ""]
|
406
422
|
end
|
407
423
|
end.flatten.reject { |u| u.nil? or !File.exists?(u) }
|
408
424
|
outputted = @storage.outputted.reject{|o|o[/^#{asset_path}/]}
|
@@ -420,6 +436,22 @@ module Alula
|
|
420
436
|
FileUtils.rmdir entry if Dir[File.join(entry, "**", "*")].count == 0
|
421
437
|
end
|
422
438
|
end
|
439
|
+
|
440
|
+
def compress
|
441
|
+
return unless config.assets.gzip
|
442
|
+
|
443
|
+
say "==> Compressing content"
|
444
|
+
Dir[File.join(@storage.path(:public), "**", "*")].each do |entry|
|
445
|
+
next unless config.gzip_types.include?(File.extname(entry)[1..-1])
|
446
|
+
|
447
|
+
gz = Zlib::GzipWriter.open("#{entry}.gz", Zlib::BEST_COMPRESSION) do |gz|
|
448
|
+
gz.write File.read(entry)
|
449
|
+
end
|
450
|
+
|
451
|
+
@storage.outputted << "#{entry}.gz"
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
423
455
|
|
424
456
|
# Output helpers
|
425
457
|
def say(msg)
|
data/locales/en.yml
CHANGED
data/locales/fi.yml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alula
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: parallel
|
@@ -486,6 +486,7 @@ files:
|
|
486
486
|
- lib/alula/core_ext/tags/locale.rb
|
487
487
|
- lib/alula/core_ext/tags/video.rb
|
488
488
|
- lib/alula/generator.rb
|
489
|
+
- lib/alula/generators/archive.rb
|
489
490
|
- lib/alula/generators/feedbuilder.rb
|
490
491
|
- lib/alula/generators/paginate.rb
|
491
492
|
- lib/alula/generators/sitemap.rb
|
@@ -643,7 +644,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
643
644
|
version: '0'
|
644
645
|
segments:
|
645
646
|
- 0
|
646
|
-
hash: -
|
647
|
+
hash: -343637892775582502
|
647
648
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
648
649
|
none: false
|
649
650
|
requirements:
|
@@ -652,7 +653,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
652
653
|
version: '0'
|
653
654
|
segments:
|
654
655
|
- 0
|
655
|
-
hash: -
|
656
|
+
hash: -343637892775582502
|
656
657
|
requirements: []
|
657
658
|
rubyforge_project:
|
658
659
|
rubygems_version: 1.8.23
|