resourceful_loader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ module ResourcefulHelper
2
+ def render_object_partial(object, options = {})
3
+ singular = object.class.to_s.underscore
4
+ plural = singular.pluralize
5
+ to = options.delete :to
6
+ render_options = {:partial => "#{plural}/#{singular}", :locals => {singular.to_sym => object}.merge(options)}
7
+
8
+ if to
9
+ string = controller.send(:render_to_string, render_options)
10
+ to.to_sym == :json ? string.to_json : string
11
+ else
12
+ render render_options
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,58 @@
1
+ module ResourcefulLoader
2
+ mattr_accessor :default_finder
3
+ def self.included(klass)
4
+ klass.module_eval do
5
+ extend ClassMethods
6
+ end
7
+ end
8
+
9
+ def element_id
10
+ [self.class.name.underscore, to_param.blank?? "new" : to_param].join '_'
11
+ end
12
+
13
+ module ClassMethods
14
+ def load_resource(resource_name, options = {})
15
+ options.symbolize_keys!
16
+
17
+ resource_name = resource_name.to_s.underscore.singularize
18
+ param_name = options.delete(:by) || resource_name.foreign_key
19
+
20
+ finder_method = options.delete(:method) ||
21
+ ResourcefulLoader.default_finder ||
22
+ :find_by_id
23
+
24
+ if_nil = options.delete :if_nil
25
+
26
+ method_name = "load_#{resource_name}"
27
+
28
+ while private_instance_methods.include? method_name
29
+ method_name.sub! /(?:_([0-9]+))?$/ do |f|
30
+ "_#{ f.blank? ? 1 : f.to_i + 1 }"
31
+ end
32
+ end
33
+
34
+ define_method method_name do
35
+ resource =
36
+ if foreign_key = params[param_name]
37
+ if block_given?
38
+ yield foreign_key
39
+ else
40
+ resource_name.classify.constantize.
41
+ send finder_method, foreign_key
42
+ end
43
+ end
44
+
45
+ if resource.nil? && if_nil && !if_nil.to_proc.call(self)
46
+ return false
47
+ end
48
+
49
+ instance_variable_set :"@#{resource_name}", resource
50
+ end
51
+
52
+ private method_name
53
+
54
+ before_filter method_name, options
55
+
56
+ end
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resourceful_loader
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - jbr
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-14 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: before_filter :load_foo; private def load_foo() @foo = Foo.find_by_id params[:id] end
23
+ email:
24
+ - gems@jacobrothstein.com
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - lib/resourceful_helper.rb
33
+ - lib/resourceful_loader.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/jbr/resourceful_loader
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.3.7
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: lightweight before_filter
68
+ test_files: []
69
+