metabolical 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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