Class: Glib::Json::Traversal::Visitor

Inherits:
Object
  • Object
show all
Defined in:
app/controllers/concerns/glib/json/traversal.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



38
39
40
# File 'app/controllers/concerns/glib/json/traversal.rb', line 38

def initialize
  @forms = []
end

Instance Attribute Details

#formsObject (readonly)

Used in test crawler



36
37
38
# File 'app/controllers/concerns/glib/json/traversal.rb', line 36

def forms
  @forms
end

Instance Method Details

#traverse_multiple(views, block) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/concerns/glib/json/traversal.rb', line 42

def traverse_multiple(views, block)
  if views.is_a? Array
    views.each do |view|
      case view['view']
      when 'panels/form-v1'
        @forms << view
        traverse_single view, block
        @forms.pop
      else
        traverse_single view, block
      end
    end
  end
end

#traverse_single(view, block) ⇒ Object



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
# File 'app/controllers/concerns/glib/json/traversal.rb', line 61

def traverse_single(view, block)
  block.call view

  # Generic view children
  traverse_multiple view['childViews'], block

  # Generic menu buttons
  traverse_multiple view['buttons'], block
  traverse_multiple view['childButtons'], block

  # Split panel
  traverse_vertical_content view['left'], block
  traverse_vertical_content view['center'], block
  traverse_vertical_content view['right'], block

  # TODO: crawl header and footer
  # Table/List
  if (sections = view['sections']).is_a? Array
    sections.each do |section|
      traverse_vertical_content section['header'], block
      traverse_multiple section['rows'], block
      traverse_vertical_content section['footer'], block
    end
  end
end

#traverse_vertical_content(view, block) ⇒ Object



57
58
59
# File 'app/controllers/concerns/glib/json/traversal.rb', line 57

def traverse_vertical_content(view, block)
  traverse_multiple view['childViews'], block if view
end