merge 0.6.0 → 0.6.1

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.
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: