journaltxt 0.0.1 → 1.0.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.
- checksums.yaml +4 -4
- data/Manifest.txt +7 -0
- data/README.md +95 -3
- data/Rakefile +1 -1
- data/bin/jo +5 -0
- data/bin/journaltxt +5 -0
- data/lib/journaltxt/parser.rb +121 -0
- data/lib/journaltxt/version.rb +2 -2
- data/lib/journaltxt.rb +151 -7
- data/test/data/journal.txt +24 -0
- data/test/data/vienna.txt +83 -0
- data/test/helper.rb +2 -2
- data/test/test_build.rb +35 -0
- data/test/test_parser.rb +35 -0
- data/test/test_version.rb +5 -1
- metadata +18 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0322499b7aa32d50778470dfeb81fd0318e1795a
|
4
|
+
data.tar.gz: cf684977e3e28615aef65bc4dbc886012472cd84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fef0ccacf2d852ef6ef78657178663d0e2ef4a46df52aea5cd49bb1520376ab5ce3cad0bd0285a013c0b1893ac86e02a6b5fae2c73d73710265cf703ed572a1d
|
7
|
+
data.tar.gz: 4e789f63161222b3ff526bd70a92339e07903011c8d5782aa4168329c3a8c1ea95f4c0c635467bf7e52f72d30f93b658292b5a7a22a0518d46da1422550cb6fe
|
data/Manifest.txt
CHANGED
@@ -2,7 +2,14 @@ HISTORY.md
|
|
2
2
|
Manifest.txt
|
3
3
|
README.md
|
4
4
|
Rakefile
|
5
|
+
bin/jo
|
6
|
+
bin/journaltxt
|
5
7
|
lib/journaltxt.rb
|
8
|
+
lib/journaltxt/parser.rb
|
6
9
|
lib/journaltxt/version.rb
|
10
|
+
test/data/journal.txt
|
11
|
+
test/data/vienna.txt
|
7
12
|
test/helper.rb
|
13
|
+
test/test_build.rb
|
14
|
+
test/test_parser.rb
|
8
15
|
test/test_version.rb
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# journaltxt - reads Journal.TXT and writes out a blog (w/ Jekyll posts etc.)
|
1
|
+
# journaltxt - reads Journal.TXT and writes out (auto-builds) a blog (w/ Jekyll posts etc.)
|
2
2
|
|
3
3
|
* home :: [github.com/journaltxt/journaltxt](https://github.com/journaltxt/journaltxt)
|
4
|
-
* bugs :: [github.com/
|
4
|
+
* bugs :: [github.com/journaltxt/journaltxt/issues](https://github.com/journaltxt/journaltxt/issues)
|
5
5
|
* gem :: [rubygems.org/gems/journaltxt](https://rubygems.org/gems/journaltxt)
|
6
6
|
* rdoc :: [rubydoc.info/gems/journaltxt](http://rubydoc.info/gems/journaltxt)
|
7
7
|
* forum :: [groups.google.com/group/wwwmake](http://groups.google.com/group/wwwmake)
|
@@ -9,7 +9,99 @@
|
|
9
9
|
|
10
10
|
## Usage
|
11
11
|
|
12
|
-
|
12
|
+
Use the single-file [Journal.TXT format](https://journaltxt.github.io)
|
13
|
+
to write your blog posts / journal entries.
|
14
|
+
Example:
|
15
|
+
|
16
|
+
```
|
17
|
+
---
|
18
|
+
year: 2017
|
19
|
+
month: July
|
20
|
+
day: Mon 17
|
21
|
+
---
|
22
|
+
|
23
|
+
Jumping on tram #1 in front of the Staatsoper (state opera house).
|
24
|
+
Circling the Ringstrasse (grand boulevard vienna ring road)
|
25
|
+
for a great tour with a public transport ticket.
|
26
|
+
Passing the Hofburg (imperial palace), Parlament,
|
27
|
+
Burggarten (imperial court's garden),
|
28
|
+
Rathaus (city council), Burgtheater (imperial court's theatre),
|
29
|
+
Vienna University, and more. [...]
|
30
|
+
|
31
|
+
---
|
32
|
+
day: Tue 18
|
33
|
+
---
|
34
|
+
|
35
|
+
Visiting the imperial palace Schönbrunn - the former summer residence
|
36
|
+
of the Habsburg family.
|
37
|
+
Taking an inside tour of the 1 441-room baroque palace.
|
38
|
+
Enjoying the Neptune Fountain and sculptures in the public garden. [...]
|
39
|
+
|
40
|
+
---
|
41
|
+
day: Wed 19
|
42
|
+
---
|
43
|
+
|
44
|
+
Visiting the Sigmund Freud Museum in Bergstrasse 9. Too much culture -
|
45
|
+
need a beer therapy soon.
|
46
|
+
Passing through the Palais Lichtenstein to the
|
47
|
+
Beaver Brewing Co. (Liechtensteinstraße 69). [...]
|
48
|
+
```
|
49
|
+
|
50
|
+
(Source: [samples/Vienna.txt](https://github.com/journaltxt/journaltxt.github.io/blob/master/samples/Vienna.txt))
|
51
|
+
|
52
|
+
|
53
|
+
Try the `journaltxt` or `jo` (shortened alternate) command line tool e.g.:
|
54
|
+
|
55
|
+
```
|
56
|
+
$ journaltxt --help
|
57
|
+
|
58
|
+
Usage: journaltxt [OPTS] [JOURNAL.TXT FILES...]
|
59
|
+
-v, --[no-]verbose Show debug messages
|
60
|
+
-o, --output=PATH Output path (default: .)
|
61
|
+
-n, --name=NAME Journal name (default: Journal)
|
62
|
+
--[no-]date Add date to page title (default: true)
|
63
|
+
-h, --help Prints this help
|
64
|
+
```
|
65
|
+
|
66
|
+
For example, to auto-build all posts for a static Jekyll website / blog
|
67
|
+
in the `YYYY-MM-DD-title.md` format from a single-file in the Journal.TXT format
|
68
|
+
e.g. [Vienna.txt](https://github.com/journaltxt/journaltxt.github.io/blob/master/samples/Vienna.txt) use:
|
69
|
+
|
70
|
+
```
|
71
|
+
$ journaltxt --output=_posts Vienna.txt
|
72
|
+
-or-
|
73
|
+
$ journaltxt -o _posts Vienna.txt
|
74
|
+
-or-
|
75
|
+
$ jo -o _posts Vienna.txt
|
76
|
+
```
|
77
|
+
|
78
|
+
resulting in:
|
79
|
+
|
80
|
+
```
|
81
|
+
Writing entry 1/3 >Vienna - Day 1< to ./_posts/2017-07-17-vienna.md...
|
82
|
+
Writing entry 2/3 >Vienna - Day 2< to ./_posts/2017-07-18-vienna.md...
|
83
|
+
Writing entry 3/3 >Vienna - Day 3< to ./_posts/2017-07-19-vienna.md...
|
84
|
+
```
|
85
|
+
|
86
|
+
That's it.
|
87
|
+
**See the live auto-built [Vienna.TXT Blog »](https://journaltxt.github.io/blog)**
|
88
|
+
|
89
|
+
|
90
|
+
## Bonus: Add Your Perfect Day!
|
91
|
+
|
92
|
+
Berlin.TXT, Munich.TXT, Salzburg.TXT, Paris.TXT, London.TXT, Rome.TXT, New York.TXT, Austin.TXT, Tornoto.TXT, Calgary.TXT,
|
93
|
+
Melbourne.TXT, Sydney.TXT, ... - Anyone?
|
94
|
+
Write your perfect day(s) in a single-text file with Journal.TXT.
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
## Install
|
99
|
+
|
100
|
+
Just install the gem:
|
101
|
+
|
102
|
+
```
|
103
|
+
$ gem install journaltxt
|
104
|
+
```
|
13
105
|
|
14
106
|
|
15
107
|
## License
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Hoe.spec 'journaltxt' do
|
|
5
5
|
|
6
6
|
self.version = Journaltxt::VERSION
|
7
7
|
|
8
|
-
self.summary = "journaltxt - reads Journal.TXT and writes out a blog (w/ Jekyll posts etc.)"
|
8
|
+
self.summary = "journaltxt - reads Journal.TXT and writes out (auto-builds) a blog (w/ Jekyll posts etc.)"
|
9
9
|
self.description = summary
|
10
10
|
|
11
11
|
self.urls = ['https://github.com/journaltxt/journaltxt']
|
data/bin/jo
ADDED
data/bin/journaltxt
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Journaltxt
|
4
|
+
|
5
|
+
class Parser
|
6
|
+
|
7
|
+
def self.parse( text ) ## convenience helper
|
8
|
+
self.new( text ).parse
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize( text )
|
12
|
+
@text = text
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse
|
16
|
+
|
17
|
+
puts ":: Text :::::::::::::::::::::"
|
18
|
+
puts @text
|
19
|
+
|
20
|
+
## allow trailing spaces for now
|
21
|
+
## - allow leadin spaces too - why? why not?
|
22
|
+
|
23
|
+
## remove leading 1st separator --- first
|
24
|
+
text = @text.sub( /^---[ ]*$\n?/, '' )
|
25
|
+
b = text.split( /^---[ ]*$\n?/ )
|
26
|
+
|
27
|
+
items = b.each_slice(2).to_a
|
28
|
+
|
29
|
+
|
30
|
+
## process meta data blocks convert to hash via yaml
|
31
|
+
|
32
|
+
##
|
33
|
+
## todo: check for required entries
|
34
|
+
##
|
35
|
+
## first entry needs/requires:
|
36
|
+
## year/month/day
|
37
|
+
## all others requireÖ
|
38
|
+
## day
|
39
|
+
|
40
|
+
last_page_date = nil
|
41
|
+
|
42
|
+
items = items.each_with_index.map do |item,i|
|
43
|
+
page_meta = YAML.load( item[0] ) ## convert to hash (from yaml text)
|
44
|
+
pp page_meta
|
45
|
+
page_content = item[1]
|
46
|
+
|
47
|
+
## remove all (short-cut) date entries
|
48
|
+
year = page_meta.delete( 'year' )
|
49
|
+
month = page_meta.delete( 'month' )
|
50
|
+
day = page_meta.delete( 'day' )
|
51
|
+
|
52
|
+
puts " year: >#{year}< : #{year.class.name}, month: >#{month}< : #{month.class.name}, day: >#{day}< : #{day.class.name}"
|
53
|
+
|
54
|
+
## convert all date entries to ints
|
55
|
+
## lets us handle day => Sun 23 etc.
|
56
|
+
|
57
|
+
## note: assume year is always a number
|
58
|
+
if year.nil?
|
59
|
+
if last_page_date
|
60
|
+
year = last_page_date.year
|
61
|
+
else
|
62
|
+
### fix/todo: throw format/parse exception!!
|
63
|
+
puts "** year entry required / expected for first entry / meta data block"
|
64
|
+
exit 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
if day && day.is_a?(String)
|
70
|
+
puts " trying to convert day to int..."
|
71
|
+
nums_day = day.scan( /[0-9]+/ ) ## returns array e.g. ['12']
|
72
|
+
day = nums_day[0].to_i
|
73
|
+
puts " day: >#{day}< : #{day.class.name}"
|
74
|
+
end
|
75
|
+
|
76
|
+
if day.nil? ### fix/add - check if day >0 and< 31 why? why not??
|
77
|
+
### fix/todo: throw format/parse exception!!
|
78
|
+
puts "** day entry required in meta data block"
|
79
|
+
exit 1
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
if month && month.is_a?(String)
|
84
|
+
puts " trying to convert month to int..."
|
85
|
+
## for now let stdlib handle conversion
|
86
|
+
## supports abbreviated names (e.g. Jan) and full names (e.g. January)
|
87
|
+
|
88
|
+
## todo/fix: check what happens if montn is invalid/unknow
|
89
|
+
## returns nil? throws exception?
|
90
|
+
date_month = Date.parse( "#{year}/#{month}/#{day}" )
|
91
|
+
month = date_month.month
|
92
|
+
puts " month: >#{month}< : #{month.class.name}"
|
93
|
+
end
|
94
|
+
|
95
|
+
if month.nil?
|
96
|
+
if last_page_date
|
97
|
+
month = last_page_date.month
|
98
|
+
else
|
99
|
+
### fix/todo: throw format/parse exception!!
|
100
|
+
puts "** month entry required for first entry / meta data block"
|
101
|
+
exit 1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
page_date = Date.new( year, month, day )
|
107
|
+
last_page_date = page_date
|
108
|
+
|
109
|
+
## todo:check if date exists? possible?
|
110
|
+
## issue warning or something - will get replaced - why? why not?
|
111
|
+
page_meta['date'] = page_date
|
112
|
+
|
113
|
+
## pp YAML.dump( h )
|
114
|
+
|
115
|
+
[page_meta, page_content]
|
116
|
+
end
|
117
|
+
items
|
118
|
+
end # method parse
|
119
|
+
|
120
|
+
end # class Parser
|
121
|
+
end # module Journaltxt
|
data/lib/journaltxt/version.rb
CHANGED
data/lib/journaltxt.rb
CHANGED
@@ -3,23 +3,167 @@
|
|
3
3
|
|
4
4
|
# core and stdlibs
|
5
5
|
|
6
|
-
require 'strscan' ## StringScanner
|
7
|
-
require 'json'
|
8
6
|
require 'yaml'
|
9
7
|
require 'date'
|
10
8
|
require 'time'
|
11
9
|
require 'pp'
|
10
|
+
require 'optparse'
|
12
11
|
|
13
12
|
|
13
|
+
# our own code
|
14
|
+
require 'journaltxt/version' # let it always go first
|
15
|
+
require 'journaltxt/parser'
|
14
16
|
|
15
|
-
# 3rd party gems/libs
|
16
|
-
require 'logutils'
|
17
|
-
require 'props' ## used for IniFile.parse
|
18
17
|
|
18
|
+
module Journaltxt
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
def self.main
|
21
|
+
process( ARGV )
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
DEFAULTS = { outpath: '.',
|
26
|
+
date: true, # include date in (auto-)title
|
27
|
+
verbose: false,
|
28
|
+
name: 'Journal'
|
29
|
+
}
|
30
|
+
|
31
|
+
def self.process( args )
|
32
|
+
|
33
|
+
config = {} ## note: keep use supplied and defaults separated!!! entry nil - if not set!!
|
34
|
+
|
35
|
+
parser = OptionParser.new do |opts|
|
36
|
+
opts.banner = "Usage: journaltxt [OPTS]"
|
37
|
+
|
38
|
+
opts.on("-v", "--[no-]verbose", "Show debug messages") do |verbose|
|
39
|
+
config[:verbose] = verbose
|
40
|
+
end
|
41
|
+
|
42
|
+
## use --outdir or outputdir or something or output
|
43
|
+
opts.on("-o", "--output=PATH", "Output path (default: #{DEFAULTS[:outpath]})") do |outpath|
|
44
|
+
config[:outpath] = outpath
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("-n", "--name=NAME", "Journal name (default: #{DEFAULTS[:name]})") do |name|
|
48
|
+
config[:name] = name
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on("--[no-]date", "Add date to page title (default: #{DEFAULTS[:date]})") do |date|
|
52
|
+
config[:date] = date
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on("-h", "--help", "Prints this help") do
|
56
|
+
puts opts
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
parser.parse!(args)
|
62
|
+
|
63
|
+
puts ":: Config :::"
|
64
|
+
pp config
|
65
|
+
puts ":: Args :::"
|
66
|
+
pp args
|
67
|
+
|
68
|
+
if args.size == 0 ## default to journal.txt if no filename passed along
|
69
|
+
args << 'journal.txt'
|
70
|
+
end
|
71
|
+
|
72
|
+
args.each do |arg|
|
73
|
+
build_file( arg, config )
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
def self.build_file( path, opts={} )
|
79
|
+
text = File.open( path, 'r:bom|utf-8' ).read
|
80
|
+
|
81
|
+
## note: remove .txt extension if present for basename
|
82
|
+
basename = File.basename( path, '.txt' )
|
83
|
+
puts "basename:"
|
84
|
+
pp basename
|
85
|
+
|
86
|
+
## note: only overwrite if NOT user-supplied
|
87
|
+
opts[:name] ||= basename
|
88
|
+
|
89
|
+
build( text, opts )
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def self.build( text, opts={} )
|
94
|
+
puts ":: Opts :::"
|
95
|
+
pp opts
|
96
|
+
|
97
|
+
outpath = opts[:outpath] || DEFAULTS[:outpath]
|
98
|
+
name = opts[:name] || DEFAULTS[:name]
|
99
|
+
add_date = opts.fetch( :date, DEFAULTS[:date] ) ## special case boolean flag migth be false
|
100
|
+
|
101
|
+
|
102
|
+
items = Parser.parse( text )
|
103
|
+
|
104
|
+
items.each_with_index do |item,i|
|
105
|
+
## add page_title
|
106
|
+
## todo/fix: check if title exists? do NOT overwrite - why? why not?
|
107
|
+
|
108
|
+
page_meta = item[0]
|
109
|
+
page_date = page_meta['date']
|
110
|
+
|
111
|
+
page_title = ''
|
112
|
+
if name.downcase == 'journal' ## note: special case (do NOT auto-add journal to title)
|
113
|
+
## dont't add "default/generic" journal to title
|
114
|
+
else
|
115
|
+
page_title << "#{name} - "
|
116
|
+
end
|
117
|
+
page_title << "Day #{i+1}"
|
118
|
+
page_title << " - #{page_date.strftime('%a, %-d %b')}" if add_date
|
119
|
+
|
120
|
+
page_meta['title'] = page_title
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
items.each_with_index do |item,i|
|
125
|
+
page_meta = item[0]
|
126
|
+
page_content = item[1]
|
127
|
+
|
128
|
+
page_date = page_meta['date']
|
129
|
+
page_title = page_meta['title']
|
130
|
+
|
131
|
+
path = ''
|
132
|
+
path << "#{outpath}/#{page_date}"
|
133
|
+
path << "-#{name.downcase}.md" ## note: journal gets auto-added to the name too
|
134
|
+
|
135
|
+
##
|
136
|
+
## check if path exits?
|
137
|
+
page_root = File.dirname( File.expand_path( path ) )
|
138
|
+
unless File.directory?( page_root )
|
139
|
+
puts " make (missing) output dirs >#{page_root}...<"
|
140
|
+
FileUtils.makedirs( page_root )
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
puts "Writing entry #{i+1}/#{items.size} >#{page_title}< to #{path}..."
|
145
|
+
|
146
|
+
### todo:
|
147
|
+
## add a comment in the yaml meta data block e.g.
|
148
|
+
## # Journal.TXT entry 1/4 - auto-built on xxxx by journaltxt v1.2.3
|
149
|
+
## or something
|
150
|
+
|
151
|
+
comment = "Journal.TXT entry #{i+1}/#{items.size} - auto-built on #{Time.now} by journaltxt/#{Journaltxt.version}"
|
152
|
+
|
153
|
+
yaml_text = YAML.dump( page_meta )
|
154
|
+
## todo: check better way to add an upfront comment?
|
155
|
+
## for now just replace leading --- with leading --- with comment
|
156
|
+
yaml_text = yaml_text.sub( /^---[ ]*$\n?/, "---\n# #{comment}\n" )
|
157
|
+
|
158
|
+
File.open( path, 'w:utf-8' ) do |f|
|
159
|
+
f.write yaml_text
|
160
|
+
f.write "---\n\n"
|
161
|
+
f.write page_content
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
22
165
|
|
166
|
+
end # module Journaltxt
|
23
167
|
|
24
168
|
|
25
169
|
# say hello
|
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
year: 2017
|
3
|
+
month: July
|
4
|
+
day: Wed 19
|
5
|
+
---
|
6
|
+
Let's reinvent push-button publishing on the internets!
|
7
|
+
Use a single-file for your journal / diary / blog. That's it.
|
8
|
+
---
|
9
|
+
day: Thu 20
|
10
|
+
---
|
11
|
+
Crazy idea? Let's put up a website and a example blog auto-generated from journal.txt.
|
12
|
+
---
|
13
|
+
day: Fri 21
|
14
|
+
---
|
15
|
+
Did you know? The single-file format works great for advent calendars
|
16
|
+
or beer-of-the-day calendars.
|
17
|
+
---
|
18
|
+
day: Sat 22
|
19
|
+
---
|
20
|
+
Let's add another example. A diary about the Oktoberfest 2016. Prost. Cheers.
|
21
|
+
---
|
22
|
+
day: Sun 23
|
23
|
+
---
|
24
|
+
Let's rest.
|
@@ -0,0 +1,83 @@
|
|
1
|
+
---
|
2
|
+
year: 2017
|
3
|
+
month: July
|
4
|
+
day: Mon 17
|
5
|
+
---
|
6
|
+
|
7
|
+
Jumping on tram #1 in front of the Staatsoper (state opera house).
|
8
|
+
Circling the Ringstrasse (grand boulevard vienna ring road)
|
9
|
+
for a great tour with a public transport ticket.
|
10
|
+
Passing the Hofburg (imperial palace), Parlament,
|
11
|
+
Burggarten (imperial court's garden),
|
12
|
+
Rathaus (city council), Burgtheater (imperial court's theatre),
|
13
|
+
Vienna University, and more.
|
14
|
+
|
15
|
+
Getting off at the Vienna University stop.
|
16
|
+
Wandering to the heart of the city to the glourious
|
17
|
+
gothic Stepansdom (Stephan's cathedral).
|
18
|
+
|
19
|
+
Making my way to the Hofburg passing the Pestsäule (plague column) in the Graben
|
20
|
+
and the Michaeler Tor (St. Michael's gate). Passing the National Library and
|
21
|
+
the Imperial Sisi Apartments and Crown Jewels.
|
22
|
+
|
23
|
+
Crossing the Ringstrasse to the Kunsthistorisches Museum (national art gallery) - home
|
24
|
+
to a breath-taking art collection. Must see!
|
25
|
+
The (Great) Babel Tower by Pieter Bruegel the Elder (c.1525-1530 - 1569)
|
26
|
+
and the Geographer by Johannes Vermeer (1668 – 1669).
|
27
|
+
|
28
|
+
Recharging at 7 Stern Bräu in Neubau with a Gulash[^1] and beers brewed-on-location
|
29
|
+
with Vienna's fine tap water (from the Austrian Mountains).
|
30
|
+
Trying 7 Stern Märzen (5.1%, 13.5°),
|
31
|
+
7 Stern Weizen Classic (5.2%, 12.7°),
|
32
|
+
7 Stern Prager Dunkles (4.5%, 12.1°) and
|
33
|
+
today's special 7 Stern Smoked Porter (5.3%, 13.8°). Cheers. Prost.
|
34
|
+
|
35
|
+
[^1]: Goulash (Hungarian: gulyás [ˈɡujaːʃ]) is a soup or stew of meat and vegetables, seasoned with paprika and other spices.
|
36
|
+
|
37
|
+
---
|
38
|
+
day: Tue 18
|
39
|
+
---
|
40
|
+
|
41
|
+
Visiting the imperial palace Schönbrunn - the former summer residence
|
42
|
+
of the Habsburg family.
|
43
|
+
Taking an inside tour of the 1 441-room baroque palace.
|
44
|
+
Enjoying the Neptune Fountain and sculptures in the public garden.
|
45
|
+
|
46
|
+
Heading back to the city to explore Schloss Belvedere - another
|
47
|
+
unequalled baroque palace. Entering the art collection.
|
48
|
+
Must see! The Kiss by Gustav Klimt (1862-1918) -
|
49
|
+
a symbol of Vienna Jugendstil (Viennese Art Nouveau).
|
50
|
+
|
51
|
+
Recharging at Salm Bräu (Rennweg 8)
|
52
|
+
with Schinkenfleckerl (Austrian noodles with ham)
|
53
|
+
and beers brewed-on-location.
|
54
|
+
Trying Salm 1842 Pils (5.0%, 12.5°),
|
55
|
+
Salm Wiener Märzen (5.0%, 12.5°),
|
56
|
+
Salm Böhmisch Dunkles (5.0%, 12.5°)
|
57
|
+
and today's special Salm Burning Hell (4.9%, 12.2°). Cheers. Prost.
|
58
|
+
|
59
|
+
|
60
|
+
---
|
61
|
+
day: Wed 19
|
62
|
+
---
|
63
|
+
|
64
|
+
Visiting the Sigmund Freud Museum in Bergstrasse 9. Too much culture -
|
65
|
+
need a beer therapy soon.
|
66
|
+
Passing through the Palais Lichtenstein to the
|
67
|
+
Beaver Brewing Co. (Liechtensteinstraße 69).
|
68
|
+
Trying a 6-sample beer flight:
|
69
|
+
Beaver Blue Ribbon, Wry Pale Ale,
|
70
|
+
Late Summer IPA,
|
71
|
+
Witty Bastard Witbier,
|
72
|
+
Charlie Brown Ale,
|
73
|
+
Brave Lion Golden Strong Ale.
|
74
|
+
|
75
|
+
Heading to the Highlander (Sobieskiplatz 4) -
|
76
|
+
brewing Vienna's first and oldest porter - the
|
77
|
+
Highlander Stout. Let's try an unfiltered lager too - the Highlander Märzen Zwickl.
|
78
|
+
|
79
|
+
Last therapy stop - recharging in the Biergarten at Lichtenthaler Bräu
|
80
|
+
(Lichtensteinstraße 108). Sampling a Lichtenthaler Helles,
|
81
|
+
Lichtenthaler West Coast P.A.,
|
82
|
+
Lichtenthaler Dark U.S. Lager and
|
83
|
+
Lichtenthaler Dinkel Leicht.
|
data/test/helper.rb
CHANGED
@@ -10,7 +10,7 @@ require 'textutils'
|
|
10
10
|
|
11
11
|
|
12
12
|
## our own code
|
13
|
-
require '
|
13
|
+
require 'journaltxt'
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -18,6 +18,6 @@ LogUtils::Logger.root.level = :debug
|
|
18
18
|
|
19
19
|
|
20
20
|
def read_text( name )
|
21
|
-
text = File.
|
21
|
+
text = File.open( "#{Journaltxt.root}/test/data/#{name}.txt", 'r:bom|utf-8' ).read
|
22
22
|
text
|
23
23
|
end
|
data/test/test_build.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_build.rb
|
4
|
+
# or better
|
5
|
+
# rake test
|
6
|
+
|
7
|
+
require 'helper'
|
8
|
+
|
9
|
+
|
10
|
+
class TestParser < MiniTest::Test
|
11
|
+
|
12
|
+
def xxx_test_journal
|
13
|
+
text = read_text( 'journal' )
|
14
|
+
|
15
|
+
Journaltxt.build( text, name: 'journal', outpath: './tmp' )
|
16
|
+
|
17
|
+
assert true
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_journal_ii
|
21
|
+
Journaltxt.build_file( "#{Journaltxt.root}/test/data/journal.txt", outpath: './tmp' )
|
22
|
+
|
23
|
+
assert true
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_vienna
|
27
|
+
text = read_text( 'vienna' )
|
28
|
+
|
29
|
+
Journaltxt.build( text, name: 'Vienna', outpath: './tmp', date: false )
|
30
|
+
|
31
|
+
assert true
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end # class TestParser
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_parser.rb
|
4
|
+
# or better
|
5
|
+
# rake test
|
6
|
+
|
7
|
+
require 'helper'
|
8
|
+
|
9
|
+
|
10
|
+
class TestParser < MiniTest::Test
|
11
|
+
|
12
|
+
def test_journal
|
13
|
+
text = read_text( 'journal' )
|
14
|
+
|
15
|
+
items = Journaltxt::Parser.parse( text )
|
16
|
+
|
17
|
+
puts ":: Blocks ::::::::::::::::::::::"
|
18
|
+
pp items
|
19
|
+
|
20
|
+
assert true
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_vienna
|
24
|
+
text = read_text( 'vienna' )
|
25
|
+
|
26
|
+
items = Journaltxt::Parser.parse( text )
|
27
|
+
|
28
|
+
puts ":: Blocks ::::::::::::::::::::::"
|
29
|
+
pp items
|
30
|
+
|
31
|
+
assert true
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end # class TestParser
|
data/test/test_version.rb
CHANGED
@@ -10,8 +10,12 @@ require 'helper'
|
|
10
10
|
class TestVersion < MiniTest::Test
|
11
11
|
|
12
12
|
def test_version
|
13
|
-
puts Journaltxt
|
13
|
+
puts Journaltxt.version
|
14
|
+
puts Journaltxt::VERSION
|
15
|
+
|
14
16
|
assert true
|
17
|
+
|
18
|
+
## Journaltxt.process( ['--help'] )
|
15
19
|
end
|
16
20
|
|
17
21
|
end # class TestVersion
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journaltxt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -30,18 +30,20 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.16'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
41
|
-
description: journaltxt - reads Journal.TXT and writes out a blog (w/
|
42
|
-
etc.)
|
40
|
+
version: '3.16'
|
41
|
+
description: journaltxt - reads Journal.TXT and writes out (auto-builds) a blog (w/
|
42
|
+
Jekyll posts etc.)
|
43
43
|
email: wwwmake@googlegroups.com
|
44
|
-
executables:
|
44
|
+
executables:
|
45
|
+
- jo
|
46
|
+
- journaltxt
|
45
47
|
extensions: []
|
46
48
|
extra_rdoc_files:
|
47
49
|
- HISTORY.md
|
@@ -52,9 +54,16 @@ files:
|
|
52
54
|
- Manifest.txt
|
53
55
|
- README.md
|
54
56
|
- Rakefile
|
57
|
+
- bin/jo
|
58
|
+
- bin/journaltxt
|
55
59
|
- lib/journaltxt.rb
|
60
|
+
- lib/journaltxt/parser.rb
|
56
61
|
- lib/journaltxt/version.rb
|
62
|
+
- test/data/journal.txt
|
63
|
+
- test/data/vienna.txt
|
57
64
|
- test/helper.rb
|
65
|
+
- test/test_build.rb
|
66
|
+
- test/test_parser.rb
|
58
67
|
- test/test_version.rb
|
59
68
|
homepage: https://github.com/journaltxt/journaltxt
|
60
69
|
licenses:
|
@@ -81,5 +90,6 @@ rubyforge_project:
|
|
81
90
|
rubygems_version: 2.6.7
|
82
91
|
signing_key:
|
83
92
|
specification_version: 4
|
84
|
-
summary: journaltxt - reads Journal.TXT and writes out a blog (w/ Jekyll
|
93
|
+
summary: journaltxt - reads Journal.TXT and writes out (auto-builds) a blog (w/ Jekyll
|
94
|
+
posts etc.)
|
85
95
|
test_files: []
|