forest_liana 7.2.0 → 7.4.0
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 +4 -4
- data/app/controllers/forest_liana/actions_controller.rb +3 -0
- data/app/controllers/forest_liana/associations_controller.rb +4 -0
- data/app/controllers/forest_liana/base_controller.rb +1 -0
- data/app/controllers/forest_liana/resources_controller.rb +8 -0
- data/app/controllers/forest_liana/router.rb +1 -0
- data/app/controllers/forest_liana/scopes_controller.rb +1 -0
- data/app/controllers/forest_liana/smart_actions_controller.rb +4 -0
- data/app/controllers/forest_liana/stats_controller.rb +2 -0
- data/app/services/forest_liana/intercom_attributes_getter.rb +1 -0
- data/app/services/forest_liana/intercom_conversation_getter.rb +1 -0
- data/app/services/forest_liana/intercom_conversations_getter.rb +1 -0
- data/app/services/forest_liana/ip_whitelist.rb +1 -0
- data/app/services/forest_liana/permissions_checker.rb +8 -1
- data/app/services/forest_liana/permissions_getter.rb +1 -0
- data/app/services/forest_liana/resources_getter.rb +1 -0
- data/app/services/forest_liana/schema_adapter.rb +4 -1
- data/app/services/forest_liana/search_query_builder.rb +1 -0
- data/app/services/forest_liana/stripe_invoices_getter.rb +1 -0
- data/app/services/forest_liana/stripe_payments_getter.rb +1 -0
- data/app/services/forest_liana/stripe_sources_getter.rb +1 -0
- data/app/services/forest_liana/stripe_subscriptions_getter.rb +1 -0
- data/config/initializers/httpclient.rb +11 -0
- data/config/initializers/logger.rb +8 -1
- data/lib/forest_liana/bootstrapper.rb +3 -1
- data/lib/forest_liana/collection.rb +1 -0
- data/lib/forest_liana/engine.rb +3 -0
- data/lib/forest_liana/schema_file_updater.rb +1 -0
- data/lib/forest_liana/version.rb +1 -1
- data/lib/forest_liana.rb +2 -0
- data/spec/config/initializers/logger_spec.rb +37 -0
- data/spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb +28 -0
- data/spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb +38 -0
- metadata +135 -134
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: adc1d7ec157183e6001f0c62980ae41cac6812a06e4fb8d1d5189609e478c2c6
|
|
4
|
+
data.tar.gz: 21ccd896ff434a672683d6d384aa70e80b531c95189294551c3466a5ead3a5b6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ce716a35923e78b2d00f066aa717e2a4fcd62506fe9073d370cbf30af90b1474a26cf940cd0a2aed1cf959b6c93cfe9314268e4a9ed048042ec3f04b9a227826
|
|
7
|
+
data.tar.gz: 5bb96fed2cc7218d162d4f0ac9df00b6270efa909deaab5ed84289cebe41606b36230423844584b9d65efd7b19588f06f42f90798d6515a05c0a2e2c2755011d
|
|
@@ -5,6 +5,7 @@ module ForestLiana
|
|
|
5
5
|
begin
|
|
6
6
|
params[:data][:attributes]
|
|
7
7
|
rescue => error
|
|
8
|
+
FOREST_REPORTER.report error
|
|
8
9
|
FOREST_LOGGER.error "Smart Action hook request error: #{error}"
|
|
9
10
|
{}
|
|
10
11
|
end
|
|
@@ -19,6 +20,7 @@ module ForestLiana
|
|
|
19
20
|
begin
|
|
20
21
|
collection.actions.find {|action| ActiveSupport::Inflector.parameterize(action.name) == params[:action_name]}
|
|
21
22
|
rescue => error
|
|
23
|
+
FOREST_REPORTER.report error
|
|
22
24
|
FOREST_LOGGER.error "Smart Action get action retrieval error: #{error}"
|
|
23
25
|
nil
|
|
24
26
|
end
|
|
@@ -57,6 +59,7 @@ module ForestLiana
|
|
|
57
59
|
rescue ForestLiana::Errors::SmartActionInvalidFieldError => invalid_field_error
|
|
58
60
|
FOREST_LOGGER.warn invalid_field_error.message
|
|
59
61
|
rescue ForestLiana::Errors::SmartActionInvalidFieldHookError => invalid_hook_error
|
|
62
|
+
FOREST_REPORTER.report invalid_hook_error
|
|
60
63
|
FOREST_LOGGER.error invalid_hook_error.message
|
|
61
64
|
return render status: 500, json: { error: invalid_hook_error.message }
|
|
62
65
|
end
|
|
@@ -18,6 +18,7 @@ module ForestLiana
|
|
|
18
18
|
format.csv { render_csv(getter, @association.klass) }
|
|
19
19
|
end
|
|
20
20
|
rescue => error
|
|
21
|
+
FOREST_REPORTER.report error
|
|
21
22
|
FOREST_LOGGER.error "Association Index error: #{error}\n#{format_stacktrace(error)}"
|
|
22
23
|
internal_server_error
|
|
23
24
|
end
|
|
@@ -30,6 +31,7 @@ module ForestLiana
|
|
|
30
31
|
|
|
31
32
|
render serializer: nil, json: { count: getter.records_count }
|
|
32
33
|
rescue => error
|
|
34
|
+
FOREST_REPORTER.report error
|
|
33
35
|
FOREST_LOGGER.error "Association Index Count error: #{error}\n#{format_stacktrace(error)}"
|
|
34
36
|
internal_server_error
|
|
35
37
|
end
|
|
@@ -47,6 +49,7 @@ module ForestLiana
|
|
|
47
49
|
head :no_content
|
|
48
50
|
end
|
|
49
51
|
rescue => error
|
|
52
|
+
FOREST_REPORTER.report error
|
|
50
53
|
FOREST_LOGGER.error "Association Update error: #{error}\n#{format_stacktrace(error)}"
|
|
51
54
|
internal_server_error
|
|
52
55
|
end
|
|
@@ -59,6 +62,7 @@ module ForestLiana
|
|
|
59
62
|
|
|
60
63
|
head :no_content
|
|
61
64
|
rescue => error
|
|
65
|
+
FOREST_REPORTER.report error
|
|
62
66
|
FOREST_LOGGER.error "Association Associate error: #{error}\n#{format_stacktrace(error)}"
|
|
63
67
|
internal_server_error
|
|
64
68
|
end
|
|
@@ -30,6 +30,7 @@ module ForestLiana
|
|
|
30
30
|
}])
|
|
31
31
|
render(serializer: nil, json: error_data, status: exception.status)
|
|
32
32
|
rescue => exception
|
|
33
|
+
FOREST_REPORTER.report exception
|
|
33
34
|
FOREST_LOGGER.error(exception)
|
|
34
35
|
FOREST_LOGGER.error(exception.backtrace.join("\n"))
|
|
35
36
|
render(serializer: nil, json: nil, status: :internal_server_error)
|
|
@@ -47,6 +47,7 @@ module ForestLiana
|
|
|
47
47
|
}])
|
|
48
48
|
render(serializer: nil, json: error_data, status: error.status)
|
|
49
49
|
rescue => error
|
|
50
|
+
FOREST_REPORTER.report error
|
|
50
51
|
FOREST_LOGGER.error "Records Index error: #{error}\n#{format_stacktrace(error)}"
|
|
51
52
|
internal_server_error
|
|
52
53
|
end
|
|
@@ -79,6 +80,7 @@ module ForestLiana
|
|
|
79
80
|
}])
|
|
80
81
|
render(serializer: nil, json: error_data, status: error.status)
|
|
81
82
|
rescue => error
|
|
83
|
+
FOREST_REPORTER.report error
|
|
82
84
|
FOREST_LOGGER.error "Records Index Count error: #{error}\n#{format_stacktrace(error)}"
|
|
83
85
|
internal_server_error
|
|
84
86
|
end
|
|
@@ -96,6 +98,7 @@ module ForestLiana
|
|
|
96
98
|
rescue ActiveRecord::RecordNotFound
|
|
97
99
|
render serializer: nil, json: { status: 404 }, status: :not_found
|
|
98
100
|
rescue => error
|
|
101
|
+
FOREST_REPORTER.report error
|
|
99
102
|
FOREST_LOGGER.error "Record Show error: #{error}\n#{format_stacktrace(error)}"
|
|
100
103
|
internal_server_error
|
|
101
104
|
end
|
|
@@ -119,6 +122,7 @@ module ForestLiana
|
|
|
119
122
|
creator.record.errors), status: 400
|
|
120
123
|
end
|
|
121
124
|
rescue => error
|
|
125
|
+
FOREST_REPORTER.report error
|
|
122
126
|
FOREST_LOGGER.error "Record Create error: #{error}\n#{format_stacktrace(error)}"
|
|
123
127
|
internal_server_error
|
|
124
128
|
end
|
|
@@ -142,6 +146,7 @@ module ForestLiana
|
|
|
142
146
|
updater.record.errors), status: 400
|
|
143
147
|
end
|
|
144
148
|
rescue => error
|
|
149
|
+
FOREST_REPORTER.report error
|
|
145
150
|
FOREST_LOGGER.error "Record Update error: #{error}\n#{format_stacktrace(error)}"
|
|
146
151
|
internal_server_error
|
|
147
152
|
end
|
|
@@ -162,6 +167,7 @@ module ForestLiana
|
|
|
162
167
|
|
|
163
168
|
head :no_content
|
|
164
169
|
rescue => error
|
|
170
|
+
FOREST_REPORTER.report error
|
|
165
171
|
FOREST_LOGGER.error "Record Destroy error: #{error}\n#{format_stacktrace(error)}"
|
|
166
172
|
internal_server_error
|
|
167
173
|
end
|
|
@@ -175,6 +181,7 @@ module ForestLiana
|
|
|
175
181
|
|
|
176
182
|
head :no_content
|
|
177
183
|
rescue => error
|
|
184
|
+
FOREST_REPORTER.report error
|
|
178
185
|
FOREST_LOGGER.error "Records Destroy error: #{error}\n#{format_stacktrace(error)}"
|
|
179
186
|
internal_server_error
|
|
180
187
|
end
|
|
@@ -190,6 +197,7 @@ module ForestLiana
|
|
|
190
197
|
render serializer: nil, json: { status: 404 }, status: :not_found
|
|
191
198
|
end
|
|
192
199
|
rescue => error
|
|
200
|
+
FOREST_REPORTER.report error
|
|
193
201
|
FOREST_LOGGER.error "Find Collection error: #{error}\n#{format_stacktrace(error)}"
|
|
194
202
|
render serializer: nil, json: { status: 404 }, status: :not_found
|
|
195
203
|
end
|
|
@@ -39,6 +39,7 @@ class ForestLiana::Router
|
|
|
39
39
|
|
|
40
40
|
controller.action(action.to_sym).call(env)
|
|
41
41
|
rescue NoMethodError => exception
|
|
42
|
+
FOREST_REPORTER.report exception
|
|
42
43
|
FOREST_LOGGER.error "Routing error: #{exception}\n#{exception.backtrace.join("\n\t")}"
|
|
43
44
|
ForestLiana::BaseController.action(:route_not_found).call(env)
|
|
44
45
|
end
|
|
@@ -12,6 +12,7 @@ module ForestLiana
|
|
|
12
12
|
ForestLiana::ScopeManager.invalidate_scope_cache(rendering_id)
|
|
13
13
|
return render serializer: nil, json: { status: 200 }, status: :ok
|
|
14
14
|
rescue => error
|
|
15
|
+
FOREST_REPORTER.report error
|
|
15
16
|
FOREST_LOGGER.error "Error during scope cache invalidation: #{error.message}"
|
|
16
17
|
render serializer: nil, json: {status: 500 }, status: :internal_server_error
|
|
17
18
|
end
|
|
@@ -12,6 +12,7 @@ module ForestLiana
|
|
|
12
12
|
begin
|
|
13
13
|
params[:data][:attributes]
|
|
14
14
|
rescue => error
|
|
15
|
+
FOREST_REPORTER.report error
|
|
15
16
|
FOREST_LOGGER.error "Smart Action execution error: #{error}"
|
|
16
17
|
{}
|
|
17
18
|
end
|
|
@@ -47,6 +48,7 @@ module ForestLiana
|
|
|
47
48
|
# target records are out of scope
|
|
48
49
|
render serializer: nil, json: { error: 'Smart Action: target record not found' }, status: :bad_request
|
|
49
50
|
rescue => error
|
|
51
|
+
FOREST_REPORTER.report error
|
|
50
52
|
FOREST_LOGGER.error "Smart Action: #{error}\n#{format_stacktrace(error)}"
|
|
51
53
|
render serializer: nil, json: { error: 'Smart Action: failed to evaluate permissions' }, status: :internal_server_error
|
|
52
54
|
end
|
|
@@ -70,6 +72,7 @@ module ForestLiana
|
|
|
70
72
|
render serializer: nil, json: { status: 400 }, status: :bad_request
|
|
71
73
|
end
|
|
72
74
|
rescue => error
|
|
75
|
+
FOREST_REPORTER.report error
|
|
73
76
|
FOREST_LOGGER.error "Smart Action execution error: #{error}"
|
|
74
77
|
render serializer: nil, json: { status: 400 }, status: :bad_request
|
|
75
78
|
end
|
|
@@ -85,6 +88,7 @@ module ForestLiana
|
|
|
85
88
|
end
|
|
86
89
|
resource
|
|
87
90
|
rescue => error
|
|
91
|
+
FOREST_REPORTER.report error
|
|
88
92
|
FOREST_LOGGER.error "Find Collection error: #{error}\n#{format_stacktrace(error)}"
|
|
89
93
|
render serializer: nil, json: { status: 404 }, status: :not_found
|
|
90
94
|
end
|
|
@@ -60,6 +60,7 @@ module ForestLiana
|
|
|
60
60
|
render json: { errors: [{ status: 422, detail: error.message }] },
|
|
61
61
|
status: :unprocessable_entity, serializer: nil
|
|
62
62
|
rescue => error
|
|
63
|
+
FOREST_REPORTER.report error
|
|
63
64
|
FOREST_LOGGER.error "Live Query error: #{error.message}"
|
|
64
65
|
render json: { errors: [{ status: 422, detail: error.message }] },
|
|
65
66
|
status: :unprocessable_entity, serializer: nil
|
|
@@ -110,6 +111,7 @@ module ForestLiana
|
|
|
110
111
|
|
|
111
112
|
return head :forbidden unless checker.is_authorized?
|
|
112
113
|
rescue => error
|
|
114
|
+
FOREST_REPORTER.report error
|
|
113
115
|
FOREST_LOGGER.error "Stats execution error: #{error}"
|
|
114
116
|
render serializer: nil, json: { status: 400 }, status: :bad_request
|
|
115
117
|
end
|
|
@@ -14,6 +14,7 @@ module ForestLiana
|
|
|
14
14
|
rescue Intercom::ResourceNotFound
|
|
15
15
|
@record = nil
|
|
16
16
|
rescue Intercom::UnexpectedError => exception
|
|
17
|
+
FOREST_REPORTER.report exception
|
|
17
18
|
FOREST_LOGGER.error "Cannot retrieve the Intercom conversation: #{exception.message}"
|
|
18
19
|
@record = nil
|
|
19
20
|
end
|
|
@@ -31,6 +31,7 @@ module ForestLiana
|
|
|
31
31
|
rescue Intercom::ResourceNotFound
|
|
32
32
|
@records = []
|
|
33
33
|
rescue Intercom::UnexpectedError => exception
|
|
34
|
+
FOREST_REPORTER.report exception
|
|
34
35
|
FOREST_LOGGER.error "Cannot retrieve the Intercom conversations: #{exception.message}"
|
|
35
36
|
@records = []
|
|
36
37
|
end
|
|
@@ -21,6 +21,7 @@ module ForestLiana
|
|
|
21
21
|
false
|
|
22
22
|
end
|
|
23
23
|
rescue => exception
|
|
24
|
+
FOREST_REPORTER.report exception
|
|
24
25
|
FOREST_LOGGER.error 'Cannot retrieve the IP Whitelist from the Forest server.'
|
|
25
26
|
FOREST_LOGGER.error 'Which was caused by:'
|
|
26
27
|
ForestLiana::Errors::ExceptionHelper.recursively_print(exception, margin: ' ', is_error: true)
|
|
@@ -159,9 +159,16 @@ module ForestLiana
|
|
|
159
159
|
|
|
160
160
|
def segment_query_allowed?
|
|
161
161
|
segments_queries_permissions = get_segments_in_permissions
|
|
162
|
-
|
|
162
|
+
# NOTICE: The segmentQuery should be in the segments_queries_permissions
|
|
163
163
|
return false unless segments_queries_permissions
|
|
164
164
|
|
|
165
|
+
# Handle UNION queries made by the FRONT to display available actions on details view
|
|
166
|
+
unionQueries = @collection_list_parameters[:segmentQuery].split('/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION ');
|
|
167
|
+
if unionQueries.length > 1
|
|
168
|
+
# Are unionQueries all included only in the allowed queries
|
|
169
|
+
return unionQueries.all? { |unionQuery| segments_queries_permissions.select { |query| query.gsub(/;\s*/i, '') === unionQuery }.length > 0 };
|
|
170
|
+
end
|
|
171
|
+
|
|
165
172
|
# NOTICE: @query_request_info matching an existing segment query
|
|
166
173
|
return segments_queries_permissions.include? @collection_list_parameters[:segmentQuery]
|
|
167
174
|
end
|
|
@@ -47,6 +47,7 @@ module ForestLiana
|
|
|
47
47
|
raise "Forest API returned an #{ForestLiana::Errors::HTTPErrorHelper.format(response)}"
|
|
48
48
|
end
|
|
49
49
|
rescue => exception
|
|
50
|
+
FOREST_REPORTER.report exception
|
|
50
51
|
FOREST_LOGGER.error 'Cannot retrieve the permissions from the Forest server.'
|
|
51
52
|
FOREST_LOGGER.error 'Which was caused by:'
|
|
52
53
|
ForestLiana::Errors::ExceptionHelper.recursively_print(exception, margin: ' ', is_error: true)
|
|
@@ -261,6 +261,7 @@ module ForestLiana
|
|
|
261
261
|
FOREST_LOGGER.warn "The association \"#{association.name.to_s}\" " \
|
|
262
262
|
"does not seem to exist for model \"#{@model.name}\"."
|
|
263
263
|
rescue => exception
|
|
264
|
+
FOREST_REPORTER.report exception
|
|
264
265
|
FOREST_LOGGER.error "An error occured trying to add " \
|
|
265
266
|
"\"#{association.name.to_s}\" association:\n#{exception}"
|
|
266
267
|
end
|
|
@@ -350,10 +351,12 @@ module ForestLiana
|
|
|
350
351
|
type = 'Number'
|
|
351
352
|
when :json, :jsonb, :hstore
|
|
352
353
|
type = 'Json'
|
|
353
|
-
when :string, :text, :citext
|
|
354
|
+
when :string, :text, :citext
|
|
354
355
|
type = 'String'
|
|
355
356
|
when :time
|
|
356
357
|
type = 'Time'
|
|
358
|
+
when :uuid
|
|
359
|
+
type = 'Uuid'
|
|
357
360
|
end
|
|
358
361
|
|
|
359
362
|
is_array = (column.respond_to?(:array) && column.array == true)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'httpclient'
|
|
2
|
+
|
|
3
|
+
class HTTPClient
|
|
4
|
+
alias original_initialize initialize
|
|
5
|
+
|
|
6
|
+
def initialize(*args, &block)
|
|
7
|
+
original_initialize(*args, &block)
|
|
8
|
+
# NOTICE: Force use of the default system CA certs (instead of the 6 year old bundled ones).
|
|
9
|
+
@session_manager&.ssl_config&.set_default_paths
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -18,12 +18,19 @@ module ForestLiana
|
|
|
18
18
|
displayed_message = "[#{datetime.to_s(:db)}] Forest 🌳🌳🌳 " \
|
|
19
19
|
"#{message}\n"
|
|
20
20
|
"\e[#{logger_colors[severity.to_sym]}m#{displayed_message}\033[0m"
|
|
21
|
-
|
|
21
|
+
end
|
|
22
22
|
logger
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
class Reporter
|
|
29
|
+
def self.report (error)
|
|
30
|
+
ForestLiana.reporter.report error if ForestLiana.reporter
|
|
31
|
+
end
|
|
32
|
+
end
|
|
27
33
|
end
|
|
28
34
|
|
|
29
35
|
FOREST_LOGGER = ForestLiana::Logger.log
|
|
36
|
+
FOREST_REPORTER = ForestLiana::Reporter
|
|
@@ -82,7 +82,8 @@ module ForestLiana
|
|
|
82
82
|
@collections_sent = content['collections']
|
|
83
83
|
@meta_sent = content['meta']
|
|
84
84
|
generate_action_hooks
|
|
85
|
-
rescue JSON::JSONError
|
|
85
|
+
rescue JSON::JSONError => error
|
|
86
|
+
FOREST_REPORTER.report error
|
|
86
87
|
FOREST_LOGGER.error "The content of .forestadmin-schema.json file is not a correct JSON."
|
|
87
88
|
FOREST_LOGGER.error "The schema cannot be synchronized with Forest Admin servers."
|
|
88
89
|
end
|
|
@@ -122,6 +123,7 @@ module ForestLiana
|
|
|
122
123
|
end
|
|
123
124
|
end
|
|
124
125
|
rescue => exception
|
|
126
|
+
FOREST_REPORTER.report exception
|
|
125
127
|
FOREST_LOGGER.error "Cannot fetch properly model #{model.name}:\n" \
|
|
126
128
|
"#{exception}"
|
|
127
129
|
end
|
|
@@ -91,6 +91,7 @@ module ForestLiana::Collection
|
|
|
91
91
|
begin
|
|
92
92
|
object.instance_eval(&block)
|
|
93
93
|
rescue => exception
|
|
94
|
+
FOREST_REPORTER.report exception
|
|
94
95
|
FOREST_LOGGER.error "Cannot retrieve the " + name.to_s + " value because of an " \
|
|
95
96
|
"internal error in the getter implementation: " + exception.message
|
|
96
97
|
nil
|
data/lib/forest_liana/engine.rb
CHANGED
|
@@ -37,6 +37,7 @@ module ForestLiana
|
|
|
37
37
|
end
|
|
38
38
|
nil
|
|
39
39
|
rescue => exception
|
|
40
|
+
FOREST_REPORTER.report exception
|
|
40
41
|
exception
|
|
41
42
|
end
|
|
42
43
|
end
|
|
@@ -51,6 +52,7 @@ module ForestLiana
|
|
|
51
52
|
ActiveRecord::Base.connection_pool.with_connection { |connection| connection.active? }
|
|
52
53
|
rescue => error
|
|
53
54
|
database_available = false
|
|
55
|
+
FOREST_REPORTER.report error
|
|
54
56
|
FOREST_LOGGER.error "No Apimap sent to Forest servers, it seems that the database is not accessible:\n#{error}"
|
|
55
57
|
end
|
|
56
58
|
database_available
|
|
@@ -75,6 +77,7 @@ module ForestLiana
|
|
|
75
77
|
|
|
76
78
|
config.after_initialize do |app|
|
|
77
79
|
if error
|
|
80
|
+
FOREST_REPORTER.report error
|
|
78
81
|
FOREST_LOGGER.error "Impossible to set the whitelisted Forest " \
|
|
79
82
|
"domains for CORS constraint:\n#{error}"
|
|
80
83
|
end
|
|
@@ -102,6 +102,7 @@ module ForestLiana
|
|
|
102
102
|
rescue ForestLiana::Errors::SmartActionInvalidFieldError => invalid_field_error
|
|
103
103
|
FOREST_LOGGER.warn invalid_field_error.message
|
|
104
104
|
rescue ForestLiana::Errors::SmartActionInvalidFieldHookError => invalid_hook_error
|
|
105
|
+
FOREST_REPORTER.report invalid_hook_error
|
|
105
106
|
FOREST_LOGGER.error invalid_hook_error.message
|
|
106
107
|
end
|
|
107
108
|
action['fields'] = action['fields'].map { |field| field.slice(*KEYS_ACTION_FIELD) }
|
data/lib/forest_liana/version.rb
CHANGED
data/lib/forest_liana.rb
CHANGED
|
@@ -28,6 +28,7 @@ module ForestLiana
|
|
|
28
28
|
mattr_accessor :names_overriden
|
|
29
29
|
mattr_accessor :meta
|
|
30
30
|
mattr_accessor :logger
|
|
31
|
+
mattr_accessor :reporter
|
|
31
32
|
# TODO: Remove once lianas prior to 2.0.0 are not supported anymore.
|
|
32
33
|
mattr_accessor :names_old_overriden
|
|
33
34
|
|
|
@@ -40,6 +41,7 @@ module ForestLiana
|
|
|
40
41
|
self.names_overriden = {}
|
|
41
42
|
self.meta = {}
|
|
42
43
|
self.logger = nil
|
|
44
|
+
self.reporter = nil
|
|
43
45
|
|
|
44
46
|
@config_dir = 'lib/forest_liana/**/*.rb'
|
|
45
47
|
|
|
@@ -27,4 +27,41 @@ module ForestLiana
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
|
+
|
|
31
|
+
describe Reporter do
|
|
32
|
+
describe 'self.reporter' do
|
|
33
|
+
describe 'with a reporter provided' do
|
|
34
|
+
it 'should report the error' do
|
|
35
|
+
class SampleReporter
|
|
36
|
+
def report(error)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
spier = spy('sampleReporter')
|
|
41
|
+
|
|
42
|
+
ForestLiana.reporter = spier
|
|
43
|
+
FOREST_REPORTER.report(Exception.new "sample error")
|
|
44
|
+
|
|
45
|
+
expect(spier).to have_received(:report)
|
|
46
|
+
ForestLiana.reporter = nil
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'without any reporter provided' do
|
|
51
|
+
it 'should not report the error' do
|
|
52
|
+
class ErrorReporter
|
|
53
|
+
def report(error)
|
|
54
|
+
expect(false).to be_truthy
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
spier = spy('errorReporter')
|
|
59
|
+
|
|
60
|
+
FOREST_REPORTER.report(Exception.new "sample error")
|
|
61
|
+
|
|
62
|
+
expect(spier).not_to have_received(:export)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
30
67
|
end
|
|
@@ -481,6 +481,14 @@ module ForestLiana
|
|
|
481
481
|
end
|
|
482
482
|
end
|
|
483
483
|
|
|
484
|
+
context 'when user has no segments and param segmentQuery is there' do
|
|
485
|
+
let(:segmentQuery) { 'SELECT * FROM products;' }
|
|
486
|
+
let(:collection_list_parameters) { { :user_id => "1", :segmentQuery => segmentQuery } }
|
|
487
|
+
it 'should be authorized' do
|
|
488
|
+
expect(subject.is_authorized?).to be false
|
|
489
|
+
end
|
|
490
|
+
end
|
|
491
|
+
|
|
484
492
|
context 'when segments are defined' do
|
|
485
493
|
let(:segments_permissions) { ['SELECT * FROM products;', 'SELECT * FROM sellers;'] }
|
|
486
494
|
let(:collection_list_parameters) { { :user_id => "1", :segmentQuery => segmentQuery } }
|
|
@@ -499,6 +507,26 @@ module ForestLiana
|
|
|
499
507
|
end
|
|
500
508
|
end
|
|
501
509
|
|
|
510
|
+
context 'when received union segments NOT passing validation' do
|
|
511
|
+
let(:segmentQuery) { 'SELECT * FROM sellers/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2' }
|
|
512
|
+
it 'should return false' do
|
|
513
|
+
expect(subject.is_authorized?).to be false
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
context 'when received union segments passing validation' do
|
|
518
|
+
let(:segmentQuery) { 'SELECT * FROM sellers/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT * FROM products' }
|
|
519
|
+
it 'should return true' do
|
|
520
|
+
expect(subject.is_authorized?).to be true
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
context 'when received union segments with UNION inside passing validation' do
|
|
524
|
+
let(:segmentQuery) { 'SELECT COUNT(*) AS value FROM products/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2' }
|
|
525
|
+
let(:segments_permissions) { ['SELECT COUNT(*) AS value FROM products;', 'SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;', 'SELECT * FROM products;', 'SELECT * FROM sellers;'] }
|
|
526
|
+
it 'should return true' do
|
|
527
|
+
expect(subject.is_authorized?).to be true
|
|
528
|
+
end
|
|
529
|
+
end
|
|
502
530
|
end
|
|
503
531
|
|
|
504
532
|
context 'when user has not the required permission' do
|
|
@@ -458,6 +458,14 @@ module ForestLiana
|
|
|
458
458
|
end
|
|
459
459
|
end
|
|
460
460
|
|
|
461
|
+
context 'when user has no segments queries permissions and param segmentQuery is there' do
|
|
462
|
+
let(:segmentQuery) { 'SELECT * FROM products;' }
|
|
463
|
+
let(:collection_list_parameters) { { :user_id => "1", :segmentQuery => segmentQuery } }
|
|
464
|
+
it 'should be authorized' do
|
|
465
|
+
expect(subject.is_authorized?).to be false
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
|
|
461
469
|
context 'when segments are defined' do
|
|
462
470
|
let(:default_rendering_id) { 1 }
|
|
463
471
|
let(:segments_permissions) {
|
|
@@ -484,6 +492,36 @@ module ForestLiana
|
|
|
484
492
|
expect(subject.is_authorized?).to be false
|
|
485
493
|
end
|
|
486
494
|
end
|
|
495
|
+
|
|
496
|
+
context 'when received union segments NOT passing validation' do
|
|
497
|
+
let(:segmentQuery) { 'SELECT * FROM sellers/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2' }
|
|
498
|
+
it 'should return false' do
|
|
499
|
+
expect(subject.is_authorized?).to be false
|
|
500
|
+
end
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
context 'when received union segments passing validation' do
|
|
504
|
+
let(:segmentQuery) { 'SELECT * FROM sellers/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT * FROM products' }
|
|
505
|
+
it 'should return true' do
|
|
506
|
+
expect(subject.is_authorized?).to be true
|
|
507
|
+
end
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
context 'when received union segments with UNION inside passing validation' do
|
|
511
|
+
let(:segmentQuery) { 'SELECT COUNT(*) AS value FROM products/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2' }
|
|
512
|
+
let(:segments_permissions) {
|
|
513
|
+
{
|
|
514
|
+
default_rendering_id => {
|
|
515
|
+
collection_name => {
|
|
516
|
+
'segments' => ['SELECT COUNT(*) AS value FROM products;', 'SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;', 'SELECT * FROM products;', 'SELECT * FROM sellers;']
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
it 'should return true' do
|
|
522
|
+
expect(subject.is_authorized?).to be true
|
|
523
|
+
end
|
|
524
|
+
end
|
|
487
525
|
end
|
|
488
526
|
end
|
|
489
527
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: forest_liana
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.
|
|
4
|
+
version: 7.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sandro Munda
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -302,6 +302,7 @@ files:
|
|
|
302
302
|
- config/initializers/arel-helpers.rb
|
|
303
303
|
- config/initializers/error-messages.rb
|
|
304
304
|
- config/initializers/errors.rb
|
|
305
|
+
- config/initializers/httpclient.rb
|
|
305
306
|
- config/initializers/logger.rb
|
|
306
307
|
- config/initializers/time_formats.rb
|
|
307
308
|
- config/routes.rb
|
|
@@ -509,171 +510,171 @@ signing_key:
|
|
|
509
510
|
specification_version: 4
|
|
510
511
|
summary: Official Rails Liana for Forest
|
|
511
512
|
test_files:
|
|
512
|
-
- test/
|
|
513
|
-
- test/
|
|
514
|
-
- test/forest_liana_test.rb
|
|
515
|
-
- test/routing/route_test.rb
|
|
516
|
-
- test/dummy/bin/rake
|
|
517
|
-
- test/dummy/bin/bundle
|
|
513
|
+
- test/test_helper.rb
|
|
514
|
+
- test/dummy/config.ru
|
|
518
515
|
- test/dummy/bin/setup
|
|
516
|
+
- test/dummy/bin/bundle
|
|
517
|
+
- test/dummy/bin/rake
|
|
519
518
|
- test/dummy/bin/rails
|
|
520
|
-
- test/dummy/config/boot.rb
|
|
521
|
-
- test/dummy/config/secrets.yml
|
|
522
|
-
- test/dummy/config/routes.rb
|
|
523
|
-
- test/dummy/config/environments/test.rb
|
|
524
|
-
- test/dummy/config/environments/development.rb
|
|
525
|
-
- test/dummy/config/environments/production.rb
|
|
526
|
-
- test/dummy/config/locales/en.yml
|
|
527
|
-
- test/dummy/config/initializers/inflections.rb
|
|
528
|
-
- test/dummy/config/initializers/cookies_serializer.rb
|
|
529
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
|
530
|
-
- test/dummy/config/initializers/mime_types.rb
|
|
531
|
-
- test/dummy/config/initializers/assets.rb
|
|
532
|
-
- test/dummy/config/initializers/session_store.rb
|
|
533
|
-
- test/dummy/config/initializers/filter_parameter_logging.rb
|
|
534
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
535
|
-
- test/dummy/config/application.rb
|
|
536
|
-
- test/dummy/config/database.yml
|
|
537
|
-
- test/dummy/config/environment.rb
|
|
538
519
|
- test/dummy/Rakefile
|
|
539
520
|
- test/dummy/db/schema.rb
|
|
540
|
-
- test/dummy/db/migrate/
|
|
541
|
-
- test/dummy/db/migrate/20181111162121_create_references_table.rb
|
|
542
|
-
- test/dummy/db/migrate/20160628173505_add_timestamps.rb
|
|
543
|
-
- test/dummy/db/migrate/20150608130516_create_date_field.rb
|
|
544
|
-
- test/dummy/db/migrate/20150608131610_create_float_field.rb
|
|
545
|
-
- test/dummy/db/migrate/20150608132159_create_boolean_field.rb
|
|
521
|
+
- test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
|
|
546
522
|
- test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
|
|
547
|
-
- test/dummy/db/migrate/
|
|
548
|
-
- test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
|
|
549
|
-
- test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
|
|
550
|
-
- test/dummy/db/migrate/20170614141921_create_serialize_field.rb
|
|
551
|
-
- test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
|
|
552
|
-
- test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
|
|
553
|
-
- test/dummy/db/migrate/20150608133044_create_has_one_field.rb
|
|
523
|
+
- test/dummy/db/migrate/20150608130516_create_date_field.rb
|
|
554
524
|
- test/dummy/db/migrate/20150608132621_create_string_field.rb
|
|
555
525
|
- test/dummy/db/migrate/20160627172810_create_owner.rb
|
|
526
|
+
- test/dummy/db/migrate/20170614141921_create_serialize_field.rb
|
|
527
|
+
- test/dummy/db/migrate/20150608131430_create_integer_field.rb
|
|
528
|
+
- test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
|
|
529
|
+
- test/dummy/db/migrate/20150608131610_create_float_field.rb
|
|
530
|
+
- test/dummy/db/migrate/20160628173505_add_timestamps.rb
|
|
556
531
|
- test/dummy/db/migrate/20150608150016_create_has_many_field.rb
|
|
557
|
-
- test/dummy/db/migrate/
|
|
532
|
+
- test/dummy/db/migrate/20150608131603_create_decimal_field.rb
|
|
533
|
+
- test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
|
|
534
|
+
- test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
|
|
535
|
+
- test/dummy/db/migrate/20181111162121_create_references_table.rb
|
|
558
536
|
- test/dummy/db/migrate/20160627172951_create_tree.rb
|
|
559
|
-
- test/dummy/
|
|
537
|
+
- test/dummy/db/migrate/20150608133044_create_has_one_field.rb
|
|
538
|
+
- test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
|
|
539
|
+
- test/dummy/db/migrate/20150608132159_create_boolean_field.rb
|
|
560
540
|
- test/dummy/public/422.html
|
|
561
|
-
- test/dummy/public/404.html
|
|
562
541
|
- test/dummy/public/favicon.ico
|
|
563
|
-
- test/dummy/
|
|
564
|
-
- test/dummy/
|
|
565
|
-
- test/dummy/
|
|
566
|
-
- test/dummy/
|
|
567
|
-
- test/dummy/
|
|
568
|
-
- test/dummy/
|
|
569
|
-
- test/dummy/
|
|
570
|
-
- test/dummy/
|
|
542
|
+
- test/dummy/public/500.html
|
|
543
|
+
- test/dummy/public/404.html
|
|
544
|
+
- test/dummy/README.rdoc
|
|
545
|
+
- test/dummy/config/secrets.yml
|
|
546
|
+
- test/dummy/config/environments/test.rb
|
|
547
|
+
- test/dummy/config/environments/production.rb
|
|
548
|
+
- test/dummy/config/environments/development.rb
|
|
549
|
+
- test/dummy/config/boot.rb
|
|
550
|
+
- test/dummy/config/routes.rb
|
|
551
|
+
- test/dummy/config/locales/en.yml
|
|
552
|
+
- test/dummy/config/application.rb
|
|
553
|
+
- test/dummy/config/database.yml
|
|
554
|
+
- test/dummy/config/environment.rb
|
|
555
|
+
- test/dummy/config/initializers/cookies_serializer.rb
|
|
556
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
|
557
|
+
- test/dummy/config/initializers/inflections.rb
|
|
558
|
+
- test/dummy/config/initializers/session_store.rb
|
|
559
|
+
- test/dummy/config/initializers/assets.rb
|
|
560
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
561
|
+
- test/dummy/config/initializers/mime_types.rb
|
|
562
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
|
563
|
+
- test/dummy/app/helpers/application_helper.rb
|
|
564
|
+
- test/dummy/app/views/layouts/application.html.erb
|
|
565
|
+
- test/dummy/app/controllers/application_controller.rb
|
|
571
566
|
- test/dummy/app/models/date_field.rb
|
|
572
|
-
- test/dummy/app/models/serialize_field.rb
|
|
573
|
-
- test/dummy/app/models/has_many_field.rb
|
|
574
|
-
- test/dummy/app/models/tree.rb
|
|
575
567
|
- test/dummy/app/models/belongs_to_class_name_field.rb
|
|
576
|
-
- test/dummy/app/models/has_and_belongs_to_many_field.rb
|
|
577
568
|
- test/dummy/app/models/float_field.rb
|
|
578
|
-
- test/dummy/app/models/
|
|
569
|
+
- test/dummy/app/models/has_many_through_field.rb
|
|
570
|
+
- test/dummy/app/models/decimal_field.rb
|
|
571
|
+
- test/dummy/app/models/serialize_field.rb
|
|
572
|
+
- test/dummy/app/models/has_and_belongs_to_many_field.rb
|
|
573
|
+
- test/dummy/app/models/has_many_field.rb
|
|
574
|
+
- test/dummy/app/models/owner.rb
|
|
579
575
|
- test/dummy/app/models/polymorphic_field.rb
|
|
576
|
+
- test/dummy/app/models/tree.rb
|
|
580
577
|
- test/dummy/app/models/string_field.rb
|
|
581
|
-
- test/dummy/app/models/
|
|
582
|
-
- test/dummy/app/
|
|
583
|
-
- test/dummy/app/
|
|
578
|
+
- test/dummy/app/models/belongs_to_field.rb
|
|
579
|
+
- test/dummy/app/models/integer_field.rb
|
|
580
|
+
- test/dummy/app/models/has_one_field.rb
|
|
581
|
+
- test/dummy/app/models/boolean_field.rb
|
|
582
|
+
- test/dummy/app/models/has_many_class_name_field.rb
|
|
583
|
+
- test/dummy/app/models/reference.rb
|
|
584
584
|
- test/dummy/app/assets/javascripts/application.js
|
|
585
|
-
- test/dummy/app/
|
|
586
|
-
- test/dummy/app/
|
|
587
|
-
- test/
|
|
588
|
-
- test/
|
|
589
|
-
- test/
|
|
590
|
-
- test/fixtures/
|
|
591
|
-
- test/fixtures/
|
|
585
|
+
- test/dummy/app/assets/stylesheets/application.css
|
|
586
|
+
- test/dummy/app/assets/config/manifest.js
|
|
587
|
+
- test/routing/route_test.rb
|
|
588
|
+
- test/services/forest_liana/schema_adapter_test.rb
|
|
589
|
+
- test/services/forest_liana/operator_date_interval_parser_test.rb
|
|
590
|
+
- test/fixtures/belongs_to_field.yml
|
|
591
|
+
- test/fixtures/tree.yml
|
|
592
592
|
- test/fixtures/owner.yml
|
|
593
|
+
- test/fixtures/reference.yml
|
|
594
|
+
- test/fixtures/has_many_through_field.yml
|
|
593
595
|
- test/fixtures/has_one_field.yml
|
|
594
|
-
- test/fixtures/tree.yml
|
|
595
596
|
- test/fixtures/serialize_field.yml
|
|
596
|
-
- test/fixtures/
|
|
597
|
-
- test/fixtures/
|
|
598
|
-
- test/
|
|
599
|
-
- spec/
|
|
600
|
-
- spec/
|
|
601
|
-
- spec/services/forest_liana/filters_parser_spec.rb
|
|
602
|
-
- spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
|
|
603
|
-
- spec/services/forest_liana/value_stat_getter_spec.rb
|
|
604
|
-
- spec/services/forest_liana/pie_stat_getter_spec.rb
|
|
605
|
-
- spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
|
|
606
|
-
- spec/services/forest_liana/smart_action_field_validator_spec.rb
|
|
607
|
-
- spec/services/forest_liana/schema_adapter_spec.rb
|
|
608
|
-
- spec/services/forest_liana/permissions_getter_spec.rb
|
|
609
|
-
- spec/services/forest_liana/resources_getter_spec.rb
|
|
610
|
-
- spec/services/forest_liana/line_stat_getter_spec.rb
|
|
611
|
-
- spec/services/forest_liana/apimap_sorter_spec.rb
|
|
612
|
-
- spec/services/forest_liana/ip_whitelist_checker_spec.rb
|
|
613
|
-
- spec/services/forest_liana/resource_updater_spec.rb
|
|
614
|
-
- spec/services/forest_liana/permissions_checker_live_queries_spec.rb
|
|
615
|
-
- spec/services/forest_liana/scope_manager_spec.rb
|
|
616
|
-
- spec/config/initializers/logger_spec.rb
|
|
617
|
-
- spec/requests/resources_spec.rb
|
|
597
|
+
- test/fixtures/string_field.yml
|
|
598
|
+
- test/fixtures/has_many_field.yml
|
|
599
|
+
- test/forest_liana_test.rb
|
|
600
|
+
- spec/helpers/forest_liana/query_helper_spec.rb
|
|
601
|
+
- spec/helpers/forest_liana/schema_helper_spec.rb
|
|
618
602
|
- spec/requests/stats_spec.rb
|
|
619
|
-
- spec/requests/
|
|
603
|
+
- spec/requests/resources_spec.rb
|
|
620
604
|
- spec/requests/authentications_spec.rb
|
|
621
|
-
- spec/
|
|
622
|
-
- spec/
|
|
623
|
-
- spec/lib/forest_liana/bootstrapper_spec.rb
|
|
624
|
-
- spec/rails_helper.rb
|
|
625
|
-
- spec/dummy/bin/rake
|
|
626
|
-
- spec/dummy/bin/bundle
|
|
605
|
+
- spec/requests/actions_controller_spec.rb
|
|
606
|
+
- spec/dummy/config.ru
|
|
627
607
|
- spec/dummy/bin/setup
|
|
608
|
+
- spec/dummy/bin/bundle
|
|
609
|
+
- spec/dummy/bin/rake
|
|
628
610
|
- spec/dummy/bin/rails
|
|
629
|
-
- spec/dummy/
|
|
611
|
+
- spec/dummy/lib/forest_liana/collections/user.rb
|
|
612
|
+
- spec/dummy/lib/forest_liana/collections/island.rb
|
|
613
|
+
- spec/dummy/lib/forest_liana/collections/location.rb
|
|
614
|
+
- spec/dummy/Rakefile
|
|
615
|
+
- spec/dummy/db/schema.rb
|
|
616
|
+
- spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
|
|
617
|
+
- spec/dummy/db/migrate/20190226174951_create_tree.rb
|
|
618
|
+
- spec/dummy/db/migrate/20210526084712_create_products.rb
|
|
619
|
+
- spec/dummy/db/migrate/20190226172951_create_user.rb
|
|
620
|
+
- spec/dummy/db/migrate/20210326110524_create_references.rb
|
|
621
|
+
- spec/dummy/db/migrate/20190226173051_create_isle.rb
|
|
622
|
+
- spec/dummy/db/migrate/20210326140855_create_locations.rb
|
|
623
|
+
- spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
|
|
624
|
+
- spec/dummy/db/migrate/20210511141752_create_owners.rb
|
|
625
|
+
- spec/dummy/README.rdoc
|
|
630
626
|
- spec/dummy/config/secrets.yml
|
|
631
|
-
- spec/dummy/config/routes.rb
|
|
632
627
|
- spec/dummy/config/environments/test.rb
|
|
633
|
-
- spec/dummy/config/environments/development.rb
|
|
634
628
|
- spec/dummy/config/environments/production.rb
|
|
635
|
-
- spec/dummy/config/
|
|
636
|
-
- spec/dummy/config/
|
|
629
|
+
- spec/dummy/config/environments/development.rb
|
|
630
|
+
- spec/dummy/config/boot.rb
|
|
631
|
+
- spec/dummy/config/routes.rb
|
|
632
|
+
- spec/dummy/config/application.rb
|
|
633
|
+
- spec/dummy/config/database.yml
|
|
634
|
+
- spec/dummy/config/environment.rb
|
|
637
635
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
|
638
636
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
|
639
|
-
- spec/dummy/config/initializers/
|
|
640
|
-
- spec/dummy/config/initializers/assets.rb
|
|
637
|
+
- spec/dummy/config/initializers/inflections.rb
|
|
641
638
|
- spec/dummy/config/initializers/session_store.rb
|
|
642
|
-
- spec/dummy/config/initializers/
|
|
639
|
+
- spec/dummy/config/initializers/forest_liana.rb
|
|
640
|
+
- spec/dummy/config/initializers/assets.rb
|
|
643
641
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
|
644
|
-
- spec/dummy/config/
|
|
645
|
-
- spec/dummy/config/
|
|
646
|
-
- spec/dummy/
|
|
647
|
-
- spec/dummy/
|
|
648
|
-
- spec/dummy/
|
|
649
|
-
- spec/dummy/
|
|
650
|
-
- spec/dummy/db/migrate/20210511141752_create_owners.rb
|
|
651
|
-
- spec/dummy/db/migrate/20190226172951_create_user.rb
|
|
652
|
-
- spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
|
|
653
|
-
- spec/dummy/db/migrate/20210326140855_create_locations.rb
|
|
654
|
-
- spec/dummy/db/migrate/20210326110524_create_references.rb
|
|
655
|
-
- spec/dummy/db/migrate/20210526084712_create_products.rb
|
|
656
|
-
- spec/dummy/db/migrate/20190226173051_create_isle.rb
|
|
657
|
-
- spec/dummy/db/migrate/20190226174951_create_tree.rb
|
|
658
|
-
- spec/dummy/config.ru
|
|
659
|
-
- spec/dummy/lib/forest_liana/collections/location.rb
|
|
660
|
-
- spec/dummy/lib/forest_liana/collections/user.rb
|
|
661
|
-
- spec/dummy/lib/forest_liana/collections/island.rb
|
|
662
|
-
- spec/dummy/app/config/routes.rb
|
|
663
|
-
- spec/dummy/app/models/reference.rb
|
|
642
|
+
- spec/dummy/config/initializers/mime_types.rb
|
|
643
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
|
644
|
+
- spec/dummy/app/helpers/application_helper.rb
|
|
645
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
|
646
|
+
- spec/dummy/app/controllers/forest/islands_controller.rb
|
|
647
|
+
- spec/dummy/app/controllers/application_controller.rb
|
|
664
648
|
- spec/dummy/app/models/product.rb
|
|
665
|
-
- spec/dummy/app/models/location.rb
|
|
666
649
|
- spec/dummy/app/models/user.rb
|
|
667
|
-
- spec/dummy/app/models/island.rb
|
|
668
650
|
- spec/dummy/app/models/owner.rb
|
|
669
651
|
- spec/dummy/app/models/tree.rb
|
|
670
|
-
- spec/dummy/app/
|
|
671
|
-
- spec/dummy/app/
|
|
652
|
+
- spec/dummy/app/models/island.rb
|
|
653
|
+
- spec/dummy/app/models/location.rb
|
|
654
|
+
- spec/dummy/app/models/reference.rb
|
|
672
655
|
- spec/dummy/app/assets/javascripts/application.js
|
|
673
|
-
- spec/dummy/app/
|
|
674
|
-
- spec/dummy/app/
|
|
675
|
-
- spec/dummy/app/
|
|
676
|
-
- spec/
|
|
677
|
-
- spec/
|
|
678
|
-
- spec/
|
|
679
|
-
- spec/
|
|
656
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
|
657
|
+
- spec/dummy/app/assets/config/manifest.js
|
|
658
|
+
- spec/dummy/app/config/routes.rb
|
|
659
|
+
- spec/rails_helper.rb
|
|
660
|
+
- spec/services/forest_liana/permissions_getter_spec.rb
|
|
661
|
+
- spec/services/forest_liana/filters_parser_spec.rb
|
|
662
|
+
- spec/services/forest_liana/schema_adapter_spec.rb
|
|
663
|
+
- spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
|
|
664
|
+
- spec/services/forest_liana/smart_action_field_validator_spec.rb
|
|
665
|
+
- spec/services/forest_liana/apimap_sorter_spec.rb
|
|
666
|
+
- spec/services/forest_liana/permissions_formatter_spec.rb
|
|
667
|
+
- spec/services/forest_liana/line_stat_getter_spec.rb
|
|
668
|
+
- spec/services/forest_liana/pie_stat_getter_spec.rb
|
|
669
|
+
- spec/services/forest_liana/has_many_getter_spec.rb
|
|
670
|
+
- spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
|
|
671
|
+
- spec/services/forest_liana/ip_whitelist_checker_spec.rb
|
|
672
|
+
- spec/services/forest_liana/resources_getter_spec.rb
|
|
673
|
+
- spec/services/forest_liana/value_stat_getter_spec.rb
|
|
674
|
+
- spec/services/forest_liana/scope_manager_spec.rb
|
|
675
|
+
- spec/services/forest_liana/permissions_checker_live_queries_spec.rb
|
|
676
|
+
- spec/services/forest_liana/resource_updater_spec.rb
|
|
677
|
+
- spec/lib/forest_liana/bootstrapper_spec.rb
|
|
678
|
+
- spec/lib/forest_liana/schema_file_updater_spec.rb
|
|
679
|
+
- spec/spec_helper.rb
|
|
680
|
+
- spec/config/initializers/logger_spec.rb
|