card-mod-content 0.11.0 → 0.11.5
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/lib/card/content/chunk/escaped_literal.rb +2 -2
- data/lib/card/content/chunk/keep_escaped_literal.rb +2 -2
- data/lib/card/content/chunk/link.rb +8 -5
- data/lib/card/content/chunk/nest.rb +8 -5
- data/lib/card/content/chunk/query_reference.rb +4 -4
- data/lib/card/content/chunk/reference.rb +11 -22
- data/lib/card/content/chunk/uri.rb +119 -114
- data/lib/card/content/chunk/view_stub.rb +1 -5
- data/set/abstract/code_file.rb +0 -1
- data/set/abstract/haml_file.rb +0 -1
- data/set/abstract/lock.rb +1 -0
- data/set/all/chunk.rb +8 -8
- data/set/all/templating.rb +1 -1
- data/set/right/structure.rb +5 -1
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20ef16ab1cd68c60cef87aac784c6e59e693653c1dd83824c41836c779241dbc
|
4
|
+
data.tar.gz: af181919b1be08412e2f1a58e114ee1bd5f58fd115d23fd1f4971b8bbe0b2e40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4a460218fb818da58cfc64fdd5bee8ad0a88901833d03fa2a2bb7291386986dbb9acc0130b8f8a1ad9091ef779cd8d22d9f3537003d1ddc3b07a09a1a0c2c50
|
7
|
+
data.tar.gz: 6dfa5408e034673b954087356ee7f9c90f2e331c584e7b6761ae559b9571b487267091a4334346d80dc7edb0e13813200387d5108f271dc90b7b84901041f8e4
|
@@ -9,10 +9,10 @@ class Card
|
|
9
9
|
# and within HTML tags.
|
10
10
|
class EscapedLiteral < Abstract
|
11
11
|
FULL_RE = { "[" => /\A\\\[\[[^\]]*\]\]/,
|
12
|
-
"{" => /\A\\\{\{[
|
12
|
+
"{" => /\A\\\{\{[^}]*\}\}/ }.freeze
|
13
13
|
Card::Content::Chunk.register_class self,
|
14
14
|
prefix_re: '\\\\(?:\\[\\[|\\{\\{)',
|
15
|
-
idx_char:
|
15
|
+
idx_char: "\\"
|
16
16
|
|
17
17
|
def self.full_re prefix
|
18
18
|
FULL_RE[prefix[1, 1]]
|
@@ -8,10 +8,10 @@ class Card
|
|
8
8
|
# the escaping survives the markdown rendering.
|
9
9
|
class KeepEscapedLiteral < Abstract
|
10
10
|
FULL_RE = { "[" => /\A\\\[\[[^\]]*\]\]/,
|
11
|
-
"{" => /\A\\\{\{[
|
11
|
+
"{" => /\A\\\{\{[^}]*\}\}/ }.freeze
|
12
12
|
Card::Content::Chunk.register_class self,
|
13
13
|
prefix_re: '\\\\(?:\\[\\[|\\{\\{)',
|
14
|
-
idx_char:
|
14
|
+
idx_char: "\\"
|
15
15
|
|
16
16
|
def self.full_re prefix
|
17
17
|
FULL_RE[prefix[1, 1]]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
# require File.expand_path("../reference", __FILE__)
|
4
|
-
load File.expand_path("
|
4
|
+
load File.expand_path("reference.rb", __dir__)
|
5
5
|
|
6
6
|
class Card
|
7
7
|
class Content
|
@@ -12,11 +12,12 @@ class Card
|
|
12
12
|
class Link < Card::Content::Chunk::Reference
|
13
13
|
CODE = "L".freeze # L for "Link"
|
14
14
|
attr_reader :link_text
|
15
|
+
|
15
16
|
# Groups: $1, [$2]: [[$1]] or [[$1|$2]] or $3, $4: [$3][$4]
|
16
17
|
Card::Content::Chunk.register_class self,
|
17
18
|
prefix_re: '\\[\\[',
|
18
|
-
full_re:
|
19
|
-
idx_char:
|
19
|
+
full_re: /\A\[\[([^\]]+)\]\]/,
|
20
|
+
idx_char: "["
|
20
21
|
def reference_code
|
21
22
|
CODE
|
22
23
|
end
|
@@ -46,8 +47,9 @@ class Card
|
|
46
47
|
# there's probably a better way to do the following.
|
47
48
|
# point is to find the first pipe that's not inside an nest
|
48
49
|
return unless string.index "|"
|
50
|
+
|
49
51
|
string_copy = string.dup
|
50
|
-
string.scan(/\{\{[
|
52
|
+
string.scan(/\{\{[^}]*\}\}/) do |incl|
|
51
53
|
string_copy.gsub! incl, ("x" * incl.length)
|
52
54
|
end
|
53
55
|
string_copy.index "|"
|
@@ -60,6 +62,7 @@ class Card
|
|
60
62
|
|
61
63
|
def objectify raw
|
62
64
|
return unless raw
|
65
|
+
|
63
66
|
raw.strip!
|
64
67
|
if raw.match?(/(^|[^\\])\{\{/)
|
65
68
|
Card::Content.new raw, format
|
@@ -107,7 +110,7 @@ class Card
|
|
107
110
|
|
108
111
|
def replace_link_text old_name, new_name
|
109
112
|
if @link_text.is_a?(Card::Content)
|
110
|
-
@link_text.find_chunks(
|
113
|
+
@link_text.find_chunks(:Reference).each do |chunk|
|
111
114
|
chunk.replace_reference old_name, new_name
|
112
115
|
end
|
113
116
|
elsif @link_text.present?
|
@@ -8,11 +8,12 @@ class Card
|
|
8
8
|
# Handler for nest chunks: {{example}}
|
9
9
|
class Nest < Reference
|
10
10
|
attr_reader :options
|
11
|
+
|
11
12
|
DEFAULT_OPTION = :view # a value without a key is interpreted as view
|
12
13
|
|
13
14
|
Chunk.register_class(self, prefix_re: '\\{\\{',
|
14
|
-
full_re:
|
15
|
-
idx_char:
|
15
|
+
full_re: /\A\{\{([^{}]*)\}\}/,
|
16
|
+
idx_char: "{")
|
16
17
|
|
17
18
|
def interpret match, _content
|
18
19
|
in_brackets = strip_tags match[1]
|
@@ -27,9 +28,9 @@ class Card
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def strip_tags string
|
30
|
-
#
|
31
|
+
# NOTE: not using ActionView's strip_tags here
|
31
32
|
# because this needs to be super fast.
|
32
|
-
string.gsub(
|
33
|
+
string.gsub(/<[^>]*>/, "")
|
33
34
|
end
|
34
35
|
|
35
36
|
def visible_comment message
|
@@ -83,6 +84,7 @@ class Card
|
|
83
84
|
|
84
85
|
def explicit_view= view
|
85
86
|
return if @options[:view]
|
87
|
+
|
86
88
|
# could check to make sure it's not already the default...
|
87
89
|
if @text.match?(/\|/)
|
88
90
|
@text.sub! "|", "|#{view};"
|
@@ -100,7 +102,7 @@ class Card
|
|
100
102
|
end
|
101
103
|
|
102
104
|
def self.gsub string
|
103
|
-
string.gsub(/\{\{([
|
105
|
+
string.gsub(/\{\{([^}]*)\}\}/) do |_match|
|
104
106
|
yield(Regexp.last_match[1])
|
105
107
|
end
|
106
108
|
end
|
@@ -113,6 +115,7 @@ class Card
|
|
113
115
|
|
114
116
|
def each_option attr_string
|
115
117
|
return if attr_string.blank?
|
118
|
+
|
116
119
|
attr_string.strip.split(";").each do |pair|
|
117
120
|
# key is optional for view option
|
118
121
|
value, key = pair.split(":", 2).reverse
|
@@ -19,10 +19,10 @@ class Card
|
|
19
19
|
class QueryReference < Reference
|
20
20
|
QUERY_KEYWORDS = ::Set.new(
|
21
21
|
(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
Query::MODIFIERS.keys +
|
23
|
+
Query::OPERATORS.keys +
|
24
|
+
Query.attributes.keys +
|
25
|
+
Query::CONJUNCTIONS.keys +
|
26
26
|
%w[desc asc count]
|
27
27
|
).map(&:to_s)
|
28
28
|
)
|
@@ -9,26 +9,28 @@ class Card
|
|
9
9
|
|
10
10
|
def referee_name
|
11
11
|
return if name.nil?
|
12
|
-
|
13
|
-
@referee_name
|
12
|
+
|
13
|
+
@referee_name ||= referee_raw_name
|
14
|
+
@referee_name = @referee_name.absolute_name card.name
|
14
15
|
rescue Card::Error::NotFound
|
15
16
|
# do not break on missing id/codename references.
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
20
|
-
ref_card ? ref_card.name : rendered_name.to_name
|
19
|
+
def referee_raw_name
|
20
|
+
Name[render_obj(name)]
|
21
21
|
end
|
22
22
|
|
23
23
|
def referee_card
|
24
24
|
@referee_card ||= referee_name && Card.fetch(referee_name)
|
25
25
|
end
|
26
26
|
|
27
|
+
private
|
28
|
+
|
27
29
|
def replace_name_reference old_name, new_name
|
28
30
|
@referee_card = nil
|
29
31
|
@referee_name = nil
|
30
|
-
if name.is_a?
|
31
|
-
name.find_chunks(
|
32
|
+
if name.is_a? Content
|
33
|
+
name.find_chunks(:Reference).each do |chunk|
|
32
34
|
chunk.replace_reference old_name, new_name
|
33
35
|
end
|
34
36
|
else
|
@@ -37,22 +39,9 @@ class Card
|
|
37
39
|
end
|
38
40
|
|
39
41
|
def render_obj raw
|
40
|
-
|
41
|
-
format.process_content raw
|
42
|
-
else
|
43
|
-
raw
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
42
|
+
return raw unless format && raw.is_a?(Content)
|
48
43
|
|
49
|
-
|
50
|
-
case rendered_name # FIXME: this should be standard fetch option.
|
51
|
-
when /^\~(\d+)$/ # get by id
|
52
|
-
Card.fetch Regexp.last_match(1).to_i
|
53
|
-
when /^\:(\w+)$/ # get by codename
|
54
|
-
Card.fetch Regexp.last_match(1).to_sym
|
55
|
-
end
|
44
|
+
format.process_content raw
|
56
45
|
end
|
57
46
|
end
|
58
47
|
end
|
@@ -19,127 +19,132 @@ require "uri"
|
|
19
19
|
# suffixes.
|
20
20
|
# The generic names are from www.bnoack.com/data/countrycode2.html)
|
21
21
|
# [iso3166]: http://geotags.com/iso3166/
|
22
|
-
|
23
|
-
class
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
last_char = chunk[-1, 1]
|
58
|
-
chunk.gsub!(/(?: )+/, "")
|
22
|
+
class Card
|
23
|
+
class Content
|
24
|
+
module Chunk
|
25
|
+
class Uri < Abstract
|
26
|
+
SCHEMES = %w[irc http https ftp ssh git sftp file ldap ldaps mailto].freeze
|
27
|
+
|
28
|
+
REJECTED_PREFIX_RE = %w{! ": " ' ](}.map { |s| Regexp.escape s } * "|"
|
29
|
+
|
30
|
+
attr_reader :uri, :link_text
|
31
|
+
|
32
|
+
delegate :to, :scheme, :host, :port, :path, :query, :fragment, to: :uri
|
33
|
+
|
34
|
+
Card::Content::Chunk.register_class(
|
35
|
+
self, prefix_re: "(?:(?!#{REJECTED_PREFIX_RE})(?:#{SCHEMES * '|'})\\:)",
|
36
|
+
full_re: /\A#{::URI::DEFAULT_PARSER.make_regexp(SCHEMES)}/,
|
37
|
+
idx_char: ":"
|
38
|
+
)
|
39
|
+
|
40
|
+
class << self
|
41
|
+
def full_match content, prefix
|
42
|
+
prepend_str = if prefix[-1, 1] != ":" && config[:prepend_str]
|
43
|
+
config[:prepend_str]
|
44
|
+
else
|
45
|
+
""
|
46
|
+
end
|
47
|
+
content = prepend_str + content
|
48
|
+
match = super content, prefix
|
49
|
+
[match, prepend_str.length]
|
50
|
+
end
|
51
|
+
|
52
|
+
def context_ok? content, chunk_start
|
53
|
+
preceding_string = content[chunk_start - 2..chunk_start - 1]
|
54
|
+
preceding_string !~ /(?:#{REJECTED_PREFIX_RE})$/
|
55
|
+
end
|
56
|
+
end
|
59
57
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
chunk.
|
64
|
-
|
58
|
+
def interpret match, _content
|
59
|
+
chunk = match[0]
|
60
|
+
last_char = chunk[-1, 1]
|
61
|
+
chunk.gsub!(/(?: )+/, "")
|
62
|
+
|
63
|
+
@trailing_punctuation =
|
64
|
+
if %w[, . ) ! ? :].member?(last_char)
|
65
|
+
@text.chop!
|
66
|
+
chunk.chop!
|
67
|
+
last_char
|
68
|
+
end
|
69
|
+
chunk.sub!(/\.$/, "")
|
70
|
+
|
71
|
+
@link_text = chunk
|
72
|
+
@uri = ::URI.parse(chunk)
|
73
|
+
@process_chunk = process_uri_chunk
|
74
|
+
rescue ::URI::Error => e
|
75
|
+
# warn "rescue parse #{chunk_class}:
|
76
|
+
# '#{m}' #{e.inspect} #{e.backtrace*"\n"}"
|
77
|
+
Rails.logger.warn "rescue parse #{self.class}: #{e.inspect}"
|
65
78
|
end
|
66
|
-
chunk.sub!(/\.$/, "")
|
67
|
-
|
68
|
-
@link_text = chunk
|
69
|
-
@uri = ::URI.parse(chunk)
|
70
|
-
@process_chunk = process_uri_chunk
|
71
|
-
rescue ::URI::Error => e
|
72
|
-
# warn "rescue parse #{chunk_class}:
|
73
|
-
# '#{m}' #{e.inspect} #{e.backtrace*"\n"}"
|
74
|
-
Rails.logger.warn "rescue parse #{self.class}: #{e.inspect}"
|
75
|
-
end
|
76
79
|
|
77
|
-
|
80
|
+
private
|
78
81
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
+
def process_text
|
83
|
+
@link_text
|
84
|
+
end
|
82
85
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
86
|
+
def process_uri_chunk
|
87
|
+
link = format.link_to_resource @link_text, process_text
|
88
|
+
"#{link}#{@trailing_punctuation}"
|
89
|
+
end
|
90
|
+
end
|
88
91
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
92
|
+
# FIXME: DRY, merge these two into one class
|
93
|
+
class EmailUri < Uri
|
94
|
+
PREPEND_STR = "mailto:".freeze
|
95
|
+
EMAIL = '[a-zA-Z\\d](?:[-a-zA-Z\\d.]*[a-zA-Z\\d])?\\@'.freeze
|
96
|
+
|
97
|
+
Card::Content::Chunk.register_class(
|
98
|
+
self, prefix_re: "(?:(?!#{REJECTED_PREFIX_RE})#{EMAIL})\\b",
|
99
|
+
full_re: /\A#{::URI::DEFAULT_PARSER.make_regexp(SCHEMES)}/,
|
100
|
+
prepend_str: PREPEND_STR,
|
101
|
+
idx_char: "@"
|
102
|
+
)
|
103
|
+
|
104
|
+
# removes the prepended string from the unchanged match text
|
105
|
+
def process_text
|
106
|
+
@text = @text.sub(/^mailto:/, "")
|
107
|
+
end
|
108
|
+
end
|
106
109
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
110
|
+
class HostUri < Uri
|
111
|
+
GENERIC = "aero|biz|com|coop|edu|gov|info|int|mil|" \
|
112
|
+
"museum|name|net|org".freeze
|
113
|
+
|
114
|
+
COUNTRY = "ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|" \
|
115
|
+
"bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cf|cd|cg|" \
|
116
|
+
"ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" \
|
117
|
+
"ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|fx|ga|gb|gd|ge|gf|gh|" \
|
118
|
+
"gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|" \
|
119
|
+
"il|in|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|" \
|
120
|
+
"kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|" \
|
121
|
+
"mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|" \
|
122
|
+
"no|np|nr|nt|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pt|pw|py|" \
|
123
|
+
"qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|" \
|
124
|
+
"st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|" \
|
125
|
+
"tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|" \
|
126
|
+
"za|zm|zr|zw|" \
|
127
|
+
"eu".freeze # made this separate, since it's not technically
|
128
|
+
# a country -efm
|
129
|
+
# These are needed otherwise HOST will match almost anything
|
130
|
+
|
131
|
+
TLDS = "(?:#{GENERIC}|#{COUNTRY})".freeze
|
132
|
+
# TLDS = "(?:#{GENERIC})"
|
133
|
+
|
134
|
+
PREPEND_STR = "http://".freeze
|
135
|
+
HOST = "(?:[a-zA-Z\\d](?:[-a-zA-Z\\d]*[a-zA-Z\\d])?\\.)+#{TLDS}".freeze
|
136
|
+
|
137
|
+
Card::Content::Chunk.register_class(
|
138
|
+
self, prefix_re: "(?:(?!#{REJECTED_PREFIX_RE})#{HOST})\\b",
|
139
|
+
full_re: /\A#{::URI::DEFAULT_PARSER.make_regexp(SCHEMES)}/,
|
140
|
+
prepend_str: PREPEND_STR
|
141
|
+
)
|
142
|
+
|
143
|
+
# removes the prepended string from the unchanged match text
|
144
|
+
def process_text
|
145
|
+
@text = @text.sub(%r{^http://}, "")
|
146
|
+
end
|
147
|
+
end
|
143
148
|
end
|
144
149
|
end
|
145
150
|
end
|
@@ -9,10 +9,6 @@ class Card
|
|
9
9
|
idx_char: "("
|
10
10
|
)
|
11
11
|
|
12
|
-
def initialize text, content
|
13
|
-
super
|
14
|
-
end
|
15
|
-
|
16
12
|
def interpret match, _content
|
17
13
|
@stub_hash = initial_stub_hash match[1]
|
18
14
|
interpret_hash_values
|
@@ -28,7 +24,7 @@ class Card
|
|
28
24
|
end
|
29
25
|
|
30
26
|
def interpret_hash_values
|
31
|
-
@stub_hash.
|
27
|
+
@stub_hash.each_key do |key|
|
32
28
|
send "interpret_#{key}"
|
33
29
|
end
|
34
30
|
end
|
data/set/abstract/code_file.rb
CHANGED
data/set/abstract/haml_file.rb
CHANGED
data/set/abstract/lock.rb
CHANGED
data/set/all/chunk.rb
CHANGED
@@ -1,23 +1,21 @@
|
|
1
|
-
|
2
|
-
def chunks content, type, named=false
|
1
|
+
def chunks content, type=nil, named=false
|
3
2
|
content ||= self.content
|
4
|
-
type ||= Card::Content::Chunk
|
5
3
|
all_chunks = Card::Content.new(content, self).find_chunks type
|
6
4
|
named ? all_chunks.select(&:referee_name) : all_chunks
|
7
5
|
end
|
8
6
|
|
9
7
|
def reference_chunks content=nil, named=true
|
10
|
-
chunks content,
|
8
|
+
chunks content, :Reference, named
|
11
9
|
end
|
12
10
|
|
13
11
|
# named=true rejects commented nests
|
14
12
|
def nest_chunks content=nil, named=true
|
15
|
-
chunks content,
|
13
|
+
chunks content, :Nest, named
|
16
14
|
end
|
17
15
|
|
18
16
|
# named=true rejects external links (since the don't refer to a card name)
|
19
17
|
def link_chunks content=nil, named=false
|
20
|
-
chunks content,
|
18
|
+
chunks content, :Link, named
|
21
19
|
end
|
22
20
|
|
23
21
|
def each_item_name_with_options content=nil
|
@@ -76,6 +74,7 @@ format do
|
|
76
74
|
|
77
75
|
def each_nested_chunk content: nil, fields: false, uniq: true, virtual: true, &block
|
78
76
|
return unless block_given?
|
77
|
+
|
79
78
|
chunks = prepare_nested_chunks content, fields, uniq
|
80
79
|
process_nested_chunks chunks, virtual, &block
|
81
80
|
end
|
@@ -117,8 +116,8 @@ format do
|
|
117
116
|
end
|
118
117
|
end
|
119
118
|
|
120
|
-
def process_virtual_chunk chunk
|
121
|
-
subformat(chunk.referee_card).each_nested_field_chunk
|
119
|
+
def process_virtual_chunk chunk, &block
|
120
|
+
subformat(chunk.referee_card).each_nested_field_chunk(&block)
|
122
121
|
end
|
123
122
|
|
124
123
|
def explicit_edit_fields_config
|
@@ -137,6 +136,7 @@ format do
|
|
137
136
|
def normalized_edit_field_mark cardish, options
|
138
137
|
return cardish if cardish.is_a?(Card) ||
|
139
138
|
(options.is_a?(Hash) && options.delete(:absolute))
|
139
|
+
|
140
140
|
card.name.field cardish
|
141
141
|
end
|
142
142
|
end
|
data/set/all/templating.rb
CHANGED
data/set/right/structure.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
include_set Abstract::TemplatedNests
|
2
2
|
|
3
|
+
def item_names args={}
|
4
|
+
item_strings(args).compact.map(&:to_name)
|
5
|
+
end
|
6
|
+
|
3
7
|
format :rss do
|
4
8
|
def raw_feed_items
|
5
9
|
[card]
|
@@ -51,7 +55,7 @@ def structuree_names
|
|
51
55
|
end
|
52
56
|
|
53
57
|
def update_structurees args
|
54
|
-
#
|
58
|
+
# NOTE: that this is not smart about overriding templating rules
|
55
59
|
# for example, if someone were to change the type of a
|
56
60
|
# +*right+*structure rule that was overridden
|
57
61
|
# by a +*type plus right+*structure rule, the override would not be respected.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card-mod-content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: card
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.101.
|
21
|
+
version: 1.101.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 1.101.
|
28
|
+
version: 1.101.5
|
29
29
|
description: ''
|
30
30
|
email:
|
31
31
|
- info@decko.org
|
@@ -52,10 +52,15 @@ files:
|
|
52
52
|
- set/right/structure.rb
|
53
53
|
- set/self/default.rb
|
54
54
|
- set/self/structure.rb
|
55
|
-
homepage:
|
55
|
+
homepage: https://decko.org
|
56
56
|
licenses:
|
57
57
|
- GPL-3.0
|
58
58
|
metadata:
|
59
|
+
source_code_uri: https://github.com/decko-commons/decko
|
60
|
+
homepage_uri: https://decko.org
|
61
|
+
bug_tracker_uri: https://github.com/decko-commons/decko/issues
|
62
|
+
wiki_uri: https://decko.org
|
63
|
+
documentation_url: http://docs.decko.org/
|
59
64
|
card-mod: content
|
60
65
|
post_install_message:
|
61
66
|
rdoc_options: []
|
@@ -72,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
77
|
- !ruby/object:Gem::Version
|
73
78
|
version: '0'
|
74
79
|
requirements: []
|
75
|
-
rubygems_version: 3.
|
80
|
+
rubygems_version: 3.1.4
|
76
81
|
signing_key:
|
77
82
|
specification_version: 4
|
78
83
|
summary: card content handling
|