resourceful_loader 0.0.1

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.
@@ -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
+