forest_liana 7.0.0.beta.5 → 7.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36a124d9be3926a24e7ab38fa5921f90a4fa62eb1a037513237db19137c08e6c
4
- data.tar.gz: 11555d1d6818160acd6024f76acbf38746a9e7ccda11b7b14126834cf29dc576
3
+ metadata.gz: b09187df0403cde37e732b39f06e89a4df087f1d91fe7e13a80aafd3490b33e7
4
+ data.tar.gz: d81c4f22e697da9926c8e35736ce76eb60eca5f5b7d5579cb9140f680dfd15d9
5
5
  SHA512:
6
- metadata.gz: 98ab606746f67e5bf1beec87b7ff67233d4d47b6d0456d87ff8e4f5d77c7d3f198b12a9873f6f73d7777f44b93c0c449b3cff229afae88937126b05a8e865ffc
7
- data.tar.gz: 7f9f8ef793f09b227a9b8ad5c66e2c70e11c25453bb974838d43aa2e1dc3d538c6d0f8d29816e470ccd3ff22c4f77e8b178b618b87e26f4e307c5fcc60282612
6
+ metadata.gz: 40e99d1d96cd7142fb8ae68a4aab488eb9fd3ac67a36e2e78213a3e5b63c9e1f516840b0648255e4f2efe3c983ba0e4146bdac8081e5e8fba5a2c98201be62c8
7
+ data.tar.gz: f3a7a15486d28e64d62157fdf2fbef4779ab67b78423e3b75f0dcebf31e8549c3a8ddb0bed3234709ee5776416dced7e9e39ee755527775e4b5cea09265543b7
@@ -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)
@@ -109,16 +109,7 @@ module ForestLiana
109
109
  parsed_value = parse_value(operator, value)
110
110
  field_and_operator = "#{parsed_field} #{parsed_operator}"
111
111
 
112
- # parenthesis around the parsed_value are required to make the `IN` operator work
113
- # and have no side effects on other requests
114
- if Rails::VERSION::MAJOR < 5
115
- "#{field_and_operator} (#{ActiveRecord::Base.sanitize(parsed_value)})"
116
- # NOTICE: sanitize method as been removed in Rails 5.1 and sanitize_sql introduced in Rails 5.2.
117
- elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 1
118
- "#{field_and_operator} (#{ActiveRecord::Base.connection.quote(parsed_value)})"
119
- else
120
- ActiveRecord::Base.sanitize_sql(["#{field_and_operator} (?)", parsed_value])
121
- end
112
+ sanitize_condition(field_and_operator, operator, parsed_value)
122
113
  end
123
114
 
124
115
  def parse_aggregation_operator(aggregator_operator)
@@ -296,5 +287,26 @@ module ForestLiana
296
287
  raise ForestLiana::Errors::HTTP422Error.new('Invalid condition format')
297
288
  end
298
289
  end
290
+
291
+ private
292
+
293
+ def prepare_value_for_operator(operator, value)
294
+ # parenthesis around the parsed_value are required to make the `IN` operator work
295
+ operator == 'in' ? "(#{value})" : value
296
+ end
297
+
298
+ def sanitize_condition(field_and_operator, operator, parsed_value)
299
+ if Rails::VERSION::MAJOR < 5
300
+ condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.sanitize(parsed_value))
301
+ "#{field_and_operator} #{condition_value}"
302
+ # NOTICE: sanitize method as been removed in Rails 5.1 and sanitize_sql introduced in Rails 5.2.
303
+ elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 1
304
+ condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.connection.quote(parsed_value))
305
+ "#{field_and_operator} #{condition_value}"
306
+ else
307
+ condition_value = prepare_value_for_operator(operator, '?')
308
+ ActiveRecord::Base.sanitize_sql(["#{field_and_operator} #{condition_value}", parsed_value])
309
+ end
310
+ end
299
311
  end
300
312
  end
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "7.0.0.beta.5"
2
+ VERSION = "7.0.2"
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
@@ -11,6 +11,7 @@ module ForestLiana
11
11
  let(:date_condition_1) { { 'field' => 'created_at', 'operator' => 'before', 'value' => 2.hours.ago } }
12
12
  let(:date_condition_2) { { 'field' => 'created_at', 'operator' => 'today' } }
13
13
  let(:date_condition_3) { { 'field' => 'created_at', 'operator' => 'previous_x_days', 'value' => 2 } }
14
+ let(:presence_condition) { { 'field' => 'name', 'operator' => 'present' } }
14
15
 
15
16
  before {
16
17
  island = Island.create!(name: "L'île de la muerta")
@@ -274,6 +275,11 @@ module ForestLiana
274
275
  let(:filters) { { 'aggregator' => 'or', 'conditions' => [simple_condition_2, simple_condition_3] } }
275
276
  it { expect(resource.where(query).count).to eq 2 }
276
277
  end
278
+
279
+ context "'name ends_with \"3\"' 'or' 'name is not null'" do
280
+ let(:filters) { { 'aggregator' => 'or', 'conditions' => [simple_condition_2, presence_condition] } }
281
+ it { expect(resource.where(query).count).to eq 3 }
282
+ end
277
283
  end
278
284
 
279
285
  describe 'parse_condition' do
@@ -281,7 +287,27 @@ module ForestLiana
281
287
  let(:result) { filter_parser.parse_condition(condition) }
282
288
 
283
289
  context 'on valid condition' do
284
- it { expect(result).to eq "\"trees\".\"name\" LIKE ('%3')" }
290
+ context 'when the condition uses the contains operator' do
291
+ it { expect(result).to eq "\"trees\".\"name\" LIKE '%3'" }
292
+ end
293
+
294
+ context 'when the condition uses the blank operator' do
295
+ let(:condition) { { 'field' => 'name', 'operator' => 'blank' } }
296
+
297
+ it { expect(result).to eq "\"trees\".\"name\" IS NULL" }
298
+ end
299
+
300
+ context 'when the condition uses the presence operator' do
301
+ let(:condition) { presence_condition }
302
+
303
+ it { expect(result).to eq "\"trees\".\"name\" IS NOT NULL" }
304
+ end
305
+
306
+ context 'when the condition uses the in operator' do
307
+ let(:condition) { { 'field' => 'name', 'operator' => 'in', 'value' => ['Tree n1', 'Tree n3'] } }
308
+
309
+ it { expect(result).to eq "\"trees\".\"name\" IN ('Tree n1','Tree n3')" }
310
+ end
285
311
  end
286
312
 
287
313
  context 'on belongs_to condition' do
@@ -84,7 +84,7 @@ module ForestLiana
84
84
  subject.perform
85
85
 
86
86
  expect(subject.record).to be nil
87
- expect(subject.errors[0][:detail]).to eq 'Couldn\'t find User with \'id\'=1 [WHERE (("users"."id" > (2)))]'
87
+ expect(subject.errors[0][:detail]).to eq 'Couldn\'t find User with \'id\'=1 [WHERE (("users"."id" > 2))]'
88
88
  end
89
89
  end
90
90
 
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.0.beta.5
4
+ version: 7.0.2
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-09 00:00:00.000000000 Z
11
+ date: 2021-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -500,9 +500,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
500
500
  version: '0'
501
501
  required_rubygems_version: !ruby/object:Gem::Requirement
502
502
  requirements:
503
- - - ">"
503
+ - - ">="
504
504
  - !ruby/object:Gem::Version
505
- version: 1.3.1
505
+ version: '0'
506
506
  requirements: []
507
507
  rubygems_version: 3.1.2
508
508
  signing_key:
@@ -510,170 +510,170 @@ specification_version: 4
510
510
  summary: Official Rails Liana for Forest
511
511
  test_files:
512
512
  - test/routing/route_test.rb
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
518
- - test/fixtures/has_one_field.yml
519
- - test/fixtures/tree.yml
520
- - test/fixtures/serialize_field.yml
521
- - test/fixtures/has_many_field.yml
522
- - test/fixtures/owner.yml
523
- - test/fixtures/belongs_to_field.yml
524
- - test/fixtures/has_many_through_field.yml
525
- - test/dummy/README.rdoc
526
- - test/dummy/config.ru
527
513
  - test/dummy/Rakefile
514
+ - test/dummy/bin/setup
515
+ - test/dummy/bin/bundle
516
+ - test/dummy/bin/rake
517
+ - test/dummy/bin/rails
518
+ - test/dummy/public/500.html
519
+ - test/dummy/public/404.html
520
+ - test/dummy/public/favicon.ico
521
+ - test/dummy/public/422.html
528
522
  - test/dummy/db/schema.rb
529
523
  - 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
524
+ - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
525
+ - test/dummy/db/migrate/20160628173505_add_timestamps.rb
526
+ - test/dummy/db/migrate/20160627172810_create_owner.rb
527
+ - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
528
+ - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
529
+ - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
530
+ - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
535
531
  - test/dummy/db/migrate/20160627172951_create_tree.rb
532
+ - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
533
+ - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
536
534
  - test/dummy/db/migrate/20150608130516_create_date_field.rb
535
+ - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
537
536
  - 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
537
  - 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
538
+ - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
546
539
  - 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
540
+ - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
541
+ - test/dummy/db/migrate/20181111162121_create_references_table.rb
542
+ - test/dummy/README.rdoc
543
+ - test/dummy/app/assets/stylesheets/application.css
544
+ - test/dummy/app/assets/javascripts/application.js
545
+ - test/dummy/app/assets/config/manifest.js
546
+ - test/dummy/app/helpers/application_helper.rb
547
+ - test/dummy/app/models/float_field.rb
548
+ - test/dummy/app/models/boolean_field.rb
549
+ - test/dummy/app/models/decimal_field.rb
550
+ - test/dummy/app/models/belongs_to_field.rb
551
+ - test/dummy/app/models/belongs_to_class_name_field.rb
552
+ - test/dummy/app/models/has_and_belongs_to_many_field.rb
553
+ - test/dummy/app/models/string_field.rb
554
+ - test/dummy/app/models/has_many_class_name_field.rb
555
+ - test/dummy/app/models/integer_field.rb
556
+ - test/dummy/app/models/date_field.rb
557
+ - test/dummy/app/models/serialize_field.rb
558
+ - test/dummy/app/models/owner.rb
559
+ - test/dummy/app/models/polymorphic_field.rb
560
+ - test/dummy/app/models/has_many_through_field.rb
561
+ - test/dummy/app/models/has_one_field.rb
562
+ - test/dummy/app/models/has_many_field.rb
563
+ - test/dummy/app/models/reference.rb
564
+ - test/dummy/app/models/tree.rb
565
+ - test/dummy/app/controllers/application_controller.rb
566
+ - test/dummy/app/views/layouts/application.html.erb
567
+ - test/dummy/config.ru
549
568
  - test/dummy/config/secrets.yml
550
- - test/dummy/config/application.rb
551
- - test/dummy/config/environments/test.rb
552
- - test/dummy/config/environments/development.rb
553
- - test/dummy/config/environments/production.rb
554
569
  - test/dummy/config/boot.rb
555
570
  - test/dummy/config/locales/en.yml
556
- - test/dummy/config/database.yml
557
- - test/dummy/config/initializers/cookies_serializer.rb
571
+ - test/dummy/config/environment.rb
572
+ - test/dummy/config/initializers/inflections.rb
558
573
  - test/dummy/config/initializers/assets.rb
559
574
  - test/dummy/config/initializers/backtrace_silencers.rb
560
575
  - test/dummy/config/initializers/mime_types.rb
561
- - test/dummy/config/initializers/session_store.rb
562
576
  - test/dummy/config/initializers/wrap_parameters.rb
577
+ - test/dummy/config/initializers/cookies_serializer.rb
578
+ - test/dummy/config/initializers/session_store.rb
563
579
  - test/dummy/config/initializers/filter_parameter_logging.rb
564
- - test/dummy/config/initializers/inflections.rb
580
+ - test/dummy/config/database.yml
565
581
  - 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
576
- - test/dummy/app/models/tree.rb
577
- - test/dummy/app/models/serialize_field.rb
578
- - test/dummy/app/models/polymorphic_field.rb
579
- - test/dummy/app/models/date_field.rb
580
- - test/dummy/app/models/string_field.rb
581
- - test/dummy/app/models/has_many_field.rb
582
- - test/dummy/app/models/has_and_belongs_to_many_field.rb
583
- - 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
589
- - test/dummy/app/views/layouts/application.html.erb
590
- - test/dummy/app/assets/javascripts/application.js
591
- - test/dummy/app/assets/stylesheets/application.css
592
- - test/dummy/app/assets/config/manifest.js
593
- - test/dummy/app/controllers/application_controller.rb
594
- - test/dummy/bin/setup
595
- - test/dummy/bin/bundle
596
- - test/dummy/bin/rake
597
- - test/dummy/bin/rails
582
+ - test/dummy/config/environments/production.rb
583
+ - test/dummy/config/environments/development.rb
584
+ - test/dummy/config/environments/test.rb
585
+ - test/dummy/config/application.rb
598
586
  - test/test_helper.rb
599
- - spec/helpers/forest_liana/schema_helper_spec.rb
587
+ - test/fixtures/serialize_field.yml
588
+ - test/fixtures/has_one_field.yml
589
+ - test/fixtures/string_field.yml
590
+ - test/fixtures/tree.yml
591
+ - test/fixtures/has_many_field.yml
592
+ - test/fixtures/reference.yml
593
+ - test/fixtures/owner.yml
594
+ - test/fixtures/belongs_to_field.yml
595
+ - test/fixtures/has_many_through_field.yml
596
+ - test/services/forest_liana/schema_adapter_test.rb
597
+ - test/services/forest_liana/operator_date_interval_parser_test.rb
598
+ - test/forest_liana_test.rb
600
599
  - 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
- - spec/spec_helper.rb
619
- - spec/config/initializers/logger_spec.rb
620
- - spec/lib/forest_liana/schema_file_updater_spec.rb
621
- - 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
626
- - spec/dummy/README.rdoc
627
- - spec/dummy/config.ru
600
+ - spec/helpers/forest_liana/schema_helper_spec.rb
628
601
  - spec/dummy/Rakefile
602
+ - spec/dummy/bin/setup
603
+ - spec/dummy/bin/bundle
604
+ - spec/dummy/bin/rake
605
+ - spec/dummy/bin/rails
629
606
  - spec/dummy/db/schema.rb
630
- - spec/dummy/db/migrate/20190226173051_create_isle.rb
631
607
  - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
608
+ - spec/dummy/db/migrate/20210511141752_create_owners.rb
609
+ - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
632
610
  - spec/dummy/db/migrate/20210326140855_create_locations.rb
633
611
  - spec/dummy/db/migrate/20190226174951_create_tree.rb
634
612
  - 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
613
  - spec/dummy/db/migrate/20190226172951_create_user.rb
638
614
  - spec/dummy/db/migrate/20210526084712_create_products.rb
639
- - spec/dummy/config/environment.rb
615
+ - spec/dummy/db/migrate/20190226173051_create_isle.rb
616
+ - spec/dummy/README.rdoc
617
+ - spec/dummy/app/assets/stylesheets/application.css
618
+ - spec/dummy/app/assets/javascripts/application.js
619
+ - spec/dummy/app/assets/config/manifest.js
620
+ - spec/dummy/app/helpers/application_helper.rb
621
+ - spec/dummy/app/models/island.rb
622
+ - spec/dummy/app/models/product.rb
623
+ - spec/dummy/app/models/user.rb
624
+ - spec/dummy/app/models/owner.rb
625
+ - spec/dummy/app/models/location.rb
626
+ - spec/dummy/app/models/reference.rb
627
+ - spec/dummy/app/models/tree.rb
628
+ - spec/dummy/app/controllers/forest/islands_controller.rb
629
+ - spec/dummy/app/controllers/application_controller.rb
630
+ - spec/dummy/app/config/routes.rb
631
+ - spec/dummy/app/views/layouts/application.html.erb
632
+ - spec/dummy/config.ru
640
633
  - spec/dummy/config/secrets.yml
641
- - spec/dummy/config/application.rb
642
- - spec/dummy/config/environments/test.rb
643
- - spec/dummy/config/environments/development.rb
644
- - spec/dummy/config/environments/production.rb
645
634
  - spec/dummy/config/boot.rb
646
- - spec/dummy/config/database.yml
647
- - spec/dummy/config/initializers/cookies_serializer.rb
635
+ - spec/dummy/config/environment.rb
636
+ - spec/dummy/config/initializers/inflections.rb
648
637
  - spec/dummy/config/initializers/assets.rb
649
638
  - spec/dummy/config/initializers/backtrace_silencers.rb
639
+ - spec/dummy/config/initializers/forest_liana.rb
650
640
  - spec/dummy/config/initializers/mime_types.rb
651
- - spec/dummy/config/initializers/session_store.rb
652
641
  - spec/dummy/config/initializers/wrap_parameters.rb
642
+ - spec/dummy/config/initializers/cookies_serializer.rb
643
+ - spec/dummy/config/initializers/session_store.rb
653
644
  - spec/dummy/config/initializers/filter_parameter_logging.rb
654
- - spec/dummy/config/initializers/inflections.rb
655
- - spec/dummy/config/initializers/forest_liana.rb
645
+ - spec/dummy/config/database.yml
656
646
  - spec/dummy/config/routes.rb
657
- - spec/dummy/lib/forest_liana/collections/location.rb
647
+ - spec/dummy/config/environments/production.rb
648
+ - spec/dummy/config/environments/development.rb
649
+ - spec/dummy/config/environments/test.rb
650
+ - spec/dummy/config/application.rb
658
651
  - spec/dummy/lib/forest_liana/collections/island.rb
659
652
  - spec/dummy/lib/forest_liana/collections/user.rb
660
- - spec/dummy/app/models/location.rb
661
- - spec/dummy/app/models/island.rb
662
- - 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
- - spec/dummy/app/models/owner.rb
667
- - spec/dummy/app/helpers/application_helper.rb
668
- - spec/dummy/app/config/routes.rb
669
- - spec/dummy/app/views/layouts/application.html.erb
670
- - spec/dummy/app/assets/javascripts/application.js
671
- - spec/dummy/app/assets/stylesheets/application.css
672
- - spec/dummy/app/assets/config/manifest.js
673
- - spec/dummy/app/controllers/application_controller.rb
674
- - spec/dummy/app/controllers/forest/islands_controller.rb
675
- - spec/dummy/bin/setup
676
- - spec/dummy/bin/bundle
677
- - spec/dummy/bin/rake
678
- - spec/dummy/bin/rails
653
+ - spec/dummy/lib/forest_liana/collections/location.rb
654
+ - spec/config/initializers/logger_spec.rb
655
+ - spec/services/forest_liana/scope_manager_spec.rb
656
+ - spec/services/forest_liana/resources_getter_spec.rb
657
+ - spec/services/forest_liana/resource_updater_spec.rb
658
+ - spec/services/forest_liana/value_stat_getter_spec.rb
659
+ - spec/services/forest_liana/permissions_getter_spec.rb
660
+ - spec/services/forest_liana/pie_stat_getter_spec.rb
661
+ - spec/services/forest_liana/permissions_checker_live_queries_spec.rb
662
+ - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
663
+ - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
664
+ - spec/services/forest_liana/smart_action_field_validator_spec.rb
665
+ - spec/services/forest_liana/filters_parser_spec.rb
666
+ - spec/services/forest_liana/apimap_sorter_spec.rb
667
+ - spec/services/forest_liana/schema_adapter_spec.rb
668
+ - spec/services/forest_liana/has_many_getter_spec.rb
669
+ - spec/services/forest_liana/line_stat_getter_spec.rb
670
+ - spec/services/forest_liana/ip_whitelist_checker_spec.rb
671
+ - spec/services/forest_liana/permissions_formatter_spec.rb
672
+ - spec/spec_helper.rb
673
+ - spec/lib/forest_liana/schema_file_updater_spec.rb
674
+ - spec/lib/forest_liana/bootstrapper_spec.rb
679
675
  - spec/rails_helper.rb
676
+ - spec/requests/stats_spec.rb
677
+ - spec/requests/actions_controller_spec.rb
678
+ - spec/requests/resources_spec.rb
679
+ - spec/requests/authentications_spec.rb