runeblog 0.3.34 → 0.3.35
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/data/global.lt3 +3 -3
- data/empty_view/global.lt3 +20 -0
- data/empty_view/themes/standard/banner/top.lt3 +1 -1
- data/empty_view/themes/standard/blog/generate.lt3 +1 -1
- data/empty_view/themes/standard/etc/blog.css.lt3 +1 -1
- data/empty_view/themes/standard/post/generate.lt3 +1 -1
- data/empty_view/themes/standard/post/permalink.lt3 +1 -1
- data/lib/exceptions.rb +2 -0
- data/lib/helpers-blog.rb +3 -3
- data/lib/liveblog.rb +24 -24
- data/lib/lowlevel.rb +35 -0
- data/lib/menus.rb +2 -2
- data/lib/processing.rb +3 -17
- data/lib/publish.rb +3 -6
- data/lib/repl.rb +3 -5
- data/lib/runeblog.rb +94 -21
- data/lib/runeblog_version.rb +6 -2
- data/lib/view.rb +9 -3
- data/runeblog.gemspec +4 -2
- data/test/.blogs/data/EDITOR +1 -0
- data/test/.blogs/data/ROOT +1 -0
- data/test/.blogs/data/VERSION +2 -0
- data/test/.blogs/data/VIEW +1 -0
- data/test/.blogs/data/features.txt +18 -0
- data/test/.blogs/data/global.lt3 +20 -0
- data/test/.blogs/data/sequence +1 -0
- data/test/.blogs/data/universal.lt3 +20 -0
- data/test/.blogs/views/around_austin/assets/austin-pano.jpg +0 -0
- data/test/.blogs/views/around_austin/assets/back-icon.png +0 -0
- data/test/.blogs/views/around_austin/assets/reddit-logo.png +0 -0
- data/test/.blogs/views/around_austin/assets/sky2.jpg +0 -0
- data/test/.blogs/views/around_austin/config/exper/2svg.lt3 +38 -0
- data/test/.blogs/views/around_austin/config/exper/gen_svg.rb +60 -0
- data/test/.blogs/views/around_austin/config/exper/meta.html +10 -0
- data/test/.blogs/views/around_austin/config/exper/s2.html +25 -0
- data/test/.blogs/views/around_austin/config/exper/varmint.rb +50 -0
- data/test/.blogs/views/around_austin/config/facebook/credentials.txt +7 -0
- data/test/.blogs/views/around_austin/config/facebook/facebook.rb +42 -0
- data/test/.blogs/views/around_austin/config/facebook/fb.html +10 -0
- data/test/.blogs/views/around_austin/config/facebook/fb.js.lt3 +15 -0
- data/test/.blogs/views/around_austin/config/reddit/credentials.txt +6 -0
- data/test/.blogs/views/around_austin/config/reddit/notes.txt +4 -0
- data/test/.blogs/views/around_austin/config/reddit/reddit_post_url.py +34 -0
- data/test/.blogs/views/around_austin/config/reddit/redpost.rb +38 -0
- data/test/.blogs/views/around_austin/config/twitter/credentials.txt +3 -0
- data/test/.blogs/views/around_austin/config/twitter/tw.html +12 -0
- data/test/.blogs/views/around_austin/config/twitter/tw.js +5 -0
- data/test/.blogs/views/around_austin/config/twitter/twitter.rb +35 -0
- data/test/.blogs/views/around_austin/data/GIT_IS_DUMB +0 -0
- data/test/.blogs/views/around_austin/global.lt3 +20 -0
- data/test/.blogs/views/around_austin/last_published +1 -0
- data/test/.blogs/views/around_austin/posts/GIT_IS_DUMB +1 -0
- data/test/.blogs/views/around_austin/remote/assets/GIT_IS_DUMB +1 -0
- data/test/.blogs/views/around_austin/remote/banner/navbar/GIT_IS_DUMB +0 -0
- data/test/.blogs/views/around_austin/remote/etc/GIT_IS_DUMB +1 -0
- data/test/.blogs/views/around_austin/remote/permalink/GIT_IS_DUMB +1 -0
- data/test/.blogs/views/around_austin/remote/widgets/ad/GIT_IS_DUMB +2 -0
- data/test/.blogs/views/around_austin/remote/widgets/links/GIT_IS_DUMB +2 -0
- data/test/.blogs/views/around_austin/remote/widgets/news/GIT_IS_DUMB +2 -0
- data/test/.blogs/views/around_austin/remote/widgets/pages/GIT_IS_DUMB +2 -0
- data/test/.blogs/views/around_austin/remote/widgets/pinned/GIT_IS_DUMB +2 -0
- data/test/.blogs/views/around_austin/settings/features.txt +18 -0
- data/test/.blogs/views/around_austin/settings/publish.txt +5 -0
- data/test/.blogs/views/around_austin/settings/recent.txt +11 -0
- data/test/.blogs/views/around_austin/settings/view.txt +4 -0
- data/test/.blogs/views/around_austin/themes/standard/README +59 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/banner.lt3 +5 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/navbar/about.lt3 +18 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/navbar/contact.lt3 +18 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/navbar/faq.lt3 +1 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/navbar/list.data +3 -0
- data/test/.blogs/views/around_austin/themes/standard/banner/top.lt3 +20 -0
- data/test/.blogs/views/around_austin/themes/standard/blog/generate.lt3 +21 -0
- data/test/.blogs/views/around_austin/themes/standard/blog/head.lt3 +16 -0
- data/test/.blogs/views/around_austin/themes/standard/blog/index.lt3 +16 -0
- data/test/.blogs/views/around_austin/themes/standard/blog/post_entry.lt3 +21 -0
- data/test/.blogs/views/around_austin/themes/standard/etc/blog.css.lt3 +62 -0
- data/test/.blogs/views/around_austin/themes/standard/etc/externals.lt3 +24 -0
- data/test/.blogs/views/around_austin/themes/standard/etc/favicon.ico +0 -0
- data/test/.blogs/views/around_austin/themes/standard/etc/github.css +209 -0
- data/test/.blogs/views/around_austin/themes/standard/etc/misc.js +20 -0
- data/test/.blogs/views/around_austin/themes/standard/global.lt3 +20 -0
- data/test/.blogs/views/around_austin/themes/standard/post/generate.lt3 +39 -0
- data/test/.blogs/views/around_austin/themes/standard/post/head.lt3 +7 -0
- data/test/.blogs/views/around_austin/themes/standard/post/index.lt3 +24 -0
- data/test/.blogs/views/around_austin/themes/standard/post/permalink.lt3 +31 -0
- data/test/.blogs/views/around_austin/widgets/README +4 -0
- data/test/.blogs/views/around_austin/widgets/bydates/README +2 -0
- data/test/.blogs/views/around_austin/widgets/bydates/bydates.rb +18 -0
- data/test/.blogs/views/around_austin/widgets/bydates/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/bydates/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/bydates/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/links/README +2 -0
- data/test/.blogs/views/around_austin/widgets/links/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/links/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/links/links.rb +90 -0
- data/test/.blogs/views/around_austin/widgets/links/list.data +3 -0
- data/test/.blogs/views/around_austin/widgets/links/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/news/README +2 -0
- data/test/.blogs/views/around_austin/widgets/news/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/news/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/news/list.data +4 -0
- data/test/.blogs/views/around_austin/widgets/news/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/news/news.rb +88 -0
- data/test/.blogs/views/around_austin/widgets/pages/README +2 -0
- data/test/.blogs/views/around_austin/widgets/pages/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/pages/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/pages/disclaim.lt3 +10 -0
- data/test/.blogs/views/around_austin/widgets/pages/faq.lt3 +41 -0
- data/test/.blogs/views/around_austin/widgets/pages/like-dislike.lt3 +11 -0
- data/test/.blogs/views/around_austin/widgets/pages/list.data +4 -0
- data/test/.blogs/views/around_austin/widgets/pages/local.rb +0 -0
- data/test/.blogs/views/around_austin/widgets/pages/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/pages/other-stuff.lt3 +10 -0
- data/test/.blogs/views/around_austin/widgets/pages/pages.rb +130 -0
- data/test/.blogs/views/around_austin/widgets/pinned/README +2 -0
- data/test/.blogs/views/around_austin/widgets/pinned/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/pinned/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/pinned/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/pinned/pinned.rb +111 -0
- data/test/.blogs/views/around_austin/widgets/search/README +2 -0
- data/test/.blogs/views/around_austin/widgets/search/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/search/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/search/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/search/search.rb +18 -0
- data/test/.blogs/views/around_austin/widgets/sitemap/README +2 -0
- data/test/.blogs/views/around_austin/widgets/sitemap/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/sitemap/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/sitemap/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/sitemap/sitemap.rb +18 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/OLD-example.lt3 +12 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/README +2 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/card.css +1 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/custom.rb +1 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/main.css +2 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/tag-cloud.lt3 +3 -0
- data/test/.blogs/views/around_austin/widgets/tag-cloud/tag-cloud.rb +18 -0
- data/test/.blogs/widgets/README +4 -0
- data/test/.blogs/widgets/bydates/README +2 -0
- data/test/.blogs/widgets/bydates/bydates.rb +18 -0
- data/test/.blogs/widgets/bydates/card.css +1 -0
- data/test/.blogs/widgets/bydates/custom.rb +1 -0
- data/test/.blogs/widgets/bydates/main.css +2 -0
- data/test/.blogs/widgets/links/README +2 -0
- data/test/.blogs/widgets/links/card.css +1 -0
- data/test/.blogs/widgets/links/custom.rb +1 -0
- data/test/.blogs/widgets/links/links.rb +90 -0
- data/test/.blogs/widgets/links/list.data +3 -0
- data/test/.blogs/widgets/links/main.css +2 -0
- data/test/.blogs/widgets/news/README +2 -0
- data/test/.blogs/widgets/news/card.css +1 -0
- data/test/.blogs/widgets/news/custom.rb +1 -0
- data/test/.blogs/widgets/news/list.data +4 -0
- data/test/.blogs/widgets/news/main.css +2 -0
- data/test/.blogs/widgets/news/news.rb +88 -0
- data/test/.blogs/widgets/pages/README +2 -0
- data/test/.blogs/widgets/pages/card.css +1 -0
- data/test/.blogs/widgets/pages/custom.rb +1 -0
- data/test/.blogs/widgets/pages/disclaim.lt3 +10 -0
- data/test/.blogs/widgets/pages/faq.lt3 +41 -0
- data/test/.blogs/widgets/pages/like-dislike.lt3 +11 -0
- data/test/.blogs/widgets/pages/list.data +4 -0
- data/test/.blogs/widgets/pages/local.rb +0 -0
- data/test/.blogs/widgets/pages/main.css +2 -0
- data/test/.blogs/widgets/pages/other-stuff.lt3 +10 -0
- data/test/.blogs/widgets/pages/pages.rb +130 -0
- data/test/.blogs/widgets/pinned/README +2 -0
- data/test/.blogs/widgets/pinned/card.css +1 -0
- data/test/.blogs/widgets/pinned/custom.rb +1 -0
- data/test/.blogs/widgets/pinned/main.css +2 -0
- data/test/.blogs/widgets/pinned/pinned.rb +111 -0
- data/test/.blogs/widgets/search/README +2 -0
- data/test/.blogs/widgets/search/card.css +1 -0
- data/test/.blogs/widgets/search/custom.rb +1 -0
- data/test/.blogs/widgets/search/main.css +2 -0
- data/test/.blogs/widgets/search/search.rb +18 -0
- data/test/.blogs/widgets/sitemap/README +2 -0
- data/test/.blogs/widgets/sitemap/card.css +1 -0
- data/test/.blogs/widgets/sitemap/custom.rb +1 -0
- data/test/.blogs/widgets/sitemap/main.css +2 -0
- data/test/.blogs/widgets/sitemap/sitemap.rb +18 -0
- data/test/.blogs/widgets/tag-cloud/OLD-example.lt3 +12 -0
- data/test/.blogs/widgets/tag-cloud/README +2 -0
- data/test/.blogs/widgets/tag-cloud/card.css +1 -0
- data/test/.blogs/widgets/tag-cloud/custom.rb +1 -0
- data/test/.blogs/widgets/tag-cloud/main.css +2 -0
- data/test/.blogs/widgets/tag-cloud/tag-cloud.lt3 +3 -0
- data/test/.blogs/widgets/tag-cloud/tag-cloud.rb +18 -0
- data/test/austin.rb +8 -3
- metadata +176 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5db993b1031cd1ce5d6e443be8de9f0bb5b7e3272e5cf5c731aac464f517088b
|
|
4
|
+
data.tar.gz: a5d2f603c30b05a064daa82ebadf9e51757f91bcd31c5a05cdd696c72b4bf828
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 15ea7ea4d1aa5f436fd2f8a736150d5289e4a3cc5d461514352aa3fc16b826f9853283c4c0989cb54f145570fdad3c974be6012c5bcec5822a27725869a4a931
|
|
7
|
+
data.tar.gz: ce8f9f2a6d5a5429b9f3c11edc3449e2b3c85ce290e76ed8fd0486972edf3147324c46bced9b891743db35f7928ea522615a7f22dd3f2cec56ef10bf2554c341
|
data/data/global.lt3
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
. <variable> <value>
|
|
4
4
|
. --------------------------------------------------
|
|
5
5
|
|
|
6
|
-
.variables view
|
|
6
|
+
.variables view ../../settings/view.txt
|
|
7
7
|
|
|
8
|
-
.variables recent
|
|
8
|
+
.variables recent ../../settings/recent.txt
|
|
9
9
|
|
|
10
|
-
.variables publish
|
|
10
|
+
.variables publish ../../settings/publish.txt
|
|
11
11
|
|
|
12
12
|
.variables
|
|
13
13
|
host http://SITE
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
. --------------------------------------------------
|
|
2
|
+
. Global settings are stored here in the form
|
|
3
|
+
. <variable> <value>
|
|
4
|
+
. --------------------------------------------------
|
|
5
|
+
|
|
6
|
+
.variables view settings/view.txt
|
|
7
|
+
|
|
8
|
+
.variables recent settings/recent.txt
|
|
9
|
+
|
|
10
|
+
.variables publish settings/publish.txt
|
|
11
|
+
|
|
12
|
+
.variables
|
|
13
|
+
host http://SITE
|
|
14
|
+
charset utf-8
|
|
15
|
+
url http://SITE
|
|
16
|
+
locale en_US
|
|
17
|
+
|
|
18
|
+
font.family verdana
|
|
19
|
+
.end
|
|
20
|
+
|
data/lib/exceptions.rb
CHANGED
|
@@ -36,3 +36,5 @@ make_exception(:NoNumericPrefix, "No numeric prefix on slug '%1'")
|
|
|
36
36
|
make_exception(:NoExtensionExpected, "No file extension expected on '%1'")
|
|
37
37
|
make_exception(:FilenameHasBlank, "File '%1' contains a blank space.")
|
|
38
38
|
|
|
39
|
+
make_exception(:MissingGlobal, "File global.lt3 is missing.")
|
|
40
|
+
|
data/lib/helpers-blog.rb
CHANGED
|
@@ -67,13 +67,13 @@ module RuneBlog::Helpers
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def get_all_widgets(dest)
|
|
70
|
-
wdir = RuneBlog::Path + "/widgets" # files kept inside gem
|
|
70
|
+
wdir = RuneBlog::Path + "/widgets" # files kept inside gem (or dev repo)
|
|
71
71
|
copy!(wdir/"*", dest)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
def get_widget(dest, widget: :all) # recursive
|
|
75
75
|
wdir = ".blogs/widgets"
|
|
76
|
-
wdir = RuneBlog::Path + "/widgets" # files kept inside gem
|
|
76
|
+
wdir = RuneBlog::Path + "/widgets" # files kept inside gem (or dev repo)
|
|
77
77
|
if widget == :all
|
|
78
78
|
copy!(wdir/"*", dest)
|
|
79
79
|
else
|
|
@@ -82,7 +82,7 @@ module RuneBlog::Helpers
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def copy_data(dest)
|
|
85
|
-
data = RuneBlog::Path + "/../data" # files kept inside gem
|
|
85
|
+
data = RuneBlog::Path + "/../data" # files kept inside gem (or dev repo)
|
|
86
86
|
files = %w[ROOT VIEW EDITOR universal.lt3 global.lt3 features.txt]
|
|
87
87
|
files.each {|file| copy(data + "/" + file, dest) unless File.exist?(dest/file) }
|
|
88
88
|
end
|
data/lib/liveblog.rb
CHANGED
|
@@ -7,10 +7,6 @@ require 'runeblog'
|
|
|
7
7
|
require 'pathmagic'
|
|
8
8
|
require 'processing'
|
|
9
9
|
|
|
10
|
-
# top = Livetext::Path + "/../plugin/liveblog/"
|
|
11
|
-
# eval(File.read("#{top}/testing.rb"))
|
|
12
|
-
|
|
13
|
-
|
|
14
10
|
def init_liveblog # FIXME - a lot of this logic sucks
|
|
15
11
|
log!(enter: __method__)
|
|
16
12
|
dir = Dir.pwd.sub(/\.blogs.*/, "")
|
|
@@ -65,27 +61,31 @@ def post
|
|
|
65
61
|
api.out " <!-- Post number #{@meta.num} -->\n "
|
|
66
62
|
end
|
|
67
63
|
|
|
68
|
-
|
|
69
|
-
log!(enter: __method__)
|
|
70
|
-
# Dumb - fix later - check up front as needed
|
|
71
|
-
# Should also check for praw lib
|
|
72
|
-
str = `which python3`
|
|
73
|
-
str.length > 0
|
|
74
|
-
end
|
|
64
|
+
### reddit integration broke at their end...
|
|
75
65
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
66
|
+
def _got_python?
|
|
67
|
+
log!(enter: __method__)
|
|
68
|
+
# Dumb - fix later - check up front as needed
|
|
69
|
+
# Should also check for praw lib
|
|
70
|
+
str = `which python3`
|
|
71
|
+
str.length > 0
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def _reddit_post_url(vdir, date, title, url)
|
|
75
|
+
log!(enter: __method__)
|
|
76
|
+
_got_python?
|
|
77
|
+
tmpfile = "/tmp/reddit-post-url.txt"
|
|
78
|
+
File.open(tmpfile, "w") do |tmp|
|
|
79
|
+
tmp.puts "[#{date}] #{title}"
|
|
80
|
+
tmp.puts url
|
|
88
81
|
end
|
|
82
|
+
rid = nil
|
|
83
|
+
Dir.chdir(vdir/:config) { rid = `python3 reddit/reddit_post_url.py` }
|
|
84
|
+
system("rm #{tmpfile}")
|
|
85
|
+
rid # returns reddit id
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
### ...end of reddit piece
|
|
89
89
|
|
|
90
90
|
def post_toolbar
|
|
91
91
|
log!(enter: __method__)
|
|
@@ -197,7 +197,7 @@ def banner
|
|
|
197
197
|
count += 1
|
|
198
198
|
tag, *data = line.split
|
|
199
199
|
data ||= []
|
|
200
|
-
deps = [@blog.view.globals[:ViewDir]
|
|
200
|
+
deps = [@blog.view.globals[:ViewDir]/"global.lt3"]
|
|
201
201
|
case tag
|
|
202
202
|
when "width"; wide = data[0]
|
|
203
203
|
when "height"; high = data[0]
|
data/lib/lowlevel.rb
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
def whence(back = 0)
|
|
2
|
+
file, line, inmeth = caller[back].split(":")
|
|
3
|
+
meth = inmeth[4..-2]
|
|
4
|
+
[file, line, meth]
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def checkpoint(msg = nil)
|
|
8
|
+
file, line, meth = whence(1)
|
|
9
|
+
print "--- "
|
|
10
|
+
if msg
|
|
11
|
+
puts msg
|
|
12
|
+
print " "
|
|
13
|
+
end
|
|
14
|
+
puts "#{meth} #{line} in #{file}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def warning(err)
|
|
18
|
+
file, line, meth = whence(2) # 2 = skip rescue
|
|
19
|
+
puts "Error in #{meth} in #{file} (non-fatal?)"
|
|
20
|
+
puts " err = #{err.inspect}"
|
|
21
|
+
puts " #{err.backtrace[0]}" if err.respond_to?(:backtrace)
|
|
22
|
+
puts
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def fatal(err)
|
|
26
|
+
file, line, meth = whence(2) # 2 = skip rescue
|
|
27
|
+
puts "Error in #{meth} in #{file}"
|
|
28
|
+
puts "WTF??"
|
|
29
|
+
puts " err = #{err.inspect}"
|
|
30
|
+
if err.respond_to?(:backtrace)
|
|
31
|
+
context = err.backtrace.map {|x| " " + x + "\n" }
|
|
32
|
+
puts context
|
|
33
|
+
end
|
|
34
|
+
abort "Terminated."
|
|
35
|
+
end
|
|
1
36
|
|
|
2
37
|
def _tmp_error(err)
|
|
3
38
|
STDERR.puts err
|
data/lib/menus.rb
CHANGED
|
@@ -51,7 +51,8 @@ def edit_post_index
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def edit_view_global
|
|
54
|
-
|
|
54
|
+
# CHANGED redefining "global" location
|
|
55
|
+
edit_file("global.lt3")
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def edit_settings_view
|
|
@@ -93,7 +94,6 @@ end
|
|
|
93
94
|
# dir = @blog.view.dir/"themes/standard/"
|
|
94
95
|
|
|
95
96
|
@std = "themes/standard"
|
|
96
|
-
@data = "." # CHANGED
|
|
97
97
|
|
|
98
98
|
Menu.top_config = {
|
|
99
99
|
"View: generator" => proc { edit_blog_generate },
|
data/lib/processing.rb
CHANGED
|
@@ -69,30 +69,16 @@ def preprocess(cwd: Dir.pwd, src:,
|
|
|
69
69
|
puts "#{sp} -- ^ Already up to date!" if debug && ! stale
|
|
70
70
|
end
|
|
71
71
|
rescue => err
|
|
72
|
-
|
|
73
|
-
msg << err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
|
74
|
-
STDERR.puts msg
|
|
75
|
-
STDERR.flush
|
|
76
|
-
log!(str: msg)
|
|
72
|
+
fatal(err)
|
|
77
73
|
end
|
|
78
74
|
|
|
79
|
-
# glv 2 - No such file or directory @ rb_check_realpath_internal - /Users/Hal/.blogs/views/computing/themes/standard/settings/view.txt
|
|
80
|
-
|
|
81
75
|
def get_live_vars(src)
|
|
82
76
|
dir, base = File.dirname(src), File.basename(src)
|
|
83
|
-
# puts "glv 1: src = #{src.inspect} dir,base = #{dir.inspect}, #{base.inspect}"
|
|
84
77
|
live = Livetext.customize(call: [".nopara"])
|
|
85
|
-
puts "glv 2: cd #{dir} xform #{base}\n "
|
|
86
|
-
# HAL9000:~ Hal$ find .blogs/views/computing/ -name global.lt3
|
|
87
|
-
# .blogs/views/computing//themes/standard/global.lt3
|
|
88
|
-
# HAL9000:~ Hal$ find .blogs/views/computing/ -name view.txt
|
|
89
|
-
# .blogs/views/computing//settings/view.txt
|
|
90
78
|
Dir.chdir(dir) { live.xform_file(base) }
|
|
91
79
|
live
|
|
92
|
-
rescue =>
|
|
93
|
-
|
|
94
|
-
puts $!
|
|
95
|
-
gets
|
|
80
|
+
rescue => err
|
|
81
|
+
fatal(err)
|
|
96
82
|
end
|
|
97
83
|
|
|
98
84
|
end
|
data/lib/publish.rb
CHANGED
|
@@ -14,15 +14,12 @@ class RuneBlog::Publishing
|
|
|
14
14
|
def initialize(view)
|
|
15
15
|
log!(enter: __method__, args: [view.to_s])
|
|
16
16
|
@blog = RuneBlog.blog
|
|
17
|
-
|
|
17
|
+
# CHANGED redefining "global" location
|
|
18
|
+
dir = @blog.root/:views/view # /"themes/standard/"
|
|
18
19
|
gfile = dir/"global.lt3"
|
|
19
|
-
|
|
20
|
-
puts "Pub#init 0 gfile = $ gfile.inspect} exist = #{there}"
|
|
21
|
-
return unless File.exist?(gfile) # FIXME Hackish as hell
|
|
20
|
+
raise MissingGlobal unless File.exist?(gfile)
|
|
22
21
|
|
|
23
|
-
# puts "Pub#init 1"
|
|
24
22
|
live = get_live_vars(gfile)
|
|
25
|
-
# puts "Pub#init 2 - vars = #{live.vars.inspect}\n "
|
|
26
23
|
@user = live.vars["publish.user"]
|
|
27
24
|
@server = live.vars["publish.server"]
|
|
28
25
|
@docroot = live.vars["publish.docroot"]
|
data/lib/repl.rb
CHANGED
|
@@ -269,7 +269,7 @@ log! str: "=== ...finished!"
|
|
|
269
269
|
|
|
270
270
|
# move to helpers
|
|
271
271
|
def modify_view_global(view_name)
|
|
272
|
-
gfile = "#{@blog.root}/views/#{view_name}/
|
|
272
|
+
gfile = "#{@blog.root}/views/#{view_name}/global.lt3"
|
|
273
273
|
lines = File.readlines(gfile).map(&:chomp)
|
|
274
274
|
vars = <<~EOF
|
|
275
275
|
.variables
|
|
@@ -311,12 +311,10 @@ log! str: "=== ...finished!"
|
|
|
311
311
|
end
|
|
312
312
|
@blog.create_view(arg)
|
|
313
313
|
lines = File.read("#{@blog.root}/data/global.lt3")
|
|
314
|
-
|
|
315
|
-
File.write("#{@blog.root}/views/#{@blog.view}/data/global.lt3",
|
|
314
|
+
File.write("#{@blog.root}/views/#{@blog.view}/global.lt3",
|
|
316
315
|
text.gsub(/VIEW_NAME/, @blog.view.to_s))
|
|
317
316
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
|
318
|
-
|
|
319
|
-
edit_file(@blog.view.dir/"data/global.lt3", vim: vim_params)
|
|
317
|
+
edit_file(@blog.view.dir/"global.lt3", vim: vim_params)
|
|
320
318
|
@blog.change_view(arg)
|
|
321
319
|
rescue ViewAlreadyExists
|
|
322
320
|
puts 'Blog already exists'
|
data/lib/runeblog.rb
CHANGED
|
@@ -73,8 +73,9 @@ class RuneBlog
|
|
|
73
73
|
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
|
74
74
|
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
|
75
75
|
views: [], back: "javascript:history.go(-1)", home: "no url")
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
arglist = [num, title, date, view, teaser, body, tags, views, back, home]
|
|
77
|
+
log!(enter: __method__, args: arglist, level: 3)
|
|
78
|
+
viewlist = (views + [view.to_s]).uniq.join(" ")
|
|
78
79
|
taglist = ".tags " + tags.join(" ")
|
|
79
80
|
|
|
80
81
|
<<~TEXT
|
|
@@ -91,7 +92,14 @@ class RuneBlog
|
|
|
91
92
|
#{body}
|
|
92
93
|
TEXT
|
|
93
94
|
end
|
|
94
|
-
|
|
95
|
+
rescue => err
|
|
96
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
97
|
+
puts " #{err.inspect}"
|
|
98
|
+
if err.respond_to?(:backtrace)
|
|
99
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
100
|
+
puts context
|
|
101
|
+
end
|
|
102
|
+
abort "\nTerminated."
|
|
95
103
|
end
|
|
96
104
|
|
|
97
105
|
def self.create_new_blog_repo(root_rel = ".blogs")
|
|
@@ -152,6 +160,9 @@ class RuneBlog
|
|
|
152
160
|
@sequence, @post_views, @post_tags = get_sequence, [], []
|
|
153
161
|
get_repo_config
|
|
154
162
|
read_features
|
|
163
|
+
rescue => err
|
|
164
|
+
puts "Error: #{__method__} - #{err.inspect}\n#{err.backtrace.join("\n")}\n "
|
|
165
|
+
abort "Terminated."
|
|
155
166
|
end
|
|
156
167
|
|
|
157
168
|
def complete_file(name, vars, hash)
|
|
@@ -165,6 +176,12 @@ class RuneBlog
|
|
|
165
176
|
|
|
166
177
|
hash.each_pair {|key, var| text.gsub!(key, vars[var]) }
|
|
167
178
|
File.write(name, text)
|
|
179
|
+
rescue => err
|
|
180
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
181
|
+
puts " #{err.inspect}"
|
|
182
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
183
|
+
puts context
|
|
184
|
+
abort "\nTerminated."
|
|
168
185
|
end
|
|
169
186
|
|
|
170
187
|
def _generate_settings(view = nil)
|
|
@@ -203,6 +220,14 @@ class RuneBlog
|
|
|
203
220
|
# recent.txt - SKIP THIS?
|
|
204
221
|
complete_file(settings/"recent.txt", {})
|
|
205
222
|
end
|
|
223
|
+
rescue => err
|
|
224
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
225
|
+
puts " #{err.inspect}"
|
|
226
|
+
if err.respond_to?(:backtrace)
|
|
227
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
228
|
+
puts context
|
|
229
|
+
end
|
|
230
|
+
abort "\nTerminated."
|
|
206
231
|
end
|
|
207
232
|
|
|
208
233
|
def _generate_global
|
|
@@ -215,6 +240,14 @@ class RuneBlog
|
|
|
215
240
|
/LOCALE/ => :locale}
|
|
216
241
|
complete_file(gfile, vars, hash)
|
|
217
242
|
_generate_settings
|
|
243
|
+
rescue => err
|
|
244
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
245
|
+
puts " #{err.inspect}"
|
|
246
|
+
if err.respond_to?(:backtrace)
|
|
247
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
248
|
+
puts context
|
|
249
|
+
end
|
|
250
|
+
abort "\nTerminated."
|
|
218
251
|
end
|
|
219
252
|
|
|
220
253
|
# FIXME reconcile with _get_draft data
|
|
@@ -225,6 +258,14 @@ class RuneBlog
|
|
|
225
258
|
meta.tags = meta.tags.split
|
|
226
259
|
RuneBlog.blog.post = meta
|
|
227
260
|
meta
|
|
261
|
+
rescue => err
|
|
262
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
263
|
+
puts " #{err.inspect}"
|
|
264
|
+
if err.respond_to?(:backtrace)
|
|
265
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
266
|
+
puts context
|
|
267
|
+
end
|
|
268
|
+
abort "\nTerminated."
|
|
228
269
|
end
|
|
229
270
|
|
|
230
271
|
def _deploy_local(dir)
|
|
@@ -346,12 +387,21 @@ class RuneBlog
|
|
|
346
387
|
File.write(@root/"data/VIEW", view_name)
|
|
347
388
|
@views << view # all views
|
|
348
389
|
view
|
|
390
|
+
rescue => err
|
|
391
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
392
|
+
puts " #{err.inspect}"
|
|
393
|
+
if err.respond_to?(:backtrace)
|
|
394
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
395
|
+
puts context
|
|
396
|
+
end
|
|
397
|
+
abort "\nTerminated."
|
|
349
398
|
end
|
|
350
399
|
|
|
351
400
|
def make_empty_view_tree(view_name)
|
|
352
401
|
log!(enter: __method__, args: [view_name], level: 2)
|
|
353
402
|
Dir.chdir(@root) do
|
|
354
403
|
cmd = "cp -r #{RuneBlog::Path}/../empty_view views/#{view_name}"
|
|
404
|
+
puts "#{__method__}: cmd = #{cmd.inspect}"
|
|
355
405
|
system!(cmd)
|
|
356
406
|
cmd = "cp -r widgets views/#{view_name}"
|
|
357
407
|
system!(cmd)
|
|
@@ -373,9 +423,10 @@ class RuneBlog
|
|
|
373
423
|
log!(enter: __method__, args: [view_name], level: 2)
|
|
374
424
|
make_empty_view_tree(view_name)
|
|
375
425
|
add_view(view_name)
|
|
426
|
+
# FIXME - fundamentally illogical?? what is "global" really?
|
|
427
|
+
src, dst = "#@root/data/global.lt3", "#@root/views/#{view_name}/global.lt3"
|
|
428
|
+
system("cp #{src} #{dst}")
|
|
376
429
|
mark_last_published("Initial creation")
|
|
377
|
-
# system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
|
|
378
|
-
system("cp #@root/data/global.lt3 #@root/views/#{view_name}/data/global.lt3")
|
|
379
430
|
@view.get_globals(true)
|
|
380
431
|
rescue => err
|
|
381
432
|
_tmp_error(err)
|
|
@@ -534,6 +585,14 @@ class RuneBlog
|
|
|
534
585
|
end
|
|
535
586
|
# curr_drafts
|
|
536
587
|
list.sort
|
|
588
|
+
rescue => err
|
|
589
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
590
|
+
puts " #{err.inspect}"
|
|
591
|
+
if err.respond_to?(:backtrace)
|
|
592
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
593
|
+
puts context
|
|
594
|
+
end
|
|
595
|
+
abort "\nTerminated."
|
|
537
596
|
end
|
|
538
597
|
|
|
539
598
|
def all_drafts
|
|
@@ -541,6 +600,14 @@ class RuneBlog
|
|
|
541
600
|
dir = @root/:drafts
|
|
542
601
|
drafts = Dir.entries(dir).grep(/^\d{4}.*/)
|
|
543
602
|
drafts.sort
|
|
603
|
+
rescue => err
|
|
604
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
605
|
+
puts " #{err.inspect}"
|
|
606
|
+
if err.respond_to?(:backtrace)
|
|
607
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
608
|
+
puts context
|
|
609
|
+
end
|
|
610
|
+
abort "\nTerminated."
|
|
544
611
|
end
|
|
545
612
|
|
|
546
613
|
def change_view(view)
|
|
@@ -549,6 +616,14 @@ class RuneBlog
|
|
|
549
616
|
File.write(@root/"data/VIEW", view)
|
|
550
617
|
# write_repo_config
|
|
551
618
|
self.view = view # error checking?
|
|
619
|
+
rescue => err
|
|
620
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
621
|
+
puts " #{err.inspect}"
|
|
622
|
+
if err.respond_to?(:backtrace)
|
|
623
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
624
|
+
puts context
|
|
625
|
+
end
|
|
626
|
+
abort "\nTerminated."
|
|
552
627
|
end
|
|
553
628
|
|
|
554
629
|
def generate_index(view)
|
|
@@ -565,8 +640,9 @@ class RuneBlog
|
|
|
565
640
|
log!(enter: __method__, args: [view])
|
|
566
641
|
vdir = @root/:views/view
|
|
567
642
|
@theme = @root/:views/view/:themes/:standard
|
|
568
|
-
|
|
569
|
-
depend = [vdir/"remote/etc/blog.css.lt3", @
|
|
643
|
+
# CHANGED - redefining "global"
|
|
644
|
+
# depend = [vdir/"remote/etc/blog.css.lt3", @theme/"global.lt3",
|
|
645
|
+
depend = [vdir/"remote/etc/blog.css.lt3", vdir/"global.lt3",
|
|
570
646
|
@theme/"blog/head.lt3",
|
|
571
647
|
# @theme/"navbar/navbar.lt3",
|
|
572
648
|
@theme/"blog/index.lt3"] # FIXME what about assets?
|
|
@@ -580,9 +656,13 @@ class RuneBlog
|
|
|
580
656
|
# rebuild widgets?
|
|
581
657
|
copy_widget_html(view)
|
|
582
658
|
rescue => err
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
659
|
+
puts "Error in #{__method__} in #{__FILE__}
|
|
660
|
+
puts " #{err.inspect}"
|
|
661
|
+
if err.respond_to?(:backtrace)
|
|
662
|
+
context = err.backtrace.map {|x| " " + x}.join("\n")
|
|
663
|
+
puts context
|
|
664
|
+
end
|
|
665
|
+
abort "\nTerminated."
|
|
586
666
|
end
|
|
587
667
|
|
|
588
668
|
def _get_views(draft)
|
|
@@ -642,25 +722,19 @@ class RuneBlog
|
|
|
642
722
|
|
|
643
723
|
def copy_widget_html(view)
|
|
644
724
|
log!(enter: __method__, level: 2)
|
|
645
|
-
log! str: "=== cwh cp 1"
|
|
646
725
|
vdir = @root/:views/view
|
|
647
726
|
remote = vdir/:remote
|
|
648
727
|
wdir = vdir/:widgets
|
|
649
728
|
widgets = Dir[wdir/"*"].select {|w| File.directory?(w) }
|
|
650
|
-
log! str: "=== cwh cp 2"
|
|
651
729
|
widgets.each do |w|
|
|
652
730
|
dir = File.basename(w)
|
|
653
731
|
rem = w.sub(/widgets/, "remote/widgets")
|
|
654
|
-
log! str: "=== cwh cp 3 w = #{w.inspect}"
|
|
655
732
|
create_dirs(rem)
|
|
656
733
|
files = Dir[w/"*"]
|
|
657
734
|
# files = files.select {|x| x =~ /(html|css)$/ }
|
|
658
735
|
tag = File.basename(w)
|
|
659
|
-
|
|
660
|
-
files.each {|file| system!("cp #{file} #{rem}", show: true) }
|
|
661
|
-
log! str: "=== cwh cp 5 tag was #{tag.inspect}"
|
|
736
|
+
files.each {|file| system!("cp #{file} #{rem}") } # , show: true) }
|
|
662
737
|
end
|
|
663
|
-
log! str: "=== cwh cp 6"
|
|
664
738
|
rescue => err
|
|
665
739
|
_tmp_error(err)
|
|
666
740
|
end
|
|
@@ -681,10 +755,9 @@ log! str: "=== cwh cp 6"
|
|
|
681
755
|
|
|
682
756
|
create_dirs(pdraft) # Step 1...
|
|
683
757
|
@view.globals ||= {}
|
|
684
|
-
args = {cwd: pdraft, src: draft,
|
|
685
|
-
|
|
758
|
+
# args = {cwd: pdraft, src: draft, dst: "guts.html",
|
|
759
|
+
# mix: "liveblog", vars: @view.globals}
|
|
686
760
|
preprocess cwd: pdraft, src: draft, # FIXME dependencies?
|
|
687
|
-
debug: true,
|
|
688
761
|
dst: "guts.html", mix: "liveblog", vars: @view.globals
|
|
689
762
|
hash = _post_metadata(draft, pdraft)
|
|
690
763
|
hash[:CurrentPost] = pmeta
|
|
@@ -693,7 +766,7 @@ args = {cwd: pdraft, src: draft, debug: true, dst: "guts.html",
|
|
|
693
766
|
copy(pdraft/"guts.html", vposts/nslug) # Step 3...
|
|
694
767
|
# Step 4...
|
|
695
768
|
preprocess cwd: pmeta, src: "../../themes/standard/post/generate.lt3",
|
|
696
|
-
force: true, vars: hash,
|
|
769
|
+
force: true, vars: hash,
|
|
697
770
|
dst: remote/ahtml, call: ".nopara"
|
|
698
771
|
FileUtils.rm_f(remote/"published")
|
|
699
772
|
timelog("Generated", remote/"history")
|
data/lib/runeblog_version.rb
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
if !defined?(RuneBlog::Path)
|
|
2
2
|
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
3
5
|
class RuneBlog
|
|
4
|
-
VERSION = "0.3.
|
|
6
|
+
VERSION = "0.3.35"
|
|
5
7
|
|
|
6
8
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
|
7
|
-
|
|
9
|
+
path ||= Pathname(__FILE__).realpath.dirname.to_s
|
|
10
|
+
|
|
11
|
+
Path = File.dirname(path) # inside gem or dev repo
|
|
8
12
|
end
|
|
9
13
|
|
|
10
14
|
# skeleton
|
data/lib/view.rb
CHANGED
|
@@ -12,10 +12,11 @@ class RuneBlog::View
|
|
|
12
12
|
@blog = RuneBlog.blog
|
|
13
13
|
@name = name
|
|
14
14
|
@publisher = RuneBlog::Publishing.new(name)
|
|
15
|
-
# puts "view #{name}: pub = #{@publisher.inspect}"
|
|
16
15
|
@can_publish = true # FIXME
|
|
17
16
|
# @blog.view = self # NOOOO??
|
|
18
17
|
get_globals
|
|
18
|
+
rescue => err
|
|
19
|
+
fatal(err)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def dump_globals_stderr
|
|
@@ -30,21 +31,26 @@ class RuneBlog::View
|
|
|
30
31
|
end
|
|
31
32
|
STDERR.puts
|
|
32
33
|
log!(str: "")
|
|
34
|
+
rescue => err
|
|
35
|
+
fatal(err)
|
|
33
36
|
end
|
|
34
37
|
|
|
35
38
|
def get_globals(force = false)
|
|
36
39
|
return if @globals && !force
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
gfile = @blog.root/"views/#@name/data/global.lt3"
|
|
41
|
+
gfile = @blog.root/"views/#@name/global.lt3"
|
|
40
42
|
return unless File.exist?(gfile) # Hackish!! how is View.new called from create_view??
|
|
41
43
|
|
|
42
44
|
live = Livetext.customize(call: ".nopara")
|
|
45
|
+
checkpoint "Error here? gfile = #{gfile}"
|
|
43
46
|
live.xform_file(gfile)
|
|
47
|
+
checkpoint "After xform"
|
|
44
48
|
live.setvar("ViewDir", @blog.root/:views/@name)
|
|
45
49
|
live.setvar("View", @name)
|
|
46
50
|
@globals = live.vars
|
|
47
51
|
# dump_globals_stderr
|
|
52
|
+
rescue => err
|
|
53
|
+
fatal(err)
|
|
48
54
|
end
|
|
49
55
|
|
|
50
56
|
def dir
|
data/runeblog.gemspec
CHANGED
|
@@ -7,6 +7,8 @@ require "runeblog_version"
|
|
|
7
7
|
|
|
8
8
|
Gem.post_install do |spec|
|
|
9
9
|
Dir.chdir(RuneBlog::Path)
|
|
10
|
+
# FIXME - depends on livetext being installed
|
|
11
|
+
# How to deal with this??
|
|
10
12
|
system("livetext -i liveblog.rb")
|
|
11
13
|
system("livetext -i code_rouge.rb")
|
|
12
14
|
end
|
|
@@ -21,8 +23,8 @@ spec = Gem::Specification.new do |s|
|
|
|
21
23
|
s.authors = ["Hal Fulton"]
|
|
22
24
|
s.email = 'rubyhacker@gmail.com'
|
|
23
25
|
s.executables << "blog"
|
|
24
|
-
s.add_runtime_dependency 'livetext', '~> 0.9', '>= 0.9.
|
|
25
|
-
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.
|
|
26
|
+
s.add_runtime_dependency 'livetext', '~> 0.9', '>= 0.9.44'
|
|
27
|
+
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.27'
|
|
26
28
|
s.add_runtime_dependency 'rouge', '~> 3.25', '>= 3.25.0'
|
|
27
29
|
|
|
28
30
|
s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/usr/local/bin/vim
|