forest_liana 6.3.1 → 6.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/forest_liana/authentication_controller.rb +1 -1
- data/app/controllers/forest_liana/stats_controller.rb +5 -0
- data/app/services/forest_liana/line_stat_getter.rb +6 -4
- data/app/services/forest_liana/operator_date_interval_parser.rb +28 -24
- data/app/services/forest_liana/permissions_checker.rb +3 -4
- data/lib/forest_liana/bootstrapper.rb +14 -11
- data/lib/forest_liana/version.rb +1 -1
- data/spec/dummy/app/models/owner.rb +2 -0
- data/spec/dummy/db/migrate/20210511141752_create_owners.rb +8 -0
- data/spec/dummy/db/schema.rb +6 -1
- data/spec/requests/stats_spec.rb +7 -5
- data/spec/services/forest_liana/line_stat_getter_spec.rb +50 -0
- data/test/services/forest_liana/operator_date_interval_parser_test.rb +16 -0
- metadata +145 -137
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66dacaf5711daa88a6e891ce835dec5836041016e955f5272666ad45093a18c3
|
4
|
+
data.tar.gz: 8c3796af1284b52b6c49b08e9e56ecb6be11034db62b0bee45e82959c67c8265
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9d131b0ad9e5bd30699359e5cdab2d8be407addd55f9f60071758d07e92c9edf45c9d22ae8fcbd52012060888b2b7fb06a12dccc8dae98a5f9a0b288bfcacfd
|
7
|
+
data.tar.gz: 3c004eaaceaa30ad859eaea39f56b61d00de855d67b9d9dca3ad1218e227423f85fb0be2df903acfb1c25876003fce83bcfb56fc11fe08708bf9bda1404aed1b
|
@@ -5,7 +5,7 @@ module ForestLiana
|
|
5
5
|
class AuthenticationController < ForestLiana::BaseController
|
6
6
|
START_AUTHENTICATION_ROUTE = 'authentication'
|
7
7
|
CALLBACK_AUTHENTICATION_ROUTE = 'authentication/callback'
|
8
|
-
LOGOUT_ROUTE = 'authentication/logout'
|
8
|
+
LOGOUT_ROUTE = 'authentication/logout'
|
9
9
|
PUBLIC_ROUTES = [
|
10
10
|
"/#{START_AUTHENTICATION_ROUTE}",
|
11
11
|
"/#{CALLBACK_AUTHENTICATION_ROUTE}",
|
@@ -89,6 +89,11 @@ module ForestLiana
|
|
89
89
|
parameters.delete('controller');
|
90
90
|
parameters.delete('action');
|
91
91
|
|
92
|
+
# NOTICE: Remove the field information from group_by_field => collection:id
|
93
|
+
if parameters['group_by_field']
|
94
|
+
parameters['group_by_field'] = parameters['group_by_field'].split(':').first
|
95
|
+
end
|
96
|
+
|
92
97
|
return parameters;
|
93
98
|
end
|
94
99
|
|
@@ -3,6 +3,9 @@ module ForestLiana
|
|
3
3
|
attr_accessor :record
|
4
4
|
|
5
5
|
def client_timezone
|
6
|
+
# As stated here https://github.com/ankane/groupdate#for-sqlite
|
7
|
+
# groupdate does not handle timezone for SQLite
|
8
|
+
return false if 'SQLite' == ActiveRecord::Base.connection.adapter_name
|
6
9
|
@params[:timezone]
|
7
10
|
end
|
8
11
|
|
@@ -26,10 +29,9 @@ module ForestLiana
|
|
26
29
|
value = FiltersParser.new(@params[:filters], value, @params[:timezone]).apply_filters
|
27
30
|
end
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
})
|
32
|
+
Groupdate.week_start = :monday
|
33
|
+
|
34
|
+
value = value.send(time_range, group_by_date_field, time_zone: client_timezone)
|
33
35
|
|
34
36
|
value = value.send(@params[:aggregate].downcase, @params[:aggregate_field])
|
35
37
|
.map do |k, v|
|
@@ -73,30 +73,34 @@ module ForestLiana
|
|
73
73
|
def get_date_filter(operator, value)
|
74
74
|
return nil unless is_date_operator? operator
|
75
75
|
|
76
|
-
case operator
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
76
|
+
filter = case operator
|
77
|
+
when OPERATOR_FUTURE
|
78
|
+
">= '#{Time.now}'"
|
79
|
+
when OPERATOR_PAST
|
80
|
+
"<= '#{Time.now}'"
|
81
|
+
when OPERATOR_TODAY
|
82
|
+
"BETWEEN '#{to_client_timezone(Time.now.beginning_of_day)}' " +
|
83
|
+
"AND '#{to_client_timezone(Time.now.end_of_day)}'"
|
84
|
+
when OPERATOR_PREVIOUS_X_DAYS
|
85
|
+
ensure_integer_value(value)
|
86
|
+
"BETWEEN '" +
|
87
|
+
"#{to_client_timezone(Integer(value).day.ago.beginning_of_day)}'" +
|
88
|
+
" AND '#{to_client_timezone(1.day.ago.end_of_day)}'"
|
89
|
+
when OPERATOR_PREVIOUS_X_DAYS_TO_DATE
|
90
|
+
ensure_integer_value(value)
|
91
|
+
"BETWEEN '" +
|
92
|
+
"#{to_client_timezone((Integer(value) - 1).day.ago.beginning_of_day)}'" +
|
93
|
+
" AND '#{Time.now}'"
|
94
|
+
when OPERATOR_BEFORE_X_HOURS_AGO
|
95
|
+
ensure_integer_value(value)
|
96
|
+
"< '#{(Integer(value)).hour.ago}'"
|
97
|
+
when OPERATOR_AFTER_X_HOURS_AGO
|
98
|
+
ensure_integer_value(value)
|
99
|
+
"> '#{(Integer(value)).hour.ago}'"
|
100
|
+
end
|
101
|
+
|
102
|
+
if filter != nil
|
103
|
+
return filter
|
100
104
|
end
|
101
105
|
|
102
106
|
duration = PERIODS[operator][:duration]
|
@@ -177,13 +177,12 @@ module ForestLiana
|
|
177
177
|
return false unless pool_permissions
|
178
178
|
|
179
179
|
# NOTICE: equivalent to Object.values in js & removes nil values
|
180
|
-
|
180
|
+
array_permission_infos = @query_request_info.values.filter_map{ |x| x unless x.nil? }
|
181
181
|
|
182
|
-
# NOTICE: pool_permissions
|
183
|
-
# we use the intersection between statPermission and @query_request_info
|
182
|
+
# NOTICE: Is there any pool_permissions containing the array_permission_infos
|
184
183
|
return pool_permissions.any? {
|
185
184
|
|statPermission|
|
186
|
-
(
|
185
|
+
(array_permission_infos.all? { |info| statPermission.values.include?(info) });
|
187
186
|
}
|
188
187
|
end
|
189
188
|
|
@@ -53,6 +53,18 @@ module ForestLiana
|
|
53
53
|
collection.actions.find {|action| action.name == action_name}
|
54
54
|
end
|
55
55
|
|
56
|
+
def generate_action_hooks()
|
57
|
+
@collections_sent.each do |collection|
|
58
|
+
collection['actions'].each do |action|
|
59
|
+
c = get_collection(collection['name'])
|
60
|
+
a = get_action(c, action['name'])
|
61
|
+
load = !a.hooks.nil? && a.hooks.key?(:load) && a.hooks[:load].is_a?(Proc)
|
62
|
+
change = !a.hooks.nil? && a.hooks.key?(:change) && a.hooks[:change].is_a?(Hash) ? a.hooks[:change].keys : []
|
63
|
+
action['hooks'] = {:load => load, :change => change}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
56
68
|
def generate_apimap
|
57
69
|
create_apimap
|
58
70
|
require_lib_forest_liana
|
@@ -60,18 +72,8 @@ module ForestLiana
|
|
60
72
|
|
61
73
|
if Rails.env.development?
|
62
74
|
@collections_sent = ForestLiana.apimap.as_json
|
63
|
-
|
64
|
-
@collections_sent.each do |collection|
|
65
|
-
collection['actions'].each do |action|
|
66
|
-
c = get_collection(collection['name'])
|
67
|
-
a = get_action(c, action['name'])
|
68
|
-
load = !a.hooks.nil? && a.hooks.key?(:load) && a.hooks[:load].is_a?(Proc)
|
69
|
-
change = !a.hooks.nil? && a.hooks.key?(:change) && a.hooks[:change].is_a?(Hash) ? a.hooks[:change].keys : []
|
70
|
-
action['hooks'] = {:load => load, :change => change}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
75
|
@meta_sent = ForestLiana.meta
|
76
|
+
generate_action_hooks
|
75
77
|
SchemaFileUpdater.new(SCHEMA_FILENAME, @collections_sent, @meta_sent).perform()
|
76
78
|
else
|
77
79
|
if File.exists?(SCHEMA_FILENAME)
|
@@ -79,6 +81,7 @@ module ForestLiana
|
|
79
81
|
content = JSON.parse(File.read(SCHEMA_FILENAME))
|
80
82
|
@collections_sent = content['collections']
|
81
83
|
@meta_sent = content['meta']
|
84
|
+
generate_action_hooks
|
82
85
|
rescue JSON::JSONError
|
83
86
|
FOREST_LOGGER.error "The content of .forestadmin-schema.json file is not a correct JSON."
|
84
87
|
FOREST_LOGGER.error "The schema cannot be synchronized with Forest Admin servers."
|
data/lib/forest_liana/version.rb
CHANGED
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 2021_05_11_141752) do
|
14
14
|
|
15
15
|
create_table "isle", force: :cascade do |t|
|
16
16
|
t.string "name"
|
@@ -27,6 +27,11 @@ ActiveRecord::Schema.define(version: 2021_03_26_140855) do
|
|
27
27
|
t.index ["island_id"], name: "index_locations_on_island_id"
|
28
28
|
end
|
29
29
|
|
30
|
+
create_table "owners", force: :cascade do |t|
|
31
|
+
t.string "name"
|
32
|
+
t.datetime "hired_at"
|
33
|
+
end
|
34
|
+
|
30
35
|
create_table "references", force: :cascade do |t|
|
31
36
|
t.datetime "created_at", precision: 6, null: false
|
32
37
|
t.datetime "updated_at", precision: 6, null: false
|
data/spec/requests/stats_spec.rb
CHANGED
@@ -72,12 +72,14 @@ describe "Stats", type: :request do
|
|
72
72
|
expect(response.status).to eq(404)
|
73
73
|
end
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
it 'should respond 403 Forbidden' do
|
76
|
+
allow_any_instance_of(ForestLiana::PermissionsChecker).to receive(:is_authorized?) { false }
|
77
|
+
# NOTICE: bypass : find_resource error
|
78
|
+
allow_any_instance_of(ForestLiana::StatsController).to receive(:find_resource) { true }
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
post '/forest/stats/Products', params: JSON.dump(params), headers: headers
|
81
|
+
expect(response.status).to eq(403)
|
82
|
+
end
|
81
83
|
end
|
82
84
|
|
83
85
|
describe 'POST /stats' do
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
describe LineStatGetter do
|
3
|
+
describe 'Check client_timezone function' do
|
4
|
+
describe 'with a SQLite database' do
|
5
|
+
it 'should return false' do
|
6
|
+
expect(LineStatGetter.new(Owner, {
|
7
|
+
timezone: "Europe/Paris",
|
8
|
+
aggregate: "Count",
|
9
|
+
}).client_timezone).to eq(false)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'with a non-SQLite database' do
|
14
|
+
it 'should return the timezone' do
|
15
|
+
ActiveRecord::Base.connection.stub(:adapter_name) { 'NotSQLite' }
|
16
|
+
expect(LineStatGetter.new(Owner, {
|
17
|
+
timezone: "Europe/Paris",
|
18
|
+
aggregate: "Count",
|
19
|
+
}).client_timezone).to eq('Europe/Paris')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'Check perform function' do
|
25
|
+
describe 'Using a Count aggregation' do
|
26
|
+
describe 'Using a Week time range' do
|
27
|
+
it 'should return consistent data based on monday as week_start ' do
|
28
|
+
|
29
|
+
# Week should start on monday
|
30
|
+
# 08-05-2021 was a Saturday
|
31
|
+
Owner.create(name: 'Michel', hired_at: Date.parse('08-05-2021'));
|
32
|
+
Owner.create(name: 'Robert', hired_at: Date.parse('09-05-2021'));
|
33
|
+
Owner.create(name: 'José', hired_at: Date.parse('10-05-2021'));
|
34
|
+
Owner.create(name: 'Yves', hired_at: Date.parse('11-05-2021'));
|
35
|
+
|
36
|
+
stat = LineStatGetter.new(Owner, {
|
37
|
+
timezone: "Europe/Paris",
|
38
|
+
aggregate: "Count",
|
39
|
+
time_range: "Week",
|
40
|
+
group_by_date_field: "hired_at",
|
41
|
+
}).perform
|
42
|
+
|
43
|
+
expect(stat.value.find { |item| item[:label] == "W18-2021" }[:values][:value]).to eq(2)
|
44
|
+
expect(stat.value.find { |item| item[:label] == "W19-2021" }[:values][:value]).to eq(2)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class OperatorDateIntervalParserTest < ActiveSupport::TestCase
|
3
|
+
test 'OPERATOR_AFTER_X_HOURS_AGO and OPERATOR_BEFORE_X_HOURS_AGO should not take timezone into account' do
|
4
|
+
# Setting a big timezone (GMT+10) on purpose, the timezone should not be applied on the result date
|
5
|
+
operatorDateIntervalParser = OperatorDateIntervalParser.new('Australia/Sydney')
|
6
|
+
|
7
|
+
result = operatorDateIntervalParser.get_date_filter(OperatorDateIntervalParser::OPERATOR_AFTER_X_HOURS_AGO, 2)
|
8
|
+
hourComputed = result.split('> ')[1].tr('\'', '').to_datetime.hour
|
9
|
+
assert hourComputed == Time.now.utc.hour - 2
|
10
|
+
|
11
|
+
result = operatorDateIntervalParser.get_date_filter(OperatorDateIntervalParser::OPERATOR_BEFORE_X_HOURS_AGO, 2)
|
12
|
+
hourComputed = result.split('< ')[1].tr('\'', '').to_datetime.hour
|
13
|
+
assert hourComputed == Time.now.utc.hour - 2
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
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: 6.3.
|
4
|
+
version: 6.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sandro Munda
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: groupdate
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 5.0.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 5.0.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: useragent
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -326,6 +326,7 @@ files:
|
|
326
326
|
- spec/dummy/app/helpers/application_helper.rb
|
327
327
|
- spec/dummy/app/models/island.rb
|
328
328
|
- spec/dummy/app/models/location.rb
|
329
|
+
- spec/dummy/app/models/owner.rb
|
329
330
|
- spec/dummy/app/models/reference.rb
|
330
331
|
- spec/dummy/app/models/tree.rb
|
331
332
|
- spec/dummy/app/models/user.rb
|
@@ -360,6 +361,7 @@ files:
|
|
360
361
|
- spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
|
361
362
|
- spec/dummy/db/migrate/20210326110524_create_references.rb
|
362
363
|
- spec/dummy/db/migrate/20210326140855_create_locations.rb
|
364
|
+
- spec/dummy/db/migrate/20210511141752_create_owners.rb
|
363
365
|
- spec/dummy/db/schema.rb
|
364
366
|
- spec/dummy/lib/forest_liana/collections/location.rb
|
365
367
|
- spec/dummy/lib/forest_liana/collections/user.rb
|
@@ -374,6 +376,7 @@ files:
|
|
374
376
|
- spec/services/forest_liana/apimap_sorter_spec.rb
|
375
377
|
- spec/services/forest_liana/filters_parser_spec.rb
|
376
378
|
- spec/services/forest_liana/ip_whitelist_checker_spec.rb
|
379
|
+
- spec/services/forest_liana/line_stat_getter_spec.rb
|
377
380
|
- spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
|
378
381
|
- spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
|
379
382
|
- spec/services/forest_liana/permissions_checker_live_queries_spec.rb
|
@@ -467,6 +470,7 @@ files:
|
|
467
470
|
- test/forest_liana_test.rb
|
468
471
|
- test/routing/route_test.rb
|
469
472
|
- test/services/forest_liana/has_many_getter_test.rb
|
473
|
+
- test/services/forest_liana/operator_date_interval_parser_test.rb
|
470
474
|
- test/services/forest_liana/pie_stat_getter_test.rb
|
471
475
|
- test/services/forest_liana/resource_updater_test.rb
|
472
476
|
- test/services/forest_liana/schema_adapter_test.rb
|
@@ -477,7 +481,7 @@ homepage: https://github.com/ForestAdmin/forest-rails
|
|
477
481
|
licenses:
|
478
482
|
- GPL-3.0
|
479
483
|
metadata: {}
|
480
|
-
post_install_message:
|
484
|
+
post_install_message:
|
481
485
|
rdoc_options: []
|
482
486
|
require_paths:
|
483
487
|
- lib
|
@@ -493,164 +497,168 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
493
497
|
version: '0'
|
494
498
|
requirements: []
|
495
499
|
rubygems_version: 3.1.2
|
496
|
-
signing_key:
|
500
|
+
signing_key:
|
497
501
|
specification_version: 4
|
498
502
|
summary: Official Rails Liana for Forest
|
499
503
|
test_files:
|
500
|
-
- test/
|
501
|
-
- test/
|
502
|
-
- test/
|
503
|
-
- test/
|
504
|
-
- test/
|
505
|
-
- test/
|
506
|
-
- test/
|
507
|
-
- test/
|
508
|
-
- test/
|
509
|
-
- test/
|
510
|
-
- test/
|
511
|
-
- test/
|
512
|
-
- test/
|
513
|
-
- test/
|
514
|
-
- test/
|
515
|
-
- test/
|
516
|
-
- test/
|
517
|
-
- test/
|
518
|
-
- test/
|
519
|
-
- test/dummy/
|
520
|
-
- test/dummy/
|
504
|
+
- test/routing/route_test.rb
|
505
|
+
- test/fixtures/tree.yml
|
506
|
+
- test/fixtures/has_many_field.yml
|
507
|
+
- test/fixtures/serialize_field.yml
|
508
|
+
- test/fixtures/owner.yml
|
509
|
+
- test/fixtures/reference.yml
|
510
|
+
- test/fixtures/string_field.yml
|
511
|
+
- test/fixtures/belongs_to_field.yml
|
512
|
+
- test/fixtures/has_many_through_field.yml
|
513
|
+
- test/fixtures/has_one_field.yml
|
514
|
+
- test/test_helper.rb
|
515
|
+
- test/services/forest_liana/scope_validator_test.rb
|
516
|
+
- test/services/forest_liana/operator_date_interval_parser_test.rb
|
517
|
+
- test/services/forest_liana/has_many_getter_test.rb
|
518
|
+
- test/services/forest_liana/schema_adapter_test.rb
|
519
|
+
- test/services/forest_liana/pie_stat_getter_test.rb
|
520
|
+
- test/services/forest_liana/value_stat_getter_test.rb
|
521
|
+
- test/services/forest_liana/resource_updater_test.rb
|
522
|
+
- test/forest_liana_test.rb
|
523
|
+
- test/dummy/bin/bundle
|
524
|
+
- test/dummy/bin/setup
|
525
|
+
- test/dummy/bin/rake
|
526
|
+
- test/dummy/bin/rails
|
527
|
+
- test/dummy/config.ru
|
521
528
|
- test/dummy/public/500.html
|
529
|
+
- test/dummy/public/404.html
|
522
530
|
- test/dummy/public/422.html
|
523
531
|
- test/dummy/public/favicon.ico
|
524
|
-
- test/dummy/
|
525
|
-
- test/dummy/app/
|
532
|
+
- test/dummy/app/assets/stylesheets/application.css
|
533
|
+
- test/dummy/app/assets/config/manifest.js
|
534
|
+
- test/dummy/app/assets/javascripts/application.js
|
535
|
+
- test/dummy/app/helpers/application_helper.rb
|
536
|
+
- test/dummy/app/views/layouts/application.html.erb
|
526
537
|
- test/dummy/app/models/has_and_belongs_to_many_field.rb
|
527
|
-
- test/dummy/app/models/
|
528
|
-
- test/dummy/app/models/
|
529
|
-
- test/dummy/app/models/float_field.rb
|
530
|
-
- test/dummy/app/models/string_field.rb
|
531
|
-
- test/dummy/app/models/has_one_field.rb
|
532
|
-
- test/dummy/app/models/reference.rb
|
533
|
-
- test/dummy/app/models/serialize_field.rb
|
538
|
+
- test/dummy/app/models/decimal_field.rb
|
539
|
+
- test/dummy/app/models/owner.rb
|
534
540
|
- test/dummy/app/models/boolean_field.rb
|
541
|
+
- test/dummy/app/models/has_one_field.rb
|
542
|
+
- test/dummy/app/models/has_many_class_name_field.rb
|
535
543
|
- test/dummy/app/models/has_many_through_field.rb
|
536
|
-
- test/dummy/app/models/
|
537
|
-
- test/dummy/app/models/
|
544
|
+
- test/dummy/app/models/has_many_field.rb
|
545
|
+
- test/dummy/app/models/belongs_to_field.rb
|
538
546
|
- test/dummy/app/models/integer_field.rb
|
547
|
+
- test/dummy/app/models/belongs_to_class_name_field.rb
|
548
|
+
- test/dummy/app/models/polymorphic_field.rb
|
549
|
+
- test/dummy/app/models/serialize_field.rb
|
539
550
|
- test/dummy/app/models/tree.rb
|
551
|
+
- test/dummy/app/models/float_field.rb
|
552
|
+
- test/dummy/app/models/reference.rb
|
540
553
|
- test/dummy/app/models/date_field.rb
|
541
|
-
- test/dummy/app/models/
|
542
|
-
- test/dummy/app/
|
543
|
-
- test/dummy/
|
544
|
-
- test/dummy/
|
545
|
-
- test/dummy/
|
546
|
-
- test/dummy/
|
547
|
-
- test/dummy/
|
548
|
-
- test/dummy/
|
554
|
+
- test/dummy/app/models/string_field.rb
|
555
|
+
- test/dummy/app/controllers/application_controller.rb
|
556
|
+
- test/dummy/db/schema.rb
|
557
|
+
- test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
|
558
|
+
- test/dummy/db/migrate/20150608130516_create_date_field.rb
|
559
|
+
- test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
|
560
|
+
- test/dummy/db/migrate/20150608132621_create_string_field.rb
|
561
|
+
- test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
|
562
|
+
- test/dummy/db/migrate/20150608131430_create_integer_field.rb
|
563
|
+
- test/dummy/db/migrate/20160627172951_create_tree.rb
|
564
|
+
- test/dummy/db/migrate/20160628173505_add_timestamps.rb
|
565
|
+
- test/dummy/db/migrate/20150608131610_create_float_field.rb
|
566
|
+
- test/dummy/db/migrate/20160627172810_create_owner.rb
|
567
|
+
- test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
|
568
|
+
- test/dummy/db/migrate/20150608132159_create_boolean_field.rb
|
569
|
+
- test/dummy/db/migrate/20170614141921_create_serialize_field.rb
|
570
|
+
- test/dummy/db/migrate/20150608150016_create_has_many_field.rb
|
571
|
+
- test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
|
572
|
+
- test/dummy/db/migrate/20150608131603_create_decimal_field.rb
|
573
|
+
- test/dummy/db/migrate/20181111162121_create_references_table.rb
|
574
|
+
- test/dummy/db/migrate/20150608133044_create_has_one_field.rb
|
575
|
+
- test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
|
549
576
|
- test/dummy/README.rdoc
|
550
|
-
- test/dummy/
|
551
|
-
- test/dummy/config/
|
552
|
-
- test/dummy/config/secrets.yml
|
553
|
-
- test/dummy/config/boot.rb
|
554
|
-
- test/dummy/config/database.yml
|
555
|
-
- test/dummy/config/routes.rb
|
556
|
-
- test/dummy/config/application.rb
|
577
|
+
- test/dummy/Rakefile
|
578
|
+
- test/dummy/config/initializers/inflections.rb
|
557
579
|
- test/dummy/config/initializers/filter_parameter_logging.rb
|
580
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
558
581
|
- test/dummy/config/initializers/mime_types.rb
|
559
|
-
- test/dummy/config/initializers/session_store.rb
|
560
|
-
- test/dummy/config/initializers/inflections.rb
|
561
582
|
- test/dummy/config/initializers/assets.rb
|
562
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
563
583
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
584
|
+
- test/dummy/config/initializers/session_store.rb
|
564
585
|
- test/dummy/config/initializers/cookies_serializer.rb
|
565
|
-
- test/dummy/config/
|
586
|
+
- test/dummy/config/secrets.yml
|
587
|
+
- test/dummy/config/database.yml
|
588
|
+
- test/dummy/config/boot.rb
|
589
|
+
- test/dummy/config/locales/en.yml
|
590
|
+
- test/dummy/config/environment.rb
|
591
|
+
- test/dummy/config/application.rb
|
566
592
|
- test/dummy/config/environments/production.rb
|
567
593
|
- test/dummy/config/environments/development.rb
|
568
|
-
- test/dummy/config/
|
569
|
-
- test/dummy/
|
570
|
-
-
|
571
|
-
-
|
572
|
-
-
|
573
|
-
-
|
574
|
-
-
|
575
|
-
-
|
576
|
-
-
|
577
|
-
-
|
578
|
-
-
|
579
|
-
-
|
580
|
-
-
|
581
|
-
-
|
582
|
-
-
|
583
|
-
-
|
584
|
-
-
|
585
|
-
-
|
586
|
-
-
|
587
|
-
-
|
588
|
-
-
|
589
|
-
-
|
590
|
-
-
|
591
|
-
- spec/dummy/
|
592
|
-
- spec/dummy/
|
593
|
-
- spec/dummy/
|
594
|
-
- spec/dummy/
|
595
|
-
- spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
|
596
|
-
- spec/dummy/db/migrate/20190226172951_create_user.rb
|
597
|
-
- spec/dummy/db/migrate/20210326140855_create_locations.rb
|
598
|
-
- spec/dummy/db/schema.rb
|
599
|
-
- spec/dummy/lib/forest_liana/collections/location.rb
|
600
|
-
- spec/dummy/lib/forest_liana/collections/user.rb
|
601
|
-
- spec/dummy/Rakefile
|
602
|
-
- spec/dummy/app/controllers/application_controller.rb
|
603
|
-
- spec/dummy/app/models/island.rb
|
604
|
-
- spec/dummy/app/models/reference.rb
|
605
|
-
- spec/dummy/app/models/location.rb
|
606
|
-
- spec/dummy/app/models/tree.rb
|
607
|
-
- spec/dummy/app/models/user.rb
|
594
|
+
- test/dummy/config/environments/test.rb
|
595
|
+
- test/dummy/config/routes.rb
|
596
|
+
- spec/spec_helper.rb
|
597
|
+
- spec/rails_helper.rb
|
598
|
+
- spec/helpers/forest_liana/is_same_data_structure_helper_spec.rb
|
599
|
+
- spec/helpers/forest_liana/schema_helper_spec.rb
|
600
|
+
- spec/helpers/forest_liana/query_helper_spec.rb
|
601
|
+
- spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
|
602
|
+
- spec/services/forest_liana/resources_getter_spec.rb
|
603
|
+
- spec/services/forest_liana/filters_parser_spec.rb
|
604
|
+
- spec/services/forest_liana/permissions_getter_spec.rb
|
605
|
+
- spec/services/forest_liana/ip_whitelist_checker_spec.rb
|
606
|
+
- spec/services/forest_liana/schema_adapter_spec.rb
|
607
|
+
- spec/services/forest_liana/permissions_formatter_spec.rb
|
608
|
+
- spec/services/forest_liana/permissions_checker_live_queries_spec.rb
|
609
|
+
- spec/services/forest_liana/apimap_sorter_spec.rb
|
610
|
+
- spec/services/forest_liana/line_stat_getter_spec.rb
|
611
|
+
- spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
|
612
|
+
- spec/requests/actions_controller_spec.rb
|
613
|
+
- spec/requests/stats_spec.rb
|
614
|
+
- spec/requests/authentications_spec.rb
|
615
|
+
- spec/requests/resources_spec.rb
|
616
|
+
- spec/dummy/bin/bundle
|
617
|
+
- spec/dummy/bin/setup
|
618
|
+
- spec/dummy/bin/rake
|
619
|
+
- spec/dummy/bin/rails
|
620
|
+
- spec/dummy/config.ru
|
608
621
|
- spec/dummy/app/assets/stylesheets/application.css
|
609
|
-
- spec/dummy/app/assets/javascripts/application.js
|
610
622
|
- spec/dummy/app/assets/config/manifest.js
|
611
|
-
- spec/dummy/app/
|
623
|
+
- spec/dummy/app/assets/javascripts/application.js
|
612
624
|
- spec/dummy/app/helpers/application_helper.rb
|
613
625
|
- spec/dummy/app/views/layouts/application.html.erb
|
626
|
+
- spec/dummy/app/models/user.rb
|
627
|
+
- spec/dummy/app/models/owner.rb
|
628
|
+
- spec/dummy/app/models/island.rb
|
629
|
+
- spec/dummy/app/models/location.rb
|
630
|
+
- spec/dummy/app/models/tree.rb
|
631
|
+
- spec/dummy/app/models/reference.rb
|
632
|
+
- spec/dummy/app/config/routes.rb
|
633
|
+
- spec/dummy/app/controllers/application_controller.rb
|
634
|
+
- spec/dummy/db/schema.rb
|
635
|
+
- spec/dummy/db/migrate/20210511141752_create_owners.rb
|
636
|
+
- spec/dummy/db/migrate/20190226174951_create_tree.rb
|
637
|
+
- spec/dummy/db/migrate/20210326140855_create_locations.rb
|
638
|
+
- spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
|
639
|
+
- spec/dummy/db/migrate/20210326110524_create_references.rb
|
640
|
+
- spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
|
641
|
+
- spec/dummy/db/migrate/20190226173051_create_isle.rb
|
642
|
+
- spec/dummy/db/migrate/20190226172951_create_user.rb
|
643
|
+
- spec/dummy/lib/forest_liana/collections/user.rb
|
644
|
+
- spec/dummy/lib/forest_liana/collections/location.rb
|
614
645
|
- spec/dummy/README.rdoc
|
615
|
-
- spec/dummy/
|
616
|
-
- spec/dummy/config/
|
617
|
-
- spec/dummy/config/secrets.yml
|
618
|
-
- spec/dummy/config/boot.rb
|
619
|
-
- spec/dummy/config/database.yml
|
620
|
-
- spec/dummy/config/routes.rb
|
621
|
-
- spec/dummy/config/application.rb
|
646
|
+
- spec/dummy/Rakefile
|
647
|
+
- spec/dummy/config/initializers/inflections.rb
|
622
648
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
623
|
-
- spec/dummy/config/initializers/
|
649
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
624
650
|
- spec/dummy/config/initializers/mime_types.rb
|
625
|
-
- spec/dummy/config/initializers/
|
626
|
-
- spec/dummy/config/initializers/inflections.rb
|
651
|
+
- spec/dummy/config/initializers/forest_liana.rb
|
627
652
|
- spec/dummy/config/initializers/assets.rb
|
628
|
-
- spec/dummy/config/initializers/wrap_parameters.rb
|
629
653
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
654
|
+
- spec/dummy/config/initializers/session_store.rb
|
630
655
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
631
|
-
- spec/dummy/config/
|
656
|
+
- spec/dummy/config/secrets.yml
|
657
|
+
- spec/dummy/config/database.yml
|
658
|
+
- spec/dummy/config/boot.rb
|
659
|
+
- spec/dummy/config/environment.rb
|
660
|
+
- spec/dummy/config/application.rb
|
632
661
|
- spec/dummy/config/environments/production.rb
|
633
662
|
- spec/dummy/config/environments/development.rb
|
634
|
-
- spec/dummy/
|
635
|
-
- spec/dummy/
|
636
|
-
- spec/dummy/bin/rails
|
637
|
-
- spec/dummy/bin/setup
|
638
|
-
- spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
|
639
|
-
- spec/services/forest_liana/resources_getter_spec.rb
|
640
|
-
- spec/services/forest_liana/permissions_formatter_spec.rb
|
641
|
-
- spec/services/forest_liana/permissions_checker_live_queries_spec.rb
|
642
|
-
- spec/services/forest_liana/permissions_getter_spec.rb
|
643
|
-
- spec/services/forest_liana/schema_adapter_spec.rb
|
644
|
-
- spec/services/forest_liana/apimap_sorter_spec.rb
|
645
|
-
- spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
|
646
|
-
- spec/services/forest_liana/ip_whitelist_checker_spec.rb
|
647
|
-
- spec/services/forest_liana/filters_parser_spec.rb
|
648
|
-
- spec/rails_helper.rb
|
649
|
-
- spec/requests/resources_spec.rb
|
650
|
-
- spec/requests/authentications_spec.rb
|
651
|
-
- spec/requests/actions_controller_spec.rb
|
652
|
-
- spec/requests/stats_spec.rb
|
653
|
-
- spec/helpers/forest_liana/is_same_data_structure_helper_spec.rb
|
654
|
-
- spec/helpers/forest_liana/schema_helper_spec.rb
|
655
|
-
- spec/helpers/forest_liana/query_helper_spec.rb
|
656
|
-
- spec/spec_helper.rb
|
663
|
+
- spec/dummy/config/environments/test.rb
|
664
|
+
- spec/dummy/config/routes.rb
|