dynamic_models 0.3.2 → 0.4.0

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dynamic_models"
8
- s.version = "0.3.2"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Craig Ulliott"]
12
- s.date = "2011-12-07"
12
+ s.date = "2012-09-28"
13
13
  s.description = "Methods to get and build models directly from parameters. Useful for DRYing up code, specifically very dynamic code for things like admin tools."
14
14
  s.email = "craigulliott@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "VERSION",
27
27
  "dynamic_models.gemspec",
28
+ "lib/dynamic_model_active_record_extensions.rb",
28
29
  "lib/dynamic_models.rb",
29
30
  "test/helper.rb",
30
31
  "test/test_dynamic_models.rb"
@@ -32,7 +33,7 @@ Gem::Specification.new do |s|
32
33
  s.homepage = "http://github.com/craigulliott/dynamic_models"
33
34
  s.licenses = ["MIT"]
34
35
  s.require_paths = ["lib"]
35
- s.rubygems_version = "1.8.10"
36
+ s.rubygems_version = "1.8.24"
36
37
  s.summary = "Adds some methods to ActionController to build models dynamically"
37
38
 
38
39
  if s.respond_to? :specification_version then
@@ -0,0 +1,29 @@
1
+ module DynamicModelActiveRecordExtensions
2
+
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ def sti_model?
8
+ attribute_names.include? "type"
9
+ end
10
+
11
+ # for creating routes which are based on the parent class
12
+ def sti_parent_class
13
+ self.class.parent
14
+ end
15
+
16
+ module ClassMethods
17
+
18
+ # if this class has a type attribute, then it is a model which is using single table inheritance
19
+ def sti_model?
20
+ attribute_names.include? "type"
21
+ end
22
+
23
+ # for creating routes which are based on the parent class
24
+ def sti_parent_class
25
+ self.parent
26
+ end
27
+
28
+ end
29
+ end
@@ -1,3 +1,5 @@
1
+ require 'dynamic_model_active_record_extensions'
2
+
1
3
  module DynamicModels
2
4
 
3
5
  # looks for object_id notation, and returns a new model
@@ -10,9 +12,28 @@ module DynamicModels
10
12
  nil
11
13
  end
12
14
 
13
- # model name from the controller
15
+ # if we are using a type parameter, then we are dealing with an STI model
16
+ def sti_model?
17
+ params[:type].present?
18
+ end
19
+
20
+ # model name from the controller or type parameter (for a model which is using STI)
14
21
  def model_name
15
- params[:controller].split('/').last.singularize
22
+ sti_model? ? params[:type].camelize.constantize : params[:controller].split('/').last.singularize
23
+ end
24
+
25
+ # the model class, inferred from the controller
26
+ def base_model_class
27
+ params[:controller].split('/').last.singularize.camelize.constantize
28
+ end
29
+
30
+ # the class we are working with, if an STI model then it will fail loudly on a type which inst descendant from the class which corresponds to this controller
31
+ def model_class
32
+ klass = model_name.camelize.constantize
33
+ if sti_model?
34
+ raise "you can only pass a type which descends from #{params[:controller]}" unless klass.sti_model? and klass.parent == base_model_class
35
+ end
36
+ klass
16
37
  end
17
38
 
18
39
  # plural form of the model name from the controller
@@ -33,14 +54,14 @@ module DynamicModels
33
54
  raise "can't find association #{model_name} or #{plural_model_name} for #{parent_model.class.name}"
34
55
  end
35
56
  else
36
- new_model = model_name.camelize.constantize.new(defaults)
57
+ new_model = model_class.new(defaults)
37
58
  end
38
59
  return new_model
39
60
  end
40
61
 
41
62
  # returns a model using the id from the params
42
63
  def fetch_model
43
- model_name.camelize.constantize.find( params[:id] )
64
+ model_class.find params[:id]
44
65
  end
45
66
 
46
67
  # returns an array of models (using the name of this controller)
@@ -48,7 +69,7 @@ module DynamicModels
48
69
  if parent_model
49
70
  return parent_model.send("#{model_name.pluralize.downcase}")
50
71
  else
51
- return model_name.camelize.constantize.find(:all)
72
+ return model_class.find(:all)
52
73
  end
53
74
  end
54
75
 
@@ -57,3 +78,8 @@ end
57
78
  class ActionController::Base
58
79
  include DynamicModels
59
80
  end
81
+
82
+ class ActiveRecord::Base
83
+ include DynamicModelActiveRecordExtensions
84
+ end
85
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-07 00:00:00.000000000Z
12
+ date: 2012-09-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &2168662520 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2168662520
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &2168661980 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 1.0.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *2168661980
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jeweler
38
- requirement: &2168661360 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 1.6.0
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *2168661360
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.6.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rcov
49
- requirement: &2168660800 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2168660800
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  description: Methods to get and build models directly from parameters. Useful for
59
79
  DRYing up code, specifically very dynamic code for things like admin tools.
60
80
  email: craigulliott@gmail.com
@@ -72,6 +92,7 @@ files:
72
92
  - Rakefile
73
93
  - VERSION
74
94
  - dynamic_models.gemspec
95
+ - lib/dynamic_model_active_record_extensions.rb
75
96
  - lib/dynamic_models.rb
76
97
  - test/helper.rb
77
98
  - test/test_dynamic_models.rb
@@ -90,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
111
  version: '0'
91
112
  segments:
92
113
  - 0
93
- hash: 2299028721805600394
114
+ hash: -2137984501742172515
94
115
  required_rubygems_version: !ruby/object:Gem::Requirement
95
116
  none: false
96
117
  requirements:
@@ -99,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
120
  version: '0'
100
121
  requirements: []
101
122
  rubyforge_project:
102
- rubygems_version: 1.8.10
123
+ rubygems_version: 1.8.24
103
124
  signing_key:
104
125
  specification_version: 3
105
126
  summary: Adds some methods to ActionController to build models dynamically