forest_liana 7.0.1 → 7.2.1

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: 66ccf63de4bb8113b724cd22c63957431d50f53b5b5db53d1f48c8d9aa2e6b06
4
- data.tar.gz: 134e434c2ad58ba2fa80253625e770b1b0c541f33784c9f184d666c14a75c77a
3
+ metadata.gz: 405d3a1e9d2b0dfd72036f751715645466617e357d3e76b0dea25b0294593fa6
4
+ data.tar.gz: c3109221aa1285a715790dccd479644ed577c063a291084e9bbacbc422b8ab2d
5
5
  SHA512:
6
- metadata.gz: e45967d23524fa78600a52fbe2407d7c076cb3fea24d89c4705ca22ba9836cad534eeafc0a506e061279b57fb3529069f2ffe64c1d3c1a63ca44296e41f63db1
7
- data.tar.gz: afc9d99afc6d83b3fed291fd9ccf508104bb30c0631506f174a367e1a762868fc2568fb42369b141b28c47b72c9b774a2068aad38ed5d3523497f1babb244501
6
+ metadata.gz: 724439058016194576a6cc2436090b2ba0e2f04345373357410908891e8546a30bcf161a2e382b5bda6ba6bd0ad05918542ad551a6b6b5f4001137f2e43c6d9c
7
+ data.tar.gz: 849c567d87d937404ff555dbbadfae882f4c67c54640ce27910956b5620d58114c93464b06d691ed82a089ab904203de2e3b5bb285e052d936de42245a281687
@@ -78,7 +78,9 @@ module ForestLiana
78
78
  end
79
79
  end
80
80
 
81
- updated_field
81
+ # Response of load hook is not JSONAPI serialized
82
+ # so we need to transform snake_case properties back to camelCase
83
+ updated_field.transform_keys { |key| key.to_s.camelize(:lower) }
82
84
  end
83
85
 
84
86
  render serializer: nil, json: { fields: fields }, status: :ok
@@ -44,6 +44,12 @@ class ForestLiana::Model::Action
44
44
  field.delete(:isRequired)
45
45
  end
46
46
 
47
+ if field.key?(:isReadOnly)
48
+ FOREST_LOGGER.warn "DEPRECATION WARNING: isReadOnly on field \"#{field[:field]}\" is deprecated. Please use is_read_only."
49
+ field[:is_read_only] = !!field[:isReadOnly]
50
+ field.delete(:isReadOnly)
51
+ end
52
+
47
53
  field[:type] = "String" unless field.key?(:type)
48
54
  field[:default_value] = nil unless field.key?(:default_value)
49
55
  field[:enums] = nil unless field.key?(:enums)
@@ -149,7 +149,7 @@ module ForestLiana
149
149
 
150
150
  def parse_value(operator, value)
151
151
  case operator
152
- when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after', 'in'
152
+ when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after'
153
153
  value
154
154
  when 'contains', 'not_contains'
155
155
  "%#{value}%"
@@ -157,6 +157,12 @@ module ForestLiana
157
157
  "#{value}%"
158
158
  when 'ends_with'
159
159
  "%#{value}"
160
+ when 'in'
161
+ if value.kind_of?(String)
162
+ value.split(',').map { |val| val.strip() }
163
+ else
164
+ value
165
+ end
160
166
  when 'present', 'blank'
161
167
  else
162
168
  raise_unknown_operator_error(operator)
@@ -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
@@ -20,6 +20,7 @@ module ForestLiana
20
20
  last_name: user['last_name'],
21
21
  team: user['teams'][0],
22
22
  role: user['role'],
23
+ tags: user['tags'],
23
24
  rendering_id: rendering_id,
24
25
  exp: expiration_in_seconds()
25
26
  }, ForestLiana.auth_secret, 'HS256')
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "7.0.1"
2
+ VERSION = "7.2.1"
3
3
  end
@@ -154,7 +154,7 @@ describe 'Requesting Actions routes', :type => :request do
154
154
  it 'should respond 200' do
155
155
  post '/forest/actions/my_action/hooks/load', params: JSON.dump(params), headers: headers
156
156
  expect(response.status).to eq(200)
157
- expect(JSON.parse(response.body)).to eq({'fields' => [foo.merge({:value => nil}).stringify_keys]})
157
+ expect(JSON.parse(response.body)).to eq({'fields' => [foo.merge({:value => nil}).transform_keys { |key| key.to_s.camelize(:lower) }.stringify_keys]})
158
158
  end
159
159
 
160
160
  it 'should respond 500 with bad params' do
@@ -184,7 +184,8 @@ describe 'Requesting Actions routes', :type => :request do
184
184
  ids: [1],
185
185
  fields: [updated_foo],
186
186
  collection_name: 'Island',
187
- changed_field: 'foo'
187
+ changed_field: 'foo',
188
+ is_read_only: true
188
189
  }
189
190
  }
190
191
  }
@@ -195,6 +196,7 @@ describe 'Requesting Actions routes', :type => :request do
195
196
  expected = updated_foo.clone.merge({:value => 'baz'})
196
197
  expected[:widgetEdit] = nil
197
198
  expected.delete(:widget)
199
+ expected = expected.transform_keys { |key| key.to_s.camelize(:lower) }
198
200
  expect(JSON.parse(response.body)).to eq({'fields' => [expected.stringify_keys]})
199
201
  end
200
202
 
@@ -230,6 +232,9 @@ describe 'Requesting Actions routes', :type => :request do
230
232
  expected_foo = updated_foo.clone.merge({ :widgetEdit => nil})
231
233
  expected_foo.delete(:widget)
232
234
 
235
+ expected_enum = expected_enum.transform_keys { |key| key.to_s.camelize(:lower) }
236
+ expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
237
+
233
238
  expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_enum.stringify_keys]})
234
239
  end
235
240
 
@@ -253,6 +258,9 @@ describe 'Requesting Actions routes', :type => :request do
253
258
  expected_foo = foo.clone.merge({ :widgetEdit => nil})
254
259
  expected_foo.delete(:widget)
255
260
 
261
+ expected_multiple_enum = expected_multiple_enum.transform_keys { |key| key.to_s.camelize(:lower) }
262
+ expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
263
+
256
264
  expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_multiple_enum.stringify_keys]})
257
265
  end
258
266
 
@@ -277,6 +285,9 @@ describe 'Requesting Actions routes', :type => :request do
277
285
  expected_foo = foo.clone.merge({ :widgetEdit => nil})
278
286
  expected_foo.delete(:widget)
279
287
 
288
+ expected_multiple_enum = expected_multiple_enum.transform_keys { |key| key.to_s.camelize(:lower) }
289
+ expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
290
+
280
291
  expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_multiple_enum.stringify_keys]})
281
292
  end
282
293
  end
@@ -45,7 +45,7 @@ describe "Authentications", type: :request do
45
45
 
46
46
  describe "GET /authentication/callback" do
47
47
  before() do
48
- response = '{"data":{"id":666,"attributes":{"first_name":"Alice","last_name":"Doe","email":"alice@forestadmin.com","teams":[1,2,3],"role":"Test"}}}'
48
+ response = '{"data":{"id":666,"attributes":{"first_name":"Alice","last_name":"Doe","email":"alice@forestadmin.com","teams":[1,2,3],"role":"Test","tags":[{"key":"city","value":"Paris"}]}}}'
49
49
  allow(ForestLiana::ForestApiRequester).to receive(:get).with(
50
50
  "/liana/v2/renderings/42/authorization", { :headers => { "forest-token" => "THE-ACCESS-TOKEN" }, :query=> {} }
51
51
  ).and_return(
@@ -76,6 +76,10 @@ describe "Authentications", type: :request do
76
76
  }
77
77
 
78
78
  expect(decoded).to include(expected_token_data)
79
+ tags = decoded['tags']
80
+ expect(tags.length).to eq(1)
81
+ expect(tags[0]['key']).to eq("city")
82
+ expect(tags[0]['value']).to eq("Paris")
79
83
  expect(body).to eq({ token: token, tokenData: decoded.deep_symbolize_keys! })
80
84
  expect(response).to have_http_status(200)
81
85
  end
@@ -396,6 +396,8 @@ module ForestLiana
396
396
  it { expect(filter_parser.parse_value('present', nil)).to eq nil }
397
397
  it { expect(filter_parser.parse_value('equal', 'yes')).to eq 'yes' }
398
398
  it { expect(filter_parser.parse_value('blank', nil)).to eq nil }
399
+ it { expect(filter_parser.parse_value('in', 'yes,maybe ,no ')).to eq ['yes', 'maybe', 'no'] }
400
+ it { expect(filter_parser.parse_value('in', 123)).to eq 123 }
399
401
  end
400
402
 
401
403
  context 'on unknown operator' do
@@ -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.0.1
4
+ version: 7.2.1
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-07-23 00:00:00.000000000 Z
11
+ date: 2021-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -511,169 +511,169 @@ summary: Official Rails Liana for Forest
511
511
  test_files:
512
512
  - test/routing/route_test.rb
513
513
  - test/forest_liana_test.rb
514
- - test/services/forest_liana/schema_adapter_test.rb
515
- - test/services/forest_liana/operator_date_interval_parser_test.rb
516
- - test/fixtures/string_field.yml
517
- - test/fixtures/reference.yml
514
+ - test/fixtures/belongs_to_field.yml
515
+ - test/fixtures/owner.yml
518
516
  - test/fixtures/has_one_field.yml
519
- - test/fixtures/tree.yml
520
517
  - test/fixtures/serialize_field.yml
521
- - test/fixtures/has_many_field.yml
522
- - test/fixtures/owner.yml
523
- - test/fixtures/belongs_to_field.yml
518
+ - test/fixtures/string_field.yml
524
519
  - test/fixtures/has_many_through_field.yml
520
+ - test/fixtures/reference.yml
521
+ - test/fixtures/has_many_field.yml
522
+ - test/fixtures/tree.yml
525
523
  - test/dummy/README.rdoc
526
- - test/dummy/config.ru
524
+ - test/dummy/public/404.html
525
+ - test/dummy/public/422.html
526
+ - test/dummy/public/500.html
527
+ - test/dummy/public/favicon.ico
527
528
  - test/dummy/Rakefile
528
- - test/dummy/db/schema.rb
529
- - test/dummy/db/migrate/20150608131610_create_float_field.rb
530
- - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
531
- - test/dummy/db/migrate/20181111162121_create_references_table.rb
532
- - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
533
- - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
534
- - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
535
- - test/dummy/db/migrate/20160627172951_create_tree.rb
536
- - test/dummy/db/migrate/20150608130516_create_date_field.rb
537
- - test/dummy/db/migrate/20150608131430_create_integer_field.rb
538
- - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
539
- - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
540
- - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
541
- - test/dummy/db/migrate/20160627172810_create_owner.rb
542
- - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
543
- - test/dummy/db/migrate/20150608132621_create_string_field.rb
544
- - test/dummy/db/migrate/20160628173505_add_timestamps.rb
545
- - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
546
- - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
547
- - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
548
- - test/dummy/config/environment.rb
549
- - test/dummy/config/secrets.yml
550
529
  - test/dummy/config/application.rb
530
+ - test/dummy/config/routes.rb
531
+ - test/dummy/config/environments/production.rb
551
532
  - test/dummy/config/environments/test.rb
552
533
  - test/dummy/config/environments/development.rb
553
- - test/dummy/config/environments/production.rb
554
- - test/dummy/config/boot.rb
555
- - test/dummy/config/locales/en.yml
556
534
  - test/dummy/config/database.yml
557
- - test/dummy/config/initializers/cookies_serializer.rb
558
- - test/dummy/config/initializers/assets.rb
559
535
  - test/dummy/config/initializers/backtrace_silencers.rb
560
- - test/dummy/config/initializers/mime_types.rb
561
- - test/dummy/config/initializers/session_store.rb
536
+ - test/dummy/config/initializers/assets.rb
562
537
  - test/dummy/config/initializers/wrap_parameters.rb
563
538
  - test/dummy/config/initializers/filter_parameter_logging.rb
539
+ - test/dummy/config/initializers/session_store.rb
564
540
  - test/dummy/config/initializers/inflections.rb
565
- - test/dummy/config/routes.rb
566
- - test/dummy/public/500.html
567
- - test/dummy/public/404.html
568
- - test/dummy/public/422.html
569
- - test/dummy/public/favicon.ico
570
- - test/dummy/app/models/boolean_field.rb
571
- - test/dummy/app/models/float_field.rb
572
- - test/dummy/app/models/integer_field.rb
573
- - test/dummy/app/models/reference.rb
574
- - test/dummy/app/models/has_one_field.rb
575
- - test/dummy/app/models/belongs_to_class_name_field.rb
541
+ - test/dummy/config/initializers/mime_types.rb
542
+ - test/dummy/config/initializers/cookies_serializer.rb
543
+ - test/dummy/config/locales/en.yml
544
+ - test/dummy/config/environment.rb
545
+ - test/dummy/config/secrets.yml
546
+ - test/dummy/config/boot.rb
547
+ - test/dummy/app/models/has_many_through_field.rb
576
548
  - test/dummy/app/models/tree.rb
577
- - test/dummy/app/models/serialize_field.rb
549
+ - test/dummy/app/models/belongs_to_field.rb
550
+ - test/dummy/app/models/belongs_to_class_name_field.rb
578
551
  - test/dummy/app/models/polymorphic_field.rb
552
+ - test/dummy/app/models/reference.rb
579
553
  - test/dummy/app/models/date_field.rb
580
- - test/dummy/app/models/string_field.rb
554
+ - test/dummy/app/models/decimal_field.rb
555
+ - test/dummy/app/models/owner.rb
581
556
  - test/dummy/app/models/has_many_field.rb
557
+ - test/dummy/app/models/boolean_field.rb
582
558
  - test/dummy/app/models/has_and_belongs_to_many_field.rb
559
+ - test/dummy/app/models/serialize_field.rb
560
+ - test/dummy/app/models/integer_field.rb
561
+ - test/dummy/app/models/float_field.rb
583
562
  - test/dummy/app/models/has_many_class_name_field.rb
584
- - test/dummy/app/models/decimal_field.rb
585
- - test/dummy/app/models/owner.rb
586
- - test/dummy/app/models/belongs_to_field.rb
587
- - test/dummy/app/models/has_many_through_field.rb
588
- - test/dummy/app/helpers/application_helper.rb
563
+ - test/dummy/app/models/string_field.rb
564
+ - test/dummy/app/models/has_one_field.rb
589
565
  - test/dummy/app/views/layouts/application.html.erb
590
566
  - test/dummy/app/assets/javascripts/application.js
591
567
  - test/dummy/app/assets/stylesheets/application.css
592
568
  - test/dummy/app/assets/config/manifest.js
593
569
  - test/dummy/app/controllers/application_controller.rb
594
- - test/dummy/bin/setup
595
- - test/dummy/bin/bundle
596
- - test/dummy/bin/rake
570
+ - test/dummy/app/helpers/application_helper.rb
571
+ - test/dummy/config.ru
572
+ - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
573
+ - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
574
+ - test/dummy/db/migrate/20160628173505_add_timestamps.rb
575
+ - test/dummy/db/migrate/20181111162121_create_references_table.rb
576
+ - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
577
+ - test/dummy/db/migrate/20150608131610_create_float_field.rb
578
+ - test/dummy/db/migrate/20160627172951_create_tree.rb
579
+ - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
580
+ - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
581
+ - test/dummy/db/migrate/20150608131430_create_integer_field.rb
582
+ - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
583
+ - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
584
+ - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
585
+ - test/dummy/db/migrate/20150608130516_create_date_field.rb
586
+ - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
587
+ - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
588
+ - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
589
+ - test/dummy/db/migrate/20160627172810_create_owner.rb
590
+ - test/dummy/db/migrate/20150608132621_create_string_field.rb
591
+ - test/dummy/db/schema.rb
597
592
  - test/dummy/bin/rails
593
+ - test/dummy/bin/rake
594
+ - test/dummy/bin/bundle
595
+ - test/dummy/bin/setup
596
+ - test/services/forest_liana/operator_date_interval_parser_test.rb
597
+ - test/services/forest_liana/schema_adapter_test.rb
598
598
  - test/test_helper.rb
599
- - spec/helpers/forest_liana/schema_helper_spec.rb
600
- - spec/helpers/forest_liana/query_helper_spec.rb
601
- - spec/services/forest_liana/scope_manager_spec.rb
602
- - spec/services/forest_liana/resource_updater_spec.rb
603
- - spec/services/forest_liana/pie_stat_getter_spec.rb
604
- - spec/services/forest_liana/permissions_checker_live_queries_spec.rb
605
- - spec/services/forest_liana/ip_whitelist_checker_spec.rb
606
- - spec/services/forest_liana/line_stat_getter_spec.rb
607
- - spec/services/forest_liana/schema_adapter_spec.rb
608
- - spec/services/forest_liana/resources_getter_spec.rb
609
- - spec/services/forest_liana/smart_action_field_validator_spec.rb
610
- - spec/services/forest_liana/has_many_getter_spec.rb
611
- - spec/services/forest_liana/apimap_sorter_spec.rb
612
- - spec/services/forest_liana/filters_parser_spec.rb
613
- - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
614
- - spec/services/forest_liana/permissions_formatter_spec.rb
615
- - spec/services/forest_liana/permissions_getter_spec.rb
616
- - spec/services/forest_liana/value_stat_getter_spec.rb
617
- - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
618
599
  - spec/spec_helper.rb
619
600
  - spec/config/initializers/logger_spec.rb
620
601
  - spec/lib/forest_liana/schema_file_updater_spec.rb
621
602
  - spec/lib/forest_liana/bootstrapper_spec.rb
622
- - spec/requests/stats_spec.rb
623
- - spec/requests/actions_controller_spec.rb
624
- - spec/requests/authentications_spec.rb
625
- - spec/requests/resources_spec.rb
603
+ - spec/rails_helper.rb
626
604
  - spec/dummy/README.rdoc
627
- - spec/dummy/config.ru
628
605
  - spec/dummy/Rakefile
629
- - spec/dummy/db/schema.rb
630
- - spec/dummy/db/migrate/20190226173051_create_isle.rb
631
- - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
632
- - spec/dummy/db/migrate/20210326140855_create_locations.rb
633
- - spec/dummy/db/migrate/20190226174951_create_tree.rb
634
- - spec/dummy/db/migrate/20210326110524_create_references.rb
635
- - spec/dummy/db/migrate/20210511141752_create_owners.rb
636
- - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
637
- - spec/dummy/db/migrate/20190226172951_create_user.rb
638
- - spec/dummy/db/migrate/20210526084712_create_products.rb
639
- - spec/dummy/config/environment.rb
640
- - spec/dummy/config/secrets.yml
641
606
  - spec/dummy/config/application.rb
607
+ - spec/dummy/config/routes.rb
608
+ - spec/dummy/config/environments/production.rb
642
609
  - spec/dummy/config/environments/test.rb
643
610
  - spec/dummy/config/environments/development.rb
644
- - spec/dummy/config/environments/production.rb
645
- - spec/dummy/config/boot.rb
646
611
  - spec/dummy/config/database.yml
647
- - spec/dummy/config/initializers/cookies_serializer.rb
648
- - spec/dummy/config/initializers/assets.rb
649
612
  - spec/dummy/config/initializers/backtrace_silencers.rb
650
- - spec/dummy/config/initializers/mime_types.rb
651
- - spec/dummy/config/initializers/session_store.rb
613
+ - spec/dummy/config/initializers/assets.rb
652
614
  - spec/dummy/config/initializers/wrap_parameters.rb
653
615
  - spec/dummy/config/initializers/filter_parameter_logging.rb
654
- - spec/dummy/config/initializers/inflections.rb
616
+ - spec/dummy/config/initializers/session_store.rb
655
617
  - spec/dummy/config/initializers/forest_liana.rb
656
- - spec/dummy/config/routes.rb
657
- - spec/dummy/lib/forest_liana/collections/location.rb
618
+ - spec/dummy/config/initializers/inflections.rb
619
+ - spec/dummy/config/initializers/mime_types.rb
620
+ - spec/dummy/config/initializers/cookies_serializer.rb
621
+ - spec/dummy/config/environment.rb
622
+ - spec/dummy/config/secrets.yml
623
+ - spec/dummy/config/boot.rb
658
624
  - spec/dummy/lib/forest_liana/collections/island.rb
659
625
  - spec/dummy/lib/forest_liana/collections/user.rb
660
- - spec/dummy/app/models/location.rb
626
+ - spec/dummy/lib/forest_liana/collections/location.rb
627
+ - spec/dummy/app/models/tree.rb
661
628
  - spec/dummy/app/models/island.rb
662
629
  - spec/dummy/app/models/reference.rb
663
- - spec/dummy/app/models/tree.rb
664
- - spec/dummy/app/models/user.rb
665
- - spec/dummy/app/models/product.rb
666
630
  - spec/dummy/app/models/owner.rb
667
- - spec/dummy/app/helpers/application_helper.rb
668
- - spec/dummy/app/config/routes.rb
631
+ - spec/dummy/app/models/product.rb
632
+ - spec/dummy/app/models/user.rb
633
+ - spec/dummy/app/models/location.rb
669
634
  - spec/dummy/app/views/layouts/application.html.erb
635
+ - spec/dummy/app/config/routes.rb
670
636
  - spec/dummy/app/assets/javascripts/application.js
671
637
  - spec/dummy/app/assets/stylesheets/application.css
672
638
  - spec/dummy/app/assets/config/manifest.js
673
639
  - spec/dummy/app/controllers/application_controller.rb
674
640
  - spec/dummy/app/controllers/forest/islands_controller.rb
675
- - spec/dummy/bin/setup
676
- - spec/dummy/bin/bundle
677
- - spec/dummy/bin/rake
641
+ - spec/dummy/app/helpers/application_helper.rb
642
+ - spec/dummy/config.ru
643
+ - spec/dummy/db/migrate/20190226173051_create_isle.rb
644
+ - spec/dummy/db/migrate/20190226172951_create_user.rb
645
+ - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
646
+ - spec/dummy/db/migrate/20210326110524_create_references.rb
647
+ - spec/dummy/db/migrate/20190226174951_create_tree.rb
648
+ - spec/dummy/db/migrate/20210526084712_create_products.rb
649
+ - spec/dummy/db/migrate/20210326140855_create_locations.rb
650
+ - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
651
+ - spec/dummy/db/migrate/20210511141752_create_owners.rb
652
+ - spec/dummy/db/schema.rb
678
653
  - spec/dummy/bin/rails
679
- - spec/rails_helper.rb
654
+ - spec/dummy/bin/rake
655
+ - spec/dummy/bin/bundle
656
+ - spec/dummy/bin/setup
657
+ - spec/services/forest_liana/apimap_sorter_spec.rb
658
+ - spec/services/forest_liana/smart_action_field_validator_spec.rb
659
+ - spec/services/forest_liana/resource_updater_spec.rb
660
+ - spec/services/forest_liana/has_many_getter_spec.rb
661
+ - spec/services/forest_liana/scope_manager_spec.rb
662
+ - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
663
+ - spec/services/forest_liana/ip_whitelist_checker_spec.rb
664
+ - spec/services/forest_liana/permissions_formatter_spec.rb
665
+ - spec/services/forest_liana/value_stat_getter_spec.rb
666
+ - spec/services/forest_liana/line_stat_getter_spec.rb
667
+ - spec/services/forest_liana/filters_parser_spec.rb
668
+ - spec/services/forest_liana/permissions_checker_live_queries_spec.rb
669
+ - spec/services/forest_liana/permissions_getter_spec.rb
670
+ - spec/services/forest_liana/pie_stat_getter_spec.rb
671
+ - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
672
+ - spec/services/forest_liana/schema_adapter_spec.rb
673
+ - spec/services/forest_liana/resources_getter_spec.rb
674
+ - spec/requests/authentications_spec.rb
675
+ - spec/requests/actions_controller_spec.rb
676
+ - spec/requests/stats_spec.rb
677
+ - spec/requests/resources_spec.rb
678
+ - spec/helpers/forest_liana/query_helper_spec.rb
679
+ - spec/helpers/forest_liana/schema_helper_spec.rb