forest_admin_datasource_toolkit 1.0.0.pre.beta.25 → 1.0.0.pre.beta.26

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: 8139afcd60607522083451780f9a7b7d98c9bdac9630a5befd8c9a795b5d1faf
4
- data.tar.gz: ae361fde5da4f144c85ade92cd843c8f035c9b063f2f9c25330eba9fd55e8928
3
+ metadata.gz: 9749205ecd01ce84b131e59b25235bd4555bd5bb64ec5620d283bc46ab51ebb3
4
+ data.tar.gz: 474671b8aa198bd1a2cbb1b0c95e95bab9e2275572344990376aa37d1b3773ef
5
5
  SHA512:
6
- metadata.gz: 485716a1fdd2f1bc67a8d6043503be51479b240d27158877a54edb10f06de3b1ea22a4e64688b046e648e7b9a0decd79703ec08f96f5150f659f1a5bec6f0a12
7
- data.tar.gz: 3c0d856e370425024bc2b5854a1ce904a66bccf0e15426d6ede04fb1ef8a1c3c5889b9cddd3eb6b8fe2e2ef92c2f68cb8006f9ba7c3180008a7e98f7d4e483b6
6
+ metadata.gz: f7d84033214299dbcec6ce24d8d20a538de1895dca6349ef5b32c9cbf3744df3df3994a5cb10263055a4f8ac30c160756595a80c6b1088e100f25d389e3b4732
7
+ data.tar.gz: da6e1e8ead04fab78151c72117a73d89c0b4665df2c1c10c16b130fe9e492ab0ca5ec7b9b552343b8e5b90a99dbd5469a4da761d4d90ac24a753f42399e3ba2f
@@ -49,7 +49,7 @@ module ForestAdminDatasourceToolkit
49
49
 
50
50
  if depends_replacers.all? { |r| !r.nil? }
51
51
  return lambda { |leaf, timezone|
52
- replacer.call(leaf).replace_leafs do |sub_leaf|
52
+ replacer.call(leaf, timezone).replace_leafs do |sub_leaf|
53
53
  depends_replacers[depends_on.index(sub_leaf.operator)].call(sub_leaf, timezone)
54
54
  end
55
55
  }
@@ -1,3 +1,6 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/string'
3
+
1
4
  module ForestAdminDatasourceToolkit
2
5
  module Components
3
6
  module Query
@@ -11,7 +14,7 @@ module ForestAdminDatasourceToolkit
11
14
 
12
15
  def initialize(field, operator, value = nil)
13
16
  @field = field
14
- @operator = operator
17
+ @operator = operator.underscore
15
18
  @value = value
16
19
  valid_operator(@operator) if @operator
17
20
  super()
@@ -32,14 +35,14 @@ module ForestAdminDatasourceToolkit
32
35
  end
33
36
 
34
37
  def inverse
35
- return override(operator: "Not_#{@operator}") if Operators.exist?("Not_#{@operator}")
36
- return override(operator: @operator[4..]) if @operator.start_with?('Not')
38
+ return override(operator: "not_#{@operator}") if Operators.exist?("not_#{@operator}")
39
+ return override(operator: @operator[4..]) if @operator.start_with?('not')
37
40
 
38
41
  case @operator
39
- when 'Blank'
40
- override(operator: 'Present')
41
- when 'Present'
42
- override(operator: 'Blank')
42
+ when Operators::BLANK
43
+ override(operator: Operators::BLANK)
44
+ when Operators::PRESENT
45
+ override(operator: Operators::PRESENT)
43
46
  else
44
47
  raise ForestException, "Operator: #{@operator} cannot be inverted."
45
48
  end
@@ -3,64 +3,53 @@ module ForestAdminDatasourceToolkit
3
3
  module Query
4
4
  module ConditionTree
5
5
  class Operators
6
- EQUAL = 'Equal'.freeze
7
- NOT_EQUAL = 'Not_Equal'.freeze
8
- LESS_THAN = 'Less_Than'.freeze
9
- GREATER_THAN = 'Greater_Than'.freeze
10
- MATCH = 'Match'.freeze
11
- LIKE = 'Like'.freeze
12
- I_LIKE = 'ILike'.freeze
13
- NOT_CONTAINS = 'Not_Contains'.freeze
14
- CONTAINS = 'Contains'.freeze
15
- I_CONTAINS = 'IContains'.freeze
16
- LONGER_THAN = 'Longer_Than'.freeze
17
- SHORTER_THAN = 'Shorter_Than'.freeze
18
- INCLUDES_ALL = 'Includes_All'.freeze
19
- PRESENT = 'Present'.freeze
20
- BLANK = 'Blank'.freeze
21
- IN = 'In'.freeze
22
- NOT_IN = 'Not_In'.freeze
23
- STARTS_WITH = 'Starts_With'.freeze
24
- I_STARTS_WITH = 'IStarts_With'.freeze
25
- ENDS_WITH = 'Ends_With'.freeze
26
- I_ENDS_WITH = 'IEnds_With'.freeze
27
- MISSING = 'Missing'.freeze
28
- BEFORE = 'Before'.freeze
29
- AFTER = 'After'.freeze
30
- AFTER_X_HOURS_AGO = 'After_X_Hours_Ago'.freeze
31
- BEFORE_X_HOURS_AGO = 'Before_X_Hours_Ago'.freeze
32
- FUTURE = 'Future'.freeze
33
- PAST = 'Past'.freeze
34
- TODAY = 'Today'.freeze
35
- YESTERDAY = 'Yesterday'.freeze
36
- PREVIOUS_WEEK = 'Previous_Week'.freeze
37
- PREVIOUS_MONTH = 'Previous_Month'.freeze
38
- PREVIOUS_QUARTER = 'Previous_Quarter'.freeze
39
- PREVIOUS_YEAR = 'Previous_Year'.freeze
40
- PREVIOUS_WEEK_TO_DATE = 'Previous_Week_To_Date'.freeze
41
- PREVIOUS_MONTH_TO_DATE = 'Previous_Month_To_Date'.freeze
42
- PREVIOUS_QUARTER_TO_DATE = 'Previous_Quarter_To_Date'.freeze
43
- PREVIOUS_YEAR_TO_DATE = 'Previous_Year_To_Date'.freeze
44
- PREVIOUS_X_DAYS = 'Previous_X_Days'.freeze
45
- PREVIOUS_X_DAYS_TO_DATE = 'Previous_X_Days_To_Date'.freeze
6
+ EQUAL = 'equal'.freeze
7
+ NOT_EQUAL = 'not_equal'.freeze
8
+ LESS_THAN = 'less_than'.freeze
9
+ GREATER_THAN = 'greater_than'.freeze
10
+ MATCH = 'match'.freeze
11
+ LIKE = 'like'.freeze
12
+ I_LIKE = 'i_like'.freeze
13
+ NOT_CONTAINS = 'not_contains'.freeze
14
+ CONTAINS = 'contains'.freeze
15
+ I_CONTAINS = 'i_contains'.freeze
16
+ LONGER_THAN = 'longer_than'.freeze
17
+ SHORTER_THAN = 'shorter_than'.freeze
18
+ INCLUDES_ALL = 'includes_all'.freeze
19
+ PRESENT = 'present'.freeze
20
+ BLANK = 'blank'.freeze
21
+ IN = 'in'.freeze
22
+ NOT_IN = 'not_in'.freeze
23
+ STARTS_WITH = 'starts_with'.freeze
24
+ I_STARTS_WITH = 'i_starts_with'.freeze
25
+ ENDS_WITH = 'ends_with'.freeze
26
+ I_ENDS_WITH = 'i_ends_with'.freeze
27
+ MISSING = 'missing'.freeze
28
+ BEFORE = 'before'.freeze
29
+ AFTER = 'after'.freeze
30
+ AFTER_X_HOURS_AGO = 'after_x_hours_ago'.freeze
31
+ BEFORE_X_HOURS_AGO = 'before_x_hours_ago'.freeze
32
+ FUTURE = 'future'.freeze
33
+ PAST = 'past'.freeze
34
+ TODAY = 'today'.freeze
35
+ YESTERDAY = 'yesterday'.freeze
36
+ PREVIOUS_WEEK = 'previous_week'.freeze
37
+ PREVIOUS_MONTH = 'previous_month'.freeze
38
+ PREVIOUS_QUARTER = 'previous_quarter'.freeze
39
+ PREVIOUS_YEAR = 'previous_year'.freeze
40
+ PREVIOUS_WEEK_TO_DATE = 'previous_week_to_date'.freeze
41
+ PREVIOUS_MONTH_TO_DATE = 'previous_month_to_date'.freeze
42
+ PREVIOUS_QUARTER_TO_DATE = 'previous_quarter_to_date'.freeze
43
+ PREVIOUS_YEAR_TO_DATE = 'previous_year_to_date'.freeze
44
+ PREVIOUS_X_DAYS = 'previous_x_days'.freeze
45
+ PREVIOUS_X_DAYS_TO_DATE = 'previous_x_days_to_date'.freeze
46
46
 
47
47
  def self.all
48
- constants
48
+ constants.map { |constant| const_get(constant) }
49
49
  end
50
50
 
51
51
  def self.exist?(operator_value)
52
- case operator_value
53
- when 'ILike'
54
- operator_value = 'I_LIKE'
55
- when 'IContains'
56
- operator_value = 'I_CONTAINS'
57
- when 'IStarts_With'
58
- operator_value = 'I_STARTS_WITH'
59
- when 'IEnds_With'
60
- operator_value = 'I_ENDS_WITH'
61
- end
62
-
63
- all.include?(operator_value.upcase.to_sym)
52
+ all.include?(operator_value)
64
53
  end
65
54
 
66
55
  def self.interval_operators
@@ -12,41 +12,41 @@ module ForestAdminDatasourceToolkit
12
12
  {
13
13
  depends_on: [Operators::IN],
14
14
  for_types: ['String'],
15
- replacer: ->(leaf) { leaf.override({ operator: Operators::IN, value: [nil, ''] }) }
15
+ replacer: proc { |leaf| leaf.override({ operator: Operators::IN, value: [nil, ''] }) }
16
16
  },
17
17
  {
18
18
  depends_on: [Operators::MISSING],
19
- replacer: ->(leaf) { leaf.override({ operator: Operators::MISSING }) }
19
+ replacer: proc { |leaf| leaf.override({ operator: Operators::MISSING }) }
20
20
  }
21
21
  ],
22
22
  Operators::MISSING => [
23
23
  {
24
24
  depends_on: [Operators::EQUAL],
25
- replacer: ->(leaf) { leaf.override({ operator: Operators::EQUAL, value: nil }) }
25
+ replacer: proc { |leaf| leaf.override({ operator: Operators::EQUAL, value: nil }) }
26
26
  }
27
27
  ],
28
28
  Operators::PRESENT => [
29
29
  {
30
30
  depends_on: [Operators::NOT_IN],
31
31
  for_types: ['String'],
32
- replacer: ->(leaf) { leaf.override({ operator: Operators::NOT_IN, value: [nil, ''] }) }
32
+ replacer: proc { |leaf| leaf.override({ operator: Operators::NOT_IN, value: [nil, ''] }) }
33
33
  },
34
34
  {
35
35
  depends_on: [Operators::NOT_EQUAL],
36
- replacer: ->(leaf) { leaf.override({ operator: Operators::NOT_EQUAL, value: nil }) }
36
+ replacer: proc { |leaf| leaf.override({ operator: Operators::NOT_EQUAL, value: nil }) }
37
37
  }
38
38
  ],
39
39
  Operators::EQUAL => [
40
40
  {
41
41
  depends_on: [Operators::IN],
42
- replacer: ->(leaf) { leaf.override({ operator: Operators::IN, value: [leaf.value] }) }
42
+ replacer: proc { |leaf| leaf.override({ operator: Operators::IN, value: [leaf.value] }) }
43
43
  }
44
44
  ],
45
45
  Operators::IN => [
46
46
  {
47
47
  depends_on: [Operators::EQUAL, Operators::MATCH],
48
48
  for_types: ['String'],
49
- replacer: lambda { |leaf|
49
+ replacer: proc { |leaf|
50
50
  values = leaf.value
51
51
  conditions = []
52
52
 
@@ -68,7 +68,7 @@ module ForestAdminDatasourceToolkit
68
68
  },
69
69
  {
70
70
  depends_on: [Operators::EQUAL],
71
- replacer: lambda { |leaf|
71
+ replacer: proc { |leaf|
72
72
  ConditionTreeFactory.union(
73
73
  leaf.value.map { |item| leaf.override({ operator: Operators::EQUAL, value: item }) }
74
74
  )
@@ -78,14 +78,14 @@ module ForestAdminDatasourceToolkit
78
78
  Operators::NOT_EQUAL => [
79
79
  {
80
80
  depends_on: [Operators::NOT_IN],
81
- replacer: ->(leaf) { leaf.override({ operator: Operators::NOT_IN, value: [leaf.value] }) }
81
+ replacer: proc { |leaf| leaf.override({ operator: Operators::NOT_IN, value: [leaf.value] }) }
82
82
  }
83
83
  ],
84
84
  Operators::NOT_IN => [
85
85
  {
86
86
  depends_on: [Operators::NOT_EQUAL, Operators::MATCH],
87
87
  for_types: ['String'],
88
- replacer: lambda { |leaf|
88
+ replacer: proc { |leaf|
89
89
  values = leaf.value
90
90
  conditions = []
91
91
 
@@ -106,7 +106,7 @@ module ForestAdminDatasourceToolkit
106
106
  },
107
107
  {
108
108
  depends_on: [Operators::NOT_EQUAL],
109
- replacer: lambda { |leaf|
109
+ replacer: proc { |leaf|
110
110
  ConditionTreeFactory.intersect(
111
111
  leaf.value.map { |item| leaf.override({ operator: Operators::NOT_EQUAL, value: item }) }
112
112
  )
@@ -8,17 +8,17 @@ module ForestAdminDatasourceToolkit
8
8
  operator = case_sensitive ? Operators::LIKE : Operators::I_LIKE
9
9
 
10
10
  {
11
- dependsOn: [operator],
12
- forTypes: ['String'],
13
- replacer: ->(leaf) { leaf.override(operator: operator, value: get_pattern.call(leaf.value)) }
11
+ depends_on: [operator],
12
+ for_types: ['String'],
13
+ replacer: proc { |leaf| leaf.override(operator: operator, value: get_pattern.call(leaf.value)) }
14
14
  }
15
15
  end
16
16
 
17
17
  def self.match(case_sensitive)
18
18
  {
19
- dependsOn: [Operators::MATCH],
20
- forTypes: ['String'],
21
- replacer: lambda { |leaf|
19
+ depends_on: [Operators::MATCH],
20
+ for_types: ['String'],
21
+ replacer: proc { |leaf|
22
22
  regex = leaf.value.gsub(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-])/, '\\\\\1')
23
23
  regex.gsub!('%', '.*')
24
24
  regex.tr!('_', '.')
@@ -30,12 +30,12 @@ module ForestAdminDatasourceToolkit
30
30
 
31
31
  def self.transforms
32
32
  {
33
- Operators::CONTAINS => [likes(->(value) { "%#{value}%" }, true)],
34
- Operators::STARTS_WITH => [likes(->(value) { "#{value}%" }, true)],
35
- Operators::ENDS_WITH => [likes(->(value) { "%#{value}" }, true)],
36
- Operators::I_CONTAINS => [likes(->(value) { "%#{value}%" }, false)],
37
- Operators::I_STARTS_WITH => [likes(->(value) { "#{value}%" }, false)],
38
- Operators::I_ENDS_WITH => [likes(->(value) { "%#{value}" }, false)],
33
+ Operators::CONTAINS => [likes(proc { |value| "%#{value}%" }, true)],
34
+ Operators::STARTS_WITH => [likes(proc { |value| "#{value}%" }, true)],
35
+ Operators::ENDS_WITH => [likes(proc { |value| "%#{value}" }, true)],
36
+ Operators::I_CONTAINS => [likes(proc { |value| "%#{value}%" }, false)],
37
+ Operators::I_STARTS_WITH => [likes(proc { |value| "#{value}%" }, false)],
38
+ Operators::I_ENDS_WITH => [likes(proc { |value| "%#{value}" }, false)],
39
39
  Operators::I_LIKE => [match(false)],
40
40
  Operators::LIKE => [match(true)]
41
41
  }
@@ -13,9 +13,9 @@ module ForestAdminDatasourceToolkit
13
13
 
14
14
  def self.compare(operator)
15
15
  {
16
- dependsOn: [operator],
17
- forTypes: ['Date', 'Dateonly'],
18
- replacer: lambda { |leaf, tz|
16
+ depends_on: [operator],
17
+ for_types: ['Date', 'Dateonly'],
18
+ replacer: proc { |leaf, tz|
19
19
  leaf.override(operator: operator, value: format(yield(Time.now.in_time_zone(tz), leaf.value)))
20
20
  }
21
21
  }
@@ -23,9 +23,9 @@ module ForestAdminDatasourceToolkit
23
23
 
24
24
  def self.interval(start_fn, end_fn)
25
25
  {
26
- dependsOn: [Operators::LESS_THAN, Operators::GREATER_THAN],
27
- forTypes: ['Date', 'Dateonly'],
28
- replacer: lambda do |leaf, tz|
26
+ depends_on: [Operators::LESS_THAN, Operators::GREATER_THAN],
27
+ for_types: ['Date', 'Dateonly'],
28
+ replacer: proc do |leaf, tz|
29
29
  value_greater_than = if leaf.value.nil?
30
30
  format(start_fn.call(Time.now.in_time_zone(tz)))
31
31
  else
@@ -53,17 +53,21 @@ module ForestAdminDatasourceToolkit
53
53
 
54
54
  def self.previous_interval(duration)
55
55
  interval(
56
- lambda { |now|
57
- duration == 'quarter' ? now.prev_quarter : (now - 1.send(duration)).send(:"beginning_of_#{duration}")
56
+ proc { |now|
57
+ if duration == 'quarter'
58
+ now.prev_quarter.send(:"beginning_of_#{duration}")
59
+ else
60
+ (now - 1.send(duration)).send(:"beginning_of_#{duration}")
61
+ end
58
62
  },
59
- ->(now) { now.send(:"beginning_of_#{duration}") }
63
+ proc { |now| now.send(:"beginning_of_#{duration}") }
60
64
  )
61
65
  end
62
66
 
63
67
  def self.previous_interval_to_date(duration)
64
68
  interval(
65
- ->(now) { now.send(:"beginning_of_#{duration}") },
66
- ->(now) { now }
69
+ proc { |now| now.send(:"beginning_of_#{duration}") },
70
+ proc { |now| now }
67
71
  )
68
72
  end
69
73
 
@@ -86,20 +90,20 @@ module ForestAdminDatasourceToolkit
86
90
  Operators::PREVIOUS_YEAR => [previous_interval('year')],
87
91
  Operators::PREVIOUS_X_DAYS_TO_DATE => [
88
92
  interval(
89
- ->(now, value) { (now - value.days).beginning_of_day },
90
- ->(now, _value) { now }
93
+ proc { |now, value| (now - value.days).beginning_of_day },
94
+ proc { |now, _value| now }
91
95
  )
92
96
  ],
93
97
  Operators::PREVIOUS_X_DAYS => [
94
98
  interval(
95
- ->(now, value) { (now - value.days).beginning_of_day },
96
- ->(now, _value) { now.beginning_of_day }
99
+ proc { |now, value| (now - value.days).beginning_of_day },
100
+ proc { |now, _value| now.beginning_of_day }
97
101
  )
98
102
  ],
99
103
  Operators::TODAY => [
100
104
  interval(
101
- ->(now) { now.beginning_of_day },
102
- ->(now) { (now + 1.day).beginning_of_day }
105
+ proc { |now| now.beginning_of_day },
106
+ proc { |now| (now + 1.day).beginning_of_day }
103
107
  )
104
108
  ]
105
109
  }
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceToolkit
2
- VERSION = "1.0.0-beta.25"
2
+ VERSION = "1.0.0-beta.26"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_datasource_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.beta.25
4
+ version: 1.0.0.pre.beta.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-12-20 00:00:00.000000000 Z
12
+ date: 2024-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport