uuid_attribute 0.9.10 → 0.9.12

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: 4391aedd96215a7827897d233a988b61f8902abd5386ec56d9c242acf1541593
4
- data.tar.gz: 9d62caede1fd48735913e6dfcdfe7bb4cbd36ef151ec4eb416c74f1cc6233b1b
3
+ metadata.gz: 1685c722a23743951d2632a893fd5829db06e9f1d2fdecc324e84c3eb5f31a9c
4
+ data.tar.gz: b2ddf6083cf44a1c011845d08065fad900b6ad993677e98e75fcb18c894e48fa
5
5
  SHA512:
6
- metadata.gz: 9adf89495017230161cb481948f8096eb39f2e899c3b341ce6f6c81ff840e0ecdfb9358528ea8dc2cfcf2ae1e5941eb23c9bfe993270f02401e27790b73f605e
7
- data.tar.gz: 3dba3afd0604bbb60eb6ceaf62fd0e0f547e5f966edf6be788b7da687a4657ead791afbb2bf9da64262ed8d1c5471b7c5af0b6a3b85c29e10ac870e0dcbefbe8
6
+ metadata.gz: addce17ecc827d604fbf2eafe349f1e4ddab3528a2405bc08b8ed028c744a585633ed67daa374c1c8917c28b13619961e38ce125d0aa688e673ede674e11e5b5
7
+ data.tar.gz: 2987018970032d0709a07c2bb791ff65deb90406672e5caa12233299f9b09b8c8a215cc38207f6da5469cd545152fd8ba29d746b0925cc7b66a6a1d386ded358
@@ -1,6 +1,99 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rails/railtie"
4
+ require "active_record/associations/association_scope"
5
+ require "active_record/fixture_set/table_row"
6
+
7
+ module ActiveRecord
8
+ module Associations
9
+ class AssociationScope # :nodoc:
10
+ def last_chain_scope(scope, reflection, owner)
11
+ primary_key = reflection.join_primary_key
12
+ foreign_key = reflection.join_foreign_key
13
+
14
+ table = reflection.aliased_table
15
+
16
+ prevalue = owner[foreign_key]
17
+ if owner.class.attribute_types[foreign_key].class.name == "UuidAttribute::Type"
18
+ prevalue = UuidAttribute::Utils.raw_bytes(UuidAttribute::Utils.normalize(UuidAttribute::Utils.parse(prevalue)))
19
+ end
20
+
21
+ value = transform_value(prevalue)
22
+ scope = apply_scope(scope, table, primary_key, value)
23
+
24
+ if reflection.type
25
+ polymorphic_type = transform_value(owner.class.polymorphic_name)
26
+ scope = apply_scope(scope, table, reflection.type, polymorphic_type)
27
+ end
28
+
29
+ scope
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ module ActiveStorage
36
+ class FixtureSet
37
+ def self.blob(filename:, **attributes)
38
+ generated_uuid = Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, filename)
39
+ raw_uuid = UuidAttribute::Utils.raw_bytes(
40
+ UuidAttribute::Utils.normalize(UuidAttribute::Utils.parse(generated_uuid))
41
+ )
42
+ new.prepare Blob.new(filename: filename, id: raw_uuid, key: generated_uuid), **attributes
43
+ end
44
+ end
45
+ end
46
+
47
+ module ActiveRecord
48
+ class FixtureSet
49
+ class << self
50
+ def identify(label, column_type = :integer)
51
+ if column_type == :uuid
52
+ generated_uuid = Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, label.to_s)
53
+ UuidAttribute::Utils.raw_bytes(UuidAttribute::Utils.normalize(UuidAttribute::Utils.parse(generated_uuid)))
54
+ else
55
+ Zlib.crc32(label.to_s) % MAX_ID
56
+ end
57
+ end
58
+ end
59
+
60
+ class TableRow
61
+ private
62
+
63
+ alias org_fill_row_model_attributes fill_row_model_attributes
64
+ def fill_row_model_attributes
65
+ org_fill_row_model_attributes
66
+ return unless model_class
67
+
68
+ resolve_string_uuids
69
+ end
70
+
71
+ def resolve_string_uuids
72
+ @row.each do |key, value|
73
+ next if model_class.to_s.include?("ActiveStorage") && key == "record_id"
74
+
75
+ transform_uuid(key, value)
76
+ end
77
+ end
78
+
79
+ def transform_uuid(key, value)
80
+ if test_uuid36?(key, value)
81
+ @row[key] = [value&.gsub("-", "")&.upcase].pack("H*")
82
+ elsif test_uuid22?(key, value)
83
+ @row[key] = [UuidAttribute::Utils.unshort(value)&.gsub("-", "")&.upcase].pack("H*")
84
+ end
85
+ end
86
+
87
+ def test_uuid36?(key, value)
88
+ (key == "id" || key.ends_with?("_id")) && value.instance_of?(String) && value.length == 36
89
+ end
90
+
91
+ def test_uuid22?(key, value)
92
+ (key == "id" || key.ends_with?("_id")) && value.instance_of?(String) && value.length == 22
93
+ end
94
+ end
95
+ end
96
+ end
4
97
 
5
98
  module UuidAttribute
6
99
  # Rails Initializer
@@ -26,7 +119,7 @@ module UuidAttribute
26
119
  def list_models
27
120
  models = []
28
121
  Dir["#{Rails.root}/app/models/*"].each do |file|
29
- model = File.basename(file, ".*").classify
122
+ model = File.basename(file, ".*").camelcase
30
123
  models << model unless models.include?(model)
31
124
  end
32
125
 
@@ -39,7 +132,10 @@ module UuidAttribute
39
132
  rescue
40
133
  end
41
134
 
42
- models.each(&:constantize)
135
+ models.each do |m|
136
+ Object.const_get(m)
137
+ rescue NameError
138
+ end
43
139
  all_active_record_classes
44
140
  end
45
141
 
@@ -54,7 +150,7 @@ module UuidAttribute
54
150
 
55
151
  default = nil
56
152
  default = -> { SecureRandom.uuid } if att.eql? "id"
57
- model.attribute att, ::UuidAttribute::UUID.new, default: default
153
+ model.attribute att, ::UuidAttribute::Type.new, default: default
58
154
  end
59
155
  end
60
156
  rescue ActiveRecord::NoDatabaseError
@@ -0,0 +1,43 @@
1
+
2
+ module UuidAttribute
3
+ # UUID Attribute
4
+ class Type < ActiveModel::Type::Binary
5
+ def type
6
+ :uuid
7
+ end
8
+
9
+ def serialize(value)
10
+ #puts "SERIALIZE"
11
+ return if value.blank?
12
+ return value if value.is_a?(ActiveRecord::Type::Binary::Data)
13
+
14
+ binary_data = value
15
+ binary_data = Utils.raw_bytes(Utils.normalize(Utils.parse(value))) if value.is_a?(String)
16
+ # binary_data = value.raw if value.is_a?(UUID)
17
+
18
+ ActiveRecord::Type::Binary::Data.new(
19
+ binary_data
20
+ )
21
+ end
22
+
23
+ def deserialize(value)
24
+ # puts "DESERIALIZE"
25
+ return nil if value.nil?
26
+ value = value.to_s if value.is_a?(ActiveModel::Type::Binary::Data)
27
+
28
+ # return UUID.new(Utils.normalize(Utils.parse(value)))
29
+ return Utils.shorten(Utils.normalize(Utils.parse(value)))
30
+ # ActiveRecord::Type::Binary::Data.new(Utils.raw_bytes(Utils.normalize(Utils.parse(value))))
31
+ end
32
+
33
+ def cast(value)
34
+ # puts "CAST"
35
+ return nil if value.nil?
36
+ # return value if value.is_a?(UUID)
37
+
38
+ value = value.to_s if value.is_a?(ActiveModel::Type::Binary::Data)
39
+ return Utils.shorten(Utils.normalize(Utils.parse(value)))
40
+ # super
41
+ end
42
+ end
43
+ end
@@ -17,6 +17,7 @@ module UuidAttribute
17
17
  end
18
18
 
19
19
  def parse(str)
20
+ return format_uuid(str.hex) if str.is_a?(UUID)
20
21
  return nil if str.length.zero?
21
22
  return str if str.length == 36
22
23
 
@@ -1,28 +1,22 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module UuidAttribute
4
3
  # UUID Attribute
5
- class UUID < ActiveModel::Type::Binary
6
- def type
7
- :uuid
4
+ class UUID
5
+ def initialize(value)
6
+ @hex = Utils.normalize(Utils.parse(value))
7
+ @shorten = Utils.shorten(@hex)
8
8
  end
9
9
 
10
- def serialize(value)
11
- return if value.blank?
12
-
13
- ActiveRecord::Type::Binary::Data.new(
14
- Utils.raw_bytes(Utils.normalize(Utils.parse(value)))
15
- )
10
+ def to_s
11
+ @shorten
16
12
  end
17
13
 
18
- def deserialize(value)
19
- return nil if value.nil?
20
-
21
- Utils.shorten(Utils.parse(value.to_s))
14
+ def hex
15
+ @hex
22
16
  end
23
17
 
24
- def cast(value)
25
- deserialize(value)
18
+ def raw
19
+ UuidAttribute::Utils.raw_bytes(@hex)
26
20
  end
27
21
  end
28
22
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UuidAttribute
4
- VERSION = "0.9.10"
4
+ VERSION = "0.9.12"
5
5
  end
@@ -4,6 +4,7 @@ require "active_model"
4
4
  require "active_model/type"
5
5
  require "rails"
6
6
  require_relative "uuid_attribute/version"
7
+ require_relative "uuid_attribute/type"
7
8
  require_relative "uuid_attribute/uuid"
8
9
  require_relative "uuid_attribute/utils"
9
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uuid_attribute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10
4
+ version: 0.9.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Negri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-17 00:00:00.000000000 Z
11
+ date: 2023-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -50,6 +50,7 @@ files:
50
50
  - README.md
51
51
  - lib/uuid_attribute.rb
52
52
  - lib/uuid_attribute/railtie.rb
53
+ - lib/uuid_attribute/type.rb
53
54
  - lib/uuid_attribute/utils.rb
54
55
  - lib/uuid_attribute/uuid.rb
55
56
  - lib/uuid_attribute/version.rb