Class: Props::BaseWithExtensions

Inherits:
Base
  • Object
show all
Defined in:
lib/props_template/base_with_extensions.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#array!, #commands_to_json!, #handle_collection, #result!

Constructor Details

#initialize(builder, context = nil, options = {}) ⇒ BaseWithExtensions

Returns a new instance of BaseWithExtensions.



14
15
16
17
18
19
20
21
22
# File 'lib/props_template/base_with_extensions.rb', line 14

def initialize(builder, context = nil, options = {})
  @context = context
  @builder = builder
  #todo: refactor so deferred can be its own class
  @em = ExtensionManager.new(self)
  @traveled_path = []
  @key_formatter = KeyFormatter.new(camelize: :lower)
  super()
end

Instance Attribute Details

#builderObject (readonly)

Returns the value of attribute builder.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def builder
  @builder
end

#commandsObject (readonly)

Returns the value of attribute commands.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def commands
  @commands
end

#contextObject (readonly)

Returns the value of attribute context.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def context
  @context
end

#deferredObject (readonly)

Returns the value of attribute deferred.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def deferred
  @deferred
end

#fragmentsObject (readonly)

Returns the value of attribute fragments.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def fragments
  @fragments
end

#traveled_pathObject (readonly)

Returns the value of attribute traveled_path.



12
13
14
# File 'lib/props_template/base_with_extensions.rb', line 12

def traveled_path
  @traveled_path
end

Instance Method Details

#deferred!Object



24
25
26
# File 'lib/props_template/base_with_extensions.rb', line 24

def deferred!
  @em.deferred
end

#fragment_digest!Object



32
33
34
# File 'lib/props_template/base_with_extensions.rb', line 32

def fragment_digest!
  @em.fragment_digest
end

#fragments!Object



28
29
30
# File 'lib/props_template/base_with_extensions.rb', line 28

def fragments!
  @em.fragments
end

#handle_collection_item(collection, item, index, options) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/props_template/base_with_extensions.rb', line 80

def handle_collection_item(collection, item, index, options)
  if collection.respond_to? :member_key
    member_key = collection.member_key
  end

  if !member_key
    @traveled_path.push(index)
  else
    id = if item.respond_to? member_key
      item.send(member_key)
    elsif item.is_a? Hash
      item[member_key] || item[member_key.to_sym]
    end

    if id.nil?
      @traveled_path.push(index)
    else
      @traveled_path.push("#{member_key.to_s}=#{id}")
    end
  end

  super

  @traveled_path.pop
  return
end

#handle_set_block(key, options) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/props_template/base_with_extensions.rb', line 66

def handle_set_block(key, options)
  @traveled_path.push(key)
  n = 1
  if suffix = options[:path_suffix]
    n += suffix.length
    @traveled_path.push(suffix)
  end

  super

  @traveled_path.pop(n)
  return
end

#refine_all_item_options(all_options) ⇒ Object



107
108
109
# File 'lib/props_template/base_with_extensions.rb', line 107

def refine_all_item_options(all_options)
  @em.refine_all_item_options(all_options)
end

#refine_item_options(item, options) ⇒ Object



112
113
114
# File 'lib/props_template/base_with_extensions.rb', line 112

def refine_item_options(item, options)
  @em.refine_options(options, item)
end

#scoped_stateObject



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/props_template/base_with_extensions.rb', line 44

def scoped_state
  prev_state = [@commands, @em.deferred, @em.fragments]
  @commands = []
  @em  = ExtensionManager.new(self)
  yield
  next_state = [@commands, @em.deferred, @em.fragments]
  @commands = prev_state[0]
  @em = ExtensionManager.new(self, prev_state[1], prev_state[2])

  next_state
end

#set!(key, options = {}, &block) ⇒ Object



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

def set!(key, options = {}, &block)
  key = @key_formatter.format(key)

  if block_given?
    options = @em.refine_options(options)
  end

  super(key, options, &block)
end

#set_block_content!(options = {}) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/props_template/base_with_extensions.rb', line 36

def set_block_content!(options = {})
  return super if !@em.has_extensions(options)

  @em.handle(@commands, options) do
    yield
  end
end