merge 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/CHANGELOG +4 -1
  2. data/Rakefile +2 -2
  3. data/lib/merge/base.rb +32 -22
  4. data/merge.gemspec +13 -4
  5. metadata +50 -2
data/CHANGELOG CHANGED
@@ -1,4 +1,7 @@
1
- = 0.1.0 / 2012-12-18
1
+ = 0.6.0 / 2012-12-18
2
2
 
3
3
  Forked from Piggyback
4
4
 
5
+ = 0.6.1 / 2012-12-18
6
+
7
+ Better attribute method handling
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rake'
2
2
  require 'echoe'
3
3
 
4
- Echoe.new('merge', '0.6.0') do |p|
4
+ Echoe.new('merge', '0.6.1') do |p|
5
5
 
6
6
  p.description = "Merge attributes from associated models with ActiveRecord"
7
7
  p.url = "http://github.com/juni0r/merge"
@@ -20,7 +20,7 @@ Echoe.new('merge', '0.6.0') do |p|
20
20
  }
21
21
 
22
22
  p.runtime_dependencies = [ "activerecord >=3.1.0" ]
23
- p.development_dependencies = [ "echoe", "rspec", "sqlite3" ]
23
+ p.development_dependencies = [ "echoe", "sqlite3", "rspec", "guard-rspec", "rb-fsevent", "growl" ]
24
24
  end
25
25
 
26
26
  require 'rspec/core'
@@ -42,36 +42,45 @@ module Merge
42
42
  def define_attribute_methods
43
43
  @attribute_methods_mutex.synchronize do
44
44
  return if attribute_methods_generated?
45
-
46
- # This stunt is to call "super.super"
47
- _super = ActiveModel::AttributeMethods::ClassMethods::instance_method(:define_attribute_methods).bind(self)
48
-
49
- columns = merges.each_value.map do |assoc|
45
+ merges.each_value do |assoc|
50
46
  assoc.each_column do |name, column, serialized|
51
47
  columns_hash[name] = column
52
48
  serialized_attributes[name] = serialized if serialized
49
+ define_merge_attribute_methods(assoc.name, name)
53
50
  end
54
51
  end
55
-
56
- _super.call(columns.flatten)
57
52
  end
58
53
  super
59
- end
54
+ end
55
+
56
+ def define_merge_attribute_methods(assoc_name, attr_name)
57
+ generated_attribute_methods.module_eval <<-RUBY, __FILE__, __LINE__ + 1
58
+ def __temp__
59
+ if @attributes.has_key?("#{attr_name}")
60
+ (v=@attributes["#{attr_name}"]) && #{attribute_cast_code(attr_name)}
61
+ else
62
+ #{assoc_name}.#{attr_name}
63
+ end
64
+ end
65
+ alias_method :"#{attr_name}", :__temp__
66
+ undef_method :__temp__
67
+
68
+ def __temp__
69
+ !!send(:"#{attr_name}")
70
+ end
71
+
72
+ alias_method '#{attr_name}?', :__temp__
73
+ undef_method :__temp__
74
+ RUBY
75
+ end
60
76
  end
61
77
 
62
78
  class Association #:nodoc:
63
79
 
64
80
  def initialize(reflection, options = nil)
65
81
  @reflection = reflection
66
-
67
- unless options.is_a? Hash
68
- options = { only: options }
69
- end
70
-
71
- options.assert_valid_keys(:only, :except)
72
-
73
- @only = Array.wrap(options[:only]).map(&:to_s)
74
- @except = Array.wrap(options[:except]).map(&:to_s)
82
+ @options = options.is_a?(Hash) ? options : { only: options }
83
+ @options.assert_valid_keys(:only, :except)
75
84
  end
76
85
 
77
86
  def method_missing(method, *args, &block)
@@ -84,13 +93,14 @@ module Merge
84
93
 
85
94
  def attributes
86
95
  unless @attributes
87
- @attributes = klass.attribute_names
88
- @attributes &= @only if @only.any?
89
-
90
- @attributes -= active_record.attribute_names
91
- @attributes -= @except if @except.any?
96
+ only = Array.wrap(@options[:only]).map(&:to_s)
97
+ except = Array.wrap(@options[:except]).map(&:to_s)
92
98
 
99
+ @attributes = klass.attribute_names
100
+ @attributes &= only if only.any?
101
+ @attributes -= active_record.attribute_names
93
102
  @attributes -= [foreign_key] unless belongs_to?
103
+ @attributes -= except if except.any?
94
104
  end
95
105
  @attributes
96
106
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "merge"
5
- s.version = "0.6.0"
5
+ s.version = "0.6.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Andreas Korth"]
@@ -24,18 +24,27 @@ Gem::Specification.new do |s|
24
24
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
25
  s.add_runtime_dependency(%q<activerecord>, [">= 3.1.0"])
26
26
  s.add_development_dependency(%q<echoe>, [">= 0"])
27
- s.add_development_dependency(%q<rspec>, [">= 0"])
28
27
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
28
+ s.add_development_dependency(%q<rspec>, [">= 0"])
29
+ s.add_development_dependency(%q<guard-rspec>, [">= 0"])
30
+ s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
31
+ s.add_development_dependency(%q<growl>, [">= 0"])
29
32
  else
30
33
  s.add_dependency(%q<activerecord>, [">= 3.1.0"])
31
34
  s.add_dependency(%q<echoe>, [">= 0"])
32
- s.add_dependency(%q<rspec>, [">= 0"])
33
35
  s.add_dependency(%q<sqlite3>, [">= 0"])
36
+ s.add_dependency(%q<rspec>, [">= 0"])
37
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
38
+ s.add_dependency(%q<rb-fsevent>, [">= 0"])
39
+ s.add_dependency(%q<growl>, [">= 0"])
34
40
  end
35
41
  else
36
42
  s.add_dependency(%q<activerecord>, [">= 3.1.0"])
37
43
  s.add_dependency(%q<echoe>, [">= 0"])
38
- s.add_dependency(%q<rspec>, [">= 0"])
39
44
  s.add_dependency(%q<sqlite3>, [">= 0"])
45
+ s.add_dependency(%q<rspec>, [">= 0"])
46
+ s.add_dependency(%q<guard-rspec>, [">= 0"])
47
+ s.add_dependency(%q<rb-fsevent>, [">= 0"])
48
+ s.add_dependency(%q<growl>, [">= 0"])
40
49
  end
41
50
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: rspec
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -60,7 +76,39 @@ dependencies:
60
76
  - !ruby/object:Gem::Version
61
77
  version: '0'
62
78
  - !ruby/object:Gem::Dependency
63
- name: sqlite3
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rb-fsevent
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: growl
64
112
  requirement: !ruby/object:Gem::Requirement
65
113
  none: false
66
114
  requirements: