C0 code coverage information
Generated on Tue Jun 09 17:50:05 +0900 2009 with
rcov 0.8.1.2
Code reported as executed by Ruby looks like
this... and this: this line is also marked as
covered. Lines considered as run by rcov, but
not reported by Ruby, look like this, and
this: these lines were inferred by rcov (using simple heuristics).
Finally, here's a line marked as not
executed.
1 #
-*- coding: utf-8 -*- 2
require 'nested_ajax/pane'
3 require 'forwardable'
4 5 module NestedAjax
6 module Pane 7 class AbstractPane 8 extend Forwardable 9 10 attr_accessor :controller 11 attr_accessor :parent,
:association_foreign_key
12 attr_accessor :form 13
attr_reader :template, :options 14 attr_reader :object, :object_name 15 attr_reader :pane_id 16 alias_method :id, :pane_id
17 18 def initialize(template,
form_or_object, options = {}) 19 @template = template 20 if form_or_object.respond_to?(:fields_for)
21 @form = form_or_object
22 @object = @form.object
23 else 24 @form = nil 25 @object = form_or_object
26 end 27 @object_name =
options[:object_name] || @object.class.name.underscore 28 @form_name = options[:form_name]
29 @controller =
options[:controller] 30
@foreign_key = options[:foreign_key] 31 @pane_id ||= (options[:pane_id] ||
nested_ajax_options[:pane_id] ||
"#{object_name}_#{object.object_id}") 32 @options = options || {}
33 end 34 35 def_instance_delegators(:@template, 36 :logger, :request, :params,
37 :concat, :capture,
:tag, 38
:remote_form_for, 39
:form_for, :fields_for, :hidden_field_tag, 40 :remote_function, :link_to, :link_to_function,
:link_to_remote, :url_for, 41 :javascript_tag) 42 43
def process(&block)
44 with_instance_variable(object_name, object) do 45 yield(self) if block_given?
46 end 47 end 48 49 def process_with_tag(options = {}, &block)
50
PaneTag.render(template, self.id, options) do 51 process(&block) 52 end 53 end 54 55 def with_instance_variable(name, new_value)
56 instance_var_name =
'@%s' % name 57 backup =
@template.instance_variable_get(instance_var_name) 58 begin 59
@template.instance_variable_set(instance_var_name, new_value) 60 yield(new_value) 61 ensure 62
@template.instance_variable_set(instance_var_name, backup) 63 end 64 end 65 66 # このメソッドで用意したpaneを
NestedAjax::BaseHelper.nested_ajax_pane では 67 #
使用してオブジェクトを改めて作らないようにしていま
。 68 def
render(options = {}, local_assigns = nil, &block) 69 locals = nil 70 case options 71 when Hash 72 locals = (options[:locals] ||=
{}) 73 else
74 locals =
local_assigns || {} 75
end 76
locals.update({:cascading_nested_ajax_pane => self}) 77 @template.render(options,
local_assigns, &block) 78 end 79 80
def base_form_name 81
@base_form_name ||= object_name 82 end 83 84
def form_name 85
@form_name ||= base_form_name 86 end 87 88
def nested_ajax_options
89 @template.nested_ajax_options 90 end 91 92
def submittable? 93
xhr? ? !in_form? : true 94 end 95 96
def xhr? 97
request.xhr? 98 end
99 100 def in_form? 101 (nested_ajax_options[:in_form] ==
"true") || ( 102 form ? true : parent ? parent.in_form? : false)
103 end 104 105 106 def foreign_key?(attr) 107 attr.to_s == foreign_key
108 end 109 110 def foreign_key 111 @foreign_key ||= nested_ajax_options[:foreign_key]
112 end 113 114 def root? 115 request.xhr? ? false : (!params[:nested_ajax]
&& !parent) 116 end 117 118 def form_for(*args, &block) 119 pane_setter = lambda do |f|
120 f.pane = self
121 old_form = self.form
122 self.form = f
123 begin 124 concat(capture(f, &block))
125 ensure 126 self.form = old_form 127 end 128 end 129 if params[:nested_ajax]
130
form_or_fields_for(*args, &pane_setter) 131 else 132 @template.form_for(*args,
&pane_setter) 133
end 134 end
135 136 private 137 138 def form_or_fields_for(*args, &block)
139 if form_name =
nested_ajax_options[:form_name] 140 case args.first 141 when Symbol, String 142 args.shift 143 end 144 args = [form_name] + args
145 end 146 if in_form? 147 fields_for_nested_ajax(*args,
&block) 148 else
149
form_for_nested_ajax(*args, &block) 150 end 151 end 152 153 def fields_for_nested_ajax(*args, &block)
154
PaneTag.render(@template, pane_id, options[:html]) do 155 fields_for(*args, &block)
156 end 157 end 158 159 def form_for_nested_ajax(*args, &block)
160 options =
args.extract_options! 161 tag_name, html_options =
PaneTag.name_and_options(pane_id, options.delete(:html)) 162 form_options = { 163 :update => pane_id,
164 :url =>
options[:url] 165
}.update(options) 166
PaneTag.render(@template, pane_id, html_options) do 167 remote_form_for(*(args +
[form_options])) do |f| 168 nested_ajax_options.each do |key, value| 169
concat(hidden_field_tag(:"nested_ajax[#{key}]", value))
170 end 171 concat(capture(f, &block))
172 end 173 end 174 end 175 176 177 private 178 179 def place_holder(name) 180 "**#{name.to_s}**"
181 end 182 183 def escaped_place_holder(name) 184 CGI.escape(place_holder(name))
185 end 186 187 end 188 end 189 end
Generated using the rcov
code coverage analysis tool for Ruby version 0.8.1.2.