empty_eye 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # 0.4.1 / 2012-03-11 / Grady Griffin
2
2
 
3
+ * reorganized some methods
4
+ * added logic to free up complex data structures once they are not needed
5
+ * fixed some comment typos
6
+ * added comments
7
+ * updated reflect\_on\_multiple\_associations to work as intended
8
+
9
+ # 0.4.1 / 2012-03-11 / Grady Griffin
10
+
3
11
  * added homepage to gemspec
4
12
 
5
13
  # 0.4.0 / 2012-03-11 / Grady Griffin
@@ -3,7 +3,7 @@ module ActiveRecord
3
3
 
4
4
  class << self
5
5
 
6
- #am i an mti class? easier than making a new class type ... i tried
6
+ #am i a mti class? easier than making a new class type ... i tried
7
7
  def mti_class?
8
8
  extended_with.any?
9
9
  end
@@ -11,7 +11,7 @@ module ActiveRecord
11
11
  #interface for building mti_class
12
12
  #primary table is not necessary if the table named correctly (Bar => bars_core)
13
13
  #OR if the class inherits a primary table
14
- #simply wrap your greasy association in this block
14
+ #simply wrap your greasy associations in this block
15
15
  def mti_class(primary_table = nil)
16
16
  self.primary_key = "id"
17
17
  raise(EmptyEye::AlreadyExtended, "MTI class method already invoked") if mti_class?
@@ -36,7 +36,7 @@ module ActiveRecord
36
36
  extended_with.primary.shard
37
37
  end
38
38
 
39
- #we dont need no freakin' finder
39
+ #we dont need no freakin' type condition
40
40
  #the view handles this
41
41
  def finder_needs_type_condition?
42
42
  !mti_class? and super
@@ -62,9 +62,9 @@ module ActiveRecord
62
62
  end
63
63
 
64
64
  #determine the primary table
65
- #first detrmine if our view name exists; this will need to chage one day
65
+ #first determine if our view name exists; this will need to change one day
66
66
  #if they didnt specify try using the core convention else the superclass
67
- #if they specified use what the set
67
+ #if they specified use what they set
68
68
  def set_mti_primary_table(primary_table_name)
69
69
  @mti_primary_table = if ordinary_table_exists?
70
70
  raise(EmptyEye::ViewNameError, "MTI view cannot be created because a table named '#{compute_view_name}' already exists")
@@ -83,7 +83,7 @@ module ActiveRecord
83
83
  #we could use the baked in version for now
84
84
  def reflect_on_multiple_associations(*assoc_types)
85
85
  assoc_types.collect do |assoc_type|
86
- reflect_on_all_associations
86
+ reflect_on_all_associations(assoc_type)
87
87
  end.flatten.uniq
88
88
  end
89
89
 
@@ -92,7 +92,7 @@ module ActiveRecord
92
92
  connection.tables_without_views.include?(compute_view_name)
93
93
  end
94
94
 
95
- #drop the view; dont check if we can just rescue any errors
95
+ #drop the view; dont check if we can, just rescue any errors
96
96
  #create the view
97
97
  def create_view
98
98
  connection.execute("DROP VIEW #{table_name}") rescue nil
@@ -105,15 +105,17 @@ module ActiveRecord
105
105
  end
106
106
 
107
107
  #we know how to rebuild the validations from the shards
108
- #lets call our inherited validation here
108
+ #lets call our inherited validations here
109
109
  def inherit_mti_validations
110
110
  extended_with.validations.each {|args| send(*args)}
111
+ #no need to keep these in memory
112
+ extended_with.free_validations
111
113
  end
112
114
  end
113
115
 
114
116
  private
115
117
 
116
- #a pseudo association method back to instances primary shard
118
+ #a pseudo association method mapping us back to instances primary shard
117
119
  def mti_primary_shard
118
120
  @mti_primary_shard ||= if new_record?
119
121
  self.class.mti_primary_shard.new(:mti_instance => self)
@@ -2,4 +2,5 @@ module EmptyEye
2
2
  class AlreadyExtended < StandardError; end
3
3
  class ViewNameError < StandardError; end
4
4
  class InvalidUpdate < StandardError; end
5
+ class NotYetSupported < StandardError; end
5
6
  end
@@ -1,8 +1,8 @@
1
1
  module EmptyEye
2
2
  module Shard
3
3
 
4
- #a module that extendd the class that serves as a pointer to the primary table
5
- #when there is a superclass the will inherit from that else it will inherit from ActiveRecord
4
+ #module which extends the class that serves as a pointer to the primary table
5
+ #when there is a superclass the shard will inherit from that, else it will inherit from ActiveRecord
6
6
  #the primary shard manages all the MTI associated tables for the master class
7
7
 
8
8
  def self.included(base)
@@ -10,8 +10,11 @@ module EmptyEye
10
10
  end
11
11
 
12
12
  #the instance that owns this primary shard
13
+ #we usually know the master instance ahead of time
14
+ #so we should take care to set this manually
15
+ #we want to avoid the lookup
13
16
  def mti_instance
14
- @mti_instance
17
+ @mti_instance || mti_master_class.find_by_id(id)
15
18
  end
16
19
 
17
20
  #setter used to associate the primary shard with the master instance
@@ -72,7 +75,7 @@ module EmptyEye
72
75
  reflection
73
76
  end
74
77
 
75
- #finder methods should use the master classes base class not the shards
78
+ #finder methods should use the master class's type not the shard's
76
79
  def type_condition(table = arel_table)
77
80
  sti_column = table[inheritance_column.to_sym]
78
81
 
@@ -2,7 +2,7 @@ module EmptyEye
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 4
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -68,7 +68,6 @@ module EmptyEye
68
68
  parent.base_class.name if polymorphic_type
69
69
  end
70
70
 
71
- #value computed to remove this from column map; no need for the view to have it
72
71
  def polymorphic_type
73
72
  return unless association.options[:as]
74
73
  "#{association.options[:as]}_type"
@@ -79,7 +79,7 @@ module EmptyEye
79
79
  query.where(primary.type_column.eq(primary.type_value))
80
80
  end
81
81
 
82
- #build veiw creation statement
82
+ #build view creation statement
83
83
  "CREATE VIEW #{parent.table_name} AS\n#{query.to_sql}"
84
84
  end
85
85
 
@@ -123,6 +123,11 @@ module EmptyEye
123
123
  super
124
124
  end
125
125
  end
126
+
127
+ #we dont need to keep this data
128
+ def free_validations
129
+ @validations = nil
130
+ end
126
131
 
127
132
  private
128
133
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: empty_eye
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 1
10
- version: 0.4.1
9
+ - 2
10
+ version: 0.4.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - thegboat