runeblog 0.2.73 → 0.2.78
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.
- checksums.yaml +4 -4
- data/empty_view/themes/standard/blog/generate.lt3 +1 -0
- data/empty_view/themes/standard/blog/post_entry.lt3 +4 -8
- data/empty_view/themes/standard/etc/misc.js +1 -0
- data/empty_view/themes/standard/post/generate.lt3 +3 -0
- data/lib/global.rb +1 -0
- data/lib/helpers-blog.rb +1 -2
- data/lib/liveblog.rb +32 -24
- data/lib/runeblog.rb +37 -47
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +1 -0
- data/lib/xlate.rb +15 -11
- data/runeblog.gemspec +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6baabb9426c6b2e8d316203e12b941a357a31463425810721d8a72f3add24ecd
|
4
|
+
data.tar.gz: 9e823dba18e88f9e6159724fbdbb228392eb6433d21f91e6e922b2e7d850cb4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bc8bc41c43fec627fb6184ce3b9b44fb4f442a8f462b1396ce180c64d00663772e306701e6b4c7edf466eb930162a39ede08bc642d724fde0c2327b97852c45
|
7
|
+
data.tar.gz: 4c5f370aa66624daac8355ddf03b7824e890e27b97eaaa27cb81e788c38352e9a6be90ea37c7e501fd7f198e4a6727054c951cb3a26992d88751e45ab0535e16
|
@@ -8,16 +8,12 @@
|
|
8
8
|
<table width=100% cellpadding=7>
|
9
9
|
<tr>
|
10
10
|
<td width=14% valign=top align=right style="margin-top: -1px;">
|
11
|
-
|
12
|
-
<font size=-1>#{date}</font>
|
13
|
-
<!-- </span> -->
|
11
|
+
<font size=-1>#{date}</font>
|
14
12
|
</td>
|
15
13
|
<td>
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<a style="text-decoration: none" href="#{url}"><small>Keep reading...</small></a>
|
20
|
-
<!-- </span> -->
|
14
|
+
<span class="post-title-text"><a href="#{url}" style="margin-top: -5px">#{title}</a></span>
|
15
|
+
<b>#{teaser_text}</b>
|
16
|
+
<a style="text-decoration: none" href="#{url}"><small>Keep reading...</small></a>
|
21
17
|
</td>
|
22
18
|
</tr>
|
23
19
|
</table>
|
data/lib/global.rb
CHANGED
data/lib/helpers-blog.rb
CHANGED
@@ -80,12 +80,11 @@ module RuneBlog::Helpers
|
|
80
80
|
|
81
81
|
def get_views # read from filesystem
|
82
82
|
log!(enter: __method__, level: 3)
|
83
|
-
dirs = subdirs("#@root
|
83
|
+
dirs = subdirs("#@root/views/").sort
|
84
84
|
dirs.map {|name| RuneBlog::View.new(name) }
|
85
85
|
end
|
86
86
|
|
87
87
|
def write_repo_config(root: "#{Dir.pwd}/.blogs", view: "#{root}/data/VIEW", editor: "#{root}/data/EDITOR")
|
88
|
-
p root
|
89
88
|
File.write(root + "/data/ROOT", root + "\n")
|
90
89
|
File.write(root + "/data/VIEW", view.to_s + "\n")
|
91
90
|
File.write(root + "/data/EDITOR", editor + "\n")
|
data/lib/liveblog.rb
CHANGED
@@ -9,11 +9,9 @@ require 'xlate'
|
|
9
9
|
|
10
10
|
|
11
11
|
def init_liveblog # FIXME - a lot of this logic sucks
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
Dir.chdir(here) # here??? or dir??
|
16
|
-
@blog = RuneBlog.new(dir)
|
12
|
+
dir = Dir.pwd.sub(/\.blogs.*/, "")
|
13
|
+
@blog = nil
|
14
|
+
Dir.chdir(dir) { @blog = RuneBlog.new }
|
17
15
|
@root = @blog.root
|
18
16
|
@view = @blog.view
|
19
17
|
@view_name = @blog.view.name unless @view.nil?
|
@@ -93,10 +91,11 @@ end
|
|
93
91
|
def banner
|
94
92
|
count = 0
|
95
93
|
span = 1
|
96
|
-
bg = "white" # outside loop
|
94
|
+
@bg = "white" # outside loop
|
97
95
|
wide = nil
|
98
96
|
high = 250
|
99
97
|
str2 = ""
|
98
|
+
navbar = nil
|
100
99
|
lines = _body.to_a
|
101
100
|
|
102
101
|
lines.each do |line|
|
@@ -109,7 +108,7 @@ def banner
|
|
109
108
|
when "height"
|
110
109
|
high = data[0]
|
111
110
|
when "bgcolor"
|
112
|
-
bg = data[0] || "white"
|
111
|
+
@bg = data[0] || "white"
|
113
112
|
when "image"
|
114
113
|
image = data[0] || "banner.jpg"
|
115
114
|
image = "banner"/image
|
@@ -118,7 +117,6 @@ def banner
|
|
118
117
|
str2 << " <td colspan=#{span}><img src=#{image} #{width} height=#{high}></img></td>" + "\n"
|
119
118
|
when "svg_title"
|
120
119
|
stuff, hash = _svg_title(*data)
|
121
|
-
STDERR.puts hash.inspect
|
122
120
|
wide = hash["width"]
|
123
121
|
str2 << " <td colspan=#{span} width=#{wide}>#{stuff}</td>" + "\n"
|
124
122
|
when "text"
|
@@ -128,13 +126,15 @@ STDERR.puts hash.inspect
|
|
128
126
|
when "navbar"
|
129
127
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/" + "\n"
|
130
128
|
_make_navbar # horiz is default
|
131
|
-
|
132
|
-
|
129
|
+
file = "banner/navbar.html"
|
130
|
+
navbar = File.read(file)
|
131
|
+
# str2 << "<td colspan=#{span}><div style='text-align: center'>#{stuff}</div></td>" + "\n"
|
133
132
|
when "vnavbar"
|
134
133
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
|
135
134
|
_make_navbar(:vert)
|
136
135
|
file = "banner/vnavbar.html"
|
137
|
-
|
136
|
+
navbar = File.read(file)
|
137
|
+
# str2 << "<td colspan=#{span}>" + File.read(file) + "</td>" + "\n"
|
138
138
|
when "break"
|
139
139
|
span = count - 1
|
140
140
|
str2 << " </tr>\n <tr>" + "\n"
|
@@ -142,11 +142,12 @@ STDERR.puts hash.inspect
|
|
142
142
|
str2 << " '#{tag}' isn't known" + "\n"
|
143
143
|
end
|
144
144
|
end
|
145
|
-
_out "<table width=100% height=#{high} bgcolor=##{bg}>"
|
145
|
+
_out "<table width=100% height=#{high} bgcolor=##{@bg}>"
|
146
146
|
_out " <tr>"
|
147
147
|
_out str2
|
148
148
|
_out " </tr>"
|
149
149
|
_out "</table>"
|
150
|
+
_out navbar if navbar
|
150
151
|
rescue => err
|
151
152
|
STDERR.puts "err = #{err}"
|
152
153
|
STDERR.puts err.backtrace.join("\n")
|
@@ -499,7 +500,7 @@ def head # Does NOT output tags
|
|
499
500
|
# "style" => %[<link rel="stylesheet" href="etc/blog.css">],
|
500
501
|
# ^ FIXME
|
501
502
|
"feed" => %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}/feed.xml" title="#{_var(:blog)}">],
|
502
|
-
"favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="
|
503
|
+
"favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="etc/favicon.ico">\n <link rel="apple-touch-icon" href="etc/favicon.ico">]
|
503
504
|
}
|
504
505
|
result = {}
|
505
506
|
lines = _body
|
@@ -514,7 +515,7 @@ def head # Does NOT output tags
|
|
514
515
|
text = File.read(file)
|
515
516
|
result["script"] = Livetext.new.transform(text)
|
516
517
|
when "style"
|
517
|
-
result["style"] = %[<link rel="stylesheet" href="
|
518
|
+
result["style"] = %[<link rel="stylesheet" href="etc/#{remain}">]
|
518
519
|
# Later: allow other overrides
|
519
520
|
when ""; break
|
520
521
|
else
|
@@ -748,24 +749,31 @@ def navbar
|
|
748
749
|
end
|
749
750
|
|
750
751
|
def _make_navbar(orient = :horiz)
|
751
|
-
vdir = @blog.view
|
752
|
+
vdir = @root/:views/@blog.view
|
752
753
|
title = _var(:blog)
|
753
754
|
|
754
|
-
|
755
|
-
|
756
|
-
|
755
|
+
if orient == :horiz
|
756
|
+
name = "navbar.html"
|
757
|
+
li1, li2 = "", ""
|
758
|
+
extra = "navbar-expand-lg"
|
759
|
+
list1 = list2 = ""
|
760
|
+
else
|
761
|
+
name = "vnavbar.html"
|
762
|
+
li1, li2 = '<li class="nav-item">', "</li>"
|
763
|
+
extra = ""
|
764
|
+
list1, list2 = '<l class="navbar-nav mr-auto">', "</ul>"
|
765
|
+
end
|
766
|
+
|
757
767
|
start = <<-HTML
|
758
768
|
<!-- FIXME weird bug here!!! -->
|
759
769
|
<nav class="navbar #{extra} navbar-light bg-light">
|
760
|
-
|
770
|
+
#{list1}
|
761
771
|
HTML
|
762
772
|
finish = <<-HTML
|
763
|
-
|
773
|
+
#{list2}
|
764
774
|
</nav>
|
765
775
|
HTML
|
766
776
|
|
767
|
-
name = (orient == :horiz) ? "navbar.html" : "vnavbar.html"
|
768
|
-
|
769
777
|
html_file = @blog.root/:views/@blog.view/"themes/standard/banner"/name
|
770
778
|
output = File.new(html_file, "w")
|
771
779
|
output.puts start
|
@@ -776,11 +784,11 @@ def _make_navbar(orient = :horiz)
|
|
776
784
|
full = :banner/basename+".html"
|
777
785
|
href_main = _main(full)
|
778
786
|
if basename == "index" # special case
|
779
|
-
output.puts %[
|
787
|
+
output.puts %[#{li1} <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> #{li2}]
|
780
788
|
else
|
781
789
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner"
|
782
790
|
xlate cwd: dir, src: basename, dst: vdir/"remote/banner"/basename+".html" # , debug: true
|
783
|
-
output.puts %[
|
791
|
+
output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
|
784
792
|
end
|
785
793
|
end
|
786
794
|
output.puts finish
|
data/lib/runeblog.rb
CHANGED
@@ -53,55 +53,48 @@ class RuneBlog
|
|
53
53
|
puts "Error: See #{out}"
|
54
54
|
end
|
55
55
|
|
56
|
-
def self.create_new_blog_repo(
|
57
|
-
log!(enter: __method__, args: [
|
58
|
-
raise ArgumentError unless
|
59
|
-
root_dir = Dir.pwd/root
|
56
|
+
def self.create_new_blog_repo(root_rel = ".blogs")
|
57
|
+
log!(enter: __method__, args: [root_rel])
|
58
|
+
raise ArgumentError unless root_rel.is_a?(String) && ! root_rel.empty?
|
60
59
|
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
61
|
-
|
62
|
-
raise BlogRepoAlreadyExists if Dir.exist?(
|
63
|
-
create_dirs(
|
64
|
-
Dir.chdir(
|
65
|
-
create_dirs(:drafts, :views, :posts)
|
60
|
+
repo_root = Dir.pwd/root_rel
|
61
|
+
raise BlogRepoAlreadyExists if Dir.exist?(repo_root)
|
62
|
+
create_dirs(repo_root)
|
63
|
+
Dir.chdir(repo_root) do
|
64
|
+
create_dirs(:data, :drafts, :views, :posts)
|
66
65
|
new_sequence
|
67
66
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
write_repo_config
|
72
|
-
@blog = self.new(root)
|
67
|
+
copy_data(:config, repo_root/:data)
|
68
|
+
write_repo_config(root: repo_root)
|
69
|
+
@blog = self.new
|
73
70
|
@blog
|
74
71
|
rescue => err
|
75
|
-
puts "Can't create blog repo: '#{
|
72
|
+
puts "Can't create blog repo: '#{repo_root}' - #{err}"
|
76
73
|
puts err.backtrace.join("\n")
|
77
74
|
end
|
78
75
|
|
79
|
-
def self.open(
|
80
|
-
log!(enter: __method__, args: [
|
81
|
-
# Crude - FIXME later - # What views are there? Publishing, etc.
|
76
|
+
def self.open(root_rel = ".blogs")
|
77
|
+
log!(enter: __method__, args: [root_rel])
|
82
78
|
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
83
|
-
|
84
|
-
blog = self.new(root)
|
79
|
+
blog = self.new(root_rel)
|
85
80
|
rescue => err
|
86
81
|
_tmp_error(err)
|
87
82
|
end
|
88
83
|
|
89
|
-
def initialize(
|
90
|
-
log!(enter: "initialize", args: [
|
91
|
-
# Crude - FIXME later - # What views are there? Publishing, etc.
|
84
|
+
def initialize(root_rel = ".blogs") # always assumes existing blog
|
85
|
+
log!(enter: "initialize", args: [root_rel])
|
92
86
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
93
87
|
|
94
|
-
@root =
|
95
|
-
|
96
|
-
|
97
|
-
raise errmsg unless File.exist?(file)
|
98
|
-
|
88
|
+
@root = Dir.pwd/root_rel
|
89
|
+
copy_data(:config, @root/:data)
|
90
|
+
write_repo_config(root: @root)
|
99
91
|
get_repo_config
|
100
|
-
@root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
|
101
|
-
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
102
|
-
@view_name = md[1] if md
|
103
92
|
@views = get_views
|
104
|
-
|
93
|
+
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
94
|
+
if md
|
95
|
+
@view_name = md[1]
|
96
|
+
@view = str2view(@view_name)
|
97
|
+
end
|
105
98
|
@sequence = get_sequence
|
106
99
|
@post_views = []
|
107
100
|
@post_tags = []
|
@@ -228,15 +221,15 @@ class RuneBlog
|
|
228
221
|
|
229
222
|
def viewdir(v = nil) # delete?
|
230
223
|
log!(enter: __method__, args: [v], level: 3)
|
224
|
+
v ||= @view
|
231
225
|
v = str2view(v) if v.is_a?(String)
|
232
226
|
raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
|
233
|
-
v ||= @view
|
234
227
|
return @root/:views/v
|
235
228
|
end
|
236
229
|
|
237
230
|
def self.exist?
|
238
231
|
log!(enter: __method__, level: 3)
|
239
|
-
Dir.exist?(DotDir)
|
232
|
+
Dir.exist?(DotDir)
|
240
233
|
end
|
241
234
|
|
242
235
|
def mark_last_published(str)
|
@@ -247,7 +240,8 @@ class RuneBlog
|
|
247
240
|
def add_view(view_name)
|
248
241
|
log!(enter: __method__, args: [view_name], level: 2)
|
249
242
|
view = RuneBlog::View.new(view_name)
|
250
|
-
|
243
|
+
self.view = view # current view
|
244
|
+
File.write(@root/"data/VIEW", view_name)
|
251
245
|
@views << view # all views
|
252
246
|
view
|
253
247
|
end
|
@@ -276,7 +270,6 @@ class RuneBlog
|
|
276
270
|
|
277
271
|
def create_view(view_name)
|
278
272
|
log!(enter: __method__, args: [view_name], level: 2)
|
279
|
-
check_valid_new_view(view_name)
|
280
273
|
make_empty_view_tree(view_name)
|
281
274
|
add_view(view_name)
|
282
275
|
mark_last_published("Initial creation")
|
@@ -325,11 +318,8 @@ class RuneBlog
|
|
325
318
|
text = nil
|
326
319
|
@theme = @view.dir/"themes/standard"
|
327
320
|
post_entry_name = @theme/"blog/post_entry.lt3"
|
328
|
-
# STDERR.puts "-- @pename = #{post_entry_name}"
|
329
|
-
# STDERR.puts "-- @pe = #{@_post_entry.inspect}"
|
330
321
|
depend = [post_entry_name]
|
331
322
|
xlate src: post_entry_name, dst: "/tmp/post_entry.html" # , deps: depend # , debug: true
|
332
|
-
# STDERR.puts "-- xlate result: #{`ls -l /tmp/post_entry.html`}"
|
333
323
|
@_post_entry ||= File.read("/tmp/post_entry.html")
|
334
324
|
vp = post_lookup(id)
|
335
325
|
nslug, aslug, title, date, teaser_text =
|
@@ -422,10 +412,8 @@ class RuneBlog
|
|
422
412
|
def change_view(view)
|
423
413
|
log!(enter: __method__, args: [view], level: 3)
|
424
414
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
425
|
-
|
426
|
-
|
427
|
-
copy_data(:config, @root/:data)
|
428
|
-
write_config(x, @root/ConfigFile)
|
415
|
+
File.write(@root/"data/VIEW", view)
|
416
|
+
# write_repo_config
|
429
417
|
self.view = view # error checking?
|
430
418
|
end
|
431
419
|
|
@@ -443,18 +431,20 @@ class RuneBlog
|
|
443
431
|
log!(enter: __method__, args: [view])
|
444
432
|
vdir = @root/:views/view
|
445
433
|
@theme = @root/:views/view/:themes/:standard
|
446
|
-
depend = [vdir/"remote/etc/blog.css", @theme/"global.lt3",
|
434
|
+
depend = [vdir/"remote/etc/blog.css.lt3", @theme/"global.lt3",
|
447
435
|
@theme/"blog/head.lt3",
|
448
436
|
# @theme/"navbar/navbar.lt3",
|
449
437
|
@theme/"blog/index.lt3"] # FIXME what about assets?
|
450
|
-
xlate cwd: vdir/"themes/standard/etc", deps: depend,
|
451
|
-
src: "blog.css.lt3", copy: vdir/"remote/etc/
|
438
|
+
xlate cwd: vdir/"themes/standard/etc", # deps: depend, debug: true,
|
439
|
+
src: "blog.css.lt3", copy: vdir/"remote/etc/" # , dst: "blog.css"
|
452
440
|
xlate cwd: vdir/"themes/standard", deps: depend, force: true,
|
453
441
|
src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
|
454
442
|
copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
|
455
443
|
copy_widget_html(view)
|
456
444
|
rescue => err
|
457
|
-
|
445
|
+
STDERR.puts err
|
446
|
+
STDERR.puts err.backtrace.join("\n")
|
447
|
+
# _tmp_error(err)
|
458
448
|
end
|
459
449
|
|
460
450
|
def _get_views(draft)
|
data/lib/runeblog_version.rb
CHANGED
data/lib/view.rb
CHANGED
data/lib/xlate.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
require 'livetext'
|
1
2
|
|
3
|
+
LIVE = Livetext.new
|
2
4
|
LEXT = ".lt3"
|
3
5
|
|
4
6
|
def newer?(f1, f2)
|
@@ -16,26 +18,28 @@ def stale?(src, dst, deps, force = false)
|
|
16
18
|
return false
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
21
|
+
def preprocess(cwd: Dir.pwd, src:,
|
20
22
|
dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
|
21
23
|
deps: [], copy: nil, debug: false, force: false)
|
22
24
|
src += LEXT unless src.end_with?(LEXT)
|
23
|
-
dst += ".html" unless (dst.end_with?(".html")
|
24
|
-
|
25
|
+
dst += ".html" unless (dst.end_with?(".html") || strip)
|
26
|
+
sp = " "*12
|
25
27
|
Dir.chdir(cwd) do
|
26
28
|
if debug
|
27
|
-
puts "#{
|
28
|
-
puts "#{
|
29
|
-
puts "#{
|
30
|
-
puts "#{
|
29
|
+
puts "#{sp} -- preprocess "
|
30
|
+
puts "#{sp} src: #{src}"
|
31
|
+
puts "#{sp} dst: #{dst}"
|
32
|
+
puts "#{sp} in: #{Dir.pwd}"
|
33
|
+
puts "#{sp} from: #{caller[0]}"
|
34
|
+
puts "#{sp} copy: #{copy}" if copy
|
31
35
|
end
|
32
36
|
stale = stale?(src, dst, deps, force)
|
33
37
|
if stale
|
34
|
-
|
35
|
-
|
38
|
+
out = LIVE.xform_file(src)
|
39
|
+
File.write(dst, out)
|
36
40
|
system!("cp #{dst} #{copy}") if copy
|
37
41
|
else
|
38
|
-
puts "#{
|
42
|
+
puts "#{sp} -- ^ Already up to date!" if debug
|
39
43
|
return
|
40
44
|
end
|
41
45
|
end
|
@@ -45,7 +49,7 @@ def xlate(cwd: Dir.pwd, src:,
|
|
45
49
|
dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
|
46
50
|
deps: [], copy: nil, debug: false, force: false)
|
47
51
|
src += LEXT unless src.end_with?(LEXT)
|
48
|
-
dst += ".html" unless (dst.end_with?(".html")
|
52
|
+
dst += ".html" unless (dst.end_with?(".html") || strip)
|
49
53
|
indent = " "*12
|
50
54
|
Dir.chdir(cwd) do
|
51
55
|
if debug
|
data/runeblog.gemspec
CHANGED
@@ -23,7 +23,7 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.95'
|
24
24
|
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.16'
|
25
25
|
|
26
|
-
s.add_development_dependency 'minitest', '>= 5.10.0'
|
26
|
+
s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
|
27
27
|
|
28
28
|
# Files...
|
29
29
|
main = Find.find("bin").to_a +
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runeblog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.78
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|
@@ -57,6 +57,9 @@ dependencies:
|
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 5.10.0
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '5.10'
|
60
63
|
type: :development
|
61
64
|
prerelease: false
|
62
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -64,6 +67,9 @@ dependencies:
|
|
64
67
|
- - ">="
|
65
68
|
- !ruby/object:Gem::Version
|
66
69
|
version: 5.10.0
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '5.10'
|
67
73
|
description: A blog system based on Ruby and Livetext
|
68
74
|
email: rubyhacker@gmail.com
|
69
75
|
executables:
|