alula 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|