arel_extensions 1.2.14 → 1.2.15

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: 58a5c46733aab590dc5524fb0733f899e3562a224334ba5ae460bffcda3c5151
4
- data.tar.gz: e94d14f13e7778a7ec877019088db4af525e33ac6147abc7f1a8213492912285
3
+ metadata.gz: 02ad8f52ee6bfa8b08e534df4aeae8298ee4a6153461940cf7d94f46b6d45209
4
+ data.tar.gz: 802365368c4b00f04a7fa553272cdd72de06b7eedd02263df8385a68d85554ac
5
5
  SHA512:
6
- metadata.gz: 72c65ef83e189170664127dab416385d028e017d198b8c2eb1d457a79693068f2baa5eeb948356dea78fb625a89d30c9884c8be84c2cdb8f5e5913e608565052
7
- data.tar.gz: 5acc3c898c74bd0b05fdf1205d3e4262c11b81a37990f29dc9eefbfd4954c251f8d52beef8e0d441d87957ad4abb9edc4d9f4c81f4e931fa69f17e500cbf8ddd
6
+ metadata.gz: bf6eef122b124e6720323ed44fa0e77e2d253c90b80dacd163ba56bbc11390f124b88cb42f57efb36745d6679c1709cb5ed1d7f38109d42502c6d50bfd321912
7
+ data.tar.gz: bac8c5ad02b5d8ea867c27be0593ddc61f1631c34a4c3dfc6dd63949aff91a8163a90dcd25a0f12faec12115c3a980cdb2a39edcc8e4adb5408720b5ed9445d8
@@ -33,36 +33,51 @@ module ArelExtensions
33
33
  def initialize *expr
34
34
  @dict =
35
35
  if expr.length == 1
36
- case exp = expr.first
37
- when JsonNode
38
- exp.dict
39
- when Array
40
- exp.map{|e|
41
- (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_node(e)
42
- }
43
- when Hash
44
- exp.reduce({}){|acc,v|
45
- acc[convert_to_node(v[0])] = (v[1].is_a?(Array) || v[1].is_a?(Hash)) ? Json.new(v[1]) : convert_to_node(v[1])
46
- acc
47
- }
48
- when String, Numeric, TrueClass, FalseClass
49
- convert_to_node(exp)
50
- when NilClass
51
- Arel.sql('null')
52
- else
53
- if (exp.is_a?(Arel::Attributes::Attribute) && type_of_attribute(exp) == :string) \
54
- || (exp.return_type == :string)
55
- convert_to_node(exp)
56
- else
57
- [convert_to_node(exp)]
58
- end
59
- end
36
+ convert_to_json_node(expr.first)
60
37
  else
61
- expr.map{|e| (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_node(e) }
38
+ expr.map{|e| convert_to_json_node(e) }
62
39
  end
63
40
  super
64
41
  end
65
42
 
43
+ def convert_to_json_node(n)
44
+ case n
45
+ when JsonNode
46
+ n.dict
47
+ when Array
48
+ n.map{|e|
49
+ (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_json_node(e)
50
+ }
51
+ when Hash
52
+ n.reduce({}){|acc,v|
53
+ acc[convert_to_json_node(v[0])] = (v[1].is_a?(Array) || v[1].is_a?(Hash)) ? Json.new(v[1]) : convert_to_json_node(v[1])
54
+ acc
55
+ }
56
+ when String, Numeric, TrueClass, FalseClass
57
+ convert_to_node(n)
58
+ when Date
59
+ convert_to_node(n.strftime("%Y-%m-%d"))
60
+ when DateTime, Time
61
+ convert_to_node(n.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
62
+ when NilClass
63
+ Arel.sql('null')
64
+ else
65
+ convert_to_node(n)
66
+ end
67
+ end
68
+
69
+ def type_of_node(v)
70
+ if v.is_a?(Arel::Attributes::Attribute)
71
+ self.type_of_attribute(v)
72
+ elsif v.respond_to?(:return_type)
73
+ v.return_type
74
+ elsif v.nil?
75
+ :nil
76
+ else
77
+ :string
78
+ end
79
+ end
80
+
66
81
  end
67
82
 
68
83
  class JsonMerge < JsonNode
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "1.2.14".freeze
2
+ VERSION = "1.2.15".freeze
3
3
  end
@@ -585,6 +585,26 @@ module ArelExtensions
585
585
  collector
586
586
  end
587
587
 
588
+ def json_value(o,v)
589
+ case o.type_of_node(v)
590
+ when :string
591
+ Arel.when(v.is_null).then(Arel::Nodes.build_quoted("null")).else(Arel::Nodes.build_quoted('"') + v.replace('\\','\\\\').replace('"','\"') + '"')
592
+ when :date
593
+ s = v.format('%Y-%m-%d')
594
+ Arel.when(s.is_null).then(Arel::Nodes.build_quoted("null")).else(Arel::Nodes.build_quoted('"') + s + '"')
595
+ when :datetime
596
+ s = v.format('%Y-%m-%dT%H:%M:%S')
597
+ Arel.when(s.is_null).then(Arel::Nodes.build_quoted("null")).else(Arel::Nodes.build_quoted('"') + s + '"')
598
+ when :time
599
+ s = v.format('%H:%M:%S')
600
+ Arel.when(s.is_null).then(Arel::Nodes.build_quoted("null")).else(Arel::Nodes.build_quoted('"') + s + '"')
601
+ when :nil
602
+ Arel::Nodes.build_quoted("null")
603
+ else
604
+ ArelExtensions::Nodes::Cast.new([v, :string]).coalesce("null")
605
+ end
606
+ end
607
+
588
608
  def visit_ArelExtensions_Nodes_Json o,collector
589
609
  case o.dict
590
610
  when Array
@@ -593,11 +613,7 @@ module ArelExtensions
593
613
  if i != 0
594
614
  res += ', '
595
615
  end
596
- if (v.is_a?(Arel::Attributes::Attribute) && o.type_of_attribute(v) == :string) || (v.return_type == :string)
597
- res = res + '"' + v + '"'
598
- else
599
- res += v
600
- end
616
+ res += json_value(o,v)
601
617
  end
602
618
  res += ']'
603
619
  collector = visit res, collector
@@ -607,12 +623,8 @@ module ArelExtensions
607
623
  if i != 0
608
624
  res += ', '
609
625
  end
610
- res += Arel::Nodes.build_quoted('"')+k + '": '
611
- if (v.is_a?(Arel::Attributes::Attribute) && o.type_of_attribute(v) == :string) || (v.respond_to?(:return_type) && v.return_type == :string)
612
- res = res + '"' + v + '"'
613
- else
614
- res += v
615
- end
626
+ res += Arel::Nodes.build_quoted('"') + ArelExtensions::Nodes::Cast.new([k, :string]).coalesce("").replace('\\','\\\\').replace('"','\"') + '": '
627
+ res += json_value(o,v)
616
628
  end
617
629
  res += '}'
618
630
  collector = visit res, collector
@@ -633,12 +645,8 @@ module ArelExtensions
633
645
  if i != 0
634
646
  res = res + ', '
635
647
  end
636
- kv = Arel::Nodes.build_quoted('"')+k + '": '
637
- if (v.is_a?(Arel::Attributes::Attribute) && o.type_of_attribute(v) == :string) || (v.respond_to?(:return_type) && v.return_type == :string)
638
- kv = kv + '"' + v + '"'
639
- else
640
- kv += v
641
- end
648
+ kv = Arel::Nodes.build_quoted('"') + ArelExtensions::Nodes::Cast.new([k, :string]).coalesce("").replace('\\','\\\\').replace('"','\"') + '": '
649
+ kv += json_value(o,v)
642
650
  res = res + kv.group_concat(', ', order: Array(orders)).coalesce('')
643
651
  end
644
652
  res = res + '}'
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "1.2.14".freeze
2
+ VERSION = "1.2.15".freeze
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "2.0.10".freeze
2
+ VERSION = "2.0.11".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.14
4
+ version: 1.2.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-08-27 00:00:00.000000000 Z
13
+ date: 2020-09-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: arel