resource_has 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in resource_has.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,72 @@
1
+ require 'resource_has/version'
2
+
3
+ module ResourceHas
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+ ## Class methods
9
+ module ClassMethods
10
+ def resource_has(*args, &block)
11
+ options = args.pop if args.last.is_a? Hash
12
+ if args.length == 1
13
+ modifier = :at_most
14
+ amount = 1
15
+ else
16
+ modifier = args.shift() unless args[0].is_a? Integer
17
+ amount = args.shift()
18
+ end
19
+ relation_name = args.shift()
20
+ args = {
21
+ :modifier => modifier,
22
+ :amount => amount,
23
+ :block => block,
24
+ :options => { :increment_by => amount, :on => %w(edit) }.merge(options || {})
25
+ }
26
+ before_filter :only => (args[:options].delete(:only) || args[:options].delete(:on)) do |controller| controller.send('__build_relation', relation_name, args) end
27
+ end
28
+ end
29
+ ## Instance methods
30
+ protected
31
+
32
+ def __build_relation(relation_name, args)
33
+ __quantify(relation_name, args).times do
34
+ nested_resource = resource_method_chain __get_builder_method(relation_name)
35
+ args[:block].call(nested_resource) if args[:block]
36
+ end
37
+ end
38
+
39
+ def __quantify(relation_name, args)
40
+ #args.merge!({ :modifier => :at_most, :amount => 1, :increment_by => 1 }) if __is_single_relation? relation_name
41
+ return args[:options][:increment_by] unless args[:modifier]
42
+ quantifier = args[:amount] - __get_existing_relation_length(relation_name)
43
+ if args[:modifier].to_sym === :at_least
44
+ return args[:options][:increment_by] if quantifier < args[:options][:increment_by]
45
+ quantifier
46
+ elsif args[:modifier].to_sym === :at_most
47
+ args[:options][:increment_by] < quantifier ? args[:options][:increment_by] : quantifier
48
+ end
49
+ end
50
+
51
+ def __get_builder_method(relation_name)
52
+ return 'build_%s' % relation_name if __is_single_relation?(relation_name)
53
+ return '%s.build' % relation_name
54
+ end
55
+
56
+ def resource_method_chain(method_chain)
57
+ return resource if method_chain.empty?
58
+ method_chain.split('.').flatten.inject(self.resource){ |object, method| object.send(method.to_sym) }
59
+ end
60
+
61
+ def __is_single_relation? relation_name
62
+ [:has_one].include?(resource.class.reflect_on_association(relation_name).macro)
63
+ end
64
+
65
+ def __get_existing_relation_length(relation_name)
66
+ relation = resource.send(relation_name)
67
+ return relation.length.to_i if relation.respond_to?(:length)
68
+ relation.blank? ? 0 : 1
69
+ end
70
+ end
71
+
72
+ ActionController::Base.send(:include, ResourceHas)
@@ -0,0 +1,3 @@
1
+ module ResourceHas
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "resource_has/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "resource_has"
7
+ s.version = ResourceHas::VERSION
8
+ s.authors = ["Andy M. Holland"]
9
+ s.email = ["andyholland1991@aol.com"]
10
+ s.homepage = "http://rubygems.org/gems/resource_has"
11
+ s.summary = %q{Build resource dependencies in controllers that inherit from InheritedResources::Base}
12
+ s.description = %q{Adds the class method "resource_has" (for building dependencies) when included by a controller that inherits from InheritedResources::Base}
13
+
14
+ s.rubyforge_project = "resource_has"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+
24
+ s.add_dependency('inherited_resources')
25
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resource_has
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andy M. Holland
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: inherited_resources
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Adds the class method "resource_has" (for building dependencies) when
31
+ included by a controller that inherits from InheritedResources::Base
32
+ email:
33
+ - andyholland1991@aol.com
34
+ executables: []
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - .gitignore
39
+ - Gemfile
40
+ - Rakefile
41
+ - lib/resource_has.rb
42
+ - lib/resource_has/version.rb
43
+ - resource_has.gemspec
44
+ homepage: http://rubygems.org/gems/resource_has
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project: resource_has
64
+ rubygems_version: 1.8.24
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Build resource dependencies in controllers that inherit from InheritedResources::Base
68
+ test_files: []