hobo 1.0.3 → 1.1.0.pre0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/CHANGES.txt +0 -66
  2. data/README +3 -0
  3. data/Rakefile +7 -7
  4. data/doctest/model.rdoctest +0 -2
  5. data/doctest/multi_model_forms.rdoctest +0 -2
  6. data/doctest/scopes.rdoctest +13 -21
  7. data/lib/active_record/association_collection.rb +7 -16
  8. data/lib/hobo.rb +10 -65
  9. data/lib/hobo/accessible_associations.rb +1 -5
  10. data/lib/hobo/authentication_support.rb +1 -1
  11. data/lib/hobo/controller.rb +5 -5
  12. data/lib/hobo/hobo_helper.rb +0 -84
  13. data/lib/hobo/lifecycles/lifecycle.rb +37 -31
  14. data/lib/hobo/lifecycles/transition.rb +1 -2
  15. data/lib/hobo/model.rb +13 -21
  16. data/lib/hobo/model_controller.rb +8 -8
  17. data/lib/hobo/rapid_helper.rb +12 -1
  18. data/lib/hobo/scopes/automatic_scopes.rb +26 -13
  19. data/lib/hobo/scopes/named_scope_extensions.rb +16 -28
  20. data/lib/hobo/user_controller.rb +1 -0
  21. data/lib/hobo/view_hints.rb +1 -5
  22. data/rails_generators/hobo/templates/initializer.rb +1 -1
  23. data/rails_generators/hobo_front_controller/templates/summary.dryml +4 -2
  24. data/rails_generators/hobo_model/hobo_model_generator.rb +12 -0
  25. data/rails_generators/hobo_model/templates/model.rb +9 -2
  26. data/rails_generators/hobo_rapid/templates/hobo-rapid.js +98 -23
  27. data/rails_generators/hobo_rapid/templates/themes/clean/public/stylesheets/clean.css +1 -1
  28. data/rails_generators/hobo_rapid/templates/themes/clean/public/stylesheets/rapid-ui.css +3 -1
  29. data/{dryml_generators → rapid_generators}/rapid/cards.dryml.erb +0 -0
  30. data/{dryml_generators → rapid_generators}/rapid/forms.dryml.erb +0 -0
  31. data/{dryml_generators → rapid_generators}/rapid/pages.dryml.erb +1 -1
  32. data/taglibs/rapid.dryml +2 -0
  33. data/taglibs/rapid_core.dryml +10 -9
  34. data/taglibs/rapid_forms.dryml +70 -35
  35. data/taglibs/rapid_lifecycles.dryml +17 -4
  36. data/taglibs/rapid_plus.dryml +3 -3
  37. data/taglibs/rapid_summary.dryml +11 -0
  38. data/taglibs/rapid_user_pages.dryml +39 -28
  39. data/tasks/hobo_tasks.rake +1 -1
  40. metadata +45 -61
  41. data/hobo.gemspec +0 -226
  42. data/lib/hobo/dryml.rb +0 -188
  43. data/lib/hobo/dryml/dryml_builder.rb +0 -140
  44. data/lib/hobo/dryml/dryml_doc.rb +0 -159
  45. data/lib/hobo/dryml/dryml_generator.rb +0 -263
  46. data/lib/hobo/dryml/dryml_support_controller.rb +0 -13
  47. data/lib/hobo/dryml/parser.rb +0 -3
  48. data/lib/hobo/dryml/parser/attribute.rb +0 -41
  49. data/lib/hobo/dryml/parser/base_parser.rb +0 -254
  50. data/lib/hobo/dryml/parser/document.rb +0 -57
  51. data/lib/hobo/dryml/parser/element.rb +0 -27
  52. data/lib/hobo/dryml/parser/elements.rb +0 -45
  53. data/lib/hobo/dryml/parser/source.rb +0 -58
  54. data/lib/hobo/dryml/parser/text.rb +0 -13
  55. data/lib/hobo/dryml/parser/tree_parser.rb +0 -67
  56. data/lib/hobo/dryml/part_context.rb +0 -137
  57. data/lib/hobo/dryml/scoped_variables.rb +0 -42
  58. data/lib/hobo/dryml/tag_parameters.rb +0 -36
  59. data/lib/hobo/dryml/taglib.rb +0 -123
  60. data/lib/hobo/dryml/template.rb +0 -1019
  61. data/lib/hobo/dryml/template_environment.rb +0 -613
  62. data/lib/hobo/dryml/template_handler.rb +0 -187
  63. data/lib/hobo/static_tags +0 -98
  64. data/taglibs/core.dryml +0 -104
@@ -14,72 +14,6 @@ likely to cause conflicts, so it is highly recommended that you have
14
14
  your code backed up and in a change control system such as git or
15
15
  subversion.
16
16
 
17
- === Hobo 1.0.3 ===
18
-
19
- This is a security release. All applications that use the reset
20
- password functionality or are on versions of Rails prior to version
21
- 2.3.4 should upgrade.
22
-
23
- To patch the reset password vulnerability, two changes have been made.
24
-
25
- First of all, the lifecycle key hash mechanism has been changed.
26
- Existing lifecycle keys will become invalid after you upgrade.
27
- Lifecycle keys are typically short lived, so this is unlikely to be a
28
- problem for most applications.
29
-
30
- Secondly, lifecycle keys are now cleared on every transition to avoid
31
- replay vulnerabilities. This new behaviour may be avoided by added
32
- the `:keep_key => true` option to a transition.
33
-
34
- More information about the vulnerability can be viewed on the [bug
35
- report](https://hobo.lighthouseapp.com/projects/8324/tickets/666-user-model-secure-links-have-low-security).
36
-
37
- Other changes:
38
-
39
- The text input tag (`<textarea>`) has a security hole with versions of
40
- Rails prior to 2.3.4. This release makes these old versions of Rails
41
- safe again, although it is highly recommended that you upgrade to
42
- Rails 2.3.11 because of other security vulnerabilities on earlier versions
43
- of Rails.
44
-
45
- The "include" automatic scope has been aliased to "includes" to
46
- increase future compatibility with Rails 3. Future versions of Hobo
47
- will remove support for "include".
48
-
49
- This release increases compatibility with Ruby v1.9.2.
50
-
51
- Hobo 1.0.2 introduced a major problem with chained scopes. This has
52
- been fixed.
53
-
54
- All code changes may viewed on the [github
55
- log](https://github.com/tablatom/hobo/compare/v1.0.2...v1.0.3)
56
-
57
- === Hobo 1.0.2 ===
58
-
59
- This release is almost identical to 1.0.1 except that it updates the
60
- version requirements to exclude Rails3. Hobo does not currently work
61
- with Rails3, although we are working on it.
62
-
63
- This release silences some warnings produced when running with Rails
64
- 2.3.10.
65
-
66
- This release contains preliminary support for Ruby 1.9.2, although you
67
- may encounter problems if you use Single Type Inheritance (STI)
68
- models.
69
-
70
- A few very minor bug fixes have also been included. See the [github
71
- log](https://github.com/tablatom/hobo/compare/v1.0.1...v1.0.2) for
72
- more details.
73
-
74
- === Hobo 1.0.1 ===
75
-
76
- This version contains two speedups: one fix that reduces the number of
77
- database accesses by Matt Jones and one that speeds up compilation of
78
- DRYML by Petteri Räty.
79
-
80
- This version also contains several bug fixes. See the [github
81
- log](http://github.com/tablatom/hobo/tree/v1.0.1) for more details.
82
-
83
17
  === Hobo 1.0.0 ===
84
18
 
85
19
  Drumm-roll! Trumpets! Fanfare!
data/README CHANGED
@@ -7,3 +7,6 @@ Hobo is an Open Source extension to Ruby on Rails which helps you build full blo
7
7
  * Switchable themes. Customise and tweak your application structure and layout to meet any design goals.
8
8
  * Powerful mark-up language, DRYML, combines rapid development with ultimate design flexibility. The end of the cookie cutter blues!
9
9
 
10
+ == RDOC Note
11
+
12
+ This is also the front page to the Hobo RDOC. RDOC is not the main documentation method for Hobo. See [hobocentral](http://cookbook.hobocentral.net) for the Hobo documentation.
data/Rakefile CHANGED
@@ -10,11 +10,7 @@ $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '/../hobosupport/
10
10
  require 'hobo'
11
11
 
12
12
  RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']).sub(/.*\s.*/m, '"\&"')
13
- if defined?(Bundler)
14
- RUBYDOCTEST = 'bundle exec rubydoctest'
15
- else
16
- RUBYDOCTEST = ENV['RUBYDOCTEST'] || "#{RUBY} -S rubydoctest"
17
- end
13
+ RUBYDOCTEST = ENV['RUBYDOCTEST'] || "#{RUBY} -S rubydoctest"
18
14
 
19
15
  desc "Default Task"
20
16
  task :default => [ :test ]
@@ -63,10 +59,14 @@ Jeweler::Tasks.new do |gemspec|
63
59
  gemspec.executables = ['hobo']
64
60
  gemspec.default_executable = 'hobo'
65
61
  gemspec.rubyforge_project = "hobo"
66
- gemspec.add_dependency("rails", [">= 2.2.2", "< 3.0.0"])
67
- gemspec.add_dependency("will_paginate", [">= 2.3.11", "~> 2"])
62
+ gemspec.add_dependency("rails", [">= 2.2.2"])
63
+ gemspec.add_dependency("will_paginate", [">= 2.3.11"])
68
64
  gemspec.add_dependency("hobosupport", ["= #{Hobo::VERSION}"])
69
65
  gemspec.add_dependency("hobofields", ["= #{Hobo::VERSION}"])
66
+ gemspec.add_dependency("dryml", ["= #{Hobo::VERSION}"])
70
67
  gemspec.files.include %w(tasks/environments.rake tasks/hobo_tasks.rake)
71
68
  end
72
69
  Jeweler::GemcutterTasks.new
70
+ Jeweler::RubyforgeTasks.new do |rubyforge|
71
+ rubyforge.doc_task = false
72
+ end
@@ -34,7 +34,6 @@ Contents
34
34
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobofields/lib')
35
35
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobosupport/lib')
36
36
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobo/lib')
37
- >> gem 'will_paginate', '~> 2'
38
37
  >> require 'will_paginate'
39
38
  >> require 'will_paginate/finder'
40
39
  >> require 'hobosupport'
@@ -45,7 +44,6 @@ Contents
45
44
  >>
46
45
  def migrate(renames={})
47
46
  up, down = HoboFields::MigrationGenerator.run(renames)
48
- puts up
49
47
  ActiveRecord::Migration.class_eval(up)
50
48
  ActiveRecord::Base.send(:subclasses).each { |model| model.reset_column_information }
51
49
  [up, down]
@@ -31,7 +31,6 @@ Contents
31
31
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobofields/lib')
32
32
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobosupport/lib')
33
33
  >> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobo/lib')
34
- >> gem 'will_paginate', '~> 2'
35
34
  >> require 'will_paginate'
36
35
  >> require 'will_paginate/finder'
37
36
  >> require 'hobosupport'
@@ -43,7 +42,6 @@ Contents
43
42
  >>
44
43
  def migrate(renames={})
45
44
  up, down = HoboFields::MigrationGenerator.run(renames)
46
- puts up
47
45
  ActiveRecord::Migration.class_eval(up)
48
46
  ActiveRecord::Base.send(:subclasses).each { |model| model.reset_column_information }
49
47
  [up, down]
@@ -74,7 +74,6 @@ Some load path manipulation:
74
74
  And we'll require hobo:
75
75
  {.hidden}
76
76
 
77
- >> gem 'will_paginate', '~> 2'
78
77
  >> require 'will_paginate'
79
78
  >> require 'will_paginate/finder'
80
79
  >> require 'hobosupport'
@@ -95,7 +94,6 @@ Let's set up a few models for our testing:
95
94
  born_at :date
96
95
  code :integer
97
96
  male :boolean
98
- foo :string
99
97
  timestamps
100
98
  end
101
99
 
@@ -120,19 +118,19 @@ Generate a migration and run it:
120
118
 
121
119
  >> ActiveRecord::Migration.class_eval(HoboFields::MigrationGenerator.run[0])
122
120
  >> Person.columns.*.name
123
- => ["id", "name", "born_at", "code", "male", "foo", "created_at", "updated_at", "state"]
121
+ => ["id", "name", "born_at", "code", "male", "created_at", "updated_at", "state"]
124
122
  {.hidden}
125
123
 
126
124
  And create a couple of fixtures:
127
125
 
128
126
  >>
129
127
  Bryan = Person.new(:name => "Bryan", :code => 17,
130
- :born_at => Date.new(1973,4,8), :male => true, :foo => "common")
128
+ :born_at => Date.new(1973,4,8), :male => true)
131
129
  >> Bryan.state = "active"
132
130
  >> Bryan.save!
133
131
  >>
134
132
  Bethany = Person.new(:name => "Bethany", :code => 42,
135
- :born_at => Date.new(1975,5,13), :male => false, :foo => "common")
133
+ :born_at => Date.new(1975,5,13), :male => false)
136
134
  >> Bethany.state = "inactive"
137
135
  >> Bethany.save!
138
136
  >> Friendship.new(:person => Bryan, :friend => Bethany).save!
@@ -288,16 +286,12 @@ Gives the N most recent items:
288
286
  >> Person.order_by(:code).*.name
289
287
  => ["Bryan", "Bethany"]
290
288
 
291
- ## includes
289
+ ## include
292
290
 
293
- Adding the includes function to your query chain has the same effect as
291
+ Adding the include function to your query chain has the same effect as
294
292
  the `:include` option to the `find` method.
295
293
 
296
- >> Person.search("B", :name).include(:friends).*.name # test LH#839
297
- => ["Bryan", "Bethany"]
298
- .hidden
299
-
300
- >> Person.includes(:friends).*.name
294
+ >> Person.include(:friends).*.name
301
295
  => ["Bryan", "Bethany"]
302
296
 
303
297
  ## search
@@ -323,6 +317,13 @@ You can also specify multiple records with the plural form
323
317
  >> Person.with_friends(Bethany, nil).*.name
324
318
  => ["Bryan"]
325
319
 
320
+ ## any\_of\_
321
+
322
+ This works on plural associations to find a model associated with any of the arguments
323
+
324
+ >> Person.any_of_friends(Bethany, Bryan).*.name
325
+ => ["Bryan"]
326
+
326
327
  ## without\_
327
328
 
328
329
  >> Person.without_friend(Bethany).*.name
@@ -395,15 +396,6 @@ Like named scopes, Hobo scopes can be chained:
395
396
  >> Bryan.inactive_friends.inactive.*.name
396
397
  => ["Bethany"]
397
398
 
398
- >> Person.scoped(:conditions => {:state => "active"}).scoped(:conditions => {:foo => "common"}).*.name
399
- => ["Bryan"]
400
-
401
- >> Person.with_friendship(Friendship.first).born_before(Date.new(1974)).*.name
402
- => ["Bryan"]
403
-
404
- >> Person.born_after(Date.new(1974)).with_friendship(Friendship.first).*.name
405
- => []
406
-
407
399
  Clean up our test database:
408
400
  {.hidden}
409
401
 
@@ -25,24 +25,19 @@ module ActiveRecord
25
25
  record
26
26
  end
27
27
 
28
- def member_class
29
- proxy_reflection.klass
30
- end
31
-
32
28
  # DO NOT call super here - AssociationProxy's version loads the collection, and that's bad.
33
29
  # TODO: this really belongs in Rails; migrate it there ASAP
34
30
  def respond_to?(*args)
35
- return super if has_one_collection?
36
- proxy_respond_to?(*args) || [].respond_to?(*args)
31
+ proxy_respond_to?(*args) || Array.new.respond_to?(*args)
37
32
  end
38
33
 
34
+ # TODO: send this patch into Rails. There's no reason to load the collection just to find out it acts like an array.
39
35
  def is_a?(klass)
40
- if has_one_collection?
41
- load_target
42
- @target.is_a?(klass)
43
- else
44
- [].is_a?(klass)
45
- end
36
+ [].is_a?(klass)
37
+ end
38
+
39
+ def member_class
40
+ proxy_reflection.klass
46
41
  end
47
42
 
48
43
  private
@@ -57,10 +52,6 @@ module ActiveRecord
57
52
  end
58
53
  end
59
54
 
60
- def has_one_collection?
61
- proxy_reflection.macro == :has_one
62
- end
63
-
64
55
  end
65
56
  end
66
57
  end
@@ -2,17 +2,12 @@
2
2
  require 'hobosupport'
3
3
  require 'hobofields'
4
4
  begin
5
- gem 'will_paginate', '~> 2'
6
5
  require 'will_paginate'
7
6
  rescue MissingSourceFile
8
7
  # OK, Hobo won't do pagination then
9
8
  end
10
9
 
11
- if ActiveSupport::Dependencies.respond_to?(:autoload_paths)
12
- ActiveSupport::Dependencies.autoload_paths |= [ File.dirname(__FILE__)]
13
- else
14
- ActiveSupport::Dependencies.load_paths |= [ File.dirname(__FILE__)]
15
- end
10
+ ActiveSupport::Dependencies.load_paths |= [ File.dirname(__FILE__)]
16
11
 
17
12
  # Hobo can be installed in /vendor/hobo, /vendor/plugins/hobo, vendor/plugins/hobo/hobo, etc.
18
13
  ::HOBO_ROOT = File.expand_path(File.dirname(__FILE__) + "/..")
@@ -21,8 +16,8 @@ class HoboError < RuntimeError; end
21
16
 
22
17
  module Hobo
23
18
 
24
- VERSION = "1.0.3"
25
-
19
+ VERSION = "1.1.0.pre0"
20
+
26
21
  class PermissionDeniedError < RuntimeError; end
27
22
 
28
23
  class RawJs < String; end
@@ -62,8 +57,9 @@ module Hobo
62
57
  search_targets.build_hash do |search_target|
63
58
  conditions = []
64
59
  parameters = []
60
+ like_operator = ActiveRecord::Base.connection.adapter_name =~ /postgres/i ? 'ILIKE' : 'LIKE'
65
61
  query_words.each do |word|
66
- column_queries = search_target.search_columns.map { |column| "#{column} like ?" }
62
+ column_queries = search_target.search_columns.map { |column| "#{column} #{like_operator} ?" }
67
63
  conditions << "(" + column_queries.join(" or ") + ")"
68
64
  parameters.concat(["%#{word}%"] * column_queries.length)
69
65
  end
@@ -87,53 +83,6 @@ module Hobo
87
83
  (not refl.options[:conditions])
88
84
  end
89
85
 
90
-
91
- def get_field(object, field)
92
- return nil if object.nil?
93
- field_str = field.to_s
94
- begin
95
- return object.send(field_str)
96
- rescue NoMethodError => ex
97
- if field_str =~ /^\d+$/
98
- return object[field.to_i]
99
- else
100
- return object[field]
101
- end
102
- end
103
- end
104
-
105
-
106
- def get_field_path(object, path)
107
- path = if path.is_a? String
108
- path.split('.')
109
- else
110
- Array(path)
111
- end
112
-
113
- parent = nil
114
- path.each do |field|
115
- return nil if object.nil?
116
- parent = object
117
- object = get_field(parent, field)
118
- end
119
- [parent, path.last, object]
120
- end
121
-
122
-
123
- def static_tags
124
- @static_tags ||= begin
125
- path = if FileTest.exists?("#{RAILS_ROOT}/config/dryml_static_tags.txt")
126
- "#{RAILS_ROOT}/config/dryml_static_tags.txt"
127
- else
128
- File.join(File.dirname(__FILE__), "hobo/static_tags")
129
- end
130
- File.readlines(path).*.chop
131
- end
132
- end
133
-
134
- attr_writer :static_tags
135
-
136
-
137
86
  def subsites
138
87
  # Any directory inside app/controllers defines a subsite
139
88
  @subsites ||= Dir["#{RAILS_ROOT}/app/controllers/*"].map { |f| File.basename(f) if File.directory?(f) }.compact
@@ -149,12 +98,12 @@ module Hobo
149
98
  require 'hobo/model_router'
150
99
  require 'hobo/undefined'
151
100
  require 'hobo/user'
152
- require 'hobo/dryml'
153
- require 'hobo/dryml/template'
154
- require 'hobo/dryml/dryml_generator'
101
+ require 'dryml'
102
+ require 'dryml/template'
103
+ require 'dryml/dryml_generator'
155
104
 
156
105
  Hobo::Model.enable
157
- Hobo::Dryml.enable
106
+ Dryml.enable(["#{HOBO_ROOT}/rapid_generators"], "#{RAILS_ROOT}/app/views/taglibs/auto")
158
107
  Hobo::Permissions.enable
159
108
  Hobo::ViewHints.enable
160
109
 
@@ -166,11 +115,7 @@ module Hobo
166
115
 
167
116
  HoboFields.never_wrap(Hobo::Undefined) if defined? HoboFields
168
117
 
169
- if ActiveSupport::Dependencies.respond_to?(:autoload_paths)
170
- ActiveSupport::Dependencies.autoload_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
171
- else
172
- ActiveSupport::Dependencies.load_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
173
- end
118
+ ActiveSupport::Dependencies.load_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
174
119
  end
175
120
 
176
121
  end
@@ -9,11 +9,7 @@ module Hobo
9
9
 
10
10
  array = params_hash_to_array(array_or_hash)
11
11
  array.map! do |record_hash_or_string|
12
- if association.conditions.nil?
13
- finder = association.member_class
14
- else
15
- finder = association.member_class.scoped :conditions => association.conditions
16
- end
12
+ finder = association.member_class.scoped :conditions => association.conditions
17
13
  find_or_create_and_update(owner, association_name, finder, record_hash_or_string) do |id|
18
14
  # The block is required to either locate find an existing record in the collection, or build a new one
19
15
  if id
@@ -67,7 +67,7 @@ module Hobo
67
67
  accepts.xml do
68
68
  headers["Status"] = "Unauthorized"
69
69
  headers["WWW-Authenticate"] = %(Basic realm="Web Password")
70
- render :text => ht("hobo.messages.unauthenticated", :default=>["Couldn't authenticate you"]), :status => '401 Unauthorized'
70
+ render :text => ht("hobo.messages.unauthenticated", :default=>["Couldn't authenticate you"], :status => '401 Unauthorized')
71
71
  end
72
72
  end
73
73
  false
@@ -58,7 +58,7 @@ module Hobo
58
58
 
59
59
  def redirect_to_with_object_url(destination, *args)
60
60
  if destination.is_one_of?(String, Hash, Symbol)
61
- redirect_to_without_object_url(destination, *args)
61
+ redirect_to_without_object_url(destination)
62
62
  else
63
63
  redirect_to_without_object_url(object_url(destination, *args))
64
64
  end
@@ -80,7 +80,7 @@ module Hobo
80
80
 
81
81
  def ajax_update_response(page_path, render_specs, results={})
82
82
  @template.send(:_evaluate_assigns_and_ivars)
83
- renderer = Hobo::Dryml.page_renderer(@template, [], page_path) if page_path
83
+ renderer = Dryml.page_renderer(@template, [], page_path) if page_path
84
84
 
85
85
  render :update do |page|
86
86
  page << "var _update = typeof Hobo == 'undefined' ? Element.update : Hobo.updateElement;"
@@ -124,7 +124,7 @@ module Hobo
124
124
  def tag_renderer
125
125
  @tag_renderer ||= begin
126
126
  @template.send(:_evaluate_assigns_and_ivars)
127
- Hobo::Dryml.empty_page_renderer(@template)
127
+ Dryml.empty_page_renderer(@template)
128
128
  end
129
129
  end
130
130
 
@@ -157,8 +157,8 @@ module Hobo
157
157
  end
158
158
 
159
159
  def not_found(error)
160
- if self.class.superclass.method_defined?("not_found_response")
161
- super
160
+ if self.class.superclass.method_defined?(:not_found)
161
+ self.class.superclass.instance_method(:not_found).bind(self).call(error)
162
162
  elsif render_tag("not-found-page", {}, :status => 404)
163
163
  # cool
164
164
  else