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 CHANGED
@@ -3,7 +3,7 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in metabolical.gemspec
4
4
  gemspec
5
5
  group :test do
6
- gem 'activerecord'
7
6
  gem 'sqlite3'
8
7
  gem 'shoulda'
8
+ gem 'rake'
9
9
  end
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
- find_by_key(key) || self.proxy_owner.metas.detect{|m| m.key == key}
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
- meta = self[key] || self.proxy_owner.metas.build(:key => key)
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
- serialize :data
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
@@ -1,3 +1,3 @@
1
1
  module Metabolical
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
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
- s.add_dependency('activesupport', '>= 2.1.2')
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
@@ -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', :metas => [Metabolical::MetaDatum.new(:key => "bar", :data => "baz"),
62
- Metabolical::MetaDatum.new(:key => "fuu", :data => "bar")])
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: 27
5
- prerelease: false
4
+ hash: 25
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
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: 2011-07-09 00:00:00 -04:00
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.3.7
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