Module: Vernacular

Defined in:
lib/vernacular.rb,
lib/vernacular/version.rb,
lib/vernacular/ast_parser.rb,
lib/vernacular/source_file.rb,
lib/vernacular/ast_modifier.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,
lib/vernacular/modifiers/typed_method_args.rb,
lib/vernacular/modifiers/typed_method_returns.rb

Overview

Allows extending ruby’s syntax and compilation process

Defined Under Namespace

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

Constant Summary collapse

PARSER_PATH =
File.expand_path('vernacular/parser.rb', __dir__).freeze
VERSION =
'0.1.0'.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.iseq_dirObject (readonly)

Returns the value of attribute iseq_dir.



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

def iseq_dir
  @iseq_dir
end

.modifiersObject (readonly)

Returns the value of attribute modifiers.



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

def modifiers
  @modifiers
end

Class Method Details

.add(modifier) ⇒ Object



48
49
50
# File 'lib/vernacular.rb', line 48

def add(modifier)
  modifiers << modifier
end

.clearObject



52
53
54
# File 'lib/vernacular.rb', line 52

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



56
57
58
59
60
61
62
63
64
65
# File 'lib/vernacular.rb', line 56

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



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

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

.iseq_path_for(source_path) ⇒ Object



80
81
82
83
# File 'lib/vernacular.rb', line 80

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

.modify(source) ⇒ Object



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

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