active_hash 3.2.1 → 3.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -3
- data/lib/active_hash/base.rb +10 -1
- data/lib/active_hash/condition.rb +1 -1
- data/lib/active_hash/relation.rb +4 -8
- data/lib/active_hash/version.rb +1 -1
- data/lib/associations/associations.rb +34 -14
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f03cf8270c4fd278e024200679342d2063170eb886caacc29eec8b1577ff5d3
|
4
|
+
data.tar.gz: d1b0cf6ed32af1f82471e22a593d5929be18f47c729e514376485a9a34a8a74d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33f26034c33d2e1b5533007a10cd63672478e0c421c3e0e1819392bfae33c6815af58ec8605492790ec3bbbbdfe642839647b296902008c0c92f525bed311d06
|
7
|
+
data.tar.gz: fb495624034f265a1503f5f493fff74097653f3b00a703b1f9406d397a70eb744a6322e0758bfe9e4b6f7bd4a0ea86b2e5bcadb55adaf2fb1be87525330271dd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
# active_hash Changelog
|
2
2
|
|
3
|
+
## Version [3.3.1] - <sub><sup>2024-05-03</sup></sub>
|
4
|
+
|
5
|
+
### Fixed
|
6
|
+
|
7
|
+
- Fix `hash_many :through` associations which specify a scope. [#306](https://github.com/active-hash/active_hash/pull/306) @sontixyou
|
8
|
+
|
9
|
+
|
10
|
+
## Version [3.3.0] - <sub><sup>2024-04-30</sup></sub>
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- Ruby 3.3 support [#298](https://github.com/active-hash/active_hash/pull/298) @m-nakamura145
|
15
|
+
- Support `has_many :through` associations [#296](https://github.com/active-hash/active_hash/pull/296) @flavorjones
|
16
|
+
- Rails 7.1 support [#291](https://github.com/active-hash/active_hash/pull/291) @y-yagi
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
|
20
|
+
- Rails 7.1: fix sqlite3 issue [#303](https://github.com/active-hash/active_hash/pull/303) @flavorjones
|
21
|
+
- Rails 7.1.3: add missing `has_query_constraints?` [#300](https://github.com/active-hash/active_hash/pull/300) @flavorjones
|
22
|
+
- `Array#pluck` supports methods [#299](https://github.com/active-hash/active_hash/pull/299) @iberianpig
|
23
|
+
- Prefer `safe_constantize` over `constantize` [#297](https://github.com/active-hash/active_hash/pull/297) @flavorjones
|
24
|
+
- Treat `nil` and `blank?` as different values [#295](https://github.com/active-hash/active_hash/pull/295) @kbrock
|
25
|
+
- Fix `#where` for string keys [#292](https://github.com/active-hash/active_hash/pull/292) @usernam3
|
26
|
+
|
3
27
|
## Version [3.2.1] - <sub><sup>2023-08-31</sup></sub>
|
4
28
|
|
5
29
|
### Added
|
@@ -305,9 +329,10 @@
|
|
305
329
|
- Setting data to nil correctly causes .all to return an empty array
|
306
330
|
- Added reload(force) method, so that you can force a reload from files in ActiveFile, useful for tests
|
307
331
|
|
308
|
-
[HEAD]:
|
309
|
-
[
|
310
|
-
[
|
332
|
+
[HEAD]: https://github.com/active-hash/active_hash/compare/v3.3.0...HEAD
|
333
|
+
[3.3.0]: https://github.com/active-hash/active_hash/compare/v3.2.1...v3.3.0
|
334
|
+
[3.2.1]: https://github.com/active-hash/active_hash/compare/v3.2.0...v3.2.1
|
335
|
+
[3.2.0]: https://github.com/active-hash/active_hash/compare/v3.1.1...v3.2.0
|
311
336
|
[3.1.1]: https://github.com/active-hash/active_hash/compare/v3.1.0...v3.1.1
|
312
337
|
[3.1.0]: https://github.com/active-hash/active_hash/compare/v3.0.0...v3.1.0
|
313
338
|
[3.0.0]: https://github.com/active-hash/active_hash/compare/v2.3.0...v3.0.0
|
data/lib/active_hash/base.rb
CHANGED
@@ -127,6 +127,10 @@ module ActiveHash
|
|
127
127
|
@record_index ||= {}
|
128
128
|
end
|
129
129
|
|
130
|
+
def has_query_constraints?
|
131
|
+
false
|
132
|
+
end
|
133
|
+
|
130
134
|
private :record_index
|
131
135
|
|
132
136
|
def reset_record_index
|
@@ -349,6 +353,11 @@ module ActiveHash
|
|
349
353
|
base_class.name
|
350
354
|
end
|
351
355
|
|
356
|
+
# Needed for ActiveRecord since rails/rails#47664
|
357
|
+
def composite_primary_key?
|
358
|
+
false
|
359
|
+
end
|
360
|
+
|
352
361
|
def reload
|
353
362
|
reset_record_index
|
354
363
|
self.data = _data
|
@@ -406,7 +415,7 @@ module ActiveHash
|
|
406
415
|
end
|
407
416
|
|
408
417
|
def _read_attribute(key)
|
409
|
-
attributes[key]
|
418
|
+
attributes[key.to_sym]
|
410
419
|
end
|
411
420
|
alias_method :read_attribute, :_read_attribute
|
412
421
|
|
data/lib/active_hash/relation.rb
CHANGED
@@ -143,15 +143,11 @@ module ActiveHash
|
|
143
143
|
end
|
144
144
|
|
145
145
|
def pluck(*column_names)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
column_name = symbolized_column_names.first
|
150
|
-
all.map { |record| record[column_name] }
|
146
|
+
if column_names.length == 1
|
147
|
+
column_name = column_names.first
|
148
|
+
all.map { |record| record.public_send(column_name) }
|
151
149
|
else
|
152
|
-
all.map
|
153
|
-
symbolized_column_names.map { |column_name| record[column_name] }
|
154
|
-
end
|
150
|
+
all.map { |record| column_names.map { |column_name| record.public_send(column_name) } }
|
155
151
|
end
|
156
152
|
end
|
157
153
|
|
data/lib/active_hash/version.rb
CHANGED
@@ -2,16 +2,40 @@ module ActiveHash
|
|
2
2
|
module Associations
|
3
3
|
|
4
4
|
module ActiveRecordExtensions
|
5
|
-
|
6
5
|
def self.extended(base)
|
7
6
|
require_relative 'reflection_extensions'
|
8
7
|
end
|
9
8
|
|
9
|
+
def has_many(association_id, scope = nil, **options, &extension)
|
10
|
+
if options[:through]
|
11
|
+
klass_name = association_id.to_s.classify
|
12
|
+
klass =
|
13
|
+
begin
|
14
|
+
klass_name.safe_constantize
|
15
|
+
rescue StandardError, LoadError
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
if klass && klass < ActiveHash::Base
|
20
|
+
define_method(association_id) do
|
21
|
+
join_models = send(options[:through])
|
22
|
+
join_models.flat_map do |join_model|
|
23
|
+
join_model.send(association_id.to_s.singularize)
|
24
|
+
end.uniq
|
25
|
+
end
|
26
|
+
|
27
|
+
return
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
10
34
|
def belongs_to(name, scope = nil, **options)
|
11
35
|
klass_name = options.key?(:class_name) ? options[:class_name] : name.to_s.camelize
|
12
36
|
klass =
|
13
37
|
begin
|
14
|
-
klass_name.
|
38
|
+
klass_name.safe_constantize
|
15
39
|
rescue StandardError, LoadError
|
16
40
|
nil
|
17
41
|
end
|
@@ -31,11 +55,11 @@ module ActiveHash
|
|
31
55
|
:shortcuts => []
|
32
56
|
}.merge(options)
|
33
57
|
# Define default primary_key with provided class_name if any
|
34
|
-
options[:primary_key] ||= options[:class_name].
|
58
|
+
options[:primary_key] ||= options[:class_name].safe_constantize.primary_key
|
35
59
|
options[:shortcuts] = [options[:shortcuts]] unless options[:shortcuts].kind_of?(Array)
|
36
60
|
|
37
61
|
define_method(association_id) do
|
38
|
-
options[:class_name].
|
62
|
+
options[:class_name].safe_constantize.send("find_by_#{options[:primary_key]}", send(options[:foreign_key]))
|
39
63
|
end
|
40
64
|
|
41
65
|
define_method("#{association_id}=") do |new_value|
|
@@ -48,16 +72,13 @@ module ActiveHash
|
|
48
72
|
end
|
49
73
|
|
50
74
|
define_method("#{association_id}_#{shortcut}=") do |new_value|
|
51
|
-
send "#{association_id}=", new_value ? options[:class_name].
|
75
|
+
send "#{association_id}=", new_value ? options[:class_name].safe_constantize.send("find_by_#{shortcut}", new_value) : nil
|
52
76
|
end
|
53
77
|
end
|
54
78
|
|
55
79
|
if ActiveRecord::Reflection.respond_to?(:create)
|
56
80
|
if defined?(ActiveHash::Reflection::BelongsToReflection)
|
57
81
|
reflection = ActiveHash::Reflection::BelongsToReflection.new(association_id.to_sym, nil, options, self)
|
58
|
-
if options[:through]
|
59
|
-
reflection = ActiveRecord::ThroughReflection.new(reflection)
|
60
|
-
end
|
61
82
|
else
|
62
83
|
reflection = ActiveRecord::Reflection.create(
|
63
84
|
:belongs_to,
|
@@ -88,7 +109,7 @@ module ActiveHash
|
|
88
109
|
:belongs_to,
|
89
110
|
association_id.to_sym,
|
90
111
|
options,
|
91
|
-
options[:class_name].
|
112
|
+
options[:class_name].safe_constantize
|
92
113
|
)
|
93
114
|
end
|
94
115
|
end
|
@@ -108,7 +129,7 @@ module ActiveHash
|
|
108
129
|
:primary_key => self.class.primary_key
|
109
130
|
}.merge(options)
|
110
131
|
|
111
|
-
klass = options[:class_name].
|
132
|
+
klass = options[:class_name].safe_constantize
|
112
133
|
primary_key_value = send(options[:primary_key])
|
113
134
|
foreign_key = options[:foreign_key].to_sym
|
114
135
|
|
@@ -120,6 +141,7 @@ module ActiveHash
|
|
120
141
|
klass.where(foreign_key => primary_key_value)
|
121
142
|
end
|
122
143
|
end
|
144
|
+
|
123
145
|
define_method("#{association_id.to_s.underscore.singularize}_ids") do
|
124
146
|
public_send(association_id).map(&:id)
|
125
147
|
end
|
@@ -133,7 +155,7 @@ module ActiveHash
|
|
133
155
|
:primary_key => self.class.primary_key
|
134
156
|
}.merge(options)
|
135
157
|
|
136
|
-
scope = options[:class_name].
|
158
|
+
scope = options[:class_name].safe_constantize
|
137
159
|
|
138
160
|
if scope.respond_to?(:scoped) && options[:conditions]
|
139
161
|
scope = scope.scoped(:conditions => options[:conditions])
|
@@ -143,7 +165,6 @@ module ActiveHash
|
|
143
165
|
end
|
144
166
|
|
145
167
|
def belongs_to(association_id, options = {})
|
146
|
-
|
147
168
|
options = {
|
148
169
|
:class_name => association_id.to_s.classify,
|
149
170
|
:foreign_key => association_id.to_s.foreign_key,
|
@@ -153,13 +174,12 @@ module ActiveHash
|
|
153
174
|
field options[:foreign_key].to_sym
|
154
175
|
|
155
176
|
define_method(association_id) do
|
156
|
-
options[:class_name].
|
177
|
+
options[:class_name].safe_constantize.send("find_by_#{options[:primary_key]}", send(options[:foreign_key]))
|
157
178
|
end
|
158
179
|
|
159
180
|
define_method("#{association_id}=") do |new_value|
|
160
181
|
attributes[options[:foreign_key].to_sym] = new_value ? new_value.send(options[:primary_key]) : nil
|
161
182
|
end
|
162
|
-
|
163
183
|
end
|
164
184
|
end
|
165
185
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_hash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dean
|
@@ -26,10 +26,10 @@ authors:
|
|
26
26
|
- Brett Richardson
|
27
27
|
- Rachel Heaton
|
28
28
|
- Keisuke Izumiya
|
29
|
-
autorequire:
|
29
|
+
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date:
|
32
|
+
date: 2024-05-04 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: activesupport
|
@@ -93,7 +93,7 @@ metadata:
|
|
93
93
|
changelog_uri: https://github.com/active-hash/active_hash/blob/master/CHANGELOG.md
|
94
94
|
source_code_uri: http://github.com/active-hash/active_hash
|
95
95
|
bug_tracker_uri: https://github.com/active-hash/active_hash/issues
|
96
|
-
post_install_message:
|
96
|
+
post_install_message:
|
97
97
|
rdoc_options: []
|
98
98
|
require_paths:
|
99
99
|
- lib
|
@@ -108,8 +108,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
requirements: []
|
111
|
-
rubygems_version: 3.
|
112
|
-
signing_key:
|
111
|
+
rubygems_version: 3.5.9
|
112
|
+
signing_key:
|
113
113
|
specification_version: 4
|
114
114
|
summary: An ActiveRecord-like model that uses a hash or file as a datasource
|
115
115
|
test_files: []
|