active_serialize 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/active_serialize.rb +11 -7
- data/lib/active_serialize/class_methods.rb +9 -5
- data/lib/active_serialize/relation.rb +26 -0
- data/lib/active_serialize/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3d9b2859163166929c779368b00c17271635964c
|
4
|
+
data.tar.gz: 6ecb6dc7d235f89b2e95eaf382c84b72cc6dfc0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 192b5263921799f1a0acaa837a006b780a9939572d67d8cf3cec783b549358bc122276776668f988f3cf8e5f1b186c8e21358608b85ff24ea6a0a8a551f321ed
|
7
|
+
data.tar.gz: 8036dd8ceb1d21917b6e282c27fc512cce92e3717774d032e04eca05da97d206e2ad91eade924a250f7957d9224c90c93ef4126d2953ffcbc9b55c373642c9b5
|
data/lib/active_serialize.rb
CHANGED
@@ -5,21 +5,24 @@ require 'active_record'
|
|
5
5
|
require 'active_serialize/version'
|
6
6
|
require 'active_serialize/key_formatter'
|
7
7
|
require 'active_serialize/class_methods'
|
8
|
+
require 'active_serialize/relation'
|
8
9
|
|
9
10
|
module ActiveSerialize
|
10
11
|
extend ActiveSupport::Concern
|
11
12
|
cattr_accessor :configs, default: { default: { rmv: [ ], add: [ ], key_format: nil } }
|
12
13
|
|
13
14
|
class_methods do
|
14
|
-
def active_serialize rmv: [ ], add: [ ], recursive: [ ], **configs
|
15
|
+
def active_serialize rmv: [ ], add: [ ], recursive: [ ], pluck: [ ], **configs
|
15
16
|
extend ClassMethods
|
16
17
|
include ToH
|
18
|
+
::ActiveRecord::Relation.include Relation
|
17
19
|
delegate :active_serialize_keys, :_active_serialize, to: self
|
18
20
|
|
19
21
|
_active_serialize.merge!(configs)
|
20
22
|
active_serialize_rmv *Array(rmv)
|
21
23
|
active_serialize_add *Array(add)
|
22
|
-
active_serialize_add *Array(recursive),
|
24
|
+
active_serialize_add *Array(recursive), to: :recursive
|
25
|
+
active_serialize_add *Array(pluck), to: :pluck
|
23
26
|
end
|
24
27
|
|
25
28
|
def active_serialize_default **args
|
@@ -28,13 +31,14 @@ module ActiveSerialize
|
|
28
31
|
end
|
29
32
|
|
30
33
|
module ToH
|
31
|
-
def to_h(*groups, rmv: [ ], add: [ ], merge: { })
|
32
|
-
tran_key
|
33
|
-
recursion = _active_serialize[:recursive].map { |
|
34
|
+
def to_h(*groups, rmv: [ ], add: [ ], recursive: [ ], plucked: { }, merge: { })
|
35
|
+
tran_key = ->(key) { (_active_serialize[:map][key] || key).to_s }
|
36
|
+
recursion = (_active_serialize[:recursive] + recursive).map { |k| [ k, public_send(k)&.to_ha ] }.to_h
|
37
|
+
|
34
38
|
KeyFormatter.(_active_serialize[:key_format],
|
35
39
|
active_serialize_keys(*groups, rmv: rmv, add: add)
|
36
|
-
.map
|
37
|
-
.merge(merge).merge(
|
40
|
+
.map{ |key| [ tran_key.(key), public_send(key) ] }.to_h
|
41
|
+
.merge(plucked.merge(recursion).merge(merge).transform_keys(&tran_key))
|
38
42
|
)
|
39
43
|
end
|
40
44
|
|
@@ -3,21 +3,25 @@
|
|
3
3
|
module ActiveSerialize
|
4
4
|
module ClassMethods
|
5
5
|
def _active_serialize
|
6
|
-
ActiveSerialize.configs[name] ||= {
|
6
|
+
ActiveSerialize.configs[name] ||= {
|
7
|
+
**ActiveSerialize.configs[:default].deep_dup,
|
8
|
+
final: nil, groups: { }, recursive: [ ], map: { }, pluck: [ ]
|
9
|
+
}
|
7
10
|
end
|
8
11
|
|
9
|
-
def to_ha(
|
10
|
-
all.
|
12
|
+
def to_ha(*args)
|
13
|
+
all.to_ha(*args)
|
11
14
|
end
|
12
15
|
|
13
16
|
def active_serialize_rmv *attrs
|
14
17
|
_active_serialize[:rmv].concat attrs.map(&:to_sym)
|
15
18
|
end
|
16
19
|
|
17
|
-
|
20
|
+
# to: `recursive` or `pluck`
|
21
|
+
def active_serialize_add *attrs, named: nil, to: nil, group: nil
|
18
22
|
active_serialize_map attrs[0] => named if named
|
19
23
|
return _active_serialize[:groups][group] = attrs.map(&:to_sym) if group
|
20
|
-
_active_serialize[
|
24
|
+
_active_serialize[to || :add].concat attrs.map(&:to_sym)
|
21
25
|
end
|
22
26
|
|
23
27
|
def active_serialize_map **settings
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveSerialize
|
4
|
+
module Relation
|
5
|
+
def to_ha(pluck: [ ], plucked: nil, **args)
|
6
|
+
plucked ||=
|
7
|
+
if pluck.is_a?(Proc)
|
8
|
+
instance_eval(&pluck)
|
9
|
+
else
|
10
|
+
(_active_serialize[:pluck] + pluck).map { |key| [ key, instance_eval(&method(key)) ] }.to_h
|
11
|
+
end
|
12
|
+
|
13
|
+
if plucked.present?
|
14
|
+
each_with_index.map do |record, i|
|
15
|
+
record.to_h(plucked: plucked.each_key.map { |k| [ k, plucked[k][i] ] }.to_h, **args)
|
16
|
+
end
|
17
|
+
else
|
18
|
+
map { |record| record.to_h(**args) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def with_ha(*args)
|
23
|
+
return to_ha(*args), self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_serialize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zhandao
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -185,6 +185,7 @@ files:
|
|
185
185
|
- lib/active_serialize.rb
|
186
186
|
- lib/active_serialize/class_methods.rb
|
187
187
|
- lib/active_serialize/key_formatter.rb
|
188
|
+
- lib/active_serialize/relation.rb
|
188
189
|
- lib/active_serialize/version.rb
|
189
190
|
homepage: https://github.com/ikkiuchi/active_serialize
|
190
191
|
licenses:
|
@@ -206,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
207
|
version: '0'
|
207
208
|
requirements: []
|
208
209
|
rubyforge_project:
|
209
|
-
rubygems_version: 2.
|
210
|
+
rubygems_version: 2.6.12
|
210
211
|
signing_key:
|
211
212
|
specification_version: 4
|
212
213
|
summary: Provide a very simple way to transform ActiveRecord data into Hash output.
|