jekyll-rp_logs 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  - - ">="