active_hash 2.1.0 → 2.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 +4 -4
- data/CHANGELOG +4 -0
- data/README.md +1 -1
- data/lib/active_file/base.rb +1 -5
- data/lib/active_file/multiple_files.rb +1 -5
- data/lib/active_hash/base.rb +50 -6
- data/lib/active_hash/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88911736a7baf25f50316f0f8cff64da3d75b0cf4e5ec4da716acae358390308
|
4
|
+
data.tar.gz: aec89dbc9f68f10e86b2e2b7ea4bdecfd42043a917baf7e3aa7a0c85f15969e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80a28ac67124190ca5dcff815a0e0dc923f3cc5a8401965de64ae53e0feb8901fd3bc6bfcedd4deb8c86b83ba4b16190b2e098eee0a2ee3e5db6b07bd1ad0815
|
7
|
+
data.tar.gz: 25de0710d0f570a6486153f46a987d8f95187b71f95338b5e54ce0a1e529df4cd6d91e7097c3ed45f80072f38647a3821fbcd7354e06b9d0c415e48b7fcb7487
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
2018-11-22 (v2.2.0)
|
2
|
+
- Support pluck method [#164](https://github.com/zilkey/active_hash/pull/164) Thanks, @ihatov08
|
3
|
+
- Support where.not method [#167](https://github.com/zilkey/active_hash/pull/167) Thanks, @DialBird
|
4
|
+
|
1
5
|
2018-04-05 (v2.1.0)
|
2
6
|
- Allow to use ERB (embedded ruby) in yml files [#160](https://github.com/zilkey/active_hash/pull/160) Thanks, @UgoMare
|
3
7
|
- Add `ActiveHash::Base.polymorphic_name` [#162](https://github.com/zilkey/active_hash/pull/162)
|
data/README.md
CHANGED
@@ -207,7 +207,7 @@ Country#save!
|
|
207
207
|
Country.create
|
208
208
|
Country.create!
|
209
209
|
```
|
210
|
-
As such, ActiveHash::Base and its descendants should work with Fixjour or
|
210
|
+
As such, ActiveHash::Base and its descendants should work with Fixjour or FactoryBot, so you can treat ActiveHash records the same way you would any other ActiveRecord model in tests.
|
211
211
|
|
212
212
|
To clear all records from the in-memory array, call delete_all:
|
213
213
|
```ruby
|
data/lib/active_file/base.rb
CHANGED
@@ -3,11 +3,7 @@ module ActiveFile
|
|
3
3
|
class Base < ActiveHash::Base
|
4
4
|
extend ActiveFile::MultipleFiles
|
5
5
|
|
6
|
-
|
7
|
-
class_attribute :filename, :root_path, :data_loaded, instance_reader: false, instance_writer: false
|
8
|
-
else
|
9
|
-
class_inheritable_accessor :filename, :root_path, :data_loaded
|
10
|
-
end
|
6
|
+
class_attribute :filename, :root_path, :data_loaded, instance_reader: false, instance_writer: false
|
11
7
|
|
12
8
|
class << self
|
13
9
|
|
@@ -5,11 +5,7 @@ module ActiveFile
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def use_multiple_files
|
8
|
-
|
9
|
-
class_attribute :filenames, instance_reader: false, instance_writer: false
|
10
|
-
else
|
11
|
-
class_inheritable_accessor :filenames
|
12
|
-
end
|
8
|
+
class_attribute :filenames, instance_reader: false, instance_writer: false
|
13
9
|
|
14
10
|
def self.set_filenames(*filenames)
|
15
11
|
self.filenames = filenames
|
data/lib/active_hash/base.rb
CHANGED
@@ -14,10 +14,46 @@ module ActiveHash
|
|
14
14
|
|
15
15
|
class Base
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
class_attribute :_data, :dirty, :default_attributes
|
18
|
+
|
19
|
+
class WhereChain
|
20
|
+
def initialize(scope)
|
21
|
+
@scope = scope
|
22
|
+
@records = @scope.all
|
23
|
+
end
|
24
|
+
|
25
|
+
def not(options)
|
26
|
+
return @records if options.blank?
|
27
|
+
|
28
|
+
# use index if searching by id
|
29
|
+
if options.key?(:id) || options.key?("id")
|
30
|
+
ids = @scope.pluck(:id) - Array.wrap(options.delete(:id) || options.delete("id"))
|
31
|
+
candidates = ids.map { |id| @scope.find_by_id(id) }.compact
|
32
|
+
end
|
33
|
+
return candidates if options.blank?
|
34
|
+
|
35
|
+
(candidates || @records || []).reject do |record|
|
36
|
+
match_options?(record, options)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def match_options?(record, options)
|
41
|
+
options.all? do |col, match|
|
42
|
+
if match.kind_of?(Array)
|
43
|
+
match.any? { |v| normalize(v) == normalize(record[col]) }
|
44
|
+
else
|
45
|
+
normalize(record[col]) == normalize(match)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private :match_options?
|
51
|
+
|
52
|
+
def normalize(v)
|
53
|
+
v.respond_to?(:to_sym) ? v.to_sym : v
|
54
|
+
end
|
55
|
+
|
56
|
+
private :normalize
|
21
57
|
end
|
22
58
|
|
23
59
|
if Object.const_defined?(:ActiveModel)
|
@@ -154,8 +190,12 @@ module ActiveHash
|
|
154
190
|
end
|
155
191
|
end
|
156
192
|
|
157
|
-
def where(options)
|
158
|
-
|
193
|
+
def where(options = :chain)
|
194
|
+
if options == :chain
|
195
|
+
return WhereChain.new(self)
|
196
|
+
elsif options.blank?
|
197
|
+
return @records
|
198
|
+
end
|
159
199
|
|
160
200
|
# use index if searching by id
|
161
201
|
if options.key?(:id) || options.key?("id")
|
@@ -199,6 +239,10 @@ module ActiveHash
|
|
199
239
|
all.length
|
200
240
|
end
|
201
241
|
|
242
|
+
def pluck(*column_names)
|
243
|
+
column_names.map { |column_name| all.map(&column_name.to_sym) }.inject(&:zip)
|
244
|
+
end
|
245
|
+
|
202
246
|
def transaction
|
203
247
|
yield
|
204
248
|
rescue LocalJumpError => err
|
data/lib/active_hash/version.rb
CHANGED
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: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dean
|
@@ -29,7 +29,7 @@ authors:
|
|
29
29
|
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date: 2018-
|
32
|
+
date: 2018-11-22 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: activesupport
|
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.7.
|
90
|
+
rubygems_version: 2.7.6
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: An ActiveRecord-like model that uses a hash or file as a datasource
|