active_type 1.1.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5dd2986e6945783f4c52776074f66d614ecbbcef28f5eb1471ebf450dd68c8d2
4
- data.tar.gz: 763be8835f5184df763527d0b10b8af06edf12168a8d76ebc67951680e097cb7
3
+ metadata.gz: a986a7b0197d897f5ec654e3a4603de99bf814ccbad1da7541131410bf87b0a9
4
+ data.tar.gz: 778020b99e23a1ffe944e3e330c0f93b87ac23d45b71df6a4522503a9856e22d
5
5
  SHA512:
6
- metadata.gz: 301557809bffecdb33705cb01d68a1da237d6d0d30e726239e8c2af57c59eeb81c8c3287796f49c76abe0c4a65ab4196d4d23374224c0796ae207355f58e6019
7
- data.tar.gz: bebb85d3edc8733b3816ee82925659a804836eaddc20d100c171a1eeb034134e3159de414d62fadc406d243c13b4ed4116b74127e777bf9da1d9872af7c3ea2b
6
+ metadata.gz: 5cb4c6c1748fb677fc2957921168dfb8ad2d42ce62e8e74db3760a17baf4141e89f8b7cd1973efca740bcad84a2b37df7cd52798aafbd07f61fc209a9724bc94
7
+ data.tar.gz: 861a88ad0631e0326af3c484408eac2b674f7ba4bfa1cc8c0e210be964bfa76d8d432cb7f6fd9b1536e2146ef1c6775cfedf457a7eebf020ccf1f381d706f67e
@@ -1,8 +1,12 @@
1
1
  language: ruby
2
+ dist: trusty
3
+ services:
4
+ - postgresql
2
5
  rvm:
3
6
  - "2.3.8"
4
- - "2.4.5"
5
- - "2.5.3"
7
+ - "2.4.6"
8
+ - "2.5.5"
9
+ - "2.6.3"
6
10
  gemfile:
7
11
  - Gemfile.3.2.mysql2
8
12
  - Gemfile.3.2.sqlite3
@@ -19,30 +23,50 @@ before_script:
19
23
  script: bundle exec rake spec
20
24
  sudo: false
21
25
  cache: bundler
22
- notifications:
23
- email:
24
- - fail@makandra.de
25
26
  matrix:
26
27
  exclude:
27
- - rvm: "2.4.5"
28
+ - rvm: "2.3.8"
29
+ gemfile: Gemfile.6.0.pg
30
+ - rvm: "2.4.6"
28
31
  gemfile: Gemfile.3.2.mysql2
29
- - rvm: "2.4.5"
32
+ - rvm: "2.4.6"
30
33
  gemfile: Gemfile.3.2.sqlite3
31
- - rvm: "2.5.3"
34
+ - rvm: "2.4.6"
35
+ gemfile: Gemfile.4.2.mysql2
36
+ - rvm: "2.4.6"
37
+ gemfile: Gemfile.4.2.pg
38
+ - rvm: "2.4.6"
39
+ gemfile: Gemfile.5.2.mysql2
40
+ - rvm: "2.4.6"
41
+ gemfile: Gemfile.5.2.pg
42
+ - rvm: "2.4.6"
43
+ gemfile: Gemfile.6.0.pg
44
+ - rvm: "2.5.5"
32
45
  gemfile: Gemfile.3.2.mysql2
33
- - rvm: "2.5.3"
46
+ - rvm: "2.5.5"
34
47
  gemfile: Gemfile.3.2.sqlite3
35
- - rvm: "2.5.3"
48
+ - rvm: "2.5.5"
36
49
  gemfile: Gemfile.4.2.mysql2
37
- - rvm: "2.5.3"
50
+ - rvm: "2.5.5"
38
51
  gemfile: Gemfile.4.2.pg
39
- - rvm: "2.5.3"
52
+ - rvm: "2.5.5"
53
+ gemfile: Gemfile.4.2.sqlite3
54
+ - rvm: "2.5.5"
55
+ gemfile: Gemfile.5.2.mysql2
56
+ - rvm: "2.5.5"
57
+ gemfile: Gemfile.5.2.pg
58
+ - rvm: "2.6.3"
59
+ gemfile: Gemfile.3.2.mysql2
60
+ - rvm: "2.6.3"
61
+ gemfile: Gemfile.3.2.sqlite3
62
+ - rvm: "2.6.3"
63
+ gemfile: Gemfile.4.2.mysql2
64
+ - rvm: "2.6.3"
65
+ gemfile: Gemfile.4.2.pg
66
+ - rvm: "2.6.3"
40
67
  gemfile: Gemfile.4.2.sqlite3
41
- - rvm: "2.3.8"
42
- gemfile: Gemfile.6.0.pg
43
- - rvm: "2.4.5"
44
- gemfile: Gemfile.6.0.pg
45
68
  install:
69
+ - gem install bundler:2.0.2
46
70
  - bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
47
71
  addons:
48
72
  postgresql: 9.3
@@ -2,6 +2,62 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## Unreleased changes
6
+
7
+ ## 1.3.2 (2020-06-16)
8
+
9
+ * Fixed: `nests_one` association record building used empty hash instead of passed in attributes. Credit to @chriscz.
10
+
11
+ ## 1.3.1 (2020-03-31)
12
+
13
+ * Fixed: Avoid #change_association breaking for polymorphic associations. Thanks to @lucthev.
14
+
15
+
16
+ ## 1.3.0 (2019-09-26)
17
+
18
+ * Fixed: Do not override Rails internal methods when definining an attribute called `:attribute`.
19
+ * Fixed: Fix .find for extended records, when a record had a `#type` column that was not used for
20
+ single table inheritance. Thanks to @fsateler.
21
+ * Changed: When extending a single table inheritance base class, `.find` no longer crashes, but
22
+ returns records derived from the extended class.
23
+
24
+ This means, that given the following class hierarchy:
25
+
26
+ ```ruby
27
+ class Parent < ActiveRecord::Base
28
+ end
29
+
30
+ class ExtendedParent < ActiveType::Record[Parent]
31
+ end
32
+
33
+ class Child < Parent
34
+ end
35
+ ```
36
+
37
+ querying
38
+
39
+ ```
40
+ ExtendedParent.all
41
+ ```
42
+
43
+ will no longer crash, but always return records of type `ExtendedParent` (*even if they
44
+ would normally of type `Child`*). You should probably avoid this weird situation and not
45
+ extend STI Parent classes.
46
+
47
+ Thanks to @fsateler.
48
+
49
+
50
+ ## 1.2.1 (2019-07-03)
51
+ * Fixed: Eager loading in Rails 6 no longer crashes trying to load `ActiveType::Object`s.
52
+ Thanks to @teamhqapp for the fix.
53
+
54
+
55
+ ## 1.2.0 (2019-06-18)
56
+
57
+ * Fixed: Using `has_many` et al in an extended record ignored given scopes.
58
+ * Added: `change_association` on ActiveType::Record to change assocation options.
59
+
60
+
5
61
  ## 1.1.1 (2019-05-07)
6
62
 
7
63
  * Improved dirty tracking (`#changes?` etc) for virtual attributes to bring it more in line with
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -54,4 +54,4 @@ DEPENDENCIES
54
54
  rspec (~> 3.4)
55
55
 
56
56
  BUNDLED WITH
57
- 1.16.6
57
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -54,4 +54,4 @@ DEPENDENCIES
54
54
  sqlite3
55
55
 
56
56
  BUNDLED WITH
57
- 1.16.6
57
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -58,4 +58,4 @@ DEPENDENCIES
58
58
  rspec (~> 3.4)
59
59
 
60
60
  BUNDLED WITH
61
- 1.16.6
61
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -58,4 +58,4 @@ DEPENDENCIES
58
58
  rspec (~> 3.4)
59
59
 
60
60
  BUNDLED WITH
61
- 1.16.6
61
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -58,4 +58,4 @@ DEPENDENCIES
58
58
  sqlite3
59
59
 
60
60
  BUNDLED WITH
61
- 1.16.6
61
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -56,4 +56,4 @@ DEPENDENCIES
56
56
  rspec (~> 3.4)
57
57
 
58
58
  BUNDLED WITH
59
- 1.16.6
59
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -56,4 +56,4 @@ DEPENDENCIES
56
56
  rspec (~> 3.4)
57
57
 
58
58
  BUNDLED WITH
59
- 1.16.6
59
+ 2.0.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -56,4 +56,4 @@ DEPENDENCIES
56
56
  sqlite3
57
57
 
58
58
  BUNDLED WITH
59
- 1.16.6
59
+ 2.0.2
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'activerecord', '~>6.0.0beta'
3
+ gem 'activerecord', '~>6.0.0'
4
4
  gem 'rspec', '~>3.4'
5
5
  gem 'pg'
6
6
  gem 'rake'
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.3.2)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (6.0.0.beta3)
11
- activesupport (= 6.0.0.beta3)
12
- activerecord (6.0.0.beta3)
13
- activemodel (= 6.0.0.beta3)
14
- activesupport (= 6.0.0.beta3)
15
- activesupport (6.0.0.beta3)
10
+ activemodel (6.0.0)
11
+ activesupport (= 6.0.0)
12
+ activerecord (6.0.0)
13
+ activemodel (= 6.0.0)
14
+ activesupport (= 6.0.0)
15
+ activesupport (6.0.0)
16
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
17
  i18n (>= 0.7, < 2)
18
18
  minitest (~> 5.1)
19
19
  tzinfo (~> 1.1)
20
- zeitwerk (~> 1.3, >= 1.3.1)
20
+ zeitwerk (~> 2.1, >= 2.1.8)
21
21
  concurrent-ruby (1.1.5)
22
22
  diff-lcs (1.3)
23
23
  gemika (0.3.4)
@@ -42,18 +42,18 @@ GEM
42
42
  thread_safe (0.3.6)
43
43
  tzinfo (1.2.5)
44
44
  thread_safe (~> 0.1)
45
- zeitwerk (1.4.3)
45
+ zeitwerk (2.1.9)
46
46
 
47
47
  PLATFORMS
48
48
  ruby
49
49
 
50
50
  DEPENDENCIES
51
51
  active_type!
52
- activerecord (~> 6.0.0beta)
52
+ activerecord (~> 6.0.0)
53
53
  gemika
54
54
  pg
55
55
  rake
56
56
  rspec (~> 3.4)
57
57
 
58
58
  BUNDLED WITH
59
- 1.16.6
59
+ 2.0.2
data/README.md CHANGED
@@ -363,6 +363,31 @@ sign_up.is_a?(SignUp) # => true
363
363
  ```
364
364
 
365
365
 
366
+ Associations
367
+ ------------
368
+
369
+ Sometimes, you have an association, and a form model for that association. Instead of always casting the associations manually, you can use the `change_association` macro to override an association's options. For example.
370
+
371
+
372
+ ```
373
+ class Credential < ActiveRecord::Base
374
+ end
375
+
376
+ class User < ActiveRecord::Base
377
+ has_many :credentials
378
+ end
379
+
380
+ class SignUpCredential < ActiveType::Record[Credential]
381
+ end
382
+
383
+ class SignUp < ActiveType::Record[User]
384
+ change_association :credentials, class_name: 'SignUpCredential'
385
+ end
386
+ ```
387
+
388
+ Now, if you load `credentials`, you will automatically receive records of type `SignUpCredential`.
389
+
390
+
366
391
  Supported Rails versions
367
392
  ------------------------
368
393
 
@@ -389,13 +414,11 @@ Now run `bundle install` and restart your server.
389
414
  Development
390
415
  -----------
391
416
 
392
- - We run tests against several ActiveRecord versions.
393
- - You can bundle all versions with `rake all:install`.
394
- - You can run specs against all versions with `rake all:spec`.
395
- - You can run specs against a single version with `VERSION=4.2.1.pg rake` or `VERSION="4.2.1.*" rake`.
396
-
397
- If you are getting testing failures due to Mysql trying to connect as `root` user, you can put your Mysql credentials into `spec/support/database.yml`.
398
- See `spec/support/database.sample.yml` for an example.
417
+ - We run tests against several ActiveRecord and Ruby versions using [gemika](https://github.com/makandra/gemika).
418
+ - You can bundle all versions with `rake matrix:install`.
419
+ - You can run specs against all Gemfiles compatible with your current ruby version with `rake matrix:spec`.
420
+ - You can run specs against a single Gemfile with `BUNDLE_GEMFILE=Gemfile<variant> bundle exec rspec spec`.
421
+ - When you make a pull request, tests are automatically run against all variants and Rubies on travis.ci.
399
422
 
400
423
  If you would like to contribute:
401
424
 
@@ -0,0 +1,31 @@
1
+ module ActiveType
2
+
3
+ module ChangeAssociation
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ def change_association(association_name, new_scope, new_options = nil)
10
+ if (existing_association = self.reflect_on_association(association_name))
11
+ if new_scope.is_a?(Hash)
12
+ new_options = new_scope
13
+ new_scope = nil
14
+ end
15
+ original_options = existing_association.options
16
+ if ActiveRecord::VERSION::MAJOR > 3
17
+ new_scope ||= existing_association.scope
18
+ public_send(existing_association.macro, association_name, new_scope, original_options.merge(new_options))
19
+ else
20
+ public_send(existing_association.macro, association_name, original_options.merge(new_options))
21
+ end
22
+ else
23
+ raise ArgumentError, "unrecognized association `#{association_name}`"
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -30,8 +30,11 @@ module ActiveType
30
30
  end
31
31
  end
32
32
  elsif !destroy
33
- assigned_child ||= add_child(parent, build_child(parent, {}))
34
- assigned_child.attributes = attributes
33
+ if assigned_child
34
+ assigned_child.attributes = attributes
35
+ else
36
+ add_child(parent, build_child(parent, attributes))
37
+ end
35
38
  end
36
39
  end
37
40
 
@@ -101,6 +101,10 @@ module ActiveType
101
101
  def columns_hash(table_name)
102
102
  {}
103
103
  end
104
+
105
+ def columns_hash?(table_name)
106
+ return false
107
+ end
104
108
 
105
109
  def data_source_exists?(table_name)
106
110
  false
@@ -1,6 +1,7 @@
1
1
  require 'active_type/virtual_attributes'
2
- require 'active_type/extended_record'
2
+ require 'active_type/record_extension'
3
3
  require 'active_type/nested_attributes'
4
+ require 'active_type/change_association'
4
5
 
5
6
  module ActiveType
6
7
 
@@ -10,7 +11,8 @@ module ActiveType
10
11
 
11
12
  include VirtualAttributes
12
13
  include NestedAttributes
13
- include ExtendedRecord
14
+ include RecordExtension
15
+ include ChangeAssociation
14
16
 
15
17
  end
16
18
 
@@ -1,9 +1,8 @@
1
- require 'active_type/virtual_attributes'
2
- require 'active_type/extended_record/inheritance'
1
+ require 'active_type/record_extension/inheritance'
3
2
 
4
3
  module ActiveType
5
4
 
6
- module ExtendedRecord
5
+ module RecordExtension
7
6
 
8
7
  extend ActiveSupport::Concern
9
8
 
@@ -15,6 +14,7 @@ module ActiveType
15
14
  include VirtualAttributes
16
15
  include NestedAttributes
17
16
  include Inheritance
17
+ include ChangeAssociation
18
18
 
19
19
  self.extended_record_base_class = base
20
20
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveType
2
2
 
3
- module ExtendedRecord
3
+ module RecordExtension
4
4
 
5
5
  module Inheritance
6
6
 
@@ -15,10 +15,14 @@ module ActiveType
15
15
  options = scope
16
16
  scope = nil
17
17
  end
18
- unless options[:foreign_key]
18
+ unless options[:foreign_key] || options[:as]
19
19
  options = options.merge(foreign_key: extended_record_base_class.name.foreign_key)
20
20
  end
21
- options
21
+ if ActiveRecord::VERSION::MAJOR > 3
22
+ [scope, options]
23
+ else
24
+ [options]
25
+ end
22
26
  end
23
27
 
24
28
  module ClassMethods
@@ -31,12 +35,16 @@ module ActiveType
31
35
  extended_record_base_class.sti_name
32
36
  end
33
37
 
38
+ def descends_from_active_record?
39
+ extended_record_base_class.descends_from_active_record?
40
+ end
41
+
34
42
  def has_many(name, *args, &extension)
35
- super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
43
+ super(name, *Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
36
44
  end
37
45
 
38
46
  def has_one(name, *args, &extension)
39
- super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
47
+ super(name, *Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
40
48
  end
41
49
 
42
50
  private
@@ -45,7 +53,23 @@ module ActiveType
45
53
 
46
54
  def find_sti_class(type_name)
47
55
  sti_class = super
48
- if self <= sti_class
56
+
57
+ # Consider this class hierarchy
58
+ # class Parent < ActiveRecord::Base; end
59
+ # class Child < Parent; end
60
+ # class ExtendedParent < ActiveType::Record[Parent]; end
61
+ # class ExtendedChild < ActiveType::Record[Child]; end
62
+ if self < sti_class
63
+ # i.e. ExtendendChild.find(child.id)
64
+ # => self = ExtendedChild; sti_class = Child
65
+ # instantiate as ExtendedChild
66
+ self
67
+ elsif sti_class < extended_record_base_class
68
+ # i.e. ExtendedParent.find(child.id)
69
+ # => sti_class = Child; self = ExtendedParent; extended_record_base_class = Parent
70
+ # There is no really good solution here, since we cannot instantiate as both ExtendedParent
71
+ # and Child. We opt to instantiate as ExtendedParent, since the other option can be
72
+ # achieved by using Parent.find(child.id)
49
73
  self
50
74
  else
51
75
  sti_class
@@ -73,7 +97,22 @@ module ActiveType
73
97
  "or overwrite #{name}.inheritance_column to use another column for that information."
74
98
  end
75
99
  #### our code starts here
76
- if self <= subclass
100
+ # Consider this class hierarchy
101
+ # class Parent < ActiveRecord::Base; end
102
+ # class Child < Parent; end
103
+ # class ExtendedParent < ActiveType::Record[Parent]; end
104
+ # class ExtendedChild < ActiveType::Record[Child]; end
105
+ if self < subclass
106
+ # i.e. ExtendendChild.find(child.id)
107
+ # => self = ExtendedChild; subclass = Child
108
+ # instantiate as ExtendedChild
109
+ subclass = self
110
+ elsif subclass < extended_record_base_class
111
+ # i.e. ExtendedParent.find(child.id)
112
+ # => subclass = Child; self = ExtendedParent; extended_record_base_class = Parent
113
+ # There is no really good solution here, since we cannot instantiate as both ExtendedParent
114
+ # and Child. We opt to instantiate as ExtendedParent, since the other option can be
115
+ # achieved by using Parent.find(child.id)
77
116
  subclass = self
78
117
  end
79
118
  #### our code ends here
@@ -1,3 +1,3 @@
1
1
  module ActiveType
2
- VERSION = '1.1.1'
2
+ VERSION = '1.3.2'
3
3
  end
@@ -73,6 +73,8 @@ module ActiveType
73
73
 
74
74
  # Methods for compatibility with gems expecting the ActiveModel::Dirty API.
75
75
  def build_dirty_tracking_methods(name)
76
+ return if name.to_s == 'attribute' # clashes with internal methods
77
+
76
78
  @module.module_eval <<-BODY, __FILE__, __LINE__ + 1
77
79
  def #{name}_was
78
80
  virtual_attributes_were["#{name}"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Kraze
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-05-07 00:00:00.000000000 Z
12
+ date: 2020-06-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -89,8 +89,7 @@ files:
89
89
  - Rakefile
90
90
  - active_type.gemspec
91
91
  - lib/active_type.rb
92
- - lib/active_type/extended_record.rb
93
- - lib/active_type/extended_record/inheritance.rb
92
+ - lib/active_type/change_association.rb
94
93
  - lib/active_type/nested_attributes.rb
95
94
  - lib/active_type/nested_attributes/association.rb
96
95
  - lib/active_type/nested_attributes/builder.rb
@@ -99,6 +98,8 @@ files:
99
98
  - lib/active_type/no_table.rb
100
99
  - lib/active_type/object.rb
101
100
  - lib/active_type/record.rb
101
+ - lib/active_type/record_extension.rb
102
+ - lib/active_type/record_extension/inheritance.rb
102
103
  - lib/active_type/type_caster.rb
103
104
  - lib/active_type/util.rb
104
105
  - lib/active_type/version.rb
@@ -122,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
123
  - !ruby/object:Gem::Version
123
124
  version: '0'
124
125
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.7.7
126
+ rubygems_version: 3.1.4
127
127
  signing_key:
128
128
  specification_version: 4
129
129
  summary: Make any Ruby object quack like ActiveRecord