jekyll-rp_logs 0.1.6 → 0.2.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/.codeclimate.yml +46 -0
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rubocop.yml +2 -0
- data/.themes/default/source/_config.yml.default +13 -3
- data/.travis.yml +9 -0
- data/CHANGELOG.md +55 -0
- data/README.md +85 -32
- data/Rakefile +42 -5
- data/jekyll-rp_logs.gemspec +6 -1
- data/lib/jekyll/rp_logs/parse_irssi_xchat.rb +35 -37
- data/lib/jekyll/rp_logs/parse_mirc.rb +40 -42
- data/lib/jekyll/rp_logs/parse_skype_12hour.rb +33 -45
- data/lib/jekyll/rp_logs/parse_skype_24hour.rb +33 -41
- data/lib/jekyll/rp_logs/parse_weechat.rb +36 -36
- data/lib/jekyll/rp_logs/rp_arcs.rb +13 -16
- data/lib/jekyll/rp_logs/rp_log_converter.rb +140 -117
- data/lib/jekyll/rp_logs/rp_logline.rb +225 -0
- data/lib/jekyll/rp_logs/rp_page.rb +63 -0
- data/lib/jekyll/rp_logs/rp_parser.rb +9 -103
- data/lib/jekyll/rp_logs/rp_tag_index.rb +18 -20
- data/lib/jekyll/rp_logs/rp_tasks.rb +5 -6
- data/lib/jekyll/rp_logs/version.rb +1 -1
- data/lib/jekyll/rp_logs.rb +4 -5
- metadata +53 -4
@@ -1,114 +1,20 @@
|
|
1
1
|
module Jekyll
|
2
2
|
module RpLogs
|
3
|
-
|
4
3
|
class Parser
|
5
4
|
FORMAT_STR = nil
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
RP_FLAG = '!RP'
|
10
|
-
OOC_FLAG = '!OOC'
|
11
|
-
|
12
|
-
attr :timestamp, :mode, :sender, :contents
|
13
|
-
attr :flags
|
14
|
-
# Some things depend on the original type of the line (nick format)
|
15
|
-
attr :base_type
|
16
|
-
attr :output_type
|
17
|
-
attr :options
|
18
|
-
|
19
|
-
attr :last_merged_timestamp
|
20
|
-
|
21
|
-
def initialize(timestamp, options = {}, sender:, contents:, flags:, type:, mode: ' ')
|
22
|
-
@timestamp = timestamp
|
23
|
-
# Initialize to be the same as @timestamp
|
24
|
-
@last_merged_timestamp = timestamp
|
25
|
-
@mode = mode
|
26
|
-
@sender = sender
|
27
|
-
@contents = contents
|
28
|
-
@flags = flags.split(' ')
|
29
|
-
|
30
|
-
@base_type = type
|
31
|
-
@output_type = type
|
32
|
-
|
33
|
-
@options = options
|
34
|
-
|
35
|
-
# This makes it RP by default
|
36
|
-
@output_type = :rp if options[:strict_ooc]
|
6
|
+
# These patterns are reasonably universal.
|
7
|
+
# (?<foo>pattern) is a named group accessible via $LAST_MATCH_INFO[:foo]
|
37
8
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# Flags override our assumptions, always
|
42
|
-
if flags.include? RP_FLAG then
|
43
|
-
@output_type = :rp
|
44
|
-
elsif flags.include? OOC_FLAG then
|
45
|
-
@output_type = :ooc
|
46
|
-
end
|
47
|
-
end
|
9
|
+
# IRC mode characters for most IRCds.
|
10
|
+
MODE = /(?<mode>[+%@&~!]?)/
|
48
11
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
# String used when hovering over timestamps (friendly long-form)
|
53
|
-
title = @timestamp.strftime('%H:%M:%S %B %-d, %Y')
|
54
|
-
# String actually displayed on page
|
55
|
-
display = @timestamp.strftime('%H:%M')
|
56
|
-
ts_out = "<a name=\"#{anchor}\" title=\"#{title}\" href=\"##{anchor}\">#{display}</a>"
|
12
|
+
# The allowable characters in nicks. Errs on the side of being permissive
|
13
|
+
# rather than restrictive
|
14
|
+
NICK = /(?<nick>[\w\-\\\[\]\{\}\^\`\|]+)/
|
57
15
|
|
58
|
-
|
59
|
-
|
60
|
-
when :rp
|
61
|
-
sender_out = " * #{@sender}"
|
62
|
-
when :ooc
|
63
|
-
sender_out = " <#{@mode}#{@sender}>"
|
64
|
-
else
|
65
|
-
# Explode.
|
66
|
-
throw "No known type: #{@base_type}"
|
67
|
-
end
|
68
|
-
|
69
|
-
tag_class = nil
|
70
|
-
tag_close = "</p>"
|
71
|
-
case @output_type
|
72
|
-
when :rp
|
73
|
-
tag_class = "rp"
|
74
|
-
when :ooc
|
75
|
-
tag_class = "ooc"
|
76
|
-
else
|
77
|
-
# Explode.
|
78
|
-
throw "No known type: #{@output_type}"
|
79
|
-
end
|
80
|
-
tag_open = "<p class=\"#{tag_class}\">"
|
81
|
-
|
82
|
-
"#{tag_open}#{ts_out}#{sender_out} #{@contents}#{tag_close}"
|
83
|
-
end
|
84
|
-
|
85
|
-
def mergeable_with?(next_line)
|
86
|
-
# Only merge posts close enough in time
|
87
|
-
# The difference in time between the post merged into this one, and the next post, must be less than the limit
|
88
|
-
close_enough_time = (next_line.timestamp - @last_merged_timestamp) * 24 * 60 * 60 <= MAX_SECONDS_BETWEEN_POSTS
|
89
|
-
# Only merge posts with same sender
|
90
|
-
same_sender = @sender == next_line.sender
|
91
|
-
# Only merge rp lines
|
92
|
-
is_rp = @output_type == :rp
|
93
|
-
# Merge if next post is rp, or sender has split_to_normal_text property
|
94
|
-
# Only merge if the base type was OOC... otherwise you couldn't force not merging
|
95
|
-
# Maybe a job for !NOTMERGE flag, or similar
|
96
|
-
next_line_is_rp = next_line.output_type == :rp || \
|
97
|
-
(@options[:merge_text_into_rp].include?(@sender) && next_line.base_type == :ooc)
|
98
|
-
|
99
|
-
close_enough_time && same_sender && is_rp && next_line_is_rp
|
100
|
-
end
|
101
|
-
|
102
|
-
def merge!(next_line)
|
103
|
-
@contents += ' ' + next_line.contents
|
104
|
-
@last_merged_timestamp = next_line.timestamp
|
105
|
-
end
|
106
|
-
|
107
|
-
def inspect()
|
108
|
-
"<#{@mode}#{@sender}> (#{@base_type} -> #{@output_type}) #{@content}"
|
109
|
-
end
|
110
|
-
end
|
16
|
+
# Match flags used for forcing the parser to treat the line a certain way
|
17
|
+
FLAGS = /(?<flags>(?:![A-Z]+ )*)/
|
111
18
|
end
|
112
|
-
|
113
19
|
end
|
114
20
|
end
|
@@ -2,23 +2,22 @@
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module RpLogs
|
5
|
-
|
6
5
|
class TagIndex < Jekyll::Page
|
7
6
|
def initialize(site, base, dir, tag, pages)
|
8
7
|
@site = site
|
9
8
|
@base = base
|
10
9
|
@dir = dir
|
11
|
-
@name =
|
10
|
+
@name = "index.html"
|
12
11
|
|
13
|
-
|
12
|
+
process(@name)
|
14
13
|
# Get tag_index filename
|
15
|
-
tag_index = (site.config[
|
16
|
-
|
17
|
-
|
14
|
+
tag_index = (site.config["rp_tag_index_layout"] || "tag_index") + ".html"
|
15
|
+
read_yaml(File.join(base, "_layouts"), tag_index)
|
16
|
+
data["tag"] = tag # Set which tag this index is for
|
18
17
|
# Sort tagged RPs by their start date
|
19
|
-
|
20
|
-
tag_title_prefix = site.config[
|
21
|
-
|
18
|
+
data["pages"] = pages.sort_by { |p| p.data["start_date"] }
|
19
|
+
tag_title_prefix = site.config["rp_tag_title_prefix"] || "Tag: "
|
20
|
+
data["title"] = "#{tag_title_prefix}#{tag}"
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
@@ -27,30 +26,29 @@ module Jekyll
|
|
27
26
|
# Needs to run after RpLogGenerator
|
28
27
|
priority :low
|
29
28
|
|
30
|
-
def initialize(config)
|
31
|
-
config[
|
32
|
-
config[
|
29
|
+
def initialize(config)
|
30
|
+
config["rp_tag_index"] ||= true
|
31
|
+
config["rp_tag_dir"] ||= "/tags"
|
33
32
|
end
|
34
33
|
|
35
34
|
def generate(site)
|
36
|
-
return unless site.config[
|
37
|
-
|
38
|
-
dir = site.config[
|
35
|
+
return unless site.config["rp_tag_index"]
|
36
|
+
|
37
|
+
dir = site.config["rp_tag_dir"]
|
39
38
|
tags = rps_by_tag(site)
|
40
|
-
tags.each_pair { |tag, pages|
|
39
|
+
tags.each_pair { |tag, pages|
|
41
40
|
site.pages << TagIndex.new(site, site.source, File.join(dir, tag.dir), tag, pages)
|
42
41
|
}
|
43
42
|
end
|
44
43
|
|
45
44
|
# Returns a hash of tags => [pages with tag]
|
46
|
-
def rps_by_tag(site)
|
45
|
+
private def rps_by_tag(site)
|
47
46
|
tag_ref = Hash.new { |hash, key| hash[key] = Set.new }
|
48
|
-
site.collections[RpLogGenerator
|
49
|
-
page.data[
|
47
|
+
site.collections[RpLogGenerator.rp_key].docs.each { |page|
|
48
|
+
page.data["rp_tags"].each { |tag| tag_ref[tag] << page }
|
50
49
|
}
|
51
50
|
return tag_ref
|
52
51
|
end
|
53
|
-
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rake"
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module RpLogs
|
@@ -21,7 +21,7 @@ module Jekyll
|
|
21
21
|
# Octopress
|
22
22
|
def ask(message, valid_options)
|
23
23
|
if valid_options
|
24
|
-
answer = get_stdin("#{message} #{valid_options.to_s.gsub(/"/, '').gsub(/, /,'/')} ")
|
24
|
+
answer = get_stdin("#{message} #{valid_options.to_s.gsub(/"/, '').gsub(/, /, '/')} ") until valid_options.include?(answer)
|
25
25
|
else
|
26
26
|
answer = get_stdin(message)
|
27
27
|
end
|
@@ -30,11 +30,10 @@ module Jekyll
|
|
30
30
|
|
31
31
|
def install_tasks
|
32
32
|
namespace :rp_logs do
|
33
|
+
directory "_rps"
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
desc 'Create a new Jekyll site for RP logs, with the default theme'
|
37
|
-
task :new do |args|
|
35
|
+
desc "Create a new Jekyll site for RP logs, with the default theme"
|
36
|
+
task :new do
|
38
37
|
if File.directory?("_sass")
|
39
38
|
abort("rake aborted!") if ask("A theme is already installed, proceeding will overwrite existing non-custom files. Are you sure?", ['y', 'n']) == 'n'
|
40
39
|
end
|
data/lib/jekyll/rp_logs.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
require "jekyll/rp_logs/version"
|
2
|
-
require
|
2
|
+
require "jekyll"
|
3
3
|
|
4
4
|
module Jekyll
|
5
5
|
module RpLogs
|
6
|
-
|
7
6
|
end
|
8
7
|
end
|
9
8
|
|
10
9
|
# Require the main converter plugin first
|
11
|
-
require
|
12
|
-
require
|
10
|
+
require "jekyll/rp_logs/rp_log_converter"
|
11
|
+
require "jekyll/rp_logs/rp_tag_index"
|
13
12
|
|
14
13
|
# Now require all of the parsers
|
15
14
|
Gem.find_files("jekyll/rp_logs/parse*.rb").each { |path| require path }
|
16
15
|
|
17
16
|
# Require the rake tasks
|
18
|
-
require
|
17
|
+
require "jekyll/rp_logs/rp_tasks"
|
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.
|
4
|
+
version: 0.2.0
|
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
|
+
date: 2015-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,48 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codeclimate-test-reporter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: jekyll
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,8 +101,11 @@ executables: []
|
|
59
101
|
extensions: []
|
60
102
|
extra_rdoc_files: []
|
61
103
|
files:
|
104
|
+
- ".codeclimate.yml"
|
62
105
|
- ".gitignore"
|
63
106
|
- ".gitmodules"
|
107
|
+
- ".rspec"
|
108
|
+
- ".rubocop.yml"
|
64
109
|
- ".themes/default/source/_config.yml.default"
|
65
110
|
- ".themes/default/source/_includes/footer.html"
|
66
111
|
- ".themes/default/source/_includes/head.html"
|
@@ -79,6 +124,8 @@ files:
|
|
79
124
|
- ".themes/default/source/css/main.scss"
|
80
125
|
- ".themes/default/source/index.html"
|
81
126
|
- ".themes/default/source/js/toggle_ooc.js"
|
127
|
+
- ".travis.yml"
|
128
|
+
- CHANGELOG.md
|
82
129
|
- Gemfile
|
83
130
|
- LICENSE
|
84
131
|
- README.md
|
@@ -94,6 +141,8 @@ files:
|
|
94
141
|
- lib/jekyll/rp_logs/parse_weechat.rb
|
95
142
|
- lib/jekyll/rp_logs/rp_arcs.rb
|
96
143
|
- lib/jekyll/rp_logs/rp_log_converter.rb
|
144
|
+
- lib/jekyll/rp_logs/rp_logline.rb
|
145
|
+
- lib/jekyll/rp_logs/rp_page.rb
|
97
146
|
- lib/jekyll/rp_logs/rp_parser.rb
|
98
147
|
- lib/jekyll/rp_logs/rp_tag_index.rb
|
99
148
|
- lib/jekyll/rp_logs/rp_tags.rb
|
@@ -109,9 +158,9 @@ require_paths:
|
|
109
158
|
- lib
|
110
159
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
160
|
requirements:
|
112
|
-
- - "
|
161
|
+
- - "~>"
|
113
162
|
- !ruby/object:Gem::Version
|
114
|
-
version: '
|
163
|
+
version: '2.1'
|
115
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
165
|
requirements:
|
117
166
|
- - ">="
|