exposure 0.0.4

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 (42) hide show
  1. data/Manifest.txt +41 -0
  2. data/README.mdown +39 -0
  3. data/Rakefile +26 -0
  4. data/exposure.gemspec +31 -0
  5. data/lib/exposure/common.rb +127 -0
  6. data/lib/exposure/configuration.rb +63 -0
  7. data/lib/exposure/patterns/resource.rb +226 -0
  8. data/lib/exposure/patterns/resources.rb +323 -0
  9. data/lib/exposure.rb +14 -0
  10. data/script/console +10 -0
  11. data/script/destroy +14 -0
  12. data/script/generate +14 -0
  13. data/spec/custom_matchers.rb +41 -0
  14. data/spec/exposure_spec.rb +4 -0
  15. data/spec/factories/pirate_factory.rb +8 -0
  16. data/spec/factories/ship_factory.rb +3 -0
  17. data/spec/finders/finder_spec.rb +53 -0
  18. data/spec/finders/nested_resources_finder_spec.rb +29 -0
  19. data/spec/fixtures/pirates/edit.erb +0 -0
  20. data/spec/fixtures/pirates/index.erb +0 -0
  21. data/spec/fixtures/pirates/new.erb +0 -0
  22. data/spec/fixtures/pirates/show.erb +0 -0
  23. data/spec/fixtures/ships/edit.erb +0 -0
  24. data/spec/fixtures/ships/index.erb +0 -0
  25. data/spec/fixtures/ships/new.erb +0 -0
  26. data/spec/fixtures/ships/show.erb +0 -0
  27. data/spec/flashers/flash_with_block_spec.rb +32 -0
  28. data/spec/flashers/flash_with_method_spec.rb +86 -0
  29. data/spec/flashers/flash_with_proc_spec.rb +83 -0
  30. data/spec/flashers/flash_with_string_spec.rb +82 -0
  31. data/spec/resource_spec.rb +192 -0
  32. data/spec/resources_spec.rb +204 -0
  33. data/spec/responders/respond_to_mime_types_spec.rb +44 -0
  34. data/spec/responders/respond_with_block_spec.rb +84 -0
  35. data/spec/responders/respond_with_method_spec.rb +84 -0
  36. data/spec/responders/respond_with_proc_spec.rb +79 -0
  37. data/spec/spec.opts +1 -0
  38. data/spec/spec_helper.rb +71 -0
  39. data/spec/spec_rails_helper.rb +22 -0
  40. data/tasks/rspec.rake +21 -0
  41. data/tasks/shoulda.rake +15 -0
  42. metadata +106 -0
data/Manifest.txt ADDED
@@ -0,0 +1,41 @@
1
+ Manifest.txt
2
+ README.mdown
3
+ Rakefile
4
+ exposure.gemspec
5
+ lib/exposure.rb
6
+ lib/exposure/common.rb
7
+ lib/exposure/configuration.rb
8
+ lib/exposure/patterns/resource.rb
9
+ lib/exposure/patterns/resources.rb
10
+ script/console
11
+ script/destroy
12
+ script/generate
13
+ spec/custom_matchers.rb
14
+ spec/exposure_spec.rb
15
+ spec/factories/pirate_factory.rb
16
+ spec/factories/ship_factory.rb
17
+ spec/finders/finder_spec.rb
18
+ spec/finders/nested_resources_finder_spec.rb
19
+ spec/fixtures/pirates/edit.erb
20
+ spec/fixtures/pirates/index.erb
21
+ spec/fixtures/pirates/new.erb
22
+ spec/fixtures/pirates/show.erb
23
+ spec/fixtures/ships/edit.erb
24
+ spec/fixtures/ships/index.erb
25
+ spec/fixtures/ships/new.erb
26
+ spec/fixtures/ships/show.erb
27
+ spec/flashers/flash_with_block_spec.rb
28
+ spec/flashers/flash_with_method_spec.rb
29
+ spec/flashers/flash_with_proc_spec.rb
30
+ spec/flashers/flash_with_string_spec.rb
31
+ spec/resource_spec.rb
32
+ spec/resources_spec.rb
33
+ spec/responders/respond_to_mime_types_spec.rb
34
+ spec/responders/respond_with_block_spec.rb
35
+ spec/responders/respond_with_method_spec.rb
36
+ spec/responders/respond_with_proc_spec.rb
37
+ spec/spec.opts
38
+ spec/spec_helper.rb
39
+ spec/spec_rails_helper.rb
40
+ tasks/rspec.rake
41
+ tasks/shoulda.rake
data/README.mdown ADDED
@@ -0,0 +1,39 @@
1
+ exposure
2
+ ======
3
+
4
+ REQUIREMENTS:
5
+ ======
6
+
7
+
8
+ INSTALL:
9
+ =======
10
+
11
+ gem sources -a http://gems.github.com (you only have to do this once)
12
+ sudo gem install trek-exposure
13
+
14
+
15
+ LICENSE:
16
+ =========
17
+
18
+ (The MIT License)
19
+
20
+ Copyright (c) 2009 Trek Glowacki
21
+
22
+ Permission is hereby granted, free of charge, to any person obtaining
23
+ a copy of this software and associated documentation files (the
24
+ 'Software'), to deal in the Software without restriction, including
25
+ without limitation the rights to use, copy, modify, merge, publish,
26
+ distribute, sublicense, and/or sell copies of the Software, and to
27
+ permit persons to whom the Software is furnished to do so, subject to
28
+ the following conditions:
29
+
30
+ The above copyright notice and this permission notice shall be
31
+ included in all copies or substantial portions of the Software.
32
+
33
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
34
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
36
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
37
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
38
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/exposure'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'exposure' do
14
+ self.developer 'Trek Glowacki', 'trek.glowacki@gmail.com'
15
+ # self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ # self.rubyforge_name = self.name # TODO this is default value
17
+ # self.extra_deps = [['activesupport','>= 2.0.2']]
18
+
19
+ end
20
+
21
+ require 'newgem/tasks'
22
+ Dir['tasks/**/*.rake'].each { |t| load t }
23
+
24
+ # TODO - want other tests/tasks run by default? Add them to the list
25
+ # remove_task :default
26
+ # task :default => [:spec, :features]
data/exposure.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{exposure}
5
+ s.version = "0.0.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Trek Glowacki"]
9
+ s.date = %q{2009-10-07}
10
+ s.description = %q{Expose your data}
11
+ s.email = ["trek.glowacki@gmail.com"]
12
+ s.extra_rdoc_files = ["Manifest.txt"]
13
+ s.files = ["Manifest.txt", "README.mdown", "Rakefile", "exposure.gemspec", "lib/exposure.rb", "lib/exposure/common.rb", "lib/exposure/configuration.rb", "lib/exposure/patterns/resource.rb", "lib/exposure/patterns/resources.rb", "script/console", "script/destroy", "script/generate", "spec/custom_matchers.rb", "spec/exposure_spec.rb", "spec/factories/pirate_factory.rb", "spec/factories/ship_factory.rb", "spec/finders/finder_spec.rb", "spec/finders/nested_resources_finder_spec.rb", "spec/fixtures/pirates/edit.erb", "spec/fixtures/pirates/index.erb", "spec/fixtures/pirates/new.erb", "spec/fixtures/pirates/show.erb", "spec/fixtures/ships/edit.erb", "spec/fixtures/ships/index.erb", "spec/fixtures/ships/new.erb", "spec/fixtures/ships/show.erb", "spec/flashers/flash_with_block_spec.rb", "spec/flashers/flash_with_method_spec.rb", "spec/flashers/flash_with_proc_spec.rb", "spec/flashers/flash_with_string_spec.rb", "spec/resource_spec.rb", "spec/resources_spec.rb", "spec/responders/respond_to_mime_types_spec.rb", "spec/responders/respond_with_block_spec.rb", "spec/responders/respond_with_method_spec.rb", "spec/responders/respond_with_proc_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/spec_rails_helper.rb", "tasks/rspec.rake", "tasks/shoulda.rake"]
14
+ s.rdoc_options = ["--main", "README.rdoc"]
15
+ s.require_paths = ["lib"]
16
+ s.rubygems_version = %q{1.3.4}
17
+ s.summary = %q{Expose your data}
18
+
19
+ if s.respond_to? :specification_version then
20
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
21
+ s.specification_version = 3
22
+
23
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
24
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
25
+ else
26
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
27
+ end
28
+ else
29
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
30
+ end
31
+ end
@@ -0,0 +1,127 @@
1
+ module Exposure
2
+ module Common
3
+ class <<
4
+ attr_accessor :resource_name, :resources_name,
5
+ :resource_chain, :resources_chain,
6
+ :collection_nesting, :member_nesting,
7
+ :parent_model
8
+ end
9
+
10
+ # response_for :create, :on => :success, :is => { proc }
11
+ # response_for :show, :formats => [:html] do
12
+ # @resource.activated ? render('show') : render('next_steps')
13
+ # end
14
+ # response_for :new, :is => :new_foo_built
15
+ #
16
+ # valid action names are
17
+ # :index :show :new :create :edit :update :destroy
18
+ # valid options are
19
+ # :on (optional)
20
+ # :success, :failure, :any
21
+ # default is :any
22
+ # :is (option if block given)
23
+ # can be a Proc or method name as symbol.
24
+ # :formats
25
+ # array of formats as symbols.
26
+ # defaults to [:html]
27
+ def response_for(action_name, options = {}, &block)
28
+ options[:is] ||= block
29
+ options[:formats] ||= [:html]
30
+ case options[:on]
31
+ when NilClass, :any
32
+ self.const_get(:Responses)["#{action_name}.success.html"] = options[:is]
33
+ self.const_get(:Responses)["#{action_name}.failure.html"] = options[:is]
34
+ when :success
35
+ self.const_get(:Responses)["#{action_name}.success.html"] = options[:is]
36
+ when :failure
37
+ self.const_get(:Responses)["#{action_name}.failure.html"] = options[:is]
38
+ end
39
+ end
40
+
41
+ # find :person, :with => Proc.new { Person.find_by_permalink(params[:permalink]) }
42
+ # find :people, :with => Proc.new { Person.send(params[:scope]) }
43
+ # find :dogs, :with => :dogs_adopted_after_date
44
+ # find :dogs do
45
+ # Dog.all
46
+ # end
47
+ #
48
+ # valid options are
49
+ # :with
50
+ # :only (unimplemented)
51
+ # :except (unimplemented)
52
+ def find(name, options = {}, &block)
53
+ options[:with] ||= block
54
+ self.const_get(:Finders)[name] = options[:with]
55
+ end
56
+
57
+ # configure flash messages
58
+ # valid action names are
59
+ # :index :show :new :create :edit :update :destroy
60
+ # valid options are
61
+ # :on (optional)
62
+ # :success, :failure, :any
63
+ # default is :any
64
+ # :is (optional if block given)
65
+ # can be a Proc or method name as symbol.
66
+ def flash_for(action_name, options = {}, &block)
67
+ options[:is] ||= block
68
+
69
+ case options[:on]
70
+ when NilClass, :any
71
+ self.const_get(:FlashMessages)[true][action_name] = options[:is]
72
+ self.const_get(:FlashMessages)[false][action_name] = options[:is]
73
+ when :success
74
+ self.const_get(:FlashMessages)[true][action_name] = options[:is]
75
+ when :failure
76
+ self.const_get(:FlashMessages)[false][action_name] = options[:is]
77
+ end
78
+ end
79
+
80
+ # access point for creating and configuring before_ callbacks.
81
+ def before(trigger, action, options = {})
82
+ build_callback('before', trigger, action, options)
83
+ end
84
+
85
+ # access point for creating and configuring before_ callbacks.
86
+ def after(trigger, action, options = {})
87
+ build_callback('after', trigger, action, options)
88
+ end
89
+
90
+ # builds default finders
91
+ def build_default_finders(member, nesting) #:nodoc:
92
+ finders = self::const_set(:DefaultFinders, {
93
+ self.resource_name.intern => Proc.new { [:find, params[:id] ] },
94
+ self.resources_name.intern => Proc.new { [:all] }
95
+ })
96
+
97
+ nesting.each do |association_name|
98
+ finders[association_name.to_s.singularize.to_sym] = Proc.new { [:find, params[:"#{association_name.to_s.singularize}_id"]] }
99
+ finders[association_name] = Proc.new { [ :all ] }
100
+ end
101
+ end
102
+
103
+ # builds callbacks that adhere to the ActiveSupport::Callbacks interface
104
+ def build_callback(prefix, trigger, action, options) #:nodoc:
105
+ callback_name = "#{prefix}_#{trigger}"
106
+
107
+ if options[:on]
108
+ callback_name += "_on_#{options.delete(:on)}"
109
+ end
110
+
111
+ options[:if] ||= []
112
+
113
+ only_methods = options.delete(:only)
114
+ except_methods = options.delete(:except)
115
+
116
+ if only_methods
117
+ options[:if] << Proc.new {|c| only_methods.include?(c.action_name.intern) }
118
+ end
119
+
120
+ if except_methods
121
+ options[:if] << Proc.new {|c| !except_methods.include?(c.action_name.intern) }
122
+ end
123
+
124
+ self.send(callback_name, action, options)
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,63 @@
1
+ module Exposure
2
+ module Configuration
3
+ # options
4
+ # :nested => false or symbol or array of symbols
5
+ # defaults to false
6
+ # :only => array of REST methods names as symbols to only include
7
+ # defaults to [:show, :new, :create, :edit, :update, :destroy]
8
+ # :except => array of REST methods to exclude
9
+ # defaults to [ ]
10
+ # :formats => array of
11
+ # defaults to [ :html, :xml, :json ]
12
+ def expose_one(resource_name, options = {})
13
+ include ActiveSupport::Callbacks
14
+ extend Exposure::Common
15
+ self.resource_name = resource_name
16
+ self.member_nesting = [ [self.resource_name.to_sym] ]
17
+
18
+ extend Patterns::Resource
19
+ include Patterns::Resource::Actions
20
+
21
+ define_callbacks(*Patterns::Resource::Callbacks)
22
+ end
23
+
24
+ # options
25
+ # :nested => false or symbol or array of symbols
26
+ # defaults to false
27
+ # :only => array of REST methods names as symbols to only include
28
+ # defaults to [:index, :show, :new, :create, :edit, :update, :destroy]
29
+ # :except => array of REST methods to exclude
30
+ # defaults to [ ]
31
+ # :formats => array of
32
+ # defaults to [ :html, :xml, :json ]
33
+ #
34
+ def expose_many(name, options = {})
35
+ include ActiveSupport::Callbacks
36
+ extend Exposure::Common
37
+
38
+ self.resource_name = name.to_s.singularize
39
+ self.resources_name = name.to_s
40
+
41
+ if nesting = options[:nested]
42
+
43
+ self.parent_model = nesting.shift.to_s.singularize.capitalize.constantize
44
+
45
+ build_default_finders(self.resources_name, nesting)
46
+
47
+ nesting.collect! {|sym| [sym.to_s.singularize.to_sym, sym]}
48
+ self.member_nesting = nesting + [ [self.resource_name.to_sym] ]
49
+ self.collection_nesting = nesting + [ [self.resources_name.to_sym] ]
50
+ else
51
+ self.parent_model = self.resource_name.capitalize.constantize
52
+ build_default_finders(self.resource_name, [])
53
+ self.member_nesting = [ [self.resource_name.to_sym] ]
54
+ self.collection_nesting = [ [self.resources_name.to_sym] ]
55
+ end
56
+
57
+ extend Patterns::Resources
58
+ include Patterns::Resources::Actions
59
+
60
+ define_callbacks(*Patterns::Resources::Callbacks)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,226 @@
1
+ module Exposure
2
+ module Patterns
3
+ module Resource
4
+ def self.extended(base)
5
+ base::const_set(:DefaultResponses, DefaultResponses)
6
+ base::const_set(:DefaultFlashMessages, DefaultFlashMessages)
7
+ base::const_set(:DefaultFinders, {
8
+ base.resource_name => Proc.new {|parent,controller| parent.find(controller.params[:id])},
9
+ })
10
+ end
11
+
12
+ Callbacks = %w(
13
+ before_find after_find after_find_on_failure after_find_on_success
14
+ before_assign after_assign
15
+ before_save after_save after_save_on_failure after_save_on_success
16
+ before_create after_create_on_failure after_create_on_success
17
+ before_update after_update_on_failure after_update_on_success
18
+ before_destroy after_destroy_on_success
19
+ before_response before_response_on_success before_response_on_failure
20
+ )
21
+
22
+ DefaultFlashMessages = {
23
+ true => {
24
+ :create => Proc.new {|c| "#{c.send(:resource_name).capitalize} successfully created" },
25
+ :update => Proc.new {|c| "#{c.send(:resource_name).capitalize} successfully updated" },
26
+ :destroy => Proc.new {|c| "#{c.send(:resource_name).capitalize} successfully removed" }
27
+ },
28
+ false => {}
29
+ }
30
+
31
+ DefaultResponses = {
32
+ true => {
33
+ :show => Proc.new {|c| c.send(:render, 'show') },
34
+ :new => Proc.new {|c| c.send(:render, 'new') },
35
+ :create => Proc.new {|c| c.send(:redirect_to, {:action => 'show'}) },
36
+ :edit => Proc.new {|c| c.send(:render, 'edit') },
37
+ :update => Proc.new {|c| c.send(:redirect_to, {:action => 'show' }) },
38
+ :destroy => Proc.new {|c| c.send(:redirect_to, {:action => 'new'}) }
39
+ },
40
+ false => {
41
+ :create => Proc.new {|c| c.send(:render, 'new') },
42
+ :update => Proc.new {|c| c.send(:render, 'edit') }
43
+ }
44
+ }
45
+
46
+ module Actions
47
+ # no index on single resources
48
+
49
+ def show
50
+ run_callbacks(:before_find)
51
+ if find_record
52
+ run_callbacks(:after_find_on_success)
53
+ run_callbacks(:after_find)
54
+ run_callbacks(:before_response)
55
+ run_callbacks(:before_response_on_success)
56
+ response_for(:show, true)
57
+ else
58
+ run_callbacks(:after_find_on_failure)
59
+ run_callbacks(:after_find)
60
+ run_callbacks(:before_response)
61
+ run_callbacks(:before_response_on_failure)
62
+ response_for(:show, false)
63
+ end
64
+ end
65
+
66
+ def new
67
+ run_callbacks(:before_assign)
68
+ new_record
69
+ run_callbacks(:after_assign)
70
+ run_callbacks(:before_response)
71
+ run_callbacks(:before_response_on_success)
72
+ response_for(:new, true)
73
+ end
74
+
75
+ def create
76
+ run_callbacks(:before_assign)
77
+ new_record
78
+ run_callbacks(:after_assign)
79
+
80
+ run_callbacks(:before_create)
81
+ run_callbacks(:before_save)
82
+
83
+ if save_record
84
+ run_callbacks(:after_save_on_success)
85
+ run_callbacks(:after_create_on_success)
86
+ run_callbacks(:before_response)
87
+ run_callbacks(:before_response_on_success)
88
+ flash_for(:create, true)
89
+ response_for(:create, true)
90
+ else
91
+ run_callbacks(:after_save_on_failure)
92
+ run_callbacks(:after_create_on_failure)
93
+ run_callbacks(:before_response)
94
+ run_callbacks(:before_response_on_failure)
95
+ flash_for(:create, false)
96
+ response_for(:create, false)
97
+ end
98
+
99
+ end
100
+
101
+ def edit
102
+ run_callbacks(:before_find)
103
+ if find_record
104
+ run_callbacks(:after_find_on_success)
105
+ run_callbacks(:after_find)
106
+ run_callbacks(:before_response)
107
+ run_callbacks(:before_response_on_success)
108
+ response_for(:edit, true)
109
+ else
110
+ run_callbacks(:after_find_on_failure)
111
+ run_callbacks(:after_find)
112
+ run_callbacks(:before_response)
113
+ run_callbacks(:before_response_on_failure)
114
+ response_for(:edit, false)
115
+ end
116
+ end
117
+
118
+ def update
119
+ run_callbacks(:before_find)
120
+ if find_record
121
+ run_callbacks(:after_find_on_success)
122
+ run_callbacks(:after_find)
123
+ if update_record
124
+ run_callbacks(:after_save_on_success)
125
+ run_callbacks(:after_update_on_success)
126
+ run_callbacks(:before_response)
127
+ run_callbacks(:before_response_on_success)
128
+ flash_for(:update, true)
129
+ response_for(:update, true)
130
+ else
131
+ run_callbacks(:after_save_on_failure)
132
+ run_callbacks(:after_create_on_failure)
133
+ run_callbacks(:before_response)
134
+ run_callbacks(:before_response_on_failure)
135
+ flash_for(:update, false)
136
+ response_for(:update, false)
137
+ end
138
+ else
139
+ run_callbacks(:after_find_on_failure)
140
+ run_callbacks(:after_find)
141
+ run_callbacks(:before_response)
142
+ run_callbacks(:before_response_on_failure)
143
+ response_for(:edit, false)
144
+ end
145
+ end
146
+
147
+ def destroy
148
+ run_callbacks(:before_find)
149
+ if find_record
150
+ run_callbacks(:after_find_on_success)
151
+ run_callbacks(:after_find)
152
+ run_callbacks(:before_destroy)
153
+
154
+ delete_record
155
+
156
+ run_callbacks(:after_destroy_on_success)
157
+ run_callbacks(:before_response)
158
+ run_callbacks(:before_response_on_success)
159
+ flash_for(:destroy, true)
160
+ response_for(:destroy, true)
161
+
162
+ else
163
+ run_callbacks(:after_find_on_failure)
164
+ run_callbacks(:after_find)
165
+ response_for(:destroy, false)
166
+ end
167
+ end
168
+
169
+ private
170
+ def custom_response_for(action_name, action_successful)
171
+ false
172
+ end
173
+
174
+ def default_response_for(action_name, action_successful)
175
+ self.class::DefaultResponses[action_successful][action_name].call(self)
176
+ end
177
+
178
+ def response_for(action_name, action_successful)
179
+ custom_response_for(action_name, action_successful) || default_response_for(action_name, action_successful)
180
+ end
181
+
182
+ def custom_flash_for(action_name, action_successful)
183
+ false
184
+ end
185
+
186
+ def default_flash_for(action_name, action_successful)
187
+ if message_proc = self.class::DefaultFlashMessages[action_successful][action_name]
188
+ flash[:message] = message_proc.call(self)
189
+ end
190
+ end
191
+
192
+ def flash_for(action_name, action_successful)
193
+ custom_flash_for(action_name, action_successful) || default_flash_for(action_name, action_successful)
194
+ end
195
+
196
+ def resource_name
197
+ self.class.resource_name
198
+ end
199
+
200
+ def save_record
201
+ @resource.save
202
+ end
203
+
204
+ def update_record
205
+ @resource.update_attributes(params[resource_name])
206
+ end
207
+
208
+ def new_record
209
+ @resource = instance_variable_set("@#{resource_name}", resource_name.camelize.constantize.new(params[resource_name]))
210
+ end
211
+
212
+ def find_record
213
+ @resource = instance_variable_set("@#{resource_name}", resource_name.camelize.constantize.find(params[:id]))
214
+ end
215
+
216
+ def find_records
217
+ @resources = instance_variable_set("@#{resource_name.pluralize}", resource_name.camelize.constantize.all)
218
+ end
219
+
220
+ def delete_record
221
+ @resource.destroy
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end