Module: Card::Content::Chunk
- Defined in:
- lib/card/content/chunk.rb,
lib/card/content/chunk/abstract.rb
Overview
A chunk is a pattern of text that can be protected and interrogated by a format. Each Chunk class has a pattern
that states what sort of text it matches. Chunks are initalized by passing in the result of a match by its pattern.
Defined Under Namespace
Classes: Abstract
Constant Summary collapse
- @@raw_list =
{}
- @@prefix_regexp_by_list =
{}
- @@prefix_map_by_chunkname =
{}
- @@prefix_map_by_list =
Hash.new { |h, k| h[k] = {} }
Class Method Summary collapse
- .build_prefix_regexp(chunk_list_key) ⇒ Object
- .find_class_by_prefix(prefix, chunk_list_key = :default) ⇒ Object
- .prefix_regexp(chunk_list_key) ⇒ Object
- .register_class(klass, hash) ⇒ Object
- .register_list(key, list) ⇒ Object
- .validate_chunk_list_key(chunk_list_key) ⇒ Object
Class Method Details
.build_prefix_regexp(chunk_list_key) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/card/content/chunk.rb', line 64 def build_prefix_regexp chunk_list_key validate_chunk_list_key chunk_list_key prefix_res = raw_list[chunk_list_key].map do |chunkname| chunk_class = const_get chunkname chunk_class.config[:prefix_re] end /(?:#{prefix_res * '|'})/m end |
.find_class_by_prefix(prefix, chunk_list_key = :default) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/card/content/chunk.rb', line 46 def find_class_by_prefix prefix, chunk_list_key=:default validate_chunk_list_key chunk_list_key prefix_map = prefix_map_by_list[chunk_list_key] config = prefix_map[prefix[0, 1]] || prefix_map[prefix[-1, 1]] || prefix_map[:default] # prefix identified by first character, last character, or default. # a little ugly... config[:class] end |
.prefix_regexp(chunk_list_key) ⇒ Object
59 60 61 62 |
# File 'lib/card/content/chunk.rb', line 59 def prefix_regexp chunk_list_key prefix_regexp_by_list[chunk_list_key] ||= build_prefix_regexp chunk_list_key end |
.register_class(klass, hash) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/card/content/chunk.rb', line 22 def register_class klass, hash klass.config = hash.merge class: klass prefix_index = hash[:idx_char] || :default # ^ this is gross and needs to be moved out. klassname = klass.name.split("::").last.to_sym prefix_map_by_chunkname[klassname] = { prefix_index => klass.config } raw_list.each do |key, list| next unless list.include? klassname prefix_map_by_list[key].merge! prefix_map_by_chunkname[klassname] end end |
.register_list(key, list) ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/card/content/chunk.rb', line 36 def register_list key, list raw_list[key] = list prefix_map_by_list[key] = list.each_with_object({}) do |chunkname, h| next unless (p_map = prefix_map_by_chunkname[chunkname]) h.merge! p_map end end |
.validate_chunk_list_key(chunk_list_key) ⇒ Object
75 76 77 78 79 |
# File 'lib/card/content/chunk.rb', line 75 def validate_chunk_list_key chunk_list_key unless raw_list.key? chunk_list_key raise ArgumentError, "invalid chunk list key: #{chunk_list_key}" end end |