has_metadata 1.2.3 → 1.2.4
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/README.textile +1 -1
- data/has_metadata.gemspec +2 -2
- data/lib/has_metadata/model.rb +7 -0
- data/lib/has_metadata.rb +18 -1
- metadata +16 -16
data/README.textile
CHANGED
data/has_metadata.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "has_metadata"
|
|
8
|
-
s.version = "1.2.
|
|
8
|
+
s.version = "1.2.4"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Tim Morgan"]
|
|
12
|
-
s.date = "2012-01-
|
|
12
|
+
s.date = "2012-01-25"
|
|
13
13
|
s.description = "has_metadata lets you move non-indexed and weighty columns off of your big tables by creating a separate metadata table to store all this extra information. Works with Ruby 1.9. and Rails 3.0."
|
|
14
14
|
s.email = "git@timothymorgan.info"
|
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/has_metadata/model.rb
CHANGED
|
@@ -56,12 +56,19 @@ module HasMetadata
|
|
|
56
56
|
|
|
57
57
|
options = fields[name] || {}
|
|
58
58
|
data_will_change!
|
|
59
|
+
attribute_will_change! name.to_s
|
|
59
60
|
data[name] = HasMetadata.metadata_typecast(value, options[:type])
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
self
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
# @return [Hash<String, Object>] A hash of metadata fields that have been
|
|
67
|
+
# altered.
|
|
68
|
+
def changed_metadata
|
|
69
|
+
changed_attributes.except(*attribute_names)
|
|
70
|
+
end
|
|
71
|
+
|
|
65
72
|
private
|
|
66
73
|
|
|
67
74
|
def initialize_data
|
data/lib/has_metadata.rb
CHANGED
|
@@ -73,6 +73,9 @@ module HasMetadata
|
|
|
73
73
|
|
|
74
74
|
define_method(:save_metadata) { metadata.save! }
|
|
75
75
|
define_method(:metadata_changed?) { metadata.try :changed? }
|
|
76
|
+
|
|
77
|
+
alias_method_chain :changed_attributes, :metadata
|
|
78
|
+
alias_method_chain :attribute_will_change!, :metadata
|
|
76
79
|
else
|
|
77
80
|
raise "Cannot redefine existing metadata fields: #{(fields.keys & self.metadata_fields.keys).to_sentence}" unless (fields.keys & self.metadata_fields.keys).empty?
|
|
78
81
|
self.metadata_fields = self.metadata_fields.merge(fields)
|
|
@@ -146,7 +149,7 @@ module HasMetadata
|
|
|
146
149
|
# saved one if none was found.
|
|
147
150
|
|
|
148
151
|
def metadata!
|
|
149
|
-
if instance_variables.include?(:@metadata) then
|
|
152
|
+
if instance_variables.include?(:@metadata) && metadata then
|
|
150
153
|
metadata
|
|
151
154
|
else
|
|
152
155
|
if new_record? then
|
|
@@ -162,4 +165,18 @@ module HasMetadata
|
|
|
162
165
|
"#<#{self.class.to_s} #{attributes.merge(metadata.try(:data).try(:stringify_keys) || {}).map { |k,v| "#{k}: #{v.inspect}" }.join(', ')}>"
|
|
163
166
|
end
|
|
164
167
|
end
|
|
168
|
+
|
|
169
|
+
# @private
|
|
170
|
+
def changed_attributes_with_metadata
|
|
171
|
+
changed_attributes_without_metadata.merge(metadata.try(:changed_metadata) || {})
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @private
|
|
175
|
+
def attribute_will_change_with_metadata!(attr)
|
|
176
|
+
if attribute_names.include?(attr) then
|
|
177
|
+
attribute_will_change_without_metadata! attr
|
|
178
|
+
else
|
|
179
|
+
metadata!.send :attribute_will_change!, attr
|
|
180
|
+
end
|
|
181
|
+
end
|
|
165
182
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: has_metadata
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.4
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-01-
|
|
12
|
+
date: 2012-01-25 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rails
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70328104605200 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - <
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '3.1'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *70328104605200
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: boolean
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &70328104604620 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ! '>='
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *70328104604620
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: jeweler
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &70328104604020 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ! '>='
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '0'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *70328104604020
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: yard
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &70328104603440 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ! '>='
|
|
@@ -54,10 +54,10 @@ dependencies:
|
|
|
54
54
|
version: '0'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *70328104603440
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: RedCloth
|
|
60
|
-
requirement: &
|
|
60
|
+
requirement: &70328104602820 !ruby/object:Gem::Requirement
|
|
61
61
|
none: false
|
|
62
62
|
requirements:
|
|
63
63
|
- - ! '>='
|
|
@@ -65,10 +65,10 @@ dependencies:
|
|
|
65
65
|
version: '0'
|
|
66
66
|
type: :development
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *70328104602820
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: sqlite3
|
|
71
|
-
requirement: &
|
|
71
|
+
requirement: &70328104602260 !ruby/object:Gem::Requirement
|
|
72
72
|
none: false
|
|
73
73
|
requirements:
|
|
74
74
|
- - ! '>='
|
|
@@ -76,10 +76,10 @@ dependencies:
|
|
|
76
76
|
version: '0'
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
|
-
version_requirements: *
|
|
79
|
+
version_requirements: *70328104602260
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: rspec
|
|
82
|
-
requirement: &
|
|
82
|
+
requirement: &70328104601540 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
84
84
|
requirements:
|
|
85
85
|
- - ! '>='
|
|
@@ -87,7 +87,7 @@ dependencies:
|
|
|
87
87
|
version: '0'
|
|
88
88
|
type: :development
|
|
89
89
|
prerelease: false
|
|
90
|
-
version_requirements: *
|
|
90
|
+
version_requirements: *70328104601540
|
|
91
91
|
description: has_metadata lets you move non-indexed and weighty columns off of your
|
|
92
92
|
big tables by creating a separate metadata table to store all this extra information.
|
|
93
93
|
Works with Ruby 1.9. and Rails 3.0.
|