duck_record 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/core_ext/array_without_blank.rb +46 -0
- data/lib/duck_record/base.rb +6 -5
- data/lib/duck_record/serialization.rb +13 -0
- data/lib/duck_record/type/array_without_blank.rb +36 -0
- data/lib/duck_record/type.rb +2 -0
- data/lib/duck_record/version.rb +1 -1
- data/lib/duck_record.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a40d7265442d33cb9b0523abc991f2425c3d87ff
|
4
|
+
data.tar.gz: 266ba229695849261a975fd2924cc9837a095671
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363119060b6e6191f6fe401a121c6548b2ca3ae28f5875a95db30aaffbb29d952c8baa0a6a37f3deb4085a24389af87c4b698eb950bcf9b9a46c1761a1a82721
|
7
|
+
data.tar.gz: bc7e1560401aa6afebc76066457085b1b0898e04b69feff43cf7d4ae72693bfe164022c604575752463941360b4ca8bed5ff868d90ad4e7bf0764bc92570c1bd
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class ArrayWithoutBlank < Array
|
2
|
+
def self.new(*several_variants)
|
3
|
+
arr = super
|
4
|
+
arr.reject!(&:blank?)
|
5
|
+
arr
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize_copy(other_ary)
|
9
|
+
super other_ary.reject(&:blank?)
|
10
|
+
end
|
11
|
+
|
12
|
+
def replace(other_ary)
|
13
|
+
super other_ary.reject(&:blank?)
|
14
|
+
end
|
15
|
+
|
16
|
+
def push(obj, *smth)
|
17
|
+
return self if obj.blank?
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def insert(*args)
|
22
|
+
super *args.reject(&:blank?)
|
23
|
+
end
|
24
|
+
|
25
|
+
def []=(index, obj)
|
26
|
+
return self[index] if obj.blank?
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
def concat(other_ary)
|
31
|
+
super other_ary.reject(&:blank?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def +(other_ary)
|
35
|
+
super other_ary.reject(&:blank?)
|
36
|
+
end
|
37
|
+
|
38
|
+
def <<(obj)
|
39
|
+
return self if obj.blank?
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_ary
|
44
|
+
Array.new(self)
|
45
|
+
end
|
46
|
+
end
|
data/lib/duck_record/base.rb
CHANGED
@@ -305,11 +305,12 @@ module DuckRecord #:nodoc:
|
|
305
305
|
|
306
306
|
self.class.reflections.keys.each do |k|
|
307
307
|
records = send(k)
|
308
|
-
sub_hash =
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
308
|
+
sub_hash =
|
309
|
+
if records.respond_to?(:to_ary)
|
310
|
+
records.to_ary.map { |a| a.to_h }
|
311
|
+
else
|
312
|
+
records.to_h
|
313
|
+
end
|
313
314
|
|
314
315
|
if include_empty || sub_hash.any?
|
315
316
|
hash[k] = sub_hash
|
@@ -15,5 +15,18 @@ module DuckRecord #:nodoc:
|
|
15
15
|
|
16
16
|
super(options)
|
17
17
|
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def read_attribute_for_serialization(key)
|
22
|
+
v = send(key)
|
23
|
+
if v.respond_to?(:to_ary)
|
24
|
+
v.to_ary
|
25
|
+
elsif v.respond_to?(:to_hash)
|
26
|
+
v.to_hash
|
27
|
+
else
|
28
|
+
v
|
29
|
+
end
|
30
|
+
end
|
18
31
|
end
|
19
32
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module DuckRecord
|
2
|
+
module Type # :nodoc:
|
3
|
+
class ArrayWithoutBlank < ActiveModel::Type::Value # :nodoc:
|
4
|
+
include ActiveModel::Type::Helpers::Mutable
|
5
|
+
|
6
|
+
attr_reader :subtype
|
7
|
+
delegate :type, :user_input_in_time_zone, :limit, to: :subtype
|
8
|
+
|
9
|
+
def initialize(subtype)
|
10
|
+
@subtype = subtype
|
11
|
+
end
|
12
|
+
|
13
|
+
def cast(value)
|
14
|
+
type_cast_array(value, :cast)
|
15
|
+
end
|
16
|
+
|
17
|
+
def ==(other)
|
18
|
+
other.is_a?(Array) && subtype == other.subtype
|
19
|
+
end
|
20
|
+
|
21
|
+
def map(value, &block)
|
22
|
+
value.map(&block)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def type_cast_array(value, method)
|
28
|
+
if value.is_a?(::Array)
|
29
|
+
::ArrayWithoutBlank.new value.map { |item| type_cast_array(item, method) }
|
30
|
+
else
|
31
|
+
@subtype.public_send(method, value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/duck_record/type.rb
CHANGED
@@ -9,6 +9,7 @@ require "duck_record/type/time"
|
|
9
9
|
require "duck_record/type/json"
|
10
10
|
|
11
11
|
require "duck_record/type/array"
|
12
|
+
require "duck_record/type/array_without_blank"
|
12
13
|
|
13
14
|
require "duck_record/type/unsigned_integer"
|
14
15
|
require "duck_record/type/decimal_without_scale"
|
@@ -67,5 +68,6 @@ module DuckRecord
|
|
67
68
|
register(:json, Type::JSON, override: false)
|
68
69
|
|
69
70
|
add_modifier({ array: true }, Type::Array)
|
71
|
+
add_modifier({ array_without_blank: true }, Type::ArrayWithoutBlank)
|
70
72
|
end
|
71
73
|
end
|
data/lib/duck_record/version.rb
CHANGED
data/lib/duck_record.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duck_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jasl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- MIT-LICENSE
|
81
81
|
- README.md
|
82
82
|
- Rakefile
|
83
|
+
- lib/core_ext/array_without_blank.rb
|
83
84
|
- lib/duck_record.rb
|
84
85
|
- lib/duck_record/associations.rb
|
85
86
|
- lib/duck_record/associations/association.rb
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- lib/duck_record/translation.rb
|
122
123
|
- lib/duck_record/type.rb
|
123
124
|
- lib/duck_record/type/array.rb
|
125
|
+
- lib/duck_record/type/array_without_blank.rb
|
124
126
|
- lib/duck_record/type/date.rb
|
125
127
|
- lib/duck_record/type/date_time.rb
|
126
128
|
- lib/duck_record/type/decimal_without_scale.rb
|