jekyll-rpg 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1683b40039a1a2bf8df03320da5e0a029c09dc3788fac0352ca84d9835e8b418
4
- data.tar.gz: 0f775d00db33397e481c7ba0188629bc6b41284f044c4056633b1e696fbd730b
3
+ metadata.gz: 4dbaff86bfac3c1c821e36321851b94f3cc5e7dfa293543dc49809dfa3f331b1
4
+ data.tar.gz: e45e59b1260ae0b3f7c853e1780e436d123df64e604fdefbeac1f75bd1b036d1
5
5
  SHA512:
6
- metadata.gz: b3d036cfbc7b228dd6ceebff00d3b2e58da286208a2b79a08f7868f84d68b63258e8dc242a5023415f1cbed4f8c6ab35277f0fb9a13b59f7e442714db04b62c5
7
- data.tar.gz: 87d5348c1d576dbdf8458db8c1d91b602f078620d88824cb7a826ec6f1b763b992ffe04dfb1a2852219bbbe51182926cd01023867744071aabdd812b140f6775
6
+ metadata.gz: cf357ffe093de9d47beb3f7d9eb26ebe555c6ae312e10d54f397b81e7c6b0628cb083ef8f5f97bee46997970380531eb1ba7ae5c64411cd8b64cbd9d478f0442
7
+ data.tar.gz: 645a38316b3b70083c0783c2591f9565fbeca5c81fee926ceba3cbb6c3d6d785a595de74b2a0e74eb5155d62fc9eb50a5a519f303ec2e353435782d2d2c529b7
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllRPG
4
+ # Represents a document that may be in a Jekyll collection
4
5
  class CollectionPage
5
6
  attr_accessor :name, :collection, :slug, :written
6
7
 
@@ -3,12 +3,13 @@
3
3
  require 'jekyll'
4
4
  require_relative 'references'
5
5
 
6
+ # Generates reference information for Jekyll Site
6
7
  module JekyllRPG
7
8
  # Bi-directional page links
8
9
  Jekyll::Hooks.register :site, :post_read do |site|
9
10
  ref = References.new(site)
10
11
 
11
- site.data['graph'] = ref.graph
12
+ site.data['graph'] = ref.hashed_graph
12
13
 
13
14
  site.data['broken_links'] = ref.broken_links
14
15
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'collection_page'
4
+ require 'pry'
4
5
 
5
6
  module JekyllRPG
7
+ # References within Jekyll Collections
6
8
  class References
7
9
  attr_accessor :collection_keys, :broken_links, :graph
8
10
 
@@ -15,7 +17,7 @@ module JekyllRPG
15
17
  # Parse references from markdown links
16
18
  @collection_keys.each do |collection|
17
19
  @site.collections[collection].docs.each do |doc|
18
- if doc.data['dm'] && !@site.data['dm_mode']
20
+ if doc.data['dm'] && !@site.config['dm_mode']
19
21
  doc.data['published'] = false
20
22
  else
21
23
  referent = CollectionPage.new(
@@ -33,18 +35,18 @@ module JekyllRPG
33
35
 
34
36
  # For each collection page, add where it is referenced
35
37
  @collection_keys.each do |collection|
36
- site.collections[collection].docs.each do |doc|
38
+ @site.collections[collection].docs.each do |doc|
37
39
  page_refs = {}
38
40
 
39
41
  # Get the information for every page the current doc is referenced in
40
42
  # And push links to an array that represents the collections of those pages
41
- referenced_in(collection, doc.data['slug'] ).each do |reference|
43
+ referenced_in(collection, doc.data['slug']).each do |reference|
42
44
  page_refs[reference.collection] = [] unless page_refs.key?(reference.collection)
43
45
  page_refs[reference.collection].push(reference.markdown_link)
44
46
  end
45
47
 
46
48
  # Make sure links in collections are unique
47
- page_refs.each do |k,v|
49
+ page_refs.each do |k, v|
48
50
  page_refs[k] = v.uniq
49
51
  end
50
52
 
@@ -58,41 +60,36 @@ module JekyllRPG
58
60
  end
59
61
  end
60
62
 
61
- #print broken_links
62
-
63
63
  # Create list of broken links
64
64
  unwritten_pages.each do |edge|
65
- @broken_links.push({
66
- 'reference_name' => edge['reference'].name,
67
- 'reference_collection' => edge['reference'].collection,
68
- 'reference_slug' => edge['reference'].slug,
69
- 'reference_link' => edge['reference'].markdown_link,
70
- 'referent_name' => edge['referent'].name,
71
- 'referent_collection' => edge['referent'].collection,
72
- 'referent_slug' => edge['referent'].slug,
73
- 'referent_link' => edge['referent'].markdown_link,
74
- })
65
+ @broken_links.push(edge_hash(edge))
75
66
  end
76
67
  end
77
68
 
69
+ # Find all markdown links in document
70
+ # TODO - fails to find markdown link at very start of doc
71
+ # due to not finding any character that isn't an exclamation mark
78
72
  def markdown_links(doc)
79
73
  doc.to_s.scan(%r{(?<=[^!])\[.*?\]\(/.*?/.*?\)})
80
74
  end
81
75
 
82
76
  # returns link text, collection and slug
83
- # [0](/1/2)
77
+ # [0](/1/2) - as a [0, 1, 2]
84
78
  def link_components(link)
85
- [link[%r{(?<=\[).*?(?=\])}], link[%r{(?<=/).*(?=/)}], link[%r{(?<=/)(?:(?!/).)*?(?=\))}]]
79
+ [link[/(?<=\[).*?(?=\])/], link[%r{(?<=/).*(?=/)}], link[%r{(?<=/)(?:(?!/).)*?(?=\))}]]
86
80
  end
87
81
 
82
+ # Find a document based on its collection and slug
88
83
  def find_page(collection, slug)
89
84
  @site.collections[collection].docs.find { |doc| doc.data['slug'] == slug }
90
85
  end
91
86
 
87
+ # Returns true if document cannot be found in collection
92
88
  def page_missing(collection, slug)
93
89
  @site.collections[collection].nil? || find_page(collection, slug).nil?
94
90
  end
95
91
 
92
+ # Returns a hash of two CollectionPages representing a graph edge
96
93
  def edge(referent, reference)
97
94
  referenced_name, referenced_collection, referenced_slug = link_components(reference)
98
95
  if page_missing(referenced_collection, referenced_slug)
@@ -113,18 +110,22 @@ module JekyllRPG
113
110
  }
114
111
  end
115
112
 
113
+ # Based on the graph, returns edges that a specific document is the referent of
116
114
  def referenced_in(collection, slug)
117
- @graph.select {
118
- |edge| edge['reference'].collection == collection && edge['reference'].slug == slug
119
- }.map { |edge| edge['referent'] }
115
+ @graph.select do |edge|
116
+ edge['reference'].collection == collection && edge['reference'].slug == slug
117
+ end.map { |edge| edge['referent'] }
120
118
  end
121
119
 
120
+ # Based on the graph, returns documents that are referenced, but do not exist yet
122
121
  def unwritten_pages
123
- @graph.select {
124
- |edge| !edge['reference'].written
125
- }
122
+ @graph.reject do |edge|
123
+ edge['reference'].written
124
+ end
126
125
  end
127
126
 
127
+ # Determines if refs table is required based on document,
128
+ # then collection, then site
128
129
  def refs_table_required(doc)
129
130
  if doc.data.key?('refs')
130
131
  doc.data['refs']
@@ -135,6 +136,29 @@ module JekyllRPG
135
136
  end
136
137
  end
137
138
 
139
+ # Returns an easily accessible hash representing an edge for Jekyll purposes
140
+ def edge_hash(edge)
141
+ {
142
+ 'reference_name' => edge['reference'].name,
143
+ 'reference_collection' => edge['reference'].collection,
144
+ 'reference_slug' => edge['reference'].slug,
145
+ 'reference_link' => edge['reference'].markdown_link,
146
+ 'referent_name' => edge['referent'].name,
147
+ 'referent_collection' => edge['referent'].collection,
148
+ 'referent_slug' => edge['referent'].slug,
149
+ 'referent_link' => edge['referent'].markdown_link
150
+ }
151
+ end
152
+
153
+ # Returns a graph made up of hashed edges
154
+ def hashed_graph
155
+ @graph.map { |edge| edge_hash(edge) }
156
+ end
157
+
158
+ # The following three functions return a HTML table
159
+ # That for a specific document shows the documents that
160
+ # reference it
161
+
138
162
  def refs_table(refs)
139
163
  table = <<~TABLE
140
164
  # Referenced By:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-rpg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Lockwood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-16 00:00:00.000000000 Z
11
+ date: 2019-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  description: ''
28
56
  email: tom@lockwood.dev
29
57
  executables: []