forest_admin_datasource_toolkit 1.0.0.pre.beta.24 → 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 +4 -4
- data/lib/forest_admin_datasource_toolkit/collection.rb +4 -3
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/condition_tree_equivalent.rb +1 -1
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_leaf.rb +10 -7
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/operators.rb +42 -53
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/comparisons.rb +11 -11
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb +12 -12
- data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/times.rb +21 -17
- data/lib/forest_admin_datasource_toolkit/decorators/collection_decorator.rb +2 -3
- data/lib/forest_admin_datasource_toolkit/decorators/schema/schema_collection_decorator.rb +21 -0
- data/lib/forest_admin_datasource_toolkit/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9749205ecd01ce84b131e59b25235bd4555bd5bb64ec5620d283bc46ab51ebb3
|
4
|
+
data.tar.gz: 474671b8aa198bd1a2cbb1b0c95e95bab9e2275572344990376aa37d1b3773ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7d84033214299dbcec6ce24d8d20a538de1895dca6349ef5b32c9cbf3744df3df3994a5cb10263055a4f8ac30c160756595a80c6b1088e100f25d389e3b4732
|
7
|
+
data.tar.gz: da6e1e8ead04fab78151c72117a73d89c0b4665df2c1c10c16b130fe9e492ab0ca5ec7b9b552343b8e5b90a99dbd5469a4da761d4d90ac24a753f42399e3ba2f
|
@@ -18,7 +18,8 @@ module ForestAdminDatasourceToolkit
|
|
18
18
|
@name = name
|
19
19
|
@native_driver = native_driver
|
20
20
|
@schema = {
|
21
|
-
fields: {}
|
21
|
+
fields: {},
|
22
|
+
countable: false
|
22
23
|
}
|
23
24
|
@actions = {}
|
24
25
|
@segments = {}
|
@@ -28,11 +29,11 @@ module ForestAdminDatasourceToolkit
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def enable_count
|
31
|
-
@countable = true
|
32
|
+
@schema[:countable] = true
|
32
33
|
end
|
33
34
|
|
34
35
|
def is_countable?
|
35
|
-
@countable
|
36
|
+
@schema[:countable]
|
36
37
|
end
|
37
38
|
|
38
39
|
def is_searchable?
|
@@ -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: "
|
36
|
-
return override(operator: @operator[4..]) if @operator.start_with?('
|
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
|
40
|
-
override(operator:
|
41
|
-
when
|
42
|
-
override(operator:
|
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 = '
|
7
|
-
NOT_EQUAL = '
|
8
|
-
LESS_THAN = '
|
9
|
-
GREATER_THAN = '
|
10
|
-
MATCH = '
|
11
|
-
LIKE = '
|
12
|
-
I_LIKE = '
|
13
|
-
NOT_CONTAINS = '
|
14
|
-
CONTAINS = '
|
15
|
-
I_CONTAINS = '
|
16
|
-
LONGER_THAN = '
|
17
|
-
SHORTER_THAN = '
|
18
|
-
INCLUDES_ALL = '
|
19
|
-
PRESENT = '
|
20
|
-
BLANK = '
|
21
|
-
IN = '
|
22
|
-
NOT_IN = '
|
23
|
-
STARTS_WITH = '
|
24
|
-
I_STARTS_WITH = '
|
25
|
-
ENDS_WITH = '
|
26
|
-
I_ENDS_WITH = '
|
27
|
-
MISSING = '
|
28
|
-
BEFORE = '
|
29
|
-
AFTER = '
|
30
|
-
AFTER_X_HOURS_AGO = '
|
31
|
-
BEFORE_X_HOURS_AGO = '
|
32
|
-
FUTURE = '
|
33
|
-
PAST = '
|
34
|
-
TODAY = '
|
35
|
-
YESTERDAY = '
|
36
|
-
PREVIOUS_WEEK = '
|
37
|
-
PREVIOUS_MONTH = '
|
38
|
-
PREVIOUS_QUARTER = '
|
39
|
-
PREVIOUS_YEAR = '
|
40
|
-
PREVIOUS_WEEK_TO_DATE = '
|
41
|
-
PREVIOUS_MONTH_TO_DATE = '
|
42
|
-
PREVIOUS_QUARTER_TO_DATE = '
|
43
|
-
PREVIOUS_YEAR_TO_DATE = '
|
44
|
-
PREVIOUS_X_DAYS = '
|
45
|
-
PREVIOUS_X_DAYS_TO_DATE = '
|
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
|
-
|
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
|
data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/comparisons.rb
CHANGED
@@ -12,41 +12,41 @@ module ForestAdminDatasourceToolkit
|
|
12
12
|
{
|
13
13
|
depends_on: [Operators::IN],
|
14
14
|
for_types: ['String'],
|
15
|
-
replacer:
|
15
|
+
replacer: proc { |leaf| leaf.override({ operator: Operators::IN, value: [nil, ''] }) }
|
16
16
|
},
|
17
17
|
{
|
18
18
|
depends_on: [Operators::MISSING],
|
19
|
-
replacer:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
109
|
+
replacer: proc { |leaf|
|
110
110
|
ConditionTreeFactory.intersect(
|
111
111
|
leaf.value.map { |item| leaf.override({ operator: Operators::NOT_EQUAL, value: item }) }
|
112
112
|
)
|
data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/pattern.rb
CHANGED
@@ -8,17 +8,17 @@ module ForestAdminDatasourceToolkit
|
|
8
8
|
operator = case_sensitive ? Operators::LIKE : Operators::I_LIKE
|
9
9
|
|
10
10
|
{
|
11
|
-
|
12
|
-
|
13
|
-
replacer:
|
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
|
-
|
20
|
-
|
21
|
-
replacer:
|
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(
|
34
|
-
Operators::STARTS_WITH => [likes(
|
35
|
-
Operators::ENDS_WITH => [likes(
|
36
|
-
Operators::I_CONTAINS => [likes(
|
37
|
-
Operators::I_STARTS_WITH => [likes(
|
38
|
-
Operators::I_ENDS_WITH => [likes(
|
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
|
}
|
data/lib/forest_admin_datasource_toolkit/components/query/condition_tree/transforms/times.rb
CHANGED
@@ -13,9 +13,9 @@ module ForestAdminDatasourceToolkit
|
|
13
13
|
|
14
14
|
def self.compare(operator)
|
15
15
|
{
|
16
|
-
|
17
|
-
|
18
|
-
replacer:
|
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
|
-
|
27
|
-
|
28
|
-
replacer:
|
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
|
-
|
57
|
-
duration == 'quarter'
|
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
|
-
|
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
|
-
|
66
|
-
|
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
|
-
|
90
|
-
|
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
|
-
|
96
|
-
|
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
|
-
|
102
|
-
|
105
|
+
proc { |now| now.beginning_of_day },
|
106
|
+
proc { |now| (now + 1.day).beginning_of_day }
|
103
107
|
)
|
104
108
|
]
|
105
109
|
}
|
@@ -13,14 +13,13 @@ module ForestAdminDatasourceToolkit
|
|
13
13
|
# a reference to parent collections from children.
|
14
14
|
return unless child_collection.is_a?(CollectionDecorator)
|
15
15
|
|
16
|
-
|
17
|
-
child_collection.mark_schema_as_dirty = lambda {
|
16
|
+
child_collection.define_singleton_method(:mark_schema_as_dirty) do
|
18
17
|
# Call the original method (the child)
|
19
18
|
original_child_mark_schema_as_dirty.call(child_collection)
|
20
19
|
|
21
20
|
# Invalidate our schema (the parent)
|
22
21
|
mark_schema_as_dirty
|
23
|
-
|
22
|
+
end
|
24
23
|
end
|
25
24
|
|
26
25
|
def native_driver
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ForestAdminDatasourceToolkit
|
2
|
+
module Decorators
|
3
|
+
module Schema
|
4
|
+
class SchemaCollectionDecorator < CollectionDecorator
|
5
|
+
def initialize(child_collection, datasource)
|
6
|
+
super
|
7
|
+
@schema_override = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def override_schema(value)
|
11
|
+
@schema_override.merge!(value)
|
12
|
+
mark_schema_as_dirty
|
13
|
+
end
|
14
|
+
|
15
|
+
def refine_schema(sub_schema)
|
16
|
+
sub_schema.merge(@schema_override)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
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.
|
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:
|
12
|
+
date: 2024-01-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/forest_admin_datasource_toolkit/datasource.rb
|
85
85
|
- lib/forest_admin_datasource_toolkit/decorators/collection_decorator.rb
|
86
86
|
- lib/forest_admin_datasource_toolkit/decorators/datasource_decorator.rb
|
87
|
+
- lib/forest_admin_datasource_toolkit/decorators/schema/schema_collection_decorator.rb
|
87
88
|
- lib/forest_admin_datasource_toolkit/exceptions/forest_exception.rb
|
88
89
|
- lib/forest_admin_datasource_toolkit/schema/column_schema.rb
|
89
90
|
- lib/forest_admin_datasource_toolkit/schema/primitive_type.rb
|