Class: Pretentious::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/pretentious/context.rb

Overview

Contains references to scoped variables

Constant Summary collapse

VARIABLE_NAMES =

list of variable names to use. i j are not there on purpose

%w(a b c d e f g h k l m n o p q r s t u v w x y z)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(variable_map = {}, declared_names = {}, previous_declarations = {}) ⇒ Context

Returns a new instance of Context.



10
11
12
13
14
15
# File 'lib/pretentious/context.rb', line 10

def initialize(variable_map = {}, declared_names = {}, previous_declarations = {})
  @declared_names = declared_names
  @variable_map = variable_map
  @previous_declarations = previous_declarations
  @current_name_dict = 0
end

Instance Attribute Details

#declared_namesObject

Returns the value of attribute declared_names.



7
8
9
# File 'lib/pretentious/context.rb', line 7

def declared_names
  @declared_names
end

#previous_declarationsObject

Returns the value of attribute previous_declarations.



7
8
9
# File 'lib/pretentious/context.rb', line 7

def previous_declarations
  @previous_declarations
end

#variable_mapObject

Returns the value of attribute variable_map.



7
8
9
# File 'lib/pretentious/context.rb', line 7

def variable_map
  @variable_map
end

Instance Method Details

#dumpObject



43
44
45
46
47
# File 'lib/pretentious/context.rb', line 43

def dump
  puts "v-map #{@variable_map.inspect}"
  puts "d-map #{@declared_names.inspect}"
  puts "p-map #{@previous_declarations.inspect}"
end

#map_name(object_id) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/pretentious/context.rb', line 94

def map_name(object_id)
  object_id_to_declared_names = {}

  if @declared_names
    @declared_names.each do |k, v|
      object_id_to_declared_names[v[:object_id]] = k if v
    end
  end

  # return immediately if already mapped
  return object_id_to_declared_names[object_id] if object_id_to_declared_names.include? object_id
  nil
end

#merge_variable_map(target_object) ⇒ Object



31
32
33
# File 'lib/pretentious/context.rb', line 31

def merge_variable_map(target_object)
  @variable_map.merge!(target_object._variable_map) if target_object.methods.include?(:_variable_map) && !target_object._variable_map.nil?
end

#pick_name(object_id, value = :no_value_passed) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/pretentious/context.rb', line 49

def pick_name(object_id, value = :no_value_passed)
  var_name = map_name(object_id)
  return var_name if var_name

  var_name = "var_#{object_id}"

  if !@variable_map.nil? && @variable_map.include?(object_id)

    candidate_name = @variable_map[object_id].to_s
    if !@declared_names.include?(candidate_name)
      var_name = candidate_name
      @declared_names[candidate_name] = { count: 1, object_id: object_id }
    else

      if @declared_names[candidate_name][:object_id] == object_id
        var_name = candidate_name
      else
        new_name = "#{candidate_name}_#{@declared_names[candidate_name][:count]}"
        var_name = "#{new_name}"

        @declared_names[candidate_name][:count] += 1
        @declared_names[new_name] = { count: 1, object_id: object_id }
      end

    end
  else
    v = nil

    Kernel.loop do
      v = provide_name
      break if !@declared_names.key?(v) || v.nil?
    end

    var_name = v

    @declared_names[var_name] = { count: 1, object_id: object_id }
  end

  var_name
end

#register(object_id, name) ⇒ Object



39
40
41
# File 'lib/pretentious/context.rb', line 39

def register(object_id, name)
  @variable_map[object_id] = name
end

#register_instance_variable(object_id) ⇒ Object



35
36
37
# File 'lib/pretentious/context.rb', line 35

def register_instance_variable(object_id)
  @variable_map[object_id] = "@#{@previous_declarations[object_id]}" if @previous_declarations[object_id][0] != '@'
end

#subcontext(declarations) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/pretentious/context.rb', line 17

def subcontext(declarations)
  previous_declarations = {}

  declarations.select { |d| d[:used_by] != :inline }.each do |d|
    previous_declarations[d[:id]] = pick_name(d[:id])
  end

  Pretentious::Context.new(@variable_map, {}, previous_declarations)
end

#value_of(value) ⇒ Object



90
91
92
# File 'lib/pretentious/context.rb', line 90

def value_of(value)
  Pretentious.value_ize(self, value)
end

#was_declared_previously?(object_id) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/pretentious/context.rb', line 27

def was_declared_previously?(object_id)
  @previous_declarations.key? object_id
end