arel_extensions 2.0.10 → 2.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1c901d7b1d85f0ae44bab91682891629784947bae91f7ad968c85d1e48c9948
4
- data.tar.gz: 4b35308d0833bdc9539886dfb2575326e46551a24b03f5b98a4217000ffbb9a3
3
+ metadata.gz: b1ecd7512b41f7db6706dd6affb2e57327cf7331233e39027906743f824f82a8
4
+ data.tar.gz: 1c7baed7dedb0fb616116fd9888dff8e3a9b0c15ff9b2ae107b982adb522e67c
5
5
  SHA512:
6
- metadata.gz: a84ef9d6cdb99b63efb35500976f10152d36cd4500307c76ffa4bc5c478502d0b517516b299b613b56a560fff96f4e23a5225944587af0cee2ae81e09b0714b5
7
- data.tar.gz: e1c8043cb10571b353ac3a1ba14ac5ad75aa92c25fdca5d2610b8ef3413c0b0f861bd576ee6b51896ee005445af941441bfdf8c9ab698b9339e7b297f29712e2
6
+ metadata.gz: a81f1010f6cf3d992830b1596eb5b8eaf61fd725cbe97f4cea23aea8172d2f6f6377b58684cf00b16da947ab9a1b65f23efe6f9335db274764931772cb7a219e
7
+ data.tar.gz: d5140b1fcbff6e4a9549d0d0418ed95215405f8f78ae8e82d6a7a86792130f4e31272cfcd6733c511cc2828599f466a2d66c0b8ffcc461a6d2c7ffe81307c369
@@ -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 = "2.0.10".freeze
2
+ VERSION = "2.0.11".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: 2.0.10
4
+ version: 2.0.11
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: activerecord