module Littlestitious::ClassMethods
Public Instance Methods
inheritable_attrs(*args)
click to toggle source
# File lib/littlestitious.rb, line 16 def inheritable_attrs(*args) args.flatten! @inheritable_attrs ||= [:inheritable_attrs] args -= @inheritable_attrs @inheritable_attrs += args args.each do |arg| class_eval %( class << self; attr_accessor :#{arg} end ) end @inheritable_attrs end
inherited(subclass)
click to toggle source
# File lib/littlestitious.rb, line 32 def inherited(subclass) @inheritable_attrs.each do |inheritable_attribute| instance_var = "@#{inheritable_attribute}" value = instance_variable_get instance_var subclass.instance_variable_set instance_var, value end end
initialize_littlestitious_vars(base)
click to toggle source
# File lib/littlestitious.rb, line 43 def initialize_littlestitious_vars(base) @zero_width_chars = { word_joiner: "\u2060", mongolian_vowel_separator: "\u180e", zero_width_non_joiner: "\u200c", zero_width_joiner: "\u200d", zero_width_space: "\u200b", zero_width_non_breaking_space: "\ufeff" } @weird_space_chars = { non_breaking_space: "\u00a0", ogham_space: "\u1680", en_quad_space: "\u2000", em_quad_space: "\u2001", en_space: "\u2002", em_space: "\u2003", three_per_em_space: "\u2004", four_per_em_space: "\u2005", six_per_em_space: "\u2006", hair_space: "\u200a", narrow_non_breaking_space: "\u202f", medium_mathematical_space: "\u205f", spc_symbol: "\u2420", brail_pattern_blank: "\u2800", ideographic_space: "\u3000" } # At some point work these into a newline fingerprint # detector—it's harder than it looks because systems # are inconsistent. @new_line_chars = { line_feed: "\u000a", carriage_return: "\u000d" } @non_printing_chars = { null: "\u0000", start_of_heading: "\u0001", start_of_text: "\u0002", end_of_text: "\u0003", end_of_transmission: "\u0004", enquiry: "\u0005", acknowledge: "\u0006", bell_alert: "\u0007", backspace: "\u0008", character_tabulation: "\u0009", line_tabulation: "\u000b", form_feed: "\u000c", shift_out: "\u000e", shift_in: "\u000f", data_link_escape: "\u0010", device_control_1: "\u0011", device_control_2: "\u0012", device_control_3: "\u0013", device_control_4: "\u0014", negative_acknowledge: "\u0015", synchronous_idle: "\u0016", end_of_trans_block: "\u0017", cancel: "\u0018", end_of_medium: "\u0019", substitute: "\u001a", escape: "\u001b", file_separator: "\u001c", group_separator: "\u001d", record_separator: "\u001e", unit_separator: "\u001f", reverse_line_feed: "\u008d", cancel_character: "\u0094" } char_sub_group_syms = [ :weird_space_chars, :non_printing_chars, :zero_width_chars ] char_sub_groups = char_sub_group_syms.map do |sym| instance_variable_get "@#{sym}" end @all_chars = { checkmark: "\u2713" } char_sub_groups.each { | group | @all_chars.merge! group } @char_groups = [ @all_chars ] + char_sub_groups @char_groups.map do |char_group| char_group.transform_values! { |v| v.encode "utf-8" } char_group.freeze end @char_lookup = {} @all_chars.map { |k, v| @char_lookup[v] = k } size_ok = @char_lookup.size == @all_chars.size message = "Mismatched charater mapping".freeze raise AssertionError, message unless size_ok class_instance_vars = \ [ :all_chars, :char_lookup ] + char_sub_group_syms inheritable_attrs class_instance_vars end