lrd_view_tools 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,48 +1,58 @@
1
- =LRD ViewTools
1
+ =LRD::ViewTools
2
2
 
3
3
  Standard view helpers and stylesheet defaults for Logical Reality Design
4
4
  Projects.
5
5
 
6
6
  == Installing
7
7
 
8
- Add to Gemfile:
8
+ Add to Gemfile:
9
9
  gem 'lrd_view_tools'
10
10
 
11
11
  and run 'bundle install'.
12
12
 
13
- Also, 'rails generate lrd_view_tools:install' will copy in default images,
14
- stylesheets, and helper partials to the rails app.
15
-
16
13
  == Simple labeled inputs for forms:
17
14
 
18
- labeled_input(form, field)
15
+ form.labeled_input(field)
19
16
 
20
17
  Produces a <label> <input> pair for a text field in a standard form helper.
21
- The included stylesheet forms.sass will format the label as an 8-em wide
22
- float to the left of the input.
18
+ The default LRD stylesheet (forms.sass) in all LRD projects will format the
19
+ label as an 8-em wide float to the left of the input (or may have been modified
20
+ on a per-project basis).
23
21
 
24
22
  Usage example:
25
- form_for(@user) do |form
26
- = labeled_input(form, :name)
27
- = labeled_input(form, :email)
28
- = labeled_input(form, nil, :input => form.submit("Save Changes"))
23
+ form_for(@user) do |f|
24
+ = f.labeled_input(:name)
25
+ = f.labeled_input(:email)
26
+ = f.labeled_input(:country) do
27
+ = f.select(:country, [ 'option 1', 'option 2'])
28
+ = f.unlabeled_submit
29
29
  end
30
30
 
31
31
  Options:
32
32
  The output defaults to <input type="text" name="#{field}"> for the
33
33
  but can be overridden in a number of ways:
34
34
 
35
- #Override the form element:
36
- labeled_input(form, :boolean_field, :input => form.checkbox(:boolean_field))
35
+ #Override the input element by passing a block:
36
+ f.labeled_input(:boolean_field) do
37
+ f.checkbox(:boolean_field))
38
+
39
+ #Alter label text:
40
+ f.labeled_input(:fieldname, :text => "Other Text")
37
41
 
38
42
  #Force a blank label:
39
- labeled_input(form, :fieldname, :nolabel => true )
43
+ f.labeled_input(:fieldname, :text => '' )
40
44
 
41
- #Alter label text:
42
- labeled_input(form, :fieldname, :text => "Other Text")
45
+ #Set to required - appends class 'required' to both the div and the input:
46
+ f.labeled_input(:fieldname, :required => 'true' )
43
47
 
44
48
  #Add a comment after the input:
45
- labeled_input(form, :password_confirmation, :comment => "Re-enter password")
49
+ f.labeled_input(:password_confirmation, :comment => "Re-enter password")
50
+
51
+ #Change the input type to a textarea:
52
+ f.labeled_input(:description, :input_type => :text_area) # or :textarea, both work
53
+
54
+ #Create a telephone input:
55
+ f.labeled_input(:description, :input_type => :tel) # or :telephone, both work
46
56
 
47
57
  == Pass a block to partial:
48
58
 
@@ -3,7 +3,6 @@ module LRD
3
3
  module FormHelper
4
4
 
5
5
  def self.included(arg)
6
- p "LRD::FormHelper included in #{arg}"
7
6
  ActionView::Helpers::FormBuilder.send(:include, LRD::FormBuilder)
8
7
  end
9
8
 
@@ -11,11 +10,11 @@ module LRD
11
10
  # block, pre-styled in LRD style.
12
11
  #
13
12
  # pass :label => false to suppress the label text. (A label tag is still emitted.)
14
- # pass :required => true to dispay as a required field
13
+ # pass :required => true to dispay as a required field (class required set on both the div and the input)
15
14
  # pass :text => "foo" to override the label text
16
- # pass :class => 'foo' to add 'foo' to the CSS class of the <div>
15
+ # pass :divclass => 'foo' to add 'foo' to the CSS class of the <div>
17
16
  # pass :comment => "text" to append a span.comment with text after the input
18
- # pass :input_type => 'password' } to use a password_field instead of a text_field
17
+ # pass :type => 'password' } to use a password_field instead of a text_field
19
18
  # (also supported: text, passsword, hidden, file, text_area, search, telephone, url
20
19
  # email, range, submit)
21
20
  #
@@ -27,23 +26,24 @@ module LRD
27
26
  # # => <input type='text' name='user[login]' id='user_login' value="#{@user.login}" />
28
27
  # # => </div>
29
28
  def labeled_input(object_name, method, options = {}, &block)
30
- divclass = labeled_input_divclass(options)
29
+ divclass = options.delete(:divclass)
30
+ div_final_class = labeled_input_div_class(options, divclass)
31
31
  comment = comment_for_labeled_input(options.delete(:comment))
32
+ label_text = options.delete(:text)
32
33
  if block_given?
33
34
  input = capture(&block)
34
35
  else
35
36
  input = input_for_labeled_input(object_name, method, options)
36
37
  end
37
38
 
38
-
39
39
  if object_name.blank? or method.blank?
40
40
  label = "<label>&nbsp;</label>".html_safe
41
- elsif text = options.delete(:text)
42
- label = label(object_name, method, text, options)
41
+ elsif label_text =
42
+ label = label(object_name, method, label_text, options)
43
43
  else
44
44
  label = label(object_name, method, options)
45
45
  end
46
- content_tag(:div, (label + input + comment), { :class => divclass })
46
+ content_tag(:div, (label + input + comment), { :class => div_final_class })
47
47
  end
48
48
 
49
49
  def comment_for_labeled_input(text)
@@ -55,15 +55,20 @@ module LRD
55
55
  end
56
56
 
57
57
 
58
- def labeled_input_divclass(options)
58
+ def labeled_input_div_class(options, divclass = nil)
59
59
  cssclass = "labeled_input"
60
60
  cssclass += " required" if options[:required]
61
- cssclass += " #{options[:class]}" if options[:class]
61
+ cssclass += " #{divclass}" if divclass
62
62
  cssclass
63
63
  end
64
64
 
65
65
  def input_for_labeled_input(object_name, method, options)
66
- case input_type = options.delete(:input_type).to_s
66
+ if required = options.delete(:required)
67
+ options[:class] = (options[:class] or '') + " required"
68
+ end
69
+ submit_text = options.delete(:submit_text)
70
+
71
+ case input_type = options.delete(:type).to_s
67
72
  when "text", ""
68
73
  input = text_field( object_name, method, options)
69
74
  when "password"
@@ -72,11 +77,11 @@ module LRD
72
77
  input = hidden_field( object_name, method, options)
73
78
  when "file"
74
79
  input = file_field( object_name, method, options)
75
- when "text_area"
80
+ when "text_area", "textarea"
76
81
  input = text_area( object_name, method, options)
77
82
  when "search"
78
83
  input = search_field( object_name, method, options)
79
- when "telephone"
84
+ when "telephone", 'tel'
80
85
  input = telephone_field(object_name, method, options)
81
86
  when "url"
82
87
  input = url_field( object_name, method, options)
@@ -87,20 +92,31 @@ module LRD
87
92
  when "range"
88
93
  input = range_field( object_name, method, options)
89
94
  when "submit"
90
- input = submit_tag( options[:submit_text], options)
95
+ input = submit_tag( submit_text, options)
91
96
  else
92
97
  raise "labeled_input input_type #{input_type} is not a valid type!"
93
98
  end
94
99
  input
95
100
  end
96
101
 
102
+ # Shortcut for a version of labeled_input that suppresses the
103
+ # label text. Just calls labeled_input with :label => false.
97
104
  def unlabeled_input(object_name, method, options)
98
105
  labeled_input(object_name, method, options.merge!(:label => false))
99
106
  end
100
107
 
101
108
  # creates a submit button that lines up with a bunch of labeled_input fields
109
+ # Pass a single argument to override the default text of the submit button.
110
+ #
111
+ # ==== Examples (in HAML):
112
+ # - form_for(@user) do
113
+ # = f.unlabeled_submit("Click Me")
114
+ # # => <div class='labeled_input'>
115
+ # # => <label> </label>
116
+ # # => <input type='submit' name='[]' value='Click Me' />
117
+ # # => </div>
102
118
  def unlabeled_submit(text = nil)
103
- labeled_input(nil, nil, :input_type => :submit, :submit_text => text)
119
+ labeled_input(nil, nil, :type => :submit, :submit_text => text)
104
120
  end
105
121
  end
106
122
  end
@@ -10,17 +10,250 @@ describe "form_for().labelled_input", :type => :view do
10
10
 
11
11
  let :user do
12
12
  view.stub!(:user_path => "#")
13
- mock_model("User", :login => "Username")
13
+ mock_model("User", :login => "Username", :bio => "This is my story", :phone => "626-111-2222")
14
14
  end
15
15
 
16
- it "should render a labeled_input successfully" do
17
- render(:inline => <<-EOTEMPLATE, :locals => { :user => user })
18
- <%= form_for(user) do |f| %>
19
- <%= f.labeled_input(:login) %>
20
- <%- end -%>
21
- EOTEMPLATE
22
- p "Rendered is: ", rendered
23
- rendered.should_not be_nil
24
16
 
17
+ describe "with default type" do
18
+ let :template do
19
+ <<-EOTEMPLATE
20
+ <%= form_for(user) do |f| %>
21
+ <%= f.labeled_input(:login) %>
22
+ <%- end -%>
23
+ EOTEMPLATE
24
+ end
25
+
26
+ it "should render successfully" do
27
+ render(:inline => template, :locals => { :user => user })
28
+ rendered.should_not be_nil
29
+ end
30
+
31
+ it "should have a label" do
32
+ render(:inline => template, :locals => { :user => user })
33
+ rendered.should have_xpath('//label')
34
+ end
35
+
36
+ it "should have a text input" do
37
+ render(:inline => template, :locals => { :user => user })
38
+ rendered.should have_xpath('//input')
39
+ end
40
+
41
+ it "should have a div with class labeled_input" do
42
+ render(:inline => template, :locals => { :user => user })
43
+ rendered.should have_xpath('//div[@class="labeled_input"]')
44
+ end
45
+ end
46
+
47
+ describe "with block passed" do
48
+ let :template do
49
+ <<-EOTEMPLATE
50
+ <%= form_for(user) do |f| %>
51
+ <%= f.labeled_input(:login) do %>
52
+ <select name='foo'>
53
+ <option value='bar'>Bar</option>
54
+ <option value='baz'>Baz</option>
55
+ <option value='bletch'>Bletch</option>
56
+ </select>
57
+ <%- end -%>
58
+ <%- end -%>
59
+ EOTEMPLATE
60
+ end
61
+
62
+ it "should not generate the default input" do
63
+ render(:inline => template, :locals => { :user => user })
64
+ rendered.should_not have_xpath("//div[@class='labeled_input']/input")
65
+ end
66
+
67
+ it "should insert the block's elements" do
68
+ render(:inline => template, :locals => { :user => user })
69
+ rendered.should have_xpath(
70
+ "//div[@class='labeled_input']/select[@name='foo'][count(option)=3]"
71
+ )
72
+ end
73
+ end
74
+
75
+ describe "with :required => true" do
76
+ let :template do
77
+ <<-EOTEMPLATE
78
+ <%= form_for(user) do |f| %>
79
+ <%= f.labeled_input(:login, :required => true) %>
80
+ <%- end -%>
81
+ EOTEMPLATE
82
+ end
83
+
84
+ it "should set the div class to required" do
85
+ render(:inline => template, :locals => { :user => user })
86
+ rendered.should have_xpath("//div[contains(@class,'required')][contains(@class, 'labeled_input')]")
87
+ end
88
+
89
+ it "should set the input class to required" do
90
+ render(:inline => template, :locals => { :user => user })
91
+ rendered.should have_xpath("//div[contains(@class,'required')]/input[contains(@class, 'required')]")
92
+ end
93
+
94
+ end
95
+
96
+
97
+ describe "with label text specified" do
98
+ let :template do
99
+ <<-EOTEMPLATE
100
+ <%= form_for(user) do |f| %>
101
+ <%= f.labeled_input(:login, :text => 'Label text') %>
102
+ <%- end -%>
103
+ EOTEMPLATE
104
+ end
105
+
106
+ it "should set the content of the label" do
107
+ render(:inline => template, :locals => { :user => user })
108
+ rendered.should have_xpath("//label[.='Label text']")
109
+ end
110
+
111
+ it "should not apply a 'text' attribute to the other elements" do
112
+ render(:inline => template, :locals => { :user => user })
113
+ rendered.should_not have_xpath("//label[@text]")
114
+ rendered.should_not have_xpath("//input[@text]")
115
+ rendered.should_not have_xpath("//div[@text]")
116
+ end
117
+
118
+ it "should not apply a class 'text' to the other elements" do
119
+ render(:inline => template, :locals => { :user => user })
120
+ rendered.should_not have_xpath("//label[contains(@class, 'text')]")
121
+ rendered.should_not have_xpath("//input[contains(@class, 'text')]")
122
+ rendered.should_not have_xpath("//div[contains(@class, 'text')]")
123
+ end
124
+ end
125
+
126
+ describe "with a comment specified" do
127
+ let :template do
128
+ <<-EOTEMPLATE
129
+ <%= form_for(user) do |f| %>
130
+ <%= f.labeled_input(:login, :comment => 'Reminder text') %>
131
+ <%- end -%>
132
+ EOTEMPLATE
133
+ end
134
+
135
+ it "should add a span for the comment" do
136
+ render(:inline => template, :locals => { :user => user })
137
+ rendered.should have_xpath("//div/span[contains(@class, 'comment')][.='Reminder text']")
138
+ end
139
+
140
+ it "should not apply a comment attribute to the other elements" do
141
+ render(:inline => template, :locals => { :user => user })
142
+ rendered.should_not have_xpath("//label[@comment]")
143
+ rendered.should_not have_xpath("//input[@comment]")
144
+ rendered.should_not have_xpath("//div[@comment]")
145
+ end
146
+
147
+ it "should not apply a class 'comment' to the other elements" do
148
+ render(:inline => template, :locals => { :user => user })
149
+ rendered.should_not have_xpath("//label[contains(@class, 'comment')]")
150
+ rendered.should_not have_xpath("//input[contains(@class, 'comment')]")
151
+ rendered.should_not have_xpath("//div[contains(@class, 'comment')]")
152
+ end
25
153
  end
154
+
155
+ describe "with a divclass specified" do
156
+ let :template do
157
+ <<-EOTEMPLATE
158
+ <%= form_for(user) do |f| %>
159
+ <%= f.labeled_input(:login, :divclass => 'foobar') %>
160
+ <%- end -%>
161
+ EOTEMPLATE
162
+ end
163
+
164
+ it "should apply the appropriate class to the div" do
165
+ render(:inline => template, :locals => { :user => user })
166
+ rendered.should have_xpath("//div[contains(@class, 'foobar')]")
167
+ end
168
+
169
+ it "should not apply the divclass to the input or label" do
170
+ render(:inline => template, :locals => { :user => user })
171
+ rendered.should_not have_xpath("//label[contains(@class, 'foobar')]")
172
+ rendered.should_not have_xpath("//input[contains(@class, 'foobar')]")
173
+ end
174
+ end
175
+
176
+ describe "with type :submit" do
177
+ let :template do
178
+ <<-EOTEMPLATE
179
+ <%= form_for(user) do |f| %>
180
+ <%= f.labeled_input(:bio, :type => :submit) %>
181
+ <%- end -%>
182
+ EOTEMPLATE
183
+ end
184
+
185
+ it "should have a submit button" do
186
+ render(:inline => template, :locals => { :user => user })
187
+ rendered.should have_xpath("//div[@class='labeled_input']/input[@type='submit']")
188
+ end
189
+
190
+ describe "and submit text" do
191
+ let :template do
192
+ <<-EOTEMPLATE
193
+ <%= form_for(user) do |f| %>
194
+ <%= f.labeled_input(:bio, :type => :submit, :submit_text => 'Click Me') %>
195
+ <%- end -%>
196
+ EOTEMPLATE
197
+ end
198
+
199
+ it "should have a submit button with text" do
200
+ render(:inline => template, :locals => { :user => user })
201
+ rendered.should have_xpath("//div[@class='labeled_input']/input[@type='submit'][@value='Click Me']")
202
+ end
203
+
204
+ it "should not put a 'submit_text' attribute in the other tags" do
205
+ render(:inline => template, :locals => { :user => user })
206
+ rendered.should_not have_xpath("//*[@submit_text]")
207
+ end
208
+ end
209
+ end
210
+
211
+
212
+ describe "with type :text_area" do
213
+ let :template do
214
+ <<-EOTEMPLATE
215
+ <%= form_for(user) do |f| %>
216
+ <%= f.labeled_input(:bio, :type => 'text_area') %>
217
+ <%- end -%>
218
+ EOTEMPLATE
219
+ end
220
+
221
+ it "should have a text area" do
222
+ render(:inline => template, :locals => { :user => user })
223
+ rendered.should have_xpath('//textarea')
224
+ end
225
+ end
226
+
227
+
228
+ describe "with type :textarea" do
229
+ let :template do
230
+ <<-EOTEMPLATE
231
+ <%= form_for(user) do |f| %>
232
+ <%= f.labeled_input(:bio, :type => :textarea) %>
233
+ <%- end -%>
234
+ EOTEMPLATE
235
+ end
236
+
237
+ it "should have a text area" do
238
+ render(:inline => template, :locals => { :user => user })
239
+ rendered.should have_xpath('//textarea')
240
+ end
241
+ end
242
+
243
+ describe "with type :telephane" do
244
+ let :template do
245
+ <<-EOTEMPLATE
246
+ <%= form_for(user) do |f| %>
247
+ <%= f.labeled_input(:phone, :type => :telephone) %>
248
+ <%- end -%>
249
+ EOTEMPLATE
250
+ end
251
+ it "should have a telephone input" do
252
+ render(:inline => template, :locals => { :user=> user })
253
+ rendered.should have_xpath('//input[@type="tel"]')
254
+ end
255
+
256
+ end
257
+
258
+
26
259
  end
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,9 @@ require 'rspec/rails/matchers/render_template'
7
7
  require 'rspec/rails/browser_simulators'
8
8
  require 'rspec/rails/example/view_example_group'
9
9
  require 'rspec/rails/mocks'
10
+ require 'webrat'
11
+ require "webrat/integrations/rspec-rails"
12
+ require 'webrat/core/matchers'
10
13
 
11
14
  plugin_spec_dir = File.dirname(__FILE__)
12
15
  #ActiveRecord::Base.logger = Logger.new(plugin_spec_dir + "/debug.log")
@@ -16,3 +19,4 @@ RSpec::configure do |c|
16
19
  :file_path => 'spec/views'
17
20
  }
18
21
  end
22
+
@@ -0,0 +1,44 @@
1
+ require 'spec/spec_helper'
2
+ require File.join(File.dirname(__FILE__), '..', 'lib','app', 'helpers', 'lrd_form_helper')
3
+ ActionView::Helpers::FormHelper.send(:include, LRD::FormHelper)
4
+
5
+ describe "form_for().unlabeled_submit", :type => :view do
6
+ let :user do
7
+ view.stub!(:user_path => "#")
8
+ mock_model("User", :login => "Username", :bio => "This is my story", :phone => "626-111-2222")
9
+ end
10
+
11
+
12
+ let :template do
13
+ <<-EOTEMPLATE
14
+ <%= form_for(user) do |f| %>
15
+ <%= f.unlabeled_submit %>
16
+ <%- end -%>
17
+ EOTEMPLATE
18
+ end
19
+
20
+ it "should have a submit button" do
21
+ render(:inline => template, :locals => { :user => user })
22
+ rendered.should have_xpath("//div[@class='labeled_input']/input[@type='submit']")
23
+ end
24
+
25
+ describe "and submit text" do
26
+ let :template do
27
+ <<-EOTEMPLATE
28
+ <%= form_for(user) do |f| %>
29
+ <%= f.unlabeled_submit('Click Me') %>
30
+ <%- end -%>
31
+ EOTEMPLATE
32
+ end
33
+
34
+ it "should have a submit button with text" do
35
+ render(:inline => template, :locals => { :user => user })
36
+ rendered.should have_xpath("//div[@class='labeled_input']/input[@type='submit'][@value='Click Me']")
37
+ end
38
+
39
+ it "should not put a 'submit_text' attribute in the other tags" do
40
+ render(:inline => template, :locals => { :user => user })
41
+ rendered.should_not have_xpath("//*[@submit_text]")
42
+ end
43
+ end
44
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lrd_view_tools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Evan Dorn
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-27 00:00:00 -07:00
18
+ date: 2011-05-02 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -35,13 +35,11 @@ files:
35
35
  - lib/app/helpers/lrd_form_helper.rb
36
36
  - lib/app/helpers/lrd_view_helper.rb
37
37
  - lib/lrd_view_tools.rb
38
- - spec/helpers/lrd_view_helper_spec.rb
39
38
  - spec/labelled_input_spec.rb
40
39
  - spec/lrd_view_tools_spec.rb
41
40
  - spec/spec.opts
42
41
  - spec/spec_helper.rb
43
- - spec/spec_helper_naked.rb
44
- - spec/spec_helper_plugin.rb
42
+ - spec/unlabeled_submit_spec.rb
45
43
  has_rdoc: true
46
44
  homepage: http://LRDesign.com
47
45
  licenses:
@@ -72,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
70
  requirements: []
73
71
 
74
72
  rubyforge_project:
75
- rubygems_version: 1.5.1
73
+ rubygems_version: 1.4.2
76
74
  signing_key:
77
75
  specification_version: 3
78
76
  summary: View helpers and defaults for LRD projects.
@@ -1,43 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require 'lrd_view_helper'
3
-
4
- describe LRD::ViewHelper do
5
-
6
- describe "bool_checked" do
7
- describe "with true" do
8
- it "should return an image tag for the checkmark" do
9
- helper.bool_checked(true).should =~ /images\/check.png/
10
- end
11
- end
12
- describe "with false" do
13
- it "should return an image tag for a spacer" do
14
- helper.bool_checked(false).should =~ /images\/blank.gif/
15
- end
16
- end
17
- end
18
-
19
- describe "labeled_input" do
20
- before(:each) do
21
- @form = mock(ActionView::Helpers::FormHelper)
22
- @form.stub!(:text_field).and_return("<input name='field' />")
23
- @form.stub!(:label).and_return("<label for='field'>")
24
-
25
- @labeled_input = helper.labeled_input(@form, :field)
26
- end
27
-
28
- it "should return a string" do
29
- @labeled_input.is_a?(String).should be_true
30
- end
31
- it "should contain the input tag" do
32
- @labeled_input.should match(/<input/)
33
- @labeled_input.should match(/name='field'/)
34
- end
35
- it "should contain the label tag field" do
36
- @labeled_input.should match(/<label/)
37
- @labeled_input.should match(/for='field'/)
38
- end
39
-
40
- end
41
-
42
-
43
- end
@@ -1,11 +0,0 @@
1
- begin
2
- require File.dirname(__FILE__) + '/../../../../spec/spec_helper'
3
- rescue LoadError
4
- # puts "You need to install rspec in your base app"
5
- # exit
6
- end
7
-
8
- require 'rspec/rails/example/view_example_group'
9
-
10
- plugin_spec_dir = File.dirname(__FILE__)
11
- #ActiveRecord::Base.logger = Logger.new(plugin_spec_dir + "/debug.log")
@@ -1,10 +0,0 @@
1
- begin
2
- require File.dirname(__FILE__) + '/../../../../spec/spec_helper'
3
- rescue LoadError
4
- puts "You need to install rspec in your base app"
5
- exit
6
- end
7
-
8
- plugin_spec_dir = File.dirname(__FILE__)
9
- ActiveRecord::Base.logger = Logger.new(plugin_spec_dir + "/debug.log")
10
-