journaltxt 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|