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

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: 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