polymorphic_integer_type 3.1.1 → 3.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb3b9a7f294ca84e3f4090aeb66dbd11046cb721e58b51b762d3fac2a77f90e3
4
- data.tar.gz: 4b9ed1f6e1c36d98a573932bd747780aae00032e238ab8cf7385d6d12d6fb0a3
3
+ metadata.gz: eeec5115208f7fee02b00a10f05e660a46550b2c0815999133a1fe541950c1dc
4
+ data.tar.gz: 8268bfe5dd15c0cb9f3c6cc240989ad89cc112dff8ac9723ed64e6de8e7ddc61
5
5
  SHA512:
6
- metadata.gz: 7a7cb4348a7be18c626d9a611a6005b991b6a09c016c0dd3908e10326da0bc8495072dfcf16ce998a55fce3c8f7bfbce34709df9b3882cceb01dbfe2ff274dc1
7
- data.tar.gz: 1ddd7ed8095268053c37092ac0f1c8ebf73fee6111dc51bdda027dd4a2e3c4f23d92402ee60724c04f9d7737b06c8a022712683dc23503adf0f2c35b30090159
6
+ metadata.gz: 801b9bf926c3a23237f0838013d8e425c902292f186f38f65ff41c0e80b94ac5df15152e8d8d108800650439e069c990342f2d6c4fdcfb79b4e4870403bc93f9
7
+ data.tar.gz: c81b0af3ef8593d8f607c12db9ef0b685f91cd7b21b4e85f70289cd30fcfe839427e2eecc43cb2de01295ba454522e15dd04be101cfa001d86061c68403d1432
data/.gitignore CHANGED
@@ -19,3 +19,5 @@ test/version_tmp
19
19
  tmp
20
20
  .byebug_history
21
21
  polymorphic_integer_type_test
22
+ gemfiles/*.lock
23
+ .idea/
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ### Changed
2
+
3
+ ## v3.2.1 (2023-12-14)
4
+
5
+ ### Fixed
6
+
7
+ - Not proper assigning polymorphic value with `has_many` and `has_one` reflection.
8
+
9
+ ### Added
10
+
11
+ - Added .idea/ folder to .gitignore
12
+
13
+ ### Changed
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec path: ".."
6
+
7
+ gem "activerecord", github: "rails/rails", branch: "7-0-stable"
@@ -29,7 +29,7 @@ module PolymorphicIntegerType
29
29
 
30
30
  hash[key] << convert_to_id(value)
31
31
  else
32
- hash[klass.polymorphic_name] << convert_to_id(value)
32
+ hash[klass(value)&.polymorphic_name] << convert_to_id(value)
33
33
  end
34
34
  end
35
35
  end
@@ -2,6 +2,10 @@ module PolymorphicIntegerType
2
2
 
3
3
  module Extensions
4
4
  module ClassMethods
5
+ ActiveRecord::Reflection::HasManyReflection.attr_accessor(:foreign_integer_type)
6
+ ActiveRecord::Reflection::HasManyReflection.attr_accessor(:integer_type)
7
+ ActiveRecord::Reflection::HasOneReflection.attr_accessor(:foreign_integer_type)
8
+ ActiveRecord::Reflection::HasOneReflection.attr_accessor(:integer_type)
5
9
 
6
10
  def belongs_to(name, scope = nil, **options)
7
11
  options = scope if scope.kind_of? Hash
@@ -64,8 +68,10 @@ module PolymorphicIntegerType
64
68
  condition = instance_exec(&scope).merge(condition) if scope.is_a?(Proc)
65
69
  condition
66
70
  }
71
+ return foreign_type, klass_mapping.to_i
67
72
  else
68
73
  options[:scope] ||= scope
74
+ return nil, nil
69
75
  end
70
76
  end
71
77
 
@@ -86,8 +92,10 @@ module PolymorphicIntegerType
86
92
  scope = nil
87
93
  end
88
94
 
89
- remove_type_and_establish_mapping(name, options, scope)
90
- super(name, options.delete(:scope), options, &extension)
95
+ integer_type_values = remove_type_and_establish_mapping(name, options, scope)
96
+ super(name, options.delete(:scope), **options, &extension).tap do
97
+ remove_integer_type_and_set_attributes_and_extension(integer_type_values, reflections[name.to_s])
98
+ end
91
99
  end
92
100
 
93
101
  def has_one(name, scope = nil, **options)
@@ -96,8 +104,27 @@ module PolymorphicIntegerType
96
104
  scope = nil
97
105
  end
98
106
 
99
- remove_type_and_establish_mapping(name, options, scope)
100
- super(name, options.delete(:scope), options)
107
+ integer_type_values = remove_type_and_establish_mapping(name, options, scope)
108
+ super(name, options.delete(:scope), **options).tap do
109
+ remove_integer_type_and_set_attributes_and_extension(integer_type_values, reflections[name.to_s])
110
+ end
111
+ end
112
+
113
+ def remove_integer_type_and_set_attributes_and_extension(integer_type_values, reflection)
114
+ foreign_integer_type = integer_type_values[0]
115
+ integer_type = integer_type_values[1]
116
+ is_polymorphic_integer = foreign_integer_type && integer_type
117
+
118
+ if is_polymorphic_integer
119
+ reflection.foreign_integer_type = foreign_integer_type
120
+ reflection.integer_type = integer_type
121
+
122
+ if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("6.1")
123
+ ActiveRecord::Associations::Association.prepend(PolymorphicIntegerType::PolymorphicForeignAssociationExtension)
124
+ else
125
+ ActiveRecord::Associations::ForeignAssociation.prepend(PolymorphicIntegerType::PolymorphicForeignAssociationExtension)
126
+ end
127
+ end
101
128
  end
102
129
 
103
130
 
@@ -0,0 +1,11 @@
1
+ module PolymorphicIntegerType
2
+ module PolymorphicForeignAssociationExtension
3
+
4
+ def set_owner_attributes(record)
5
+ super
6
+ if reflection.foreign_integer_type && reflection.integer_type
7
+ record._write_attribute(reflection.foreign_integer_type, reflection.integer_type)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module PolymorphicIntegerType
2
- VERSION = "3.1.1"
2
+ VERSION = "3.2.1"
3
3
  end
@@ -6,6 +6,7 @@ require "polymorphic_integer_type/mapping"
6
6
  require "polymorphic_integer_type/module_generator"
7
7
  require "polymorphic_integer_type/belongs_to_polymorphic_association_extension"
8
8
  require "polymorphic_integer_type/activerecord_5_0_0/polymorphic_array_value_extension"
9
+ require "polymorphic_integer_type/polymorphic_foreign_association_extension"
9
10
 
10
11
  if ACTIVE_RECORD_VERSION < Gem::Version.new("5.2.0")
11
12
  require "polymorphic_integer_type/activerecord_5_0_0/association_query_handler_extension"
@@ -13,12 +13,12 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files`.split($/)
16
+ spec.files = `git ls-files -- . ':!.github/'`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activerecord", "< 7"
21
+ spec.add_dependency "activerecord", "< 7.1"
22
22
  spec.add_development_dependency "bundler"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "rspec"
@@ -26,6 +26,28 @@ describe PolymorphicIntegerType do
26
26
  expect(link.target_type).to eq("Food")
27
27
  end
28
28
 
29
+ context "from HasManyReflection" do
30
+ it "sets the source properly HasManyReflection" do
31
+ link_1 = Link.create()
32
+ link_2 = Link.create()
33
+ dog.source_links = [link_1, link_2]
34
+ expect(link_1.source_type).to eq("Animal")
35
+ expect(link_1.source_id).to eq(dog.id)
36
+ expect(link_2.source_type).to eq("Animal")
37
+ expect(link_1.source_id).to eq(dog.id)
38
+ end
39
+ end
40
+
41
+ context "from HasOneReflection" do
42
+ it "sets the source properly HasOneReflection" do
43
+ link = Link.create()
44
+ dog.source_link = link
45
+
46
+ expect(link.source_type).to eq("Animal")
47
+ expect(link.source_id).to eq(dog.id)
48
+ end
49
+ end
50
+
29
51
  context "when models are namespaced" do
30
52
  context "and mappings include namespaces" do
31
53
  it "sets the source_type" do
@@ -340,6 +362,10 @@ describe PolymorphicIntegerType do
340
362
  expect(link[:target_type]).to eq(13)
341
363
  end
342
364
 
365
+ it "pulls mapping from given hash" do
366
+ animal.source_links.new
367
+ end
368
+
343
369
  it "doesn't break string type polymorphic associations" do
344
370
  expect(link.normal_target).to eq(drink)
345
371
  expect(link.normal_target_type).to eq("InlineDrink2")
@@ -3,5 +3,5 @@ class Animal < ActiveRecord::Base
3
3
 
4
4
  belongs_to :owner, class_name: "Person"
5
5
  has_many :source_links, as: :source, integer_type: true, class_name: "Link"
6
-
6
+ has_one :source_link, as: :source, integer_type: true, class_name: "Link"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorphic_integer_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle d'Oliveira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-04 00:00:00.000000000 Z
11
+ date: 2023-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "<"
18
18
  - !ruby/object:Gem::Version
19
- version: '7'
19
+ version: '7.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "<"
25
25
  - !ruby/object:Gem::Version
26
- version: '7'
26
+ version: '7.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -102,10 +102,8 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
- - ".github/CODEOWNERS"
106
- - ".github/workflows/ci.yml"
107
- - ".github/workflows/gem-push.yml"
108
105
  - ".gitignore"
106
+ - CHANGELOG.md
109
107
  - Gemfile
110
108
  - LICENSE.txt
111
109
  - README.md
@@ -116,6 +114,7 @@ files:
116
114
  - gemfiles/Gemfile.rails-5.2-stable
117
115
  - gemfiles/Gemfile.rails-6.0-stable
118
116
  - gemfiles/Gemfile.rails-6.1-stable
117
+ - gemfiles/Gemfile.rails-7.0-stable
119
118
  - lib/polymorphic_integer_type.rb
120
119
  - lib/polymorphic_integer_type/activerecord_5_0_0/association_query_handler_extension.rb
121
120
  - lib/polymorphic_integer_type/activerecord_5_0_0/polymorphic_array_value_extension.rb
@@ -123,6 +122,7 @@ files:
123
122
  - lib/polymorphic_integer_type/extensions.rb
124
123
  - lib/polymorphic_integer_type/mapping.rb
125
124
  - lib/polymorphic_integer_type/module_generator.rb
125
+ - lib/polymorphic_integer_type/polymorphic_foreign_association_extension.rb
126
126
  - lib/polymorphic_integer_type/version.rb
127
127
  - polymorphic_integer_type.gemspec
128
128
  - spec/polymorphic_integer_type_spec.rb
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
166
  requirements: []
167
- rubygems_version: 3.1.6
167
+ rubygems_version: 3.4.10
168
168
  signing_key:
169
169
  specification_version: 4
170
170
  summary: Use integers rather than strings for the _type field
data/.github/CODEOWNERS DELETED
@@ -1 +0,0 @@
1
- /.github/workflows/ @clio/application-security @clio/penguins
@@ -1,34 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- pull_request:
7
- branches: [master]
8
-
9
- jobs:
10
- test:
11
- runs-on: ubuntu-latest
12
-
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- gemfile:
17
- - Gemfile.rails-5.0-stable
18
- - Gemfile.rails-5.1-stable
19
- - Gemfile.rails-5.2-stable
20
- - Gemfile.rails-6.0-stable
21
- - Gemfile.rails-6.1-stable
22
- env:
23
- BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
24
- steps:
25
- - uses: actions/checkout@v2
26
- - name: Set up Ruby
27
- uses: ruby/setup-ruby@v1
28
- with:
29
- ruby-version: "2.6"
30
- - name: Install dependencies
31
- run: bundle install
32
- - name: Run tests
33
- run:
34
- bundle exec rspec
@@ -1,30 +0,0 @@
1
- name: Ruby Gem
2
-
3
- on:
4
- release:
5
- types: [ published ]
6
-
7
- jobs:
8
- build:
9
- name: Build + Publish
10
- runs-on: ubuntu-latest
11
- permissions:
12
- contents: read
13
-
14
- steps:
15
- - uses: actions/checkout@v2
16
- - name: Set up Ruby 2.7
17
- uses: actions/setup-ruby@v1
18
- with:
19
- ruby-version: 2.7.x
20
-
21
- - name: Publish to RubyGems
22
- env:
23
- GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
24
- run: |
25
- mkdir -p $HOME/.gem
26
- touch $HOME/.gem/credentials
27
- chmod 0600 $HOME/.gem/credentials
28
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
29
- gem build *.gemspec
30
- gem push *.gem