lib/zafu/node_context.rb in zafu-0.8.2 vs lib/zafu/node_context.rb in zafu-0.8.3

- old
+ new

@@ -49,11 +49,11 @@ # The convention is to use the class of the current object to build this name. # You can also use an 'after_class' parameter to move up in the current object's class hierarchy to get # ivar name (see #master_class). def as_main(after_class = nil) klass = after_class ? master_class(after_class) : single_class - res = self.class.new("@#{klass.to_s.underscore}", single_class, nil) #, :new_record => @opts[:new_record]) + res = self.class.new("@#{klass.to_s.underscore}", single_class, nil) res.dom_prefix = self.dom_prefix res end # Find the class just afer 'after_class' in the class hierarchy. @@ -92,15 +92,18 @@ code else str || "<%= #{code} %>" end else - @saved_dom_id || ( - [dom_prefix] + - dom_scopes + - (options[:list] ? [make_scope_id] : []) - ).compact.uniq.join('_') + @saved_dom_id || if options[:list] + scopes = dom_scopes + scopes = [dom_prefix] if scopes.empty? + scopes + [make_scope_id] + else + scopes = dom_scopes + scopes + ((@up || scopes.empty?) ? [dom_prefix] : []) + end.compact.uniq.join('_') end end # This holds the current context's unique name if it has it's own or one from the hierarchy. If # none is found, it builds one. @@ -171,10 +174,20 @@ end protected # List of scopes defined in ancestry (used to generate dom_id). def dom_scopes - (@up ? @up.dom_scopes : []) + (@dom_scope ? [make_scope_id] : []) + return [@saved_dom_id] if @saved_dom_id + if @up + scopes = @up.dom_scopes + if @dom_scope + (scopes.empty? ? [dom_prefix] : scopes) + [make_scope_id] + else + scopes + end + else + @dom_scope ? [dom_prefix, make_scope_id] : [] + end end private def make_scope_id "\#{#{@name}.zip}" \ No newline at end of file