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.
@@ -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
- class LogLine
8
- MAX_SECONDS_BETWEEN_POSTS = 3
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
- # Check the contents for (
39
- @output_type = :ooc if contents.strip[0] == '('
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
- def output
50
- # String used for the timestamp anchors
51
- anchor = @timestamp.strftime('%Y-%m-%d_%H:%M:%S')
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
- sender_out = nil
59
- case @base_type
60
- when :rp
61
- sender_out = " * #{@sender}"
62
- when :ooc
63
- sender_out = " &lt;#{@mode}#{@sender}&gt;"
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 = 'index.html'
10
+ @name = "index.html"
12
11
 
13
- self.process(@name)
12
+ process(@name)
14
13
  # Get tag_index filename
15
- tag_index = (site.config['rp_tag_index_layout'] || 'tag_index') + '.html'
16
- self.read_yaml(File.join(base, '_layouts'), tag_index)
17
- self.data['tag'] = tag # Set which tag this index is for
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
- self.data['pages'] = pages.sort_by { |p| p.data['start_date'] }
20
- tag_title_prefix = site.config['rp_tag_title_prefix'] || 'Tag: '
21
- self.data['title'] = "#{tag_title_prefix}#{tag}"
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['rp_tag_index'] ||= true
32
- config['rp_tag_dir'] ||= '/tags'
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['rp_tag_index']
37
-
38
- dir = site.config['rp_tag_dir']
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::RP_KEY].docs.each { |page|
49
- page.data['rp_tags'].each { |tag| tag_ref[tag] << page }
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 'rake'
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(/, /,'/')} ") while !valid_options.include?(answer)
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
- directory '_rps'
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
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module RpLogs
3
- VERSION = "0.1.6"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -1,18 +1,17 @@
1
1
  require "jekyll/rp_logs/version"
2
- require 'jekyll'
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 'jekyll/rp_logs/rp_log_converter'
12
- require 'jekyll/rp_logs/rp_tag_index'
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 'jekyll/rp_logs/rp_tasks'
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.1.6
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-06-21 00:00:00.000000000 Z
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: '0'
163
+ version: '2.1'
115
164
  required_rubygems_version: !ruby/object:Gem::Requirement
116
165
  requirements:
117
166
  - - ">="