multi_tabular 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a41559de1d3c8ca058f0f5b8288793f946e2b45
4
- data.tar.gz: bf169e13fda8afc9881aeaccbf49867c2e225415
3
+ metadata.gz: fcc9947c6c1012e9ce4323ea9a229c17f11297d2
4
+ data.tar.gz: c1ef6779f525bea94bf34297a0c44ddec2f57ed9
5
5
  SHA512:
6
- metadata.gz: 41c1b2b435718a19fa43766123784ffd122680661f446abc8d1506fe2366840163c241c84fd73259fa0262cab4dd326456574dca698fc83f93ed948faa51c95a
7
- data.tar.gz: 5594a429db8ec3a9d75d490cb691e3dadeba9d7ef67931c21380f628e75459d268bbf78102d37b63db0fb5d75ff151c6ecad2fbe8f9ec6d261122852137f5c8c
6
+ metadata.gz: 242eff27bd59d336e151e1d32bb4b0583a00d8a717e1d8db83638b7d88dae0a8021113f5c52b5ab8e1d10c9dd7c743403af4fff3c453fe700863bdabe5917966
7
+ data.tar.gz: 87902e0b64cdc70963ba7c1c59e58e42c86fbb4947960640a84681fcbe21d29dd1ae2bad34eae9237991742a5e1d383f9724765c4202ba7a17b61ce6edc7e505
@@ -1,3 +1,5 @@
1
+ require 'pry'
2
+
1
3
  module MultiTabular
2
4
  # For classes that reference an MTI class
3
5
  module References
@@ -5,7 +7,7 @@ module MultiTabular
5
7
 
6
8
  included do
7
9
  def reflection_assignment_method(klass)
8
- self.class.reflect_on_association(reflection_symbol(klass)).name.to_s + '='
10
+ self.class.reflect_on_association(Helpers.reflection_symbol(klass)).name.to_s + '='
9
11
  end
10
12
 
11
13
  def reflection_assignment_symbol(sym)
@@ -16,16 +18,10 @@ module MultiTabular
16
18
  # list of defined associations within the current class
17
19
  def association_methods(mti_base_class)
18
20
  (mti_base_class.descendants << mti_base_class).map{|s|
19
- assoc = self.class.reflect_on_association(reflection_symbol s)
21
+ assoc = self.class.reflect_on_association(Helpers.reflection_symbol s)
20
22
  assoc ? assoc.name : nil
21
23
  }.compact
22
24
  end
23
-
24
- # for a given class, returns the appropriate symbol
25
- # to pass to the ActiveRecord method reflect_on_association
26
- def reflection_symbol(klass)
27
- klass.to_s.sub('::', '_').underscore.to_sym
28
- end
29
25
  end
30
26
 
31
27
  module ClassMethods
@@ -40,12 +36,6 @@ module MultiTabular
40
36
  bc.is_a?(Class) && bc < ActiveRecord::Base
41
37
  end
42
38
 
43
- # for a given class, returns the appropriate symbol
44
- # to pass to the ActiveRecord method reflect_on_association
45
- def reflection_symbol(klass)
46
- klass.to_s.sub('::', '_').underscore.to_sym
47
- end
48
-
49
39
  if params.key? :base_class
50
40
  base_class = Module.const_get params[:base_class]
51
41
  else
@@ -57,6 +47,12 @@ module MultiTabular
57
47
  fail InvalidBaseClassError.new "#{base_class} is not a valid base class."
58
48
  end
59
49
 
50
+ base_class.descendants.each do |descendant|
51
+ self.belongs_to Helpers.reflection_symbol(descendant),
52
+ class_name: descendant.to_s,
53
+ foreign_key: "#{Helpers.reflection_symbol(descendant)}_id"
54
+ end
55
+
60
56
  # Define the getter method for retrieving a referenced MTI record.
61
57
  # Each association method for the base class is invoked and first that returns a result will be used.
62
58
  define_method(assoc_sym.to_s) do
@@ -1,28 +1,6 @@
1
1
  require 'active_support/concern'
2
2
 
3
3
  module MultiTabular
4
- module Helpers
5
- # Allow converting the class name to an assumed foreign key in an associated model's database.
6
- # If a different foreign should be used, you can override this method or simply declare the foreign key manually.
7
- def self.to_foreign_key(klass)
8
- klass.name.underscore.sub('/', '_').singularize << '_id'
9
- end
10
-
11
- def self.define_associations(klass, assoc_list)
12
- return if assoc_list.nil?
13
- assoc_list.each do |assoc|
14
-
15
- assoc[:opts][:foreign_key] ||= to_foreign_key(klass) unless assoc[:opts][:through]
16
-
17
- if assoc[:multiple]
18
- klass.has_many assoc[:name], assoc[:opts]
19
- else
20
- klass.has_one assoc[:name], assoc[:opts]
21
- end
22
- end
23
- end
24
- end
25
-
26
4
  # For superclasses of an MTI construct.
27
5
  # These classes can provide shared logic, but are not an activerecord-model on their own,
28
6
  # meaning they have no corresponding table in the database.
@@ -1,3 +1,3 @@
1
1
  module MultiTabular
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/multi_tabular.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'multi_tabular/helpers'
1
2
  require 'multi_tabular/references'
2
3
  require 'multi_tabular/super'
3
4
  require 'multi_tabular/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_tabular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Junger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-19 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">"
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '4.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">"
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.1'
41
41
  description: |-