jekyll-rp_logs 0.3.0 → 0.3.1
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/CHANGELOG.md +12 -0
- data/README.md +39 -3
- data/jekyll-rp_logs.gemspec +5 -5
- data/lib/jekyll/rp_logs/rp_arcs.rb +4 -4
- data/lib/jekyll/rp_logs/rp_log_converter.rb +5 -67
- data/lib/jekyll/rp_logs/rp_page.rb +95 -0
- data/lib/jekyll/rp_logs/rp_tags.rb +3 -24
- data/lib/jekyll/rp_logs/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e50d8d6ccac428c01b48b401c814e37f717a2531
|
4
|
+
data.tar.gz: f06962be3b9c38a50df57c212098f88ec222529f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0bfee379da593428f209f4c8118a00d59d15e55ebe52c5524b497b57963dfe92cffeace97ab0ae73f70dc3ed2205c2be6f69fc15894838d7408d747c8ed9442
|
7
|
+
data.tar.gz: 4d985dd9d69ece28363b0d2e26c1a010ef3524bd698cf1d1fa6e1f577bb945f33ed4a696d129790f08440f673e9934ac14cf52804ca7c8b7848941f09eaf5b08
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
4
|
|
5
|
+
## [0.3.1] - 2015-11-12
|
6
|
+
### Changed
|
7
|
+
- Certain characters (`#/\`) are replaced with `_` now instead of a word escape.
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
- Tag implication and aliasing still work even with `infer_char_tags` turned off. ([#52])
|
11
|
+
- Unsafe characters for URLs are replaced with `_` in tags now instead of throwing an exception. ([#48], [#49])
|
12
|
+
|
5
13
|
## [0.3.0] - 2015-11-06
|
6
14
|
### Added
|
7
15
|
- Tags are displayed underneath the title of an RP on its page (requires theme update) ([#37])
|
@@ -66,6 +74,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
66
74
|
- Set required Ruby version to `~> 2.1` ([#32])
|
67
75
|
|
68
76
|
|
77
|
+
[0.3.1]: https://github.com/xiagu/jekyll-rp_logs/compare/v0.3.0...v0.3.1
|
69
78
|
[0.3.0]: https://github.com/xiagu/jekyll-rp_logs/compare/v0.2.1...v0.3.0
|
70
79
|
[0.2.1]: https://github.com/xiagu/jekyll-rp_logs/compare/v0.2.0...v0.2.1
|
71
80
|
[0.2.0]: https://github.com/xiagu/jekyll-rp_logs/compare/v0.1.6...v0.2.0
|
@@ -86,3 +95,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
86
95
|
[#12]: https://github.com/xiagu/jekyll-rp_logs/issues/12
|
87
96
|
[#36]: https://github.com/xiagu/jekyll-rp_logs/issues/36
|
88
97
|
[#37]: https://github.com/xiagu/jekyll-rp_logs/issues/37
|
98
|
+
[#48]: https://github.com/xiagu/jekyll-rp_logs/issues/48
|
99
|
+
[#49]: https://github.com/xiagu/jekyll-rp_logs/issues/49
|
100
|
+
[#52]: https://github.com/xiagu/jekyll-rp_logs/issues/52
|
data/README.md
CHANGED
@@ -9,6 +9,23 @@ This plugin provides support for building prettified versions of raw RP logs. Ex
|
|
9
9
|
|
10
10
|
The result of building all the test files can be seen here. http://andrew.rs/projects/jekyll-rp_logs/
|
11
11
|
|
12
|
+
## Table of Contents
|
13
|
+
|
14
|
+
* [Features](#features)
|
15
|
+
* [Installation](#installation)
|
16
|
+
* [Bundler (Recommended)](#bundler-recommended)
|
17
|
+
* [Manually](#manually)
|
18
|
+
* [Updating](#updating)
|
19
|
+
* [Usage](#usage)
|
20
|
+
* [Making a new site](#making-a-new-site)
|
21
|
+
* [Adding RPs](#adding-rps)
|
22
|
+
* [YAML Front Matter](#yaml-front-matter)
|
23
|
+
* [Formatting the logs](#formatting-the-logs)
|
24
|
+
* [Building the site](#building-the-site)
|
25
|
+
* [Tag implications and aliases](#tag-implications-and-aliases)
|
26
|
+
* [Development](#development)
|
27
|
+
* [Contributing](#contributing)
|
28
|
+
|
12
29
|
## Features
|
13
30
|
* Link to a specific post by its timestamp
|
14
31
|
* Show and hide OOC chatter at will
|
@@ -21,6 +38,8 @@ The result of building all the test files can be seen here. http://andrew.rs/pro
|
|
21
38
|
|
22
39
|
## Installation
|
23
40
|
|
41
|
+
If you are interested in developing this gem, skip down to the [Development](#development) section instead. This section is for setting up a site that uses the gem.
|
42
|
+
|
24
43
|
### Bundler (Recommended)
|
25
44
|
|
26
45
|
Install the bundle gem with
|
@@ -52,6 +71,17 @@ Alternatively, install it yourself as:
|
|
52
71
|
|
53
72
|
In this case you'll need to tell Jekyll to load the gem somehow, such as option 2 on the [Installing a plugin](http://jekyllrb.com/docs/plugins/#installing-a-plugin) instructions.
|
54
73
|
|
74
|
+
### Updating
|
75
|
+
When a new version of the gem is released, you can update with
|
76
|
+
|
77
|
+
bundle update
|
78
|
+
|
79
|
+
If there were any theme updates that you want to install, you'll have to run
|
80
|
+
|
81
|
+
rake rp_logs:new
|
82
|
+
|
83
|
+
again too. This will overwrite any changes you've made to the default SCSS, includes and index files. `_custom-vars.scss` and `_custom-rules.scss` won't be affected.
|
84
|
+
|
55
85
|
## Usage
|
56
86
|
|
57
87
|
### Making a new site
|
@@ -130,7 +160,9 @@ Optionally, add the `--watch` flag to automatically rebuild if you add more logs
|
|
130
160
|
**Warning again:** Destination folders are cleaned whenever Jekyll builds the site. Seriously, don't tell Jekyll to output to a directory that has anything useful in it.
|
131
161
|
|
132
162
|
### Tag implications and aliases
|
133
|
-
This feature allows you to set up implications, where something tagged with one tag will automatically be tagged with
|
163
|
+
This feature allows you to set up implications, where something tagged with one tag will automatically be tagged with a list of other tags. The implied tags need to be a list, even if there's only one.
|
164
|
+
|
165
|
+
Example syntax (for your `_config.yml`):
|
134
166
|
|
135
167
|
```yaml
|
136
168
|
tag_implications:
|
@@ -138,7 +170,9 @@ tag_implications:
|
|
138
170
|
lorem ipsum: [dolor, sit amet]
|
139
171
|
```
|
140
172
|
|
141
|
-
Tag aliases function just like implications, except the original tag is removed. So they effectively convert one tag into another tag. Or tags.
|
173
|
+
Tag aliases function just like implications, except the original tag is removed. So they effectively convert one tag into another tag. Or tags.
|
174
|
+
|
175
|
+
Example syntax (for your `_config.yml`):
|
142
176
|
|
143
177
|
```yaml
|
144
178
|
tag_aliases:
|
@@ -147,13 +181,15 @@ tag_aliases:
|
|
147
181
|
etaoin: [etaoin shrdlu]
|
148
182
|
```
|
149
183
|
|
184
|
+
The [default config file](https://github.com/xiagu/jekyll-rp_logs/blob/1247e4d2cacd7a1cb658828d286bbae049ce2e13/.themes/default/source/_config.yml.default#L41) has these same examples, demonstrating how and where they should be set.
|
185
|
+
|
150
186
|
## Development
|
151
187
|
|
152
188
|
After checking out the repo, run `bin/setup` to install dependencies.
|
153
189
|
|
154
190
|
To install this gem onto your local machine, run `rake install`.
|
155
191
|
|
156
|
-
To install the gem and create, then serve a development site to test your changes, run `rake
|
192
|
+
To install the gem and create, then serve a development site to test your changes, run `rake serve`. This will do a bunch of things:
|
157
193
|
|
158
194
|
* Create the `dev_site` directory
|
159
195
|
* Populate it with a `Gemfile` and `Rakefile` as mentioned in the installation instructions
|
data/jekyll-rp_logs.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "jekyll/rp_logs/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "jekyll-rp_logs"
|
@@ -13,8 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
14
14
|
end
|
15
15
|
|
16
|
-
spec.summary = %q
|
17
|
-
# spec.description = %q
|
16
|
+
spec.summary = %q(Jekyll plugin to turn raw IRC RP logs into pretty pages.)
|
17
|
+
# spec.description = %q(TODO: Write a longer description or delete this line.)
|
18
18
|
spec.homepage = "https://github.com/xiagu/jekyll-rp_logs"
|
19
19
|
spec.license = "MIT"
|
20
20
|
|
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_runtime_dependency "jekyll", "~> 2.5"
|
32
32
|
spec.add_runtime_dependency "rake", "~> 10.0"
|
33
|
-
|
33
|
+
|
34
34
|
spec.required_ruby_version = "~> 2.1"
|
35
35
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# Largely inspired by http://brizzled.clapper.org/blog/2010/12/20/some-jekyll-hacks/
|
2
|
+
require "forwardable"
|
2
3
|
|
3
4
|
module Jekyll
|
4
5
|
module RpLogs
|
5
6
|
# Holds arc information
|
6
7
|
class Arc
|
8
|
+
extend Forwardable
|
7
9
|
include Comparable
|
8
10
|
|
11
|
+
def_delegator :@name, :hash
|
12
|
+
|
9
13
|
attr_accessor :name, :rps
|
10
14
|
|
11
15
|
def initialize(name)
|
@@ -43,10 +47,6 @@ module Jekyll
|
|
43
47
|
rps == other.rps
|
44
48
|
end
|
45
49
|
|
46
|
-
def hash
|
47
|
-
name.hash
|
48
|
-
end
|
49
|
-
|
50
50
|
# actually by... start.. date?
|
51
51
|
def <=>(other)
|
52
52
|
name <=> other.name if self.class == other.class
|
@@ -162,42 +162,12 @@ module Jekyll
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def convert_rp(site, page)
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
page.content.each_line { |raw_line|
|
169
|
-
page[:format].each { |format|
|
170
|
-
log_line = self.class.parsers[format].parse_line(raw_line, options)
|
171
|
-
if log_line
|
172
|
-
compiled_lines << log_line
|
173
|
-
break
|
174
|
-
end
|
175
|
-
}
|
176
|
-
}
|
177
|
-
|
178
|
-
if compiled_lines.length == 0
|
179
|
-
skip_page(site, page, "No lines were matched by any format.")
|
180
|
-
return false
|
165
|
+
msg = catch :skip_page do
|
166
|
+
page.convert_rp(self.class.parsers)
|
167
|
+
return true
|
181
168
|
end
|
182
|
-
|
183
|
-
|
184
|
-
stats = extract_stats compiled_lines
|
185
|
-
|
186
|
-
# A decent amount of this could be moved into Page
|
187
|
-
split_output = compiled_lines.map(&:output)
|
188
|
-
page.content = split_output.join("\n")
|
189
|
-
|
190
|
-
if page[:infer_char_tags]
|
191
|
-
# Turn the nicks into characters
|
192
|
-
nick_tags = stats[:nicks].map! { |n| Tag.new("char:" + n) }
|
193
|
-
page[:rp_tags] = (nick_tags.merge page[:rp_tags]).to_a.sort
|
194
|
-
page.update_tags
|
195
|
-
end
|
196
|
-
|
197
|
-
page[:end_date] = stats[:end_date]
|
198
|
-
page[:start_date] ||= stats[:start_date]
|
199
|
-
|
200
|
-
true
|
169
|
+
skip_page(site, page, msg)
|
170
|
+
false
|
201
171
|
end
|
202
172
|
|
203
173
|
##
|
@@ -207,38 +177,6 @@ module Jekyll
|
|
207
177
|
site.collections[rp_key].docs.delete page.page
|
208
178
|
Jekyll.logger.warn "Skipping #{page.basename}: #{message}"
|
209
179
|
end
|
210
|
-
|
211
|
-
##
|
212
|
-
# Consider moving this into Parser or RpLogs::Page
|
213
|
-
# It doesn't really belong here
|
214
|
-
def merge_lines!(compiled_lines)
|
215
|
-
last_line = nil
|
216
|
-
compiled_lines.reject! { |line|
|
217
|
-
if last_line.nil?
|
218
|
-
last_line = line
|
219
|
-
false
|
220
|
-
elsif last_line.mergeable_with? line
|
221
|
-
last_line.merge! line
|
222
|
-
# Delete the current line from output and maintain last_line
|
223
|
-
# in case we need to merge multiple times.
|
224
|
-
true
|
225
|
-
else
|
226
|
-
last_line = line
|
227
|
-
false
|
228
|
-
end
|
229
|
-
}
|
230
|
-
end
|
231
|
-
|
232
|
-
def extract_stats(compiled_lines)
|
233
|
-
nicks = Set.new
|
234
|
-
compiled_lines.each { |line|
|
235
|
-
nicks << line.sender if line.output_type == :rp
|
236
|
-
}
|
237
|
-
|
238
|
-
{ nicks: nicks,
|
239
|
-
end_date: compiled_lines[-1].timestamp,
|
240
|
-
start_date: compiled_lines[0].timestamp }
|
241
|
-
end
|
242
180
|
end
|
243
181
|
end
|
244
182
|
end
|
@@ -45,6 +45,21 @@ module Jekyll
|
|
45
45
|
tags.map(&:to_s)
|
46
46
|
end
|
47
47
|
|
48
|
+
def convert_rp(parsers)
|
49
|
+
compiled_lines = convert_all_lines(parsers)
|
50
|
+
|
51
|
+
merge_lines! compiled_lines
|
52
|
+
stats = extract_stats compiled_lines
|
53
|
+
|
54
|
+
# A decent amount of this could be moved into Page
|
55
|
+
split_output = compiled_lines.map(&:output)
|
56
|
+
page.content = split_output.join("\n")
|
57
|
+
|
58
|
+
update_page_properties(stats)
|
59
|
+
|
60
|
+
true
|
61
|
+
end
|
62
|
+
|
48
63
|
##
|
49
64
|
# Check this page for errors, using the provided list of supported parse
|
50
65
|
# formats
|
@@ -85,6 +100,86 @@ module Jekyll
|
|
85
100
|
self[:rp_tags] = Tag[self.class.tag_implication_handler.update_tags(tag_strings.to_set)]
|
86
101
|
self
|
87
102
|
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def convert_all_lines(parsers)
|
107
|
+
compiled_lines = []
|
108
|
+
content.each_line do |raw_line|
|
109
|
+
log_line = parse_line(parsers, raw_line)
|
110
|
+
compiled_lines << log_line if log_line
|
111
|
+
end
|
112
|
+
|
113
|
+
if compiled_lines.length == 0
|
114
|
+
throw :skip_page, "No lines were matched by any format."
|
115
|
+
end
|
116
|
+
|
117
|
+
compiled_lines
|
118
|
+
end
|
119
|
+
|
120
|
+
##
|
121
|
+
# Return the line parsed by the first matching parser, or nil if
|
122
|
+
# there are no matches.
|
123
|
+
def parse_line(parsers, raw_line)
|
124
|
+
self[:format].each do |format|
|
125
|
+
log_line = parsers[format].parse_line(raw_line, options)
|
126
|
+
return log_line if log_line
|
127
|
+
end
|
128
|
+
nil
|
129
|
+
end
|
130
|
+
|
131
|
+
##
|
132
|
+
# Merge all lines that can be merged. Modifies the list of lines.
|
133
|
+
def merge_lines!(compiled_lines)
|
134
|
+
last_line = nil
|
135
|
+
compiled_lines.reject! do |line|
|
136
|
+
if last_line.nil?
|
137
|
+
last_line = line
|
138
|
+
false
|
139
|
+
elsif last_line.mergeable_with? line
|
140
|
+
last_line.merge! line
|
141
|
+
# Delete the current line from output and maintain last_line
|
142
|
+
# in case we need to merge multiple times.
|
143
|
+
true
|
144
|
+
else
|
145
|
+
last_line = line
|
146
|
+
false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Returns various stats about the line content:
|
153
|
+
# - nicks: The nicks involved
|
154
|
+
# - end_date: The timestamp of the last post
|
155
|
+
# - start_date: The timestamp of the first post
|
156
|
+
def extract_stats(compiled_lines)
|
157
|
+
nicks = Set.new
|
158
|
+
compiled_lines.each do |line|
|
159
|
+
nicks << line.sender if line.output_type == :rp
|
160
|
+
end
|
161
|
+
|
162
|
+
{ nicks: nicks,
|
163
|
+
end_date: compiled_lines[-1].timestamp,
|
164
|
+
start_date: compiled_lines[0].timestamp }
|
165
|
+
end
|
166
|
+
|
167
|
+
##
|
168
|
+
# Update properties of the page based on statistics.
|
169
|
+
# - Adds tags based on nicks involved, if the infer_char_tags option is
|
170
|
+
# set to true.
|
171
|
+
# - Updated end and start date.
|
172
|
+
def update_page_properties(stats)
|
173
|
+
if self[:infer_char_tags]
|
174
|
+
# Turn the nicks into characters
|
175
|
+
nick_tags = stats[:nicks].map! { |n| Tag.new("char:" + n) }
|
176
|
+
self[:rp_tags] = (nick_tags.merge self[:rp_tags]).to_a.sort
|
177
|
+
end
|
178
|
+
update_tags
|
179
|
+
|
180
|
+
self[:end_date] = stats[:end_date]
|
181
|
+
self[:start_date] ||= stats[:start_date]
|
182
|
+
end
|
88
183
|
end
|
89
184
|
end
|
90
185
|
end
|
@@ -8,13 +8,6 @@ module Jekyll
|
|
8
8
|
CHAR_FLAG = /^char:(?<char_name>.*)/
|
9
9
|
META_TAGS = /(safe|questionable|explicit|canon|noncanon|complete|incomplete)/
|
10
10
|
|
11
|
-
TAG_NAME_MAP = {
|
12
|
-
"#" => "sharp",
|
13
|
-
"/" => "slash",
|
14
|
-
"\\" => "backslash",
|
15
|
-
" " => "_"
|
16
|
-
}.freeze
|
17
|
-
|
18
11
|
TYPE_CLASSES = {
|
19
12
|
character: ["rp-tag-character"],
|
20
13
|
meta: ["rp-tag-meta"],
|
@@ -90,24 +83,10 @@ module Jekyll
|
|
90
83
|
|
91
84
|
private
|
92
85
|
|
93
|
-
# Map a tag to its directory name.
|
94
|
-
#
|
86
|
+
# Map a tag to its directory name. Unsafe characters are replaced with
|
87
|
+
# underscores. This restricts the dir name to safe characters in URLs.
|
95
88
|
def name_to_dir(name)
|
96
|
-
|
97
|
-
name.each_char do |c|
|
98
|
-
if c =~ /[-A-Za-z0-9_|\[\]]/
|
99
|
-
s += c
|
100
|
-
else
|
101
|
-
c2 = TAG_NAME_MAP[c]
|
102
|
-
unless c2
|
103
|
-
msg = "Bad character '#{c}' in tag '#{name}'"
|
104
|
-
puts("*** #{msg}")
|
105
|
-
raise Exception.new(msg)
|
106
|
-
end
|
107
|
-
s += "#{c2}"
|
108
|
-
end
|
109
|
-
end
|
110
|
-
s
|
89
|
+
name.gsub(/[^-A-Za-z0-9_|\[\]]/, "_")
|
111
90
|
end
|
112
91
|
end
|
113
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-rp_logs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anrodger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|