metabolical 0.0.4 → 1.1.0
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.
- checksums.yaml +7 -0
- data/lib/metabolical.rb +6 -1
- data/lib/metabolical/scopes.rb +22 -22
- data/lib/metabolical/version.rb +1 -1
- data/metabolical.gemspec +2 -2
- data/test/helper.rb +2 -3
- data/test/metabolical_test.rb +20 -20
- metadata +38 -63
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2e3e3ea61aa1050f31eb0a4daf6e00d403b10d0d448500fed099f0ac8ac02fb0
|
4
|
+
data.tar.gz: 0f2a20a3ff7e23530fbd803dffbaa2f3383d2b19c299b13920a6307038c83d8b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eda7728a0f4dacedac25e3384c70823e4b95ac4a1332c5d090cf2184c64efd5649788ee3111e2650adabe5ea2c2c7e76b33f70efaab60f767175bc91fd6fec54
|
7
|
+
data.tar.gz: 4eb85eed61028050cbacf5db16f74d83216b4a8b18721f2823398babc91a9096169d2ad7537e653fc2738bde1535fab5946c768cfec94c14ae8916e06cb846f7
|
data/lib/metabolical.rb
CHANGED
@@ -8,7 +8,12 @@ module Metabolical
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def metabolize!
|
11
|
-
|
11
|
+
if self.respond_to?(:named_scope)
|
12
|
+
include Metabolical::AR3Scopes
|
13
|
+
else
|
14
|
+
include Metabolical::AR4Scopes
|
15
|
+
end
|
16
|
+
|
12
17
|
class_eval do
|
13
18
|
has_many :metas, :as => :metabolized, :class_name => 'Metabolical::MetaDatum' do
|
14
19
|
def [](key)
|
data/lib/metabolical/scopes.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
module Metabolical
|
2
|
-
module
|
2
|
+
module AR4Scopes
|
3
3
|
def self.included(klass)
|
4
|
-
|
5
|
-
klass.send
|
6
|
-
klass.send
|
7
|
-
klass.send
|
8
|
-
klass.send
|
9
|
-
|
10
|
-
}
|
4
|
+
class_eval do
|
5
|
+
klass.send :scope, :with_meta, lambda {|k| joins(:metas).where("meta_data.key" => k) }
|
6
|
+
klass.send :scope, :with_metas, lambda { include(:metas) }
|
7
|
+
klass.send :scope, :with_meta_data, lambda{|k, v| where({"meta_data.key" => k, "meta_data.data" => v.to_yaml}).joins(:metas) }
|
8
|
+
klass.send :scope, :without_meta, lambda{|k|
|
9
|
+
joins("left join meta_data md on md.metabolized_id = #{klass.table_name}.#{klass.primary_key} and md.metabolized_type = '#{klass.to_s}' and md.key = '#{k}'").where("md.metabolized_id is null")
|
10
|
+
}
|
11
|
+
end
|
11
12
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
end
|
14
|
+
|
15
|
+
module AR3Scopes
|
16
|
+
def self.included(klass)
|
17
|
+
class_eval do
|
18
|
+
klass.send :named_scope, :with_meta, lambda{|k| joins([:meta]).where({"meta_data.key" => k}) }
|
19
|
+
klass.send :named_scope, :with_metas, includes(:meta)
|
20
|
+
klass.send :named_scope, :with_meta_data, lambda{|k, v| joins(:meta).where("meta_data.key" => k, "meta_data.data" => v.to_yaml)}
|
21
|
+
# TODO: find a better way to define this
|
22
|
+
# Arel provides a way to specify left joins by using
|
23
|
+
# join(left).on(... syntax
|
24
|
+
klass.send :named_scope, :without_meta, lambda{|k| {:joins => "left join meta_data md on md.metabolized_id = #{klass.table_name}.#{klass.primary_key} and md.metabolized_type = '#{klass.to_s}' and md.key = '#{k}'", :conditions => "md.metabolized_id is null"}
|
25
|
+
}
|
25
26
|
end
|
26
27
|
end
|
27
|
-
|
28
28
|
end
|
29
29
|
end
|
data/lib/metabolical/version.rb
CHANGED
data/metabolical.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Metabolical::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Diego Scataglini"]
|
10
|
-
s.email = ["
|
10
|
+
s.email = ["dwebsubmit@gmail.com"]
|
11
11
|
s.homepage = ""
|
12
12
|
s.summary = %q{This is an ActiveRecord Model & mixin to add meta data to any AR object}
|
13
13
|
s.description = %q{This is an ActiveRecord Model & mixin to add meta data to any AR object}
|
@@ -21,6 +21,6 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
|
-
s.add_dependency('activerecord', '>= 2.
|
24
|
+
s.add_dependency('activerecord', '>= 4.2.0')
|
25
25
|
|
26
26
|
end
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'sqlite3'
|
3
3
|
require 'active_record'
|
4
|
-
require '
|
5
|
-
require 'shoulda'
|
4
|
+
require 'minitest/autorun'
|
6
5
|
|
7
|
-
TEST_ROOT = File.expand_path(File.dirname(__FILE__))
|
6
|
+
TEST_ROOT = File.expand_path(File.dirname(__FILE__) )
|
8
7
|
MODELS_ROOT = TEST_ROOT + "/models"
|
9
8
|
FIXTURES_ROOT = TEST_ROOT + "/fixtures"
|
10
9
|
MIGRATIONS_ROOT = TEST_ROOT + "/migrations"
|
data/test/metabolical_test.rb
CHANGED
@@ -1,52 +1,52 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'models/user'
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
describe Metabolical do
|
5
|
+
describe "an ActiveRecord Object" do
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
describe "new record" do
|
8
|
+
before do
|
9
9
|
@user = User.new
|
10
10
|
end
|
11
11
|
|
12
|
-
|
12
|
+
after do
|
13
13
|
@user.destroy
|
14
14
|
end
|
15
15
|
|
16
|
-
should
|
16
|
+
it "should be able to assign a single meta before saving and retrieving it after save" do
|
17
17
|
@user.metas['foo'] = 'bar'
|
18
18
|
@user.save
|
19
19
|
assert_equal 'bar', @user.metas['foo'].data
|
20
20
|
end
|
21
21
|
|
22
|
-
should
|
22
|
+
it "should be able to assign a single meta before saving and retrieving it before save" do
|
23
23
|
@user.metas['foo'] = 'bar'
|
24
24
|
assert_equal 'bar', @user.metas['foo'].data
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
describe "saved record" do
|
29
|
+
before do
|
30
30
|
@user = User.new
|
31
31
|
@user.save
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
after do
|
35
35
|
@user.destroy
|
36
36
|
end
|
37
37
|
|
38
|
-
should
|
38
|
+
it "should be able to assign a single meta before re saving and retrieving it after save" do
|
39
39
|
@user.metas['foo'] = 'bar'
|
40
40
|
@user.save
|
41
41
|
assert_equal 'bar', @user.metas['foo'].data
|
42
42
|
end
|
43
43
|
|
44
|
-
should
|
44
|
+
it "should be able to assign a single meta before re saving and retrieving it before save" do
|
45
45
|
@user.metas['foo'] = 'baz'
|
46
46
|
assert_equal 'baz', @user.metas['foo'].data
|
47
47
|
end
|
48
48
|
|
49
|
-
should
|
49
|
+
it "should be able to retrieve after saving" do
|
50
50
|
@user.metas['foo'] = 'faz'
|
51
51
|
@user.save
|
52
52
|
user = User.find @user.id
|
@@ -55,8 +55,8 @@ class MetabolicalTest < Test::Unit::TestCase
|
|
55
55
|
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
|
-
|
58
|
+
describe "named scopes" do
|
59
|
+
before do
|
60
60
|
@foo_user = User.create(:name => 'foo_user', :metas => [Metabolical::MetaDatum.new(:key => "foo", :data => "bar")])
|
61
61
|
@bar_user = User.create(:name => 'bar_user',
|
62
62
|
:metas => [Metabolical::MetaDatum.new(:key => "bar", :data => "baz"),
|
@@ -64,26 +64,26 @@ class MetabolicalTest < Test::Unit::TestCase
|
|
64
64
|
@true_user = User.create(:name => 'true_user', :metas => [Metabolical::MetaDatum.new(:key => "bar", :data => true)])
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
after do
|
68
68
|
User.delete_all
|
69
69
|
end
|
70
70
|
|
71
|
-
should
|
71
|
+
it "should have with_meta scopes" do
|
72
72
|
assert_equal [@foo_user], User.with_meta("foo")
|
73
73
|
assert_equal [@bar_user, @true_user], User.with_meta("bar")
|
74
74
|
end
|
75
75
|
|
76
|
-
should
|
76
|
+
it "should have with_meta scopes that check for data" do
|
77
77
|
assert_equal [], User.with_meta_data("foo", "foo")
|
78
78
|
assert_equal [@foo_user], User.with_meta_data("foo", "bar"), "Should have brought back foo user"
|
79
79
|
assert_equal [@true_user], User.with_meta_data("bar", true), "Should have brought back true user"
|
80
80
|
end
|
81
81
|
|
82
|
-
should
|
82
|
+
it "should have with_metas scope that includes all metas" do
|
83
83
|
assert User.respond_to?(:with_metas)
|
84
84
|
end
|
85
85
|
|
86
|
-
should
|
86
|
+
it "should bring back objects without a certain meta" do
|
87
87
|
assert_equal [@foo_user], User.without_meta("bar")
|
88
88
|
end
|
89
89
|
|
metadata
CHANGED
@@ -1,50 +1,38 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: metabolical
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 4
|
10
|
-
version: 0.0.4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Diego Scataglini
|
14
|
-
autorequire:
|
8
|
+
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
11
|
+
date: 2020-10-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.0
|
21
20
|
type: :runtime
|
22
21
|
prerelease: false
|
23
|
-
version_requirements:
|
24
|
-
|
25
|
-
requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
26
24
|
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 2
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
version: 2.1.2
|
34
|
-
requirement: *id001
|
35
|
-
name: activerecord
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.0
|
36
27
|
description: This is an ActiveRecord Model & mixin to add meta data to any AR object
|
37
|
-
email:
|
38
|
-
-
|
28
|
+
email:
|
29
|
+
- dwebsubmit@gmail.com
|
39
30
|
executables: []
|
40
|
-
|
41
31
|
extensions: []
|
42
|
-
|
43
32
|
extra_rdoc_files: []
|
44
|
-
|
45
|
-
|
46
|
-
- .
|
47
|
-
- .rvmrc
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- ".rvmrc"
|
48
36
|
- Gemfile
|
49
37
|
- README.rdoc
|
50
38
|
- Rakefile
|
@@ -57,42 +45,29 @@ files:
|
|
57
45
|
- test/metabolical_test.rb
|
58
46
|
- test/models/user.rb
|
59
47
|
- test/schema/schema.rb
|
60
|
-
homepage:
|
48
|
+
homepage: ''
|
61
49
|
licenses: []
|
62
|
-
|
63
|
-
post_install_message:
|
50
|
+
metadata: {}
|
51
|
+
post_install_message:
|
64
52
|
rdoc_options: []
|
65
|
-
|
66
|
-
require_paths:
|
53
|
+
require_paths:
|
67
54
|
- lib
|
68
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
-
|
70
|
-
requirements:
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
71
57
|
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
hash: 57
|
74
|
-
segments:
|
75
|
-
- 1
|
76
|
-
- 8
|
77
|
-
- 7
|
58
|
+
- !ruby/object:Gem::Version
|
78
59
|
version: 1.8.7
|
79
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
-
|
81
|
-
requirements:
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
82
62
|
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
version: "0"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
88
65
|
requirements: []
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
signing_key:
|
93
|
-
specification_version: 3
|
66
|
+
rubygems_version: 3.0.8
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
94
69
|
summary: This is an ActiveRecord Model & mixin to add meta data to any AR object
|
95
|
-
test_files:
|
70
|
+
test_files:
|
96
71
|
- test/helper.rb
|
97
72
|
- test/metabolical_test.rb
|
98
73
|
- test/models/user.rb
|