forest_liana 6.3.0 → 6.3.5

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: 9db3ae9b9a24a9f298e24a2b6562e8df12b0123cbbe45f453fab19d8da7a8f10
4
- data.tar.gz: 4e245a23470730308895296e37e765a711186381820f2bf619e5091966cba6fc
3
+ metadata.gz: 834c9124265c1aee37c5dfcb4bf61bf47f9e874b7491fc746d77f4a8ce2844e2
4
+ data.tar.gz: 469622daee20e8211a8808a2a1c6c574f130c9035c6d45cd1b4e6b462696e7f8
5
5
  SHA512:
6
- metadata.gz: 9d87f2aa53059a2c6129bc5cc1d5107009121d6c97f08b2b6e745c55132ac333be420d9ea9f82fe4441c9b59a447eafad3f4111b4a8109650935d958664e6cd2
7
- data.tar.gz: 9e7300a1819a26f7ca5dd4f8d59fa58abdb009dca12b045c963c0a0fdf10398bdeb403833fc7b021b4c93257ef7799f57210c6e8cda8755b350d3252f548d0e6
6
+ metadata.gz: 5b1530018ef75a9621156626e13af9b7f0b41b0b555a9dbb6c4e7bafa2cdab1abe6641bc51e45f9c13fc29fe11ba6007f6d2f697f9f9763fe11c5e7120e4db05
7
+ data.tar.gz: 3c4e5fcce7f49d40e4e0ca18b385bf152df88675408add741acca22180c773e446730107fc5c1adf09cc70db5da98f978068267fbeddef1ff8b8627c18c36346
@@ -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 nil if 'SQLite' == ActiveRecord::Base.connection.adapter_name
6
9
  @params[:timezone]
7
10
  end
8
11
 
@@ -26,9 +29,10 @@ module ForestLiana
26
29
  value = FiltersParser.new(@params[:filters], value, @params[:timezone]).apply_filters
27
30
  end
28
31
 
32
+ Groupdate.week_start = :monday
33
+
29
34
  value = value.send(time_range, group_by_date_field, {
30
- time_zone: client_timezone,
31
- week_start: :mon
35
+ time_zone: client_timezone
32
36
  })
33
37
 
34
38
  value = value.send(@params[:aggregate].downcase, @params[:aggregate_field])
@@ -4,22 +4,20 @@ module ForestLiana
4
4
  class OidcClientManager
5
5
  def self.get_client_for_callback_url(callback_url)
6
6
  begin
7
- client_data = Rails.cache.read(callback_url) || nil
8
- if client_data.nil?
9
- configuration = ForestLiana::OidcConfigurationRetriever.retrieve()
10
-
11
- if ForestLiana.forest_client_id.nil?
7
+ configuration = ForestLiana::OidcConfigurationRetriever.retrieve()
8
+ if ForestLiana.forest_client_id.nil?
9
+ client_data = Rails.cache.read("#{callback_url}-#{ForestLiana.env_secret}-client-data") || nil
10
+ if client_data.nil?
12
11
  client_credentials = ForestLiana::OidcDynamicClientRegistrator.register({
13
12
  token_endpoint_auth_method: 'none',
14
13
  redirect_uris: [callback_url],
15
14
  registration_endpoint: configuration['registration_endpoint']
16
15
  })
17
- else
18
- client_credentials = { 'client_id' => ForestLiana.forest_client_id }
16
+ client_data = { :client_id => client_credentials['client_id'], :issuer => configuration['issuer'] }
17
+ Rails.cache.write("#{callback_url}-#{ForestLiana.env_secret}-client-data", client_data)
19
18
  end
20
-
21
- client_data = { :client_id => client_credentials['client_id'], :issuer => configuration['issuer'] }
22
- Rails.cache.write(callback_url, client_data)
19
+ else
20
+ client_data = { :client_id => ForestLiana.forest_client_id, :issuer => configuration['issuer'] }
23
21
  end
24
22
 
25
23
  OpenIDConnect::Client.new(
@@ -30,7 +28,7 @@ module ForestLiana
30
28
  token_endpoint: '/oidc/token',
31
29
  )
32
30
  rescue => error
33
- Rails.cache.delete(callback_url)
31
+ Rails.cache.delete("#{callback_url}-#{ForestLiana.env_secret}-client-data")
34
32
  raise error
35
33
  end
36
34
  end
@@ -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
- when OPERATOR_FUTURE
78
- return ">= '#{Time.now}'"
79
- when OPERATOR_PAST
80
- return "<= '#{Time.now}'"
81
- when OPERATOR_TODAY
82
- return "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
- return "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
- return "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
- return "< '#{to_client_timezone((Integer(value)).hour.ago)}'"
97
- when OPERATOR_AFTER_X_HOURS_AGO
98
- ensure_integer_value(value)
99
- return "> '#{to_client_timezone((Integer(value)).hour.ago)}'"
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
- array_query_request_info = @query_request_info.values.filter_map{ |x| x unless x.nil? }
180
+ array_permission_infos = @query_request_info.values.filter_map{ |x| x unless x.nil? }
181
181
 
182
- # NOTICE: pool_permissions contains the @query_request_info
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
- (array_query_request_info & statPermission.values) == array_query_request_info;
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."
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "6.3.0"
2
+ VERSION = "6.3.5"
3
3
  end
@@ -0,0 +1,2 @@
1
+ class Owner < ActiveRecord::Base
2
+ end
@@ -0,0 +1,8 @@
1
+ class CreateOwners < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :owners do |t|
4
+ t.string :name
5
+ t.datetime :hired_at
6
+ end
7
+ end
8
+ end
@@ -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: 2021_03_26_140855) do
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
@@ -72,12 +72,14 @@ describe "Stats", type: :request do
72
72
  expect(response.status).to eq(404)
73
73
  end
74
74
 
75
- # it 'should respond 403 Forbidden' do
76
- # allow_any_instance_of(ForestLiana::PermissionsChecker).to receive(:is_authorized?) { false }
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
- # post '/forest/stats/Products', params: JSON.dump(params), headers: headers
79
- # expect(response.status).to eq(403)
80
- # end
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 nil' do
6
+ expect(LineStatGetter.new(Owner, {
7
+ timezone: "Europe/Paris",
8
+ aggregate: "Count",
9
+ }).client_timezone).to eq(nil)
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.0
4
+ version: 6.3.5
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-04-12 00:00:00.000000000 Z
11
+ date: 2021-05-12 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: 2.5.2
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: 2.5.2
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/dummy/db/migrate/20150608133044_create_has_one_field.rb
501
- - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
502
- - test/dummy/db/migrate/20160627172810_create_owner.rb
503
- - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
504
- - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
505
- - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
506
- - test/dummy/db/migrate/20160627172951_create_tree.rb
507
- - test/dummy/db/migrate/20150608131610_create_float_field.rb
508
- - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
509
- - test/dummy/db/migrate/20150608131430_create_integer_field.rb
510
- - test/dummy/db/migrate/20181111162121_create_references_table.rb
511
- - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
512
- - test/dummy/db/migrate/20150608132621_create_string_field.rb
513
- - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
514
- - test/dummy/db/migrate/20150608130516_create_date_field.rb
515
- - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
516
- - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
517
- - test/dummy/db/migrate/20160628173505_add_timestamps.rb
518
- - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
519
- - test/dummy/db/schema.rb
520
- - test/dummy/public/404.html
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/Rakefile
525
- - test/dummy/app/controllers/application_controller.rb
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/polymorphic_field.rb
528
- - test/dummy/app/models/has_many_field.rb
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/belongs_to_class_name_field.rb
537
- - test/dummy/app/models/decimal_field.rb
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/belongs_to_field.rb
542
- - test/dummy/app/models/has_many_class_name_field.rb
543
- - test/dummy/app/models/owner.rb
544
- - test/dummy/app/assets/stylesheets/application.css
545
- - test/dummy/app/assets/javascripts/application.js
546
- - test/dummy/app/assets/config/manifest.js
547
- - test/dummy/app/helpers/application_helper.rb
548
- - test/dummy/app/views/layouts/application.html.erb
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/config.ru
551
- - test/dummy/config/environment.rb
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/environments/test.rb
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/locales/en.yml
569
- - test/dummy/bin/rake
570
- - test/dummy/bin/bundle
571
- - test/dummy/bin/rails
572
- - test/dummy/bin/setup
573
- - test/test_helper.rb
574
- - test/forest_liana_test.rb
575
- - test/services/forest_liana/has_many_getter_test.rb
576
- - test/services/forest_liana/resource_updater_test.rb
577
- - test/services/forest_liana/schema_adapter_test.rb
578
- - test/services/forest_liana/scope_validator_test.rb
579
- - test/services/forest_liana/value_stat_getter_test.rb
580
- - test/services/forest_liana/pie_stat_getter_test.rb
581
- - test/fixtures/owner.yml
582
- - test/fixtures/has_many_through_field.yml
583
- - test/fixtures/reference.yml
584
- - test/fixtures/has_many_field.yml
585
- - test/fixtures/has_one_field.yml
586
- - test/fixtures/belongs_to_field.yml
587
- - test/fixtures/string_field.yml
588
- - test/fixtures/serialize_field.yml
589
- - test/fixtures/tree.yml
590
- - test/routing/route_test.rb
591
- - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
592
- - spec/dummy/db/migrate/20210326110524_create_references.rb
593
- - spec/dummy/db/migrate/20190226173051_create_isle.rb
594
- - spec/dummy/db/migrate/20190226174951_create_tree.rb
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/config/routes.rb
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/config.ru
616
- - spec/dummy/config/environment.rb
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/forest_liana.rb
649
+ - spec/dummy/config/initializers/wrap_parameters.rb
624
650
  - spec/dummy/config/initializers/mime_types.rb
625
- - spec/dummy/config/initializers/session_store.rb
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/environments/test.rb
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/bin/rake
635
- - spec/dummy/bin/bundle
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