alula 0.2.0c → 0.2.0
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/assethelper.rb +75 -0
- data/lib/alula/cli.rb +1 -1
- data/lib/alula/plugins/assets.rb +0 -2
- data/lib/alula/plugins/pagination.rb +121 -0
- data/lib/alula/plugins.rb +23 -0
- data/lib/alula/site.rb +59 -59
- metadata +31 -29
- data/lib/alula/plugin.rb +0 -12
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.0
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'RMagick'
|
2
|
+
|
3
|
+
module Alula
|
4
|
+
class AssetHelper
|
5
|
+
IMAGES = %w{jpg png gif}
|
6
|
+
MOVIES = %w{mp4}
|
7
|
+
|
8
|
+
def initialize(asset_path, options)
|
9
|
+
@options = options
|
10
|
+
@asset_path = asset_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(asset, options)
|
14
|
+
options = @options.deep_merge(options)
|
15
|
+
|
16
|
+
# Resolve our asset type
|
17
|
+
ext = File.extname(asset)[1..-1].downcase
|
18
|
+
|
19
|
+
if IMAGES.include?(ext)
|
20
|
+
[:image, process_image(asset, options)]
|
21
|
+
elsif MOVIES.include?(ext)
|
22
|
+
[:movie, process_movie(asset, options)]
|
23
|
+
else
|
24
|
+
raise "Unknown asset type #{ext} for #{asset}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def process_image(asset, options)
|
30
|
+
ext = File.extname(asset)[1..-1].downcase
|
31
|
+
name = File.basename(asset, ext).to_url
|
32
|
+
generated = []
|
33
|
+
|
34
|
+
# Resolve size for new photo
|
35
|
+
width, height = case options[:type]
|
36
|
+
when :attachment
|
37
|
+
options["images"]["size"].split("x").collect {|i| i.to_i }
|
38
|
+
when :thumbnail
|
39
|
+
options["images"]["thumbnails"].split("x").collect {|i| i.to_i }
|
40
|
+
end
|
41
|
+
|
42
|
+
file_path = case options[:type]
|
43
|
+
when :attachment
|
44
|
+
File.join("attachments", "_generated", "images", @asset_path)
|
45
|
+
when :thumbnail
|
46
|
+
File.join("attachments", "_generated", "thumbnails", @asset_path)
|
47
|
+
end
|
48
|
+
# Create output path
|
49
|
+
FileUtils.mkdir_p(file_path)
|
50
|
+
|
51
|
+
# Copy asset to originals
|
52
|
+
if options[:type] == :attachment
|
53
|
+
FileUtils.mkdir_p File.join("attachments", "originals", @asset_path)
|
54
|
+
FileUtils.cp asset, File.join("attachments", "originals", @asset_path, "#{name}.#{ext}")
|
55
|
+
end
|
56
|
+
|
57
|
+
# Create normal photo
|
58
|
+
image = Magick::Image.read(asset).first
|
59
|
+
image_width, image_height = image.columns, image.rows
|
60
|
+
|
61
|
+
resized = image.resize_to_fit(width, height)
|
62
|
+
resized.write(File.join(file_path, "#{name}.#{ext}"))
|
63
|
+
generated << File.join(@asset_path, "#{name}.#{ext}")
|
64
|
+
|
65
|
+
# Generate retina if required
|
66
|
+
if (options["images"]["retina"] and (image_width > width * 2) or (image_height > height * 2))
|
67
|
+
retina = image.resize_to_fit(width * 2, height * 2)
|
68
|
+
resized.write(File.join(file_path, "#{name}_2x.#{ext}"))
|
69
|
+
generated << File.join(@asset_path, "#{name}_2x.#{ext}")
|
70
|
+
end
|
71
|
+
|
72
|
+
return generated
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/alula/cli.rb
CHANGED
@@ -11,7 +11,7 @@ module Alula
|
|
11
11
|
desc "init [PATH]", "Creates a new aLula blog in given path or current directory"
|
12
12
|
def init(path = ".")
|
13
13
|
# Create directory structure
|
14
|
-
%w{attachments attachments/
|
14
|
+
%w{attachments attachments/originals attachments/_generated/images attachments/_generated/_thumbnails posts pages}.each do |dir|
|
15
15
|
empty_directory File.join(path, dir)
|
16
16
|
end
|
17
17
|
|
data/lib/alula/plugins/assets.rb
CHANGED
@@ -0,0 +1,121 @@
|
|
1
|
+
module Jekyll
|
2
|
+
|
3
|
+
class Pagination < Generator
|
4
|
+
# This generator is safe from arbitrary code execution.
|
5
|
+
safe true
|
6
|
+
|
7
|
+
# Generate paginated pages if necessary.
|
8
|
+
#
|
9
|
+
# site - The Site.
|
10
|
+
#
|
11
|
+
# Returns nothing.
|
12
|
+
def generate(site)
|
13
|
+
site.pages.dup.each do |page|
|
14
|
+
paginate(site, page) if Pager.pagination_enabled?(site.config, page)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Paginates the blog's posts. Renders the index.html file into paginated
|
19
|
+
# directories, e.g.: page2/index.html, page3/index.html, etc and adds more
|
20
|
+
# site-wide data.
|
21
|
+
#
|
22
|
+
# site - The Site.
|
23
|
+
# page - The index.html Page that requires pagination.
|
24
|
+
#
|
25
|
+
# {"paginator" => { "page" => <Number>,
|
26
|
+
# "per_page" => <Number>,
|
27
|
+
# "posts" => [<Post>],
|
28
|
+
# "total_posts" => <Number>,
|
29
|
+
# "total_pages" => <Number>,
|
30
|
+
# "previous_page" => <Number>,
|
31
|
+
# "next_page" => <Number> }}
|
32
|
+
def paginate(site, page)
|
33
|
+
all_posts = site.site_payload['site']['posts']
|
34
|
+
pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
|
35
|
+
page_dir = page.destination('').sub(/\/[^\/]+$/, '')
|
36
|
+
page_dir_config = site.config['pagination_dir']
|
37
|
+
dir = ((page_dir_config || page_dir) + '/').sub(/^\/+/, '')
|
38
|
+
|
39
|
+
(1..pages).each do |num_page|
|
40
|
+
pager = Pager.new(site.config, num_page, all_posts, page_dir+'/', '/'+dir, pages)
|
41
|
+
if num_page > 1
|
42
|
+
newpage = Page.new(site, site.source, page_dir, page.name)
|
43
|
+
newpage.pager = pager
|
44
|
+
newpage.dir = File.join(page.dir, "#{dir}page/#{num_page}")
|
45
|
+
site.pages << newpage
|
46
|
+
else
|
47
|
+
page.pager = pager
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class Pager
|
54
|
+
attr_reader :page, :per_page, :posts, :total_posts, :total_pages, :previous_page, :next_page
|
55
|
+
|
56
|
+
# Calculate the number of pages.
|
57
|
+
#
|
58
|
+
# all_posts - The Array of all Posts.
|
59
|
+
# per_page - The Integer of entries per page.
|
60
|
+
#
|
61
|
+
# Returns the Integer number of pages.
|
62
|
+
def self.calculate_pages(all_posts, per_page)
|
63
|
+
(all_posts.size.to_f / per_page.to_i).ceil
|
64
|
+
end
|
65
|
+
|
66
|
+
# Determine if pagination is enabled for a given file.
|
67
|
+
#
|
68
|
+
# config - The configuration Hash.
|
69
|
+
# file - The String filename of the file.
|
70
|
+
#
|
71
|
+
# Returns true if pagination is enabled, false otherwise.
|
72
|
+
def self.pagination_enabled?(config, file)
|
73
|
+
file.name == 'index.html' && !config['paginate'].nil? && file.content =~ /paginator\./
|
74
|
+
end
|
75
|
+
|
76
|
+
# Initialize a new Pager.
|
77
|
+
#
|
78
|
+
# config - The Hash configuration of the site.
|
79
|
+
# page - The Integer page number.
|
80
|
+
# all_posts - The Array of all the site's Posts.
|
81
|
+
# num_pages - The Integer number of pages or nil if you'd like the number
|
82
|
+
# of pages calculated.
|
83
|
+
def initialize(config, page, all_posts, index_dir, pagination_dir, num_pages = nil)
|
84
|
+
@page = page
|
85
|
+
@per_page = config['paginate'].to_i
|
86
|
+
@page_dir = pagination_dir + 'page/'
|
87
|
+
@total_pages = num_pages || Pager.calculate_pages(all_posts, @per_page)
|
88
|
+
@previous_page = nil
|
89
|
+
|
90
|
+
if @page > @total_pages
|
91
|
+
raise RuntimeError, "page number can't be greater than total pages: #{@page} > #{@total_pages}"
|
92
|
+
end
|
93
|
+
|
94
|
+
init = (@page - 1) * @per_page
|
95
|
+
offset = (init + @per_page - 1) >= all_posts.size ? all_posts.size : (init + @per_page - 1)
|
96
|
+
|
97
|
+
@total_posts = all_posts.size
|
98
|
+
@posts = all_posts[init..offset]
|
99
|
+
@previous_page = @page != 1 ? @page_dir + (@page - 1).to_s + '/' : nil
|
100
|
+
@previous_page = index_dir if @page - 1 == 1
|
101
|
+
@next_page = @page != @total_pages ? @page_dir + (@page + 1).to_s + '/' : nil
|
102
|
+
end
|
103
|
+
|
104
|
+
# Convert this Pager's data to a Hash suitable for use by Liquid.
|
105
|
+
#
|
106
|
+
# Returns the Hash representation of this Pager.
|
107
|
+
def to_liquid
|
108
|
+
{
|
109
|
+
'page' => page,
|
110
|
+
'per_page' => per_page,
|
111
|
+
'posts' => posts,
|
112
|
+
'total_posts' => total_posts,
|
113
|
+
'total_pages' => total_pages,
|
114
|
+
'previous_page' => previous_page,
|
115
|
+
'next_page' => next_page
|
116
|
+
}
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Alula
|
2
|
+
module Plugins
|
3
|
+
# def self.register(plugin, path)
|
4
|
+
# @@plugins ||= {}
|
5
|
+
# @@plugins[plugin] = path
|
6
|
+
# end
|
7
|
+
#
|
8
|
+
# def self.plugins
|
9
|
+
# @@plugins
|
10
|
+
# end
|
11
|
+
def self.register_attachment_handler(type, handler)
|
12
|
+
@@handlers ||= {}
|
13
|
+
@@handlers[:attachment] ||= {}
|
14
|
+
@@handlers[:attachment][type] = handler
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.attachment_handler(type)
|
18
|
+
@@handlers ||= {}
|
19
|
+
@@handlers[:attachment] ||= {}
|
20
|
+
@@handlers[:attachment][type]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/alula/site.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'jekyll'
|
3
3
|
require 'sprockets'
|
4
|
-
require 'RMagick'
|
5
4
|
require 'active_support/inflector/methods'
|
6
5
|
require 'progressbar'
|
7
6
|
require 'stringex'
|
8
7
|
|
9
8
|
require 'alula/theme'
|
10
|
-
require 'alula/
|
9
|
+
require 'alula/plugins'
|
10
|
+
require 'alula/assethelper'
|
11
11
|
|
12
12
|
# Compressors
|
13
13
|
require 'alula/compressors'
|
@@ -15,6 +15,7 @@ require 'alula/compressors'
|
|
15
15
|
# Jekyll extensions, plugins, tags
|
16
16
|
# These are used always in every blog, i.e. mandatory plugins
|
17
17
|
require 'alula/plugins/assets'
|
18
|
+
require 'alula/plugins/pagination'
|
18
19
|
|
19
20
|
module Alula
|
20
21
|
class Site
|
@@ -71,7 +72,7 @@ module Alula
|
|
71
72
|
@sprockets.append_path File.join("_tmp", "assets")
|
72
73
|
|
73
74
|
# Attachments
|
74
|
-
@sprockets.append_path File.join("attachments")
|
75
|
+
@sprockets.append_path File.join("attachments", "_generated")
|
75
76
|
|
76
77
|
# Vendor assets
|
77
78
|
vendor_path = File.expand_path(File.join(File.dirname(__FILE__), *%w{.. .. vendor}))
|
@@ -79,13 +80,15 @@ module Alula
|
|
79
80
|
@sprockets.append_path File.join(vendor_path, "javascripts")
|
80
81
|
|
81
82
|
# Initialize blog plugins
|
82
|
-
@config["plugins"]
|
83
|
-
|
83
|
+
if @config["plugins"] != nil
|
84
|
+
@config["plugins"].each do |plugin, opts|
|
85
|
+
require "alula/plugins/#{plugin}"
|
84
86
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
plugin_class = Alula::Plugins.const_get(ActiveSupport::Inflector.camelize(plugin, true))
|
88
|
+
path = plugin_class.install(opts)
|
89
|
+
@sprockets.append_path File.join(path, "stylesheets")
|
90
|
+
@sprockets.append_path File.join(path, "javascripts")
|
91
|
+
end
|
89
92
|
end
|
90
93
|
end
|
91
94
|
|
@@ -137,55 +140,32 @@ module Alula
|
|
137
140
|
post = find_post(a_post) or raise "Cannot find post #{a_post}"
|
138
141
|
|
139
142
|
/(?<date>(\d{4}-\d{2}-\d{2}))/ =~ post
|
140
|
-
# require 'pry';binding.pry
|
141
143
|
date = Time.parse(date)
|
142
|
-
|
143
|
-
width, height = @config["images"]["size"].split("x").collect {|i| i.to_i }
|
144
144
|
asset_path = File.join(%w{%Y %m %d}.collect{|f| date.strftime(f) })
|
145
|
-
file_path = File.join("attachments", "_originals", asset_path)
|
146
|
-
FileUtils.mkdir_p(file_path)
|
147
145
|
|
148
|
-
|
146
|
+
helper = Alula::AssetHelper.new(asset_path, @config)
|
149
147
|
|
150
148
|
post_io = File.open(post, "a")
|
151
|
-
|
152
|
-
# Generate assets
|
153
|
-
image_types = [".jpg", ".png"]
|
154
149
|
assets.each do |asset|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
img_normal = img.resize_to_fit(width, height)
|
164
|
-
img_normal.write(File.join(file_path, "#{asset_plain}#{asset_ext}"))
|
165
|
-
img_normal = nil
|
166
|
-
|
167
|
-
if (@config["images"]["retina"] and (orig_w > width * 2) or (orig_h > height * 2))
|
168
|
-
img_retina = img.resize_to_fit(width * 2, height * 2)
|
169
|
-
retina_fname = File.join(file_path, "#{asset_plain}_2x#{asset_ext}")
|
170
|
-
img_retina.write(retina_fname)
|
171
|
-
img_retina = nil
|
172
|
-
end
|
173
|
-
|
174
|
-
processed << File.join(asset_path, asset_base)
|
175
|
-
|
176
|
-
if @config["plugins"].keys.include?("lightbox")
|
177
|
-
post_io.puts "{% lightbox #{File.join(asset_path, "#{asset_plain}#{asset_ext}")} %}"
|
150
|
+
type, generated = helper.process(asset, :type => :attachment)
|
151
|
+
tn_type, tn_generated = helper.process(asset, :type => :thumbnail)
|
152
|
+
if generated and tn_generated
|
153
|
+
# Asset processed
|
154
|
+
puts "(#{asset}) done."
|
155
|
+
if handler = Alula::Plugins.attachment_handler(type)
|
156
|
+
post_io.puts handler.call(generated[0])
|
178
157
|
else
|
179
|
-
post_io.puts "{% image
|
158
|
+
post_io.puts "{% image _images/#{generated[0]} %}"
|
180
159
|
end
|
160
|
+
else
|
161
|
+
puts "(#{asset}) cannot process."
|
181
162
|
end
|
182
163
|
end
|
183
|
-
|
184
|
-
post_io.close
|
185
164
|
end
|
186
165
|
|
187
166
|
def clean
|
188
167
|
cleanup
|
168
|
+
FileUtils.rm_rf(Dir[File.join("attachments", "_images", "*")])
|
189
169
|
FileUtils.rm_rf(Dir[File.join("attachments", "_thumbnails", "*")])
|
190
170
|
end
|
191
171
|
|
@@ -228,7 +208,13 @@ module Alula
|
|
228
208
|
FileUtils.cp_r Dir[File.join("posts", "*")], File.join("_tmp", "_posts")
|
229
209
|
|
230
210
|
# Copy pages
|
231
|
-
|
211
|
+
Dir[File.join("pages", "**", "*")].each do |page|
|
212
|
+
next unless File.file?(page)
|
213
|
+
page = File.join(page.split("/")[1..-1])
|
214
|
+
|
215
|
+
FileUtils.mkdir_p File.join("_tmp", File.dirname(page))
|
216
|
+
FileUtils.cp File.join("pages", page), File.join("_tmp", page)
|
217
|
+
end
|
232
218
|
|
233
219
|
FileUtils.mkdir_p File.join("_tmp", "assets")
|
234
220
|
end
|
@@ -239,23 +225,31 @@ module Alula
|
|
239
225
|
width, height = @config["images"]["thumbnails"].split("x").collect {|i| i.to_i }
|
240
226
|
|
241
227
|
# Get all attachements
|
242
|
-
|
243
|
-
thumbnails_path = File.join("attachments", "
|
228
|
+
images_path = File.join("attachments", "_generated", "images")
|
229
|
+
thumbnails_path = File.join("attachments", "_generated", "thumbnails")
|
244
230
|
|
245
|
-
assets = Dir[File.join(
|
231
|
+
assets = Dir[File.join(images_path, "**", "*")]
|
246
232
|
.select {|f| File.file?(f) }
|
247
|
-
.collect {|f| File.join(f.split("/")[
|
233
|
+
.collect {|f| File.join(f.split("/")[3..-1])}
|
248
234
|
pb = ProgressBar.new "Assets", assets.count
|
235
|
+
# helper = Alula::AssetHelper.new(asset_path, @config)
|
249
236
|
|
250
|
-
assets.each do |
|
251
|
-
unless File.exists?(File.join(thumbnails_path,
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
image.write(File.join(thumbnails_path, original))
|
237
|
+
assets.each do |asset|
|
238
|
+
unless File.exists?(File.join(thumbnails_path, asset))
|
239
|
+
helper = Alula::AssetHelper.new(File.dirname(asset), @config)
|
240
|
+
tn_type, tn_generated = helper.process(File.join("attachments", "originals", asset), :type => :thumbnail)
|
241
|
+
pb.inc
|
256
242
|
end
|
257
|
-
pb.inc
|
258
243
|
end
|
244
|
+
# assets.each do |original|
|
245
|
+
# unless File.exists?(File.join(thumbnails_path, original))
|
246
|
+
# image = Magick::Image.read(File.join(originals_path, original)).first
|
247
|
+
# image.crop_resized!(width, height, Magick::NorthGravity)
|
248
|
+
# FileUtils.mkdir_p File.dirname(File.join(thumbnails_path, original))
|
249
|
+
# image.write(File.join(thumbnails_path, original))
|
250
|
+
# end
|
251
|
+
# pb.inc
|
252
|
+
# end
|
259
253
|
|
260
254
|
pb.finish
|
261
255
|
end
|
@@ -268,7 +262,9 @@ module Alula
|
|
268
262
|
tf.puts "/*"
|
269
263
|
tf.puts " *=require #{@config["theme"]}"
|
270
264
|
# Plugins
|
271
|
-
@config["plugins"]
|
265
|
+
if @config["plugins"]
|
266
|
+
@config["plugins"].each { |plugin, opts| tf.puts " *=require #{plugin}" }
|
267
|
+
end
|
272
268
|
tf.puts " */"
|
273
269
|
end
|
274
270
|
|
@@ -276,13 +272,17 @@ module Alula
|
|
276
272
|
File.open(File.join("_tmp", "assets", "scripts.js"), "w") do |tf|
|
277
273
|
tf.puts "//=require #{@config["theme"]}"
|
278
274
|
# Plugins
|
279
|
-
@config["plugins"]
|
275
|
+
if @config["plugins"]
|
276
|
+
@config["plugins"].each { |plugin, opts| tf.puts "//=require #{plugin}" }
|
277
|
+
end
|
280
278
|
end
|
281
279
|
|
282
280
|
File.open(File.join("_tmp", "assets", "scripts_body.js"), "w") do |tf|
|
283
281
|
tf.puts "//=require #{@config["theme"]}_body"
|
284
282
|
# Plugins
|
285
|
-
@config["plugins"]
|
283
|
+
if @config["plugins"]
|
284
|
+
@config["plugins"].each { |plugin, opts| tf.puts "//=require #{plugin}_body" }
|
285
|
+
end
|
286
286
|
end
|
287
287
|
|
288
288
|
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alula
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mikko Kokkonen
|
@@ -13,7 +13,7 @@ date: 2012-04-07 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jekyll
|
16
|
-
requirement: &
|
16
|
+
requirement: &70277502059980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.11'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70277502059980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sprockets
|
27
|
-
requirement: &
|
27
|
+
requirement: &70277502059420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.4'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70277502059420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: thor
|
38
|
-
requirement: &
|
38
|
+
requirement: &70277502058720 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.14'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70277502058720
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rmagick
|
49
|
-
requirement: &
|
49
|
+
requirement: &70277502057920 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '2.13'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70277502057920
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sass
|
60
|
-
requirement: &
|
60
|
+
requirement: &70277502073420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '3.1'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70277502073420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: coffee-script
|
71
|
-
requirement: &
|
71
|
+
requirement: &70277502071820 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '2.2'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70277502071820
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: uglifier
|
82
|
-
requirement: &
|
82
|
+
requirement: &70277502070340 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '1.2'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70277502070340
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: front-compiler
|
93
|
-
requirement: &
|
93
|
+
requirement: &70277502069600 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '1.1'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70277502069600
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activesupport
|
104
|
-
requirement: &
|
104
|
+
requirement: &70277502067420 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '3.2'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70277502067420
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: stringex
|
115
|
-
requirement: &
|
115
|
+
requirement: &70277502066880 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ~>
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '1.3'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70277502066880
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: ruby-progressbar
|
126
|
-
requirement: &
|
126
|
+
requirement: &70277502066400 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 0.0.10
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70277502066400
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: version
|
137
|
-
requirement: &
|
137
|
+
requirement: &70277502065920 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ~>
|
@@ -142,7 +142,7 @@ dependencies:
|
|
142
142
|
version: '1.0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70277502065920
|
146
146
|
description: Alula is a simple tool for creating fast, static blogs easily.
|
147
147
|
email:
|
148
148
|
- mikko@owlforestry.com
|
@@ -160,10 +160,12 @@ files:
|
|
160
160
|
- alula.gemspec
|
161
161
|
- bin/alula
|
162
162
|
- lib/alula.rb
|
163
|
+
- lib/alula/assethelper.rb
|
163
164
|
- lib/alula/cli.rb
|
164
165
|
- lib/alula/compressors.rb
|
165
|
-
- lib/alula/
|
166
|
+
- lib/alula/plugins.rb
|
166
167
|
- lib/alula/plugins/assets.rb
|
168
|
+
- lib/alula/plugins/pagination.rb
|
167
169
|
- lib/alula/rake_tasks.rb
|
168
170
|
- lib/alula/site.rb
|
169
171
|
- lib/alula/tasks.rb
|
@@ -187,9 +189,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
190
|
none: false
|
189
191
|
requirements:
|
190
|
-
- - ! '
|
192
|
+
- - ! '>='
|
191
193
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
194
|
+
version: '0'
|
193
195
|
requirements: []
|
194
196
|
rubyforge_project:
|
195
197
|
rubygems_version: 1.8.17
|