Module: Inline::Mapping

Included in:
C
Defined in:
lib/inline/mapping.rb

Constant Summary collapse

@@orig_method_map =
{
  '!'   => 'bang',
  '%'   => 'percent',
  '&'   => 'and',
  '*'   => 'times',
  '**'  => 'times2',
  '+'   => 'plus',
  '-'   => 'minus',
  '/'   => 'div',
  '<'   => 'lt',
  '<='  => 'lte',
  '<=>' => 'spaceship',
  "<\<" => 'lt2',
  '=='  => 'equals2',
  '===' => 'equals3',
  '=~'  => 'equalstilde',
  '>'   => 'gt',
  '>='  => 'ge',
  '>>'  => 'gt2',
  '+@'  => 'unary_plus',
  '-@'  => 'unary_minus',
  '[]'  => 'index',
  '[]=' => 'index_equals',
  '^'   => 'carat',
  '|'   => 'or',
  '~'   => 'tilde',
}
@@method_map =
@@orig_method_map.merge(@@orig_method_map.invert)
@@mapped_re =
@@orig_method_map.values.sort_by { |k| k.length }.map {|s|
  Regexp.escape(s)
}.reverse.join("|")

Instance Method Summary collapse

Instance Method Details

#munge(name) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/inline/mapping.rb', line 63

def munge name
  name = name.to_s.dup

  is_cls_method = name.sub!(/^self\./, '')

  name = @@method_map[name] if @@method_map.has_key? name
  name = name.sub(/=$/, '_equals')
  name = name.sub(/\?$/, '_eh')
  name = name.sub(/\!$/, '_bang')

  name = yield name if block_given?

  name = "class_" + name if is_cls_method

  name
end

#normal_to_test(name) ⇒ Object

Generates a test method name from a normal method, taking into account names composed of metacharacters (used for arithmetic, etc



83
84
85
# File 'lib/inline/mapping.rb', line 83

def normal_to_test name
  "test_#{munge name}"
end

#test_to_normal(name, klassname = nil) ⇒ Object

Converts a method name beginning with test to its corresponding normal method name, taking into account symbolic names which may have been anglicised by #normal_to_test().



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/inline/mapping.rb', line 107

def test_to_normal(name, klassname=nil)
  unmunge(name.to_s.sub(/^test_/, '')) do |n|
    if defined? @inherited_methods then
      known_methods = (@inherited_methods[klassname] || {}).keys.sort.reverse
      known_methods_re = known_methods.map {|s| Regexp.escape(s) }.join("|")
      n = n.sub(/^(#{known_methods_re})(_.*)?$/) { $1 } unless
        known_methods_re.empty?
      n
    end
  end
end

#unmunge(name) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/inline/mapping.rb', line 87

def unmunge name
  name = name.to_s.dup

  is_cls_method = name.sub!(/^class_/, '')

  name = name.sub(/_equals(_.*)?$/, '=') unless name =~ /index/
  name = name.sub(/_bang(_.*)?$/, '!')
  name = name.sub(/_eh(_.*)?$/, '?')
  name = name.sub(/^(#{@@mapped_re})(_.*)?$/) {$1}
  name = yield name if block_given?
  name = @@method_map[name] if @@method_map.has_key? name
  name = 'self.' + name if is_cls_method

  name
end