Module: Vernacular

Defined in:
lib/vernacular.rb,
lib/vernacular/version.rb,
lib/vernacular/source_file.rb,
lib/vernacular/regex_modifier.rb,
lib/vernacular/configuration_hash.rb,
lib/vernacular/modifiers/uri_sigil.rb,
lib/vernacular/modifiers/date_sigil.rb,
lib/vernacular/modifiers/number_sigil.rb

Overview

Allows extending ruby’s syntax and compilation process

Defined Under Namespace

Modules: BootsnapMixin, InstructionSequenceMixin, Modifiers Classes: ConfigurationHash, RegexModifier, SourceFile

Constant Summary collapse

VERSION =
'1.0.0'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.iseq_dirObject (readonly)

Returns the value of attribute iseq_dir.



40
41
42
# File 'lib/vernacular.rb', line 40

def iseq_dir
  @iseq_dir
end

.modifiersObject (readonly)

Returns the value of attribute modifiers.



40
41
42
# File 'lib/vernacular.rb', line 40

def modifiers
  @modifiers
end

Class Method Details

.add(modifier) ⇒ Object



42
43
44
# File 'lib/vernacular.rb', line 42

def add(modifier)
  modifiers << modifier
end

.clearObject



46
47
48
# File 'lib/vernacular.rb', line 46

def clear
  Dir.glob(File.join(iseq_dir, '**/*.yarb')) { |path| File.delete(path) }
end

.configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Vernacular)

    the object that the method was called on



50
51
52
53
54
55
56
57
58
59
# File 'lib/vernacular.rb', line 50

def configure
  @modifiers = []
  yield self

  hash = ConfigurationHash.new(modifiers).hash
  @iseq_dir = File.expand_path(File.join('../.iseq', hash), __dir__)
  FileUtils.mkdir_p(iseq_dir) unless File.directory?(iseq_dir)

  install
end

.give_me_all_the_things!Object

Use every available pre-configured modifier



62
63
64
65
# File 'lib/vernacular.rb', line 62

def give_me_all_the_things!
  @modifiers =
    Modifiers.constants.map { |constant| Modifiers.const_get(constant).new }
end

.iseq_path_for(source_path) ⇒ Object



74
75
76
77
# File 'lib/vernacular.rb', line 74

def iseq_path_for(source_path)
  source_path.gsub(/[^A-Za-z0-9\._-]/) { |c| format('%02x', c.ord) }
             .gsub('.rb', '.yarb')
end

.modify(source) ⇒ Object



67
68
69
70
71
72
# File 'lib/vernacular.rb', line 67

def modify(source)
  modifiers.each do |modifier|
    source = modifier.modify(source)
  end
  source
end