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.
- data/CHANGELOG +4 -1
- data/Rakefile +2 -2
- data/lib/merge/base.rb +32 -22
- data/merge.gemspec +13 -4
- metadata +50 -2
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'echoe'
|
3
3
|
|
4
|
-
Echoe.new('merge', '0.6.
|
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", "
|
23
|
+
p.development_dependencies = [ "echoe", "sqlite3", "rspec", "guard-rspec", "rb-fsevent", "growl" ]
|
24
24
|
end
|
25
25
|
|
26
26
|
require 'rspec/core'
|
data/lib/merge/base.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
88
|
-
|
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
|
data/merge.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "merge"
|
5
|
-
s.version = "0.6.
|
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.
|
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:
|
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:
|