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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0afccf0c622078eba670e387c4fec271552c9b2d289c25b1f325a266d94da6c7
4
- data.tar.gz: 3cea7d0e10b8e393d2845b10c4d466f54bbfc92f1ea326eec4ee42ad8fba3927
3
+ metadata.gz: 6baabb9426c6b2e8d316203e12b941a357a31463425810721d8a72f3add24ecd
4
+ data.tar.gz: 9e823dba18e88f9e6159724fbdbb228392eb6433d21f91e6e922b2e7d850cb4d
5
5
  SHA512:
6
- metadata.gz: e69baf6404c61da8028502b554008a663ec405c359707d9a33f103dd47f17b0e9a00482f09a32cb2e52c5457fe9904177db067b2592b7021ef1ddf0a5c15b698
7
- data.tar.gz: d6942079ebdcb48d948b938bf06377caa55eabe7ea3b4de6566ed0586b83920e6c51fee272d7e35e38cb7f00e812a20cc3b0a2c66252ca03e66bcf6cc5df9337
6
+ metadata.gz: 8bc8bc41c43fec627fb6184ce3b9b44fb4f442a8f462b1396ce180c64d00663772e306701e6b4c7edf466eb930162a39ede08bc642d724fde0c2327b97852c45
7
+ data.tar.gz: 4c5f370aa66624daac8355ddf03b7824e890e27b97eaaa27cb81e788c38352e9a6be90ea37c7e501fd7f198e4a6727054c951cb3a26992d88751e45ab0535e16
@@ -4,6 +4,7 @@
4
4
  . The user will more often edit blog/index.lt3 in
5
5
  . the process of blog setup.
6
6
  . --------------------------------------------------
7
+ .nopara
7
8
 
8
9
  .mixin liveblog
9
10
 
@@ -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
- <!-- <span class="post-date mt-1 mb-1" style="margin-top: 3px; text-align: right"> -->
12
- <font size=-1>#{date}</font>
13
- <!-- </span> -->
11
+ <font size=-1>#{date}</font>
14
12
  </td>
15
13
  <td>
16
- <!-- <span class="post-title-box"> -->
17
- <span class="post-title-text"><a href="#{url}" style="margin-top: -5px">#{title}</a></span>
18
- <b>#{teaser_text}</b>&nbsp;&nbsp;
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>&nbsp;&nbsp;
16
+ <a style="text-decoration: none" href="#{url}"><small>Keep reading...</small></a>
21
17
  </td>
22
18
  </tr>
23
19
  </table>
@@ -1,4 +1,5 @@
1
1
  <!-- Miscellaneous local JS pieces are defined here -->
2
+ .nopara
2
3
 
3
4
  <script>
4
5
  function open_main(url) {
@@ -11,9 +11,12 @@
11
11
  .seek global.lt3
12
12
  .include vars.lt3
13
13
 
14
+ . FIXME
15
+
14
16
  .head
15
17
  og:title $title
16
18
  description $teaser
19
+ style blog.css
17
20
  .end
18
21
 
19
22
  <body>
@@ -39,6 +39,7 @@ def system!(str, show: false)
39
39
  else
40
40
  STDERR.puts "FAILED: #{str.inspect}"
41
41
  STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
42
+ exit
42
43
  return rc
43
44
  end
44
45
  rc
@@ -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 + "/" + views/").sort
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")
@@ -9,11 +9,9 @@ require 'xlate'
9
9
 
10
10
 
11
11
  def init_liveblog # FIXME - a lot of this logic sucks
12
- here = Dir.pwd
13
- dir = here
14
- # loop { dir = Dir.pwd; break if File.exist?("config"); Dir.chdir("..") }
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
- stuff = File.read("banner/navbar.html")
132
- str2 << "<td colspan=#{span}><div style='text-align: center'>#{stuff}</div></td>" + "\n"
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
- str2 << "<td colspan=#{span}>" + File.read(file) + "</td>" + "\n"
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="../etc/favicon.ico">\n <link rel="apple-touch-icon" href="../etc/favicon.ico">]
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="('/etc/#{remain}')">]
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.dir
752
+ vdir = @root/:views/@blog.view
752
753
  title = _var(:blog)
753
754
 
754
- extra = ""
755
- extra = "navbar-expand-lg" if orient == :horiz
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
- <ul class="navbar-nav mr-auto">
770
+ #{list1}
761
771
  HTML
762
772
  finish = <<-HTML
763
- </ul>
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 %[<li class="nav-item active"> <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> </li>]
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 %[<li class="nav-item"> <a class="nav-link" #{href_main}>#{cdata}</a> </li>]
791
+ output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
784
792
  end
785
793
  end
786
794
  output.puts finish
@@ -53,55 +53,48 @@ class RuneBlog
53
53
  puts "Error: See #{out}"
54
54
  end
55
55
 
56
- def self.create_new_blog_repo(root = ".blogs")
57
- log!(enter: __method__, args: [root])
58
- raise ArgumentError unless root.is_a?(String) && ! root.empty?
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
- root = Dir.pwd/root
62
- raise BlogRepoAlreadyExists if Dir.exist?(root)
63
- create_dirs(root)
64
- Dir.chdir(root) do
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
- x = OpenStruct.new
69
- x.root, x.current_view, x.editor = root, "test_view", "/usr/bin/vim " # dumb - FIXME later
70
- write_config(x, root/ConfigFile)
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: '#{root}' - #{err}"
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(root = ".blogs")
80
- log!(enter: __method__, args: [root])
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
- root = Dir.pwd/root
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(root_dir = ".blogs") # always assumes existing blog
90
- log!(enter: "initialize", args: [root_dir])
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 = root_dir
95
- file = @root/ConfigFile
96
- errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
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
- @view = str2view(@view_name)
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) && File.exist?(DotDir/ConfigFile)
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
- @view = view # current view
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
- x = OpenStruct.new
426
- x.root, x.current_view, x.editor = @root, view.to_s, @editor # dumb - FIXME later
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/blog.css" # , debug: true
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
- _tmp_error(err)
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)
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.2.73"
5
+ VERSION = "0.2.78"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -14,6 +14,7 @@ class RuneBlog::View
14
14
  @name = name
15
15
  @publisher = RuneBlog::Publishing.new(name)
16
16
  @can_publish = true # FIXME
17
+ @blog.view = self
17
18
  end
18
19
 
19
20
  def dir
@@ -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 prerprocess(cwd: Dir.pwd, src:,
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")) # || strip)
24
- indent = " "*12
25
+ dst += ".html" unless (dst.end_with?(".html") || strip)
26
+ sp = " "*12
25
27
  Dir.chdir(cwd) do
26
28
  if debug
27
- puts "#{indent} -- xlate #{src} >#{dst}"
28
- puts "#{indent} in: #{Dir.pwd}"
29
- puts "#{indent} from: #{caller[0]}"
30
- puts "#{indent} copy: #{copy}" if copy
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
- rc = system("livetext #{src} >#{dst}")
35
- puts "...completed (shell returned #{rc})" if debug
38
+ out = LIVE.xform_file(src)
39
+ File.write(dst, out)
36
40
  system!("cp #{dst} #{copy}") if copy
37
41
  else
38
- puts "#{indent} -- ^ Already up to date!" if debug
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")) # || strip)
52
+ dst += ".html" unless (dst.end_with?(".html") || strip)
49
53
  indent = " "*12
50
54
  Dir.chdir(cwd) do
51
55
  if debug
@@ -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.73
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-04 00:00:00.000000000 Z
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: