metabolical 0.0.4 → 1.2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c64475964e6b37ea5502c264151add71cdcf0d956c8a32c484dfbb47d3b556b2
4
+ data.tar.gz: ccb3c4e1b41c619d27d723b52d8104a9797cc51e225a7619e7c47e10bee7ae23
5
+ SHA512:
6
+ metadata.gz: 8b56934b70a4419cf7d2ff4fbbb12e96b973922de87fa1c9cd28938131c97f6ddec7956569e4985895d75230968a602da00d72e1186a79b722b0a0bc12a2f356
7
+ data.tar.gz: bbc4edb0f271008bf4cc74dbedccc330a0f6171b8335c8bdf72855a44e9d3eabc3782c845b143fad6adea692f3b115e88f6eb39afef466a33f2ccd9f5ce0a05f
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
2
4
 
3
5
  # Specify your gem's dependencies in metabolical.gemspec
4
6
  gemspec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "metabolical"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -1,29 +1,29 @@
1
1
  module Metabolical
2
- module Scopes
2
+ module AR4Scopes
3
3
  def self.included(klass)
4
- method = klass.respond_to?(:named_scope) ? :named_scope : :scope
5
- klass.send method, :with_meta, lambda{|k| {:joins => [:metas], :conditions => {"meta_data.key" => k}}}
6
- klass.send method, :with_metas, :include => [:metas]
7
- klass.send method, :with_meta_data, lambda{|k, v| {:joins => [:metas], :conditions => {"meta_data.key" => k, "meta_data.data" => v.to_yaml}}}
8
- klass.send method, :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}'", :conditions => "md.metabolized_id is null"}
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
- module AR3Scopes
14
- def self.included(klass)
15
- class_eval do
16
- scope :with_meta, lambda{|k| joins([:meta]).where({"meta_data.key" => k}) }
17
- scope :with_metas, includes(:meta)
18
- scope :with_meta_data, lambda{|k, v| joins(:meta).where("meta_data.key" => k, "meta_data.data" => v.to_yaml)}
19
- # TODO: find a better way to define this
20
- # Arel provides a way to specify left joins by using
21
- # join(left).on(... syntax
22
- 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"}
23
- }
24
- end
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
@@ -1,3 +1,3 @@
1
1
  module Metabolical
2
- VERSION = "0.0.4"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/metabolical.rb CHANGED
@@ -2,18 +2,25 @@ require 'metabolical/meta_datum'
2
2
  require 'metabolical/scopes'
3
3
 
4
4
  module Metabolical
5
+ class Error < StandardError; end
6
+
5
7
  def self.included(klass)
6
8
  klass.extend ClassMethods
7
9
  end
8
10
 
9
11
  module ClassMethods
10
12
  def metabolize!
11
- include Metabolical::Scopes
13
+ if self.respond_to?(:named_scope)
14
+ include Metabolical::AR3Scopes
15
+ else
16
+ include Metabolical::AR4Scopes
17
+ end
18
+
12
19
  class_eval do
13
20
  has_many :metas, :as => :metabolized, :class_name => 'Metabolical::MetaDatum' do
14
21
  def [](key)
15
22
  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} || owner.metas.build(:key => key)
23
+ (owner.metas.loaded? && owner.metas.detect{|m| m.key == key} ) || find_by(key: key) || owner.metas.build(:key => key)
17
24
  end
18
25
 
19
26
  def []=(key, data)
data/metabolical.gemspec CHANGED
@@ -1,26 +1,38 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require "metabolical/version"
4
4
 
5
- Gem::Specification.new do |s|
6
- s.name = "metabolical"
7
- s.version = Metabolical::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Diego Scataglini"]
10
- s.email = ["diego@junivi.com"]
11
- s.homepage = ""
12
- s.summary = %q{This is an ActiveRecord Model & mixin to add meta data to any AR object}
13
- s.description = %q{This is an ActiveRecord Model & mixin to add meta data to any AR object}
14
-
15
- s.required_ruby_version = '>= 1.8.7'
16
-
17
- s.rubyforge_project = "metabolical"
18
-
19
- s.files = `git ls-files`.split("\n")
20
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
- s.require_paths = ["lib"]
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "metabolical"
7
+ spec.version = Metabolical::VERSION
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.authors = ["Diego Scataglini"]
10
+ spec.email = ["dwebsubmit@gmail.com"]
11
+ spec.homepage = "https://github.com/dscataglini/Metabolical"
12
+ spec.summary = %q{Add arbitrary meta data to any AR object}
13
+ spec.description = %q{This is an ActiveRecord Model & mixin to add meta data to any AR object}
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = '>= 3.2.0'
23
16
 
24
- s.add_dependency('activerecord', '>= 2.1.2')
17
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ end
20
+
21
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
25
24
 
25
+ spec.add_runtime_dependency 'activerecord', '~> 6.0', '>= 6.0.0'
26
+ spec.add_development_dependency "bundler", "~> 2.1"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+
30
+
31
+ if spec.respond_to?(:metadata)
32
+ spec.metadata["homepage_uri"] = spec.homepage
33
+ spec.metadata["source_code_uri"] = spec.homepage
34
+ else
35
+ raise "RubyGems 2.0 or newer is required to protect against " \
36
+ "public gem pushes."
37
+ end
26
38
  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 'test/unit'
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"
@@ -1,52 +1,52 @@
1
1
  require 'helper'
2
2
  require 'models/user'
3
3
 
4
- class MetabolicalTest < Test::Unit::TestCase
5
- context "an ActiveRecord Object" do
4
+ describe Metabolical do
5
+ describe "an ActiveRecord Object" do
6
6
 
7
- context "new record" do
8
- setup do
7
+ describe "new record" do
8
+ before do
9
9
  @user = User.new
10
10
  end
11
11
 
12
- teardown do
12
+ after do
13
13
  @user.destroy
14
14
  end
15
15
 
16
- should "be able to assign a single meta before saving and retrieving it after save" do
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 "be able to assign a single meta before saving and retrieving it before save" do
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
- context "saved record" do
29
- setup do
28
+ describe "saved record" do
29
+ before do
30
30
  @user = User.new
31
31
  @user.save
32
32
  end
33
33
 
34
- teardown do
34
+ after do
35
35
  @user.destroy
36
36
  end
37
37
 
38
- should "be able to assign a single meta before re saving and retrieving it after save" do
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 "be able to assign a single meta before re saving and retrieving it before save" do
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 "be able to retrieve after saving" do
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
- context "named scopes" do
59
- setup do
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
- teardown do
67
+ after do
68
68
  User.delete_all
69
69
  end
70
70
 
71
- should "have with_meta scopes" do
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 "have with_meta scopes that check for data" do
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 "have with_metas scope that includes all metas" do
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 "bring back objects without a certain meta" do
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,53 +1,92 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: metabolical
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 4
10
- version: 0.0.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.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
- date: 2012-05-30 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2024-10-02 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: '6.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 6.0.0
21
23
  type: :runtime
22
24
  prerelease: false
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '6.0'
26
30
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 2
31
- - 1
32
- - 2
33
- version: 2.1.2
34
- requirement: *id001
35
- name: activerecord
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.1'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '10.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
36
75
  description: This is an ActiveRecord Model & mixin to add meta data to any AR object
37
- email:
38
- - diego@junivi.com
39
- executables: []
40
-
76
+ email:
77
+ - dwebsubmit@gmail.com
78
+ executables:
79
+ - console
80
+ - setup
41
81
  extensions: []
42
-
43
82
  extra_rdoc_files: []
44
-
45
- files:
46
- - .gitignore
47
- - .rvmrc
83
+ files:
84
+ - ".gitignore"
48
85
  - Gemfile
49
86
  - README.rdoc
50
87
  - Rakefile
88
+ - bin/console
89
+ - bin/setup
51
90
  - lib/metabolical.rb
52
91
  - lib/metabolical/meta_datum.rb
53
92
  - lib/metabolical/scopes.rb
@@ -57,42 +96,32 @@ files:
57
96
  - test/metabolical_test.rb
58
97
  - test/models/user.rb
59
98
  - test/schema/schema.rb
60
- homepage: ""
61
- licenses: []
62
-
63
- post_install_message:
99
+ homepage: https://github.com/dscataglini/Metabolical
100
+ licenses:
101
+ - MIT
102
+ metadata:
103
+ homepage_uri: https://github.com/dscataglini/Metabolical
104
+ source_code_uri: https://github.com/dscataglini/Metabolical
105
+ post_install_message:
64
106
  rdoc_options: []
65
-
66
- require_paths:
107
+ require_paths:
67
108
  - lib
68
- required_ruby_version: !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
71
111
  - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 57
74
- segments:
75
- - 1
76
- - 8
77
- - 7
78
- version: 1.8.7
79
- required_rubygems_version: !ruby/object:Gem::Requirement
80
- none: false
81
- requirements:
112
+ - !ruby/object:Gem::Version
113
+ version: 3.2.0
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
82
116
  - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
88
119
  requirements: []
89
-
90
- rubyforge_project: metabolical
91
- rubygems_version: 1.8.15
92
- signing_key:
93
- specification_version: 3
94
- summary: This is an ActiveRecord Model & mixin to add meta data to any AR object
95
- test_files:
120
+ rubygems_version: 3.4.19
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Add arbitrary meta data to any AR object
124
+ test_files:
96
125
  - test/helper.rb
97
126
  - test/metabolical_test.rb
98
127
  - test/models/user.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.8.7