select_extra_columns 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ 2010-03-08
2
+ ==========
3
+ * Fixed the bugs
4
+ * Made the extra columns read-only.
5
+
1
6
  2010-03-07
2
7
  ==========
3
8
  * First release
@@ -7,15 +7,16 @@ module SelectExtraColumns
7
7
  module ClassMethods
8
8
  def self.extended(active_record_class)
9
9
  class << active_record_class
10
- class_inheritable_array(:klasses_with_extra_columns)
11
10
  alias_method_chain :find_every, :extra_columns
12
11
  end
12
+ active_record_class.class_inheritable_array(:klasses_with_extra_columns)
13
+ active_record_class.klasses_with_extra_columns ||= []
13
14
  end
14
15
 
15
16
  def find_every_with_extra_columns options
16
17
  extra_columns = options.delete(:extra_columns)
17
- return super if extra_columns.empty?
18
- klass_with_extra_columns(extra_columns).find_every(options)
18
+ return find_every_without_extra_columns options if extra_columns.empty?
19
+ klass_with_extra_columns(extra_columns).send(:find_every, options)
19
20
  end
20
21
 
21
22
  def validate_find_options(options)
@@ -27,19 +28,33 @@ module SelectExtraColumns
27
28
 
28
29
  def klass_with_extra_columns extra_columns
29
30
  # look for the class in the cache.
30
- p "1.0"
31
31
  self.klasses_with_extra_columns.select do | class_details |
32
32
  return class_details[1] if class_details[0] == extra_columns
33
33
  end
34
- p "1.1"
35
- self.columns # load the column definition
34
+ # load the column definition
35
+ cols, cols_hash = self.columns, self.columns_hash
36
36
  self.clone.tap do |klass|
37
+ prepare_extra_column_klass(klass, cols, cols_hash, extra_columns)
38
+ end
39
+ end
40
+
41
+ def prepare_extra_column_klass klass, cols, cols_hash, extra_columns
42
+ class << klass
43
+ attr_accessor :extra_columns
44
+ # over ride readonly_attributes to include the extra_columns
45
+ def readonly_attributes
46
+ (super || []) + self.extra_columns.keys(&:to_s)
47
+ end
48
+ end
49
+ #Make new copy of @columns, and @columns_hash and @extra_columns variables
50
+ klass.instance_variable_set("@columns", cols.clone)
51
+ klass.instance_variable_set("@columns_hash", cols_hash.clone)
52
+ klass.extra_columns = extra_columns.clone
37
53
  extra_columns.each do |col_name, col_type|
38
54
  # add the new column to `columns` list and `columns_hash` hash.
39
55
  klass.columns << (klass.columns_hash[col_name.to_s] = ActiveRecord::ConnectionAdapters::Column.new(col_name.to_s, nil, col_type.to_s))
40
56
  end
41
57
  self.klasses_with_extra_columns = [[extra_columns, klass]] # add the class to the cache
42
- end
43
58
  end
44
59
  end
45
60
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kandada Boggu
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-07 00:00:00 -08:00
17
+ date: 2010-03-08 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20