metabolical 0.0.2 → 0.0.3
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/Gemfile +1 -1
- data/README.rdoc +0 -3
- data/lib/metabolical.rb +7 -4
- data/lib/metabolical/meta_datum.rb +12 -1
- data/lib/metabolical/version.rb +1 -1
- data/metabolical.gemspec +1 -4
- data/test/metabolical_test.rb +3 -7
- metadata +6 -72
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -20,9 +20,6 @@ Whenever you feel like adding a column to a table ask yourself if what you reall
|
|
20
20
|
User.with_meta('active') #=> all users with some metadata keyed as 'active'
|
21
21
|
User.with_meta_data('active', true) #=> all user with metadata with key 'active' and set to true
|
22
22
|
User.without_meta('asshole') #=> all users that don't have a metadata keyed as 'asshole'.
|
23
|
-
|
24
|
-
Without_meta is an expensive query.
|
25
|
-
It needs to find all the records that match and remove them from the possible list of results.
|
26
23
|
|
27
24
|
== Notes
|
28
25
|
|
data/lib/metabolical.rb
CHANGED
@@ -3,26 +3,29 @@ require 'metabolical/scopes'
|
|
3
3
|
|
4
4
|
module Metabolical
|
5
5
|
def self.included(klass)
|
6
|
-
klass.extend ClassMethods
|
6
|
+
klass.extend ClassMethods
|
7
7
|
end
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def metabolize!
|
11
11
|
include Metabolical::Scopes
|
12
|
-
|
13
12
|
class_eval do
|
14
13
|
has_many :metas, :as => :metabolized, :class_name => 'Metabolical::MetaDatum' do
|
15
14
|
def [](key)
|
16
|
-
|
15
|
+
owner = (self.respond_to?(:proxy_association) ? self.proxy_association.owner : self.proxy_owner)
|
16
|
+
find_by_key(key) || owner.metas.detect{|m| m.key == key}
|
17
17
|
end
|
18
18
|
|
19
19
|
def []=(key, data)
|
20
|
-
|
20
|
+
owner = (self.respond_to?(:proxy_association) ? self.proxy_association.owner : self.proxy_owner)
|
21
|
+
meta = self[key] || owner.metas.build(:key => key)
|
21
22
|
meta.data = data
|
23
|
+
meta.save unless owner.new_record?
|
22
24
|
meta
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
28
|
+
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
@@ -1,6 +1,17 @@
|
|
1
|
+
require 'active_record/version'
|
1
2
|
module Metabolical
|
2
3
|
class MetaDatum < ActiveRecord::Base
|
3
4
|
belongs_to :metabolized, :polymorphic => true
|
4
|
-
|
5
|
+
if Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new("3.1.0")
|
6
|
+
serialize :data
|
7
|
+
else
|
8
|
+
def data=(val)
|
9
|
+
write_attribute(:data, val.to_yaml)
|
10
|
+
end
|
11
|
+
|
12
|
+
def data
|
13
|
+
read_attribute(:data).blank? ? nil : YAML.load(read_attribute(:data))
|
14
|
+
end
|
15
|
+
end
|
5
16
|
end
|
6
17
|
end
|
data/lib/metabolical/version.rb
CHANGED
data/metabolical.gemspec
CHANGED
@@ -22,8 +22,5 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
24
|
s.add_dependency('activerecord', '>= 2.1.2')
|
25
|
-
|
26
|
-
s.add_dependency('activemodel', '>= 2.1.2')
|
27
|
-
s.add_dependency('arel', '~> 2.0.10')
|
28
|
-
s.add_dependency('tzinfo', '~> 0.3.23')
|
25
|
+
|
29
26
|
end
|
data/test/metabolical_test.rb
CHANGED
@@ -58,8 +58,9 @@ class MetabolicalTest < Test::Unit::TestCase
|
|
58
58
|
context "named scopes" do
|
59
59
|
setup do
|
60
60
|
@foo_user = User.create(:name => 'foo_user', :metas => [Metabolical::MetaDatum.new(:key => "foo", :data => "bar")])
|
61
|
-
@bar_user = User.create(:name => 'bar_user',
|
62
|
-
|
61
|
+
@bar_user = User.create(:name => 'bar_user',
|
62
|
+
:metas => [Metabolical::MetaDatum.new(:key => "bar", :data => "baz"),
|
63
|
+
Metabolical::MetaDatum.new(:key => "fuu", :data => "bar")])
|
63
64
|
@true_user = User.create(:name => 'true_user', :metas => [Metabolical::MetaDatum.new(:key => "bar", :data => true)])
|
64
65
|
end
|
65
66
|
|
@@ -86,11 +87,6 @@ class MetabolicalTest < Test::Unit::TestCase
|
|
86
87
|
assert_equal [@foo_user], User.without_meta("bar")
|
87
88
|
end
|
88
89
|
|
89
|
-
|
90
|
-
|
91
90
|
end
|
92
|
-
|
93
|
-
|
94
91
|
end
|
95
|
-
|
96
92
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metabolical
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Diego Scataglini
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2012-01-11 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: activerecord
|
@@ -34,70 +33,6 @@ dependencies:
|
|
34
33
|
version: 2.1.2
|
35
34
|
type: :runtime
|
36
35
|
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: activesupport
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 15
|
46
|
-
segments:
|
47
|
-
- 2
|
48
|
-
- 1
|
49
|
-
- 2
|
50
|
-
version: 2.1.2
|
51
|
-
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: activemodel
|
55
|
-
prerelease: false
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 15
|
62
|
-
segments:
|
63
|
-
- 2
|
64
|
-
- 1
|
65
|
-
- 2
|
66
|
-
version: 2.1.2
|
67
|
-
type: :runtime
|
68
|
-
version_requirements: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: arel
|
71
|
-
prerelease: false
|
72
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
hash: 27
|
78
|
-
segments:
|
79
|
-
- 2
|
80
|
-
- 0
|
81
|
-
- 10
|
82
|
-
version: 2.0.10
|
83
|
-
type: :runtime
|
84
|
-
version_requirements: *id004
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: tzinfo
|
87
|
-
prerelease: false
|
88
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
hash: 61
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
- 3
|
97
|
-
- 23
|
98
|
-
version: 0.3.23
|
99
|
-
type: :runtime
|
100
|
-
version_requirements: *id005
|
101
36
|
description: This is an ActiveRecord Model & mixin to add meta data to any AR object
|
102
37
|
email:
|
103
38
|
- diego@junivi.com
|
@@ -122,7 +57,6 @@ files:
|
|
122
57
|
- test/metabolical_test.rb
|
123
58
|
- test/models/user.rb
|
124
59
|
- test/schema/schema.rb
|
125
|
-
has_rdoc: true
|
126
60
|
homepage: ""
|
127
61
|
licenses: []
|
128
62
|
|
@@ -154,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
88
|
requirements: []
|
155
89
|
|
156
90
|
rubyforge_project: metabolical
|
157
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.8.5
|
158
92
|
signing_key:
|
159
93
|
specification_version: 3
|
160
94
|
summary: This is an ActiveRecord Model & mixin to add meta data to any AR object
|