forest_liana 7.0.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22a57de11c5ddee0b53cba1df6f74bebe5cb049534b7eabe58e8c77b5f7e8454
4
- data.tar.gz: 3c26aeac71c9b1aab9e5fcd76434136e8a0779e88433f2522c1e39a18b44442c
3
+ metadata.gz: 9661846cededb74e730dcd16808b9a34f13e4094467efad90d069c3eccb89e31
4
+ data.tar.gz: 7c7da61924546e78660f9e6674ddc15fb787432793fca4866e53681a0b4d463c
5
5
  SHA512:
6
- metadata.gz: ab71e9560ee8823ad87a3db7cb47ea142f020385dbe33b1679223b09f2190b98e30166864ac3765b58bbca1b8181036d5bd59dcfb616ef5b764a66d89f5d1138
7
- data.tar.gz: 3d9c7dd145ec8616b85df2d7f11c27e65dc5311b5e4e3b03f427143f4a0a906f14cd1b797d840c4830147ace5866d2c5840afc377c36ebfd58412286ecc7e8dd
6
+ metadata.gz: 602f195379f0e5175aaccd55eff08a49da25a6f720a68cca54fce1a40cc46d3b2e878b42fa85512a43b2de94fba9fe9476e01d6a267a572c6a4f2d73e4b182d3
7
+ data.tar.gz: 5dac79fb17eaddc9bece92948109934cf043e61a6afb0e697b423419e45c7ffac05b4cb6575650eceb9b3cdcd006c334ab984954e01b37a836047dd0c1f0f493
@@ -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)
@@ -158,7 +149,7 @@ module ForestLiana
158
149
 
159
150
  def parse_value(operator, value)
160
151
  case operator
161
- when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after', 'in'
152
+ when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after'
162
153
  value
163
154
  when 'contains', 'not_contains'
164
155
  "%#{value}%"
@@ -166,6 +157,12 @@ module ForestLiana
166
157
  "#{value}%"
167
158
  when 'ends_with'
168
159
  "%#{value}"
160
+ when 'in'
161
+ if value.kind_of?(String)
162
+ value.split(',').map { |val| val.strip() }
163
+ else
164
+ value
165
+ end
169
166
  when 'present', 'blank'
170
167
  else
171
168
  raise_unknown_operator_error(operator)
@@ -296,5 +293,26 @@ module ForestLiana
296
293
  raise ForestLiana::Errors::HTTP422Error.new('Invalid condition format')
297
294
  end
298
295
  end
296
+
297
+ private
298
+
299
+ def prepare_value_for_operator(operator, value)
300
+ # parenthesis around the parsed_value are required to make the `IN` operator work
301
+ operator == 'in' ? "(#{value})" : value
302
+ end
303
+
304
+ def sanitize_condition(field_and_operator, operator, parsed_value)
305
+ if Rails::VERSION::MAJOR < 5
306
+ condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.sanitize(parsed_value))
307
+ "#{field_and_operator} #{condition_value}"
308
+ # NOTICE: sanitize method as been removed in Rails 5.1 and sanitize_sql introduced in Rails 5.2.
309
+ elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 1
310
+ condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.connection.quote(parsed_value))
311
+ "#{field_and_operator} #{condition_value}"
312
+ else
313
+ condition_value = prepare_value_for_operator(operator, '?')
314
+ ActiveRecord::Base.sanitize_sql(["#{field_and_operator} #{condition_value}", parsed_value])
315
+ end
316
+ end
299
317
  end
300
318
  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.0"
2
+ VERSION = "7.2.0"
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
@@ -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
@@ -370,6 +396,8 @@ module ForestLiana
370
396
  it { expect(filter_parser.parse_value('present', nil)).to eq nil }
371
397
  it { expect(filter_parser.parse_value('equal', 'yes')).to eq 'yes' }
372
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 }
373
401
  end
374
402
 
375
403
  context 'on unknown operator' 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
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-20 00:00:00.000000000 Z
11
+ date: 2021-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -509,171 +509,171 @@ signing_key:
509
509
  specification_version: 4
510
510
  summary: Official Rails Liana for Forest
511
511
  test_files:
512
- - test/routing/route_test.rb
513
- - test/forest_liana_test.rb
514
- - test/services/forest_liana/schema_adapter_test.rb
515
512
  - 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
- - 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
513
+ - test/services/forest_liana/schema_adapter_test.rb
514
+ - test/forest_liana_test.rb
515
+ - test/routing/route_test.rb
516
+ - test/dummy/bin/rake
517
+ - test/dummy/bin/bundle
518
+ - test/dummy/bin/setup
519
+ - test/dummy/bin/rails
520
+ - test/dummy/config/boot.rb
549
521
  - test/dummy/config/secrets.yml
550
- - test/dummy/config/application.rb
522
+ - test/dummy/config/routes.rb
551
523
  - test/dummy/config/environments/test.rb
552
524
  - test/dummy/config/environments/development.rb
553
525
  - test/dummy/config/environments/production.rb
554
- - test/dummy/config/boot.rb
555
526
  - test/dummy/config/locales/en.yml
556
- - test/dummy/config/database.yml
527
+ - test/dummy/config/initializers/inflections.rb
557
528
  - test/dummy/config/initializers/cookies_serializer.rb
558
- - test/dummy/config/initializers/assets.rb
559
- - test/dummy/config/initializers/backtrace_silencers.rb
529
+ - test/dummy/config/initializers/wrap_parameters.rb
560
530
  - test/dummy/config/initializers/mime_types.rb
531
+ - test/dummy/config/initializers/assets.rb
561
532
  - test/dummy/config/initializers/session_store.rb
562
- - test/dummy/config/initializers/wrap_parameters.rb
563
533
  - test/dummy/config/initializers/filter_parameter_logging.rb
564
- - test/dummy/config/initializers/inflections.rb
565
- - test/dummy/config/routes.rb
534
+ - test/dummy/config/initializers/backtrace_silencers.rb
535
+ - test/dummy/config/application.rb
536
+ - test/dummy/config/database.yml
537
+ - test/dummy/config/environment.rb
538
+ - test/dummy/Rakefile
539
+ - test/dummy/db/schema.rb
540
+ - test/dummy/db/migrate/20150608131430_create_integer_field.rb
541
+ - test/dummy/db/migrate/20181111162121_create_references_table.rb
542
+ - test/dummy/db/migrate/20160628173505_add_timestamps.rb
543
+ - test/dummy/db/migrate/20150608130516_create_date_field.rb
544
+ - test/dummy/db/migrate/20150608131610_create_float_field.rb
545
+ - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
546
+ - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
547
+ - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
548
+ - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
549
+ - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
550
+ - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
551
+ - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
552
+ - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
553
+ - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
554
+ - test/dummy/db/migrate/20150608132621_create_string_field.rb
555
+ - test/dummy/db/migrate/20160627172810_create_owner.rb
556
+ - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
557
+ - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
558
+ - test/dummy/db/migrate/20160627172951_create_tree.rb
566
559
  - test/dummy/public/500.html
567
- - test/dummy/public/404.html
568
560
  - test/dummy/public/422.html
561
+ - test/dummy/public/404.html
569
562
  - test/dummy/public/favicon.ico
563
+ - test/dummy/config.ru
564
+ - test/dummy/app/models/reference.rb
565
+ - test/dummy/app/models/belongs_to_field.rb
566
+ - test/dummy/app/models/has_many_class_name_field.rb
567
+ - test/dummy/app/models/decimal_field.rb
568
+ - test/dummy/app/models/owner.rb
569
+ - test/dummy/app/models/integer_field.rb
570
570
  - test/dummy/app/models/boolean_field.rb
571
+ - test/dummy/app/models/date_field.rb
572
+ - test/dummy/app/models/serialize_field.rb
573
+ - test/dummy/app/models/has_many_field.rb
574
+ - test/dummy/app/models/tree.rb
575
+ - test/dummy/app/models/belongs_to_class_name_field.rb
576
+ - test/dummy/app/models/has_and_belongs_to_many_field.rb
571
577
  - test/dummy/app/models/float_field.rb
572
- - test/dummy/app/models/integer_field.rb
573
- - test/dummy/app/models/reference.rb
574
578
  - 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
579
  - test/dummy/app/models/polymorphic_field.rb
579
- - test/dummy/app/models/date_field.rb
580
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
581
  - 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
582
  - test/dummy/app/assets/config/manifest.js
583
+ - test/dummy/app/assets/stylesheets/application.css
584
+ - test/dummy/app/assets/javascripts/application.js
593
585
  - 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
586
+ - test/dummy/app/views/layouts/application.html.erb
587
+ - test/dummy/app/helpers/application_helper.rb
588
+ - test/dummy/README.rdoc
589
+ - test/fixtures/has_many_through_field.yml
590
+ - test/fixtures/has_many_field.yml
591
+ - test/fixtures/string_field.yml
592
+ - test/fixtures/owner.yml
593
+ - test/fixtures/has_one_field.yml
594
+ - test/fixtures/tree.yml
595
+ - test/fixtures/serialize_field.yml
596
+ - test/fixtures/belongs_to_field.yml
597
+ - test/fixtures/reference.yml
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
599
  - spec/services/forest_liana/has_many_getter_spec.rb
611
- - spec/services/forest_liana/apimap_sorter_spec.rb
600
+ - spec/services/forest_liana/permissions_formatter_spec.rb
612
601
  - spec/services/forest_liana/filters_parser_spec.rb
613
602
  - 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
603
  - spec/services/forest_liana/value_stat_getter_spec.rb
604
+ - spec/services/forest_liana/pie_stat_getter_spec.rb
617
605
  - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
618
- - spec/spec_helper.rb
606
+ - spec/services/forest_liana/smart_action_field_validator_spec.rb
607
+ - spec/services/forest_liana/schema_adapter_spec.rb
608
+ - spec/services/forest_liana/permissions_getter_spec.rb
609
+ - spec/services/forest_liana/resources_getter_spec.rb
610
+ - spec/services/forest_liana/line_stat_getter_spec.rb
611
+ - spec/services/forest_liana/apimap_sorter_spec.rb
612
+ - spec/services/forest_liana/ip_whitelist_checker_spec.rb
613
+ - spec/services/forest_liana/resource_updater_spec.rb
614
+ - spec/services/forest_liana/permissions_checker_live_queries_spec.rb
615
+ - spec/services/forest_liana/scope_manager_spec.rb
619
616
  - spec/config/initializers/logger_spec.rb
620
- - spec/lib/forest_liana/schema_file_updater_spec.rb
621
- - spec/lib/forest_liana/bootstrapper_spec.rb
617
+ - spec/requests/resources_spec.rb
622
618
  - spec/requests/stats_spec.rb
623
619
  - spec/requests/actions_controller_spec.rb
624
620
  - spec/requests/authentications_spec.rb
625
- - spec/requests/resources_spec.rb
626
- - spec/dummy/README.rdoc
627
- - spec/dummy/config.ru
628
- - 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
621
+ - spec/spec_helper.rb
622
+ - spec/lib/forest_liana/schema_file_updater_spec.rb
623
+ - spec/lib/forest_liana/bootstrapper_spec.rb
624
+ - spec/rails_helper.rb
625
+ - spec/dummy/bin/rake
626
+ - spec/dummy/bin/bundle
627
+ - spec/dummy/bin/setup
628
+ - spec/dummy/bin/rails
629
+ - spec/dummy/config/boot.rb
640
630
  - spec/dummy/config/secrets.yml
641
- - spec/dummy/config/application.rb
631
+ - spec/dummy/config/routes.rb
642
632
  - spec/dummy/config/environments/test.rb
643
633
  - spec/dummy/config/environments/development.rb
644
634
  - spec/dummy/config/environments/production.rb
645
- - spec/dummy/config/boot.rb
646
- - spec/dummy/config/database.yml
635
+ - spec/dummy/config/initializers/inflections.rb
636
+ - spec/dummy/config/initializers/forest_liana.rb
647
637
  - spec/dummy/config/initializers/cookies_serializer.rb
648
- - spec/dummy/config/initializers/assets.rb
649
- - spec/dummy/config/initializers/backtrace_silencers.rb
638
+ - spec/dummy/config/initializers/wrap_parameters.rb
650
639
  - spec/dummy/config/initializers/mime_types.rb
640
+ - spec/dummy/config/initializers/assets.rb
651
641
  - spec/dummy/config/initializers/session_store.rb
652
- - spec/dummy/config/initializers/wrap_parameters.rb
653
642
  - spec/dummy/config/initializers/filter_parameter_logging.rb
654
- - spec/dummy/config/initializers/inflections.rb
655
- - spec/dummy/config/initializers/forest_liana.rb
656
- - spec/dummy/config/routes.rb
643
+ - spec/dummy/config/initializers/backtrace_silencers.rb
644
+ - spec/dummy/config/application.rb
645
+ - spec/dummy/config/database.yml
646
+ - spec/dummy/config/environment.rb
647
+ - spec/dummy/Rakefile
648
+ - spec/dummy/db/schema.rb
649
+ - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
650
+ - spec/dummy/db/migrate/20210511141752_create_owners.rb
651
+ - spec/dummy/db/migrate/20190226172951_create_user.rb
652
+ - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
653
+ - spec/dummy/db/migrate/20210326140855_create_locations.rb
654
+ - spec/dummy/db/migrate/20210326110524_create_references.rb
655
+ - spec/dummy/db/migrate/20210526084712_create_products.rb
656
+ - spec/dummy/db/migrate/20190226173051_create_isle.rb
657
+ - spec/dummy/db/migrate/20190226174951_create_tree.rb
658
+ - spec/dummy/config.ru
657
659
  - spec/dummy/lib/forest_liana/collections/location.rb
658
- - spec/dummy/lib/forest_liana/collections/island.rb
659
660
  - spec/dummy/lib/forest_liana/collections/user.rb
660
- - spec/dummy/app/models/location.rb
661
- - spec/dummy/app/models/island.rb
661
+ - spec/dummy/lib/forest_liana/collections/island.rb
662
+ - spec/dummy/app/config/routes.rb
662
663
  - spec/dummy/app/models/reference.rb
663
- - spec/dummy/app/models/tree.rb
664
- - spec/dummy/app/models/user.rb
665
664
  - spec/dummy/app/models/product.rb
665
+ - spec/dummy/app/models/location.rb
666
+ - spec/dummy/app/models/user.rb
667
+ - spec/dummy/app/models/island.rb
666
668
  - 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
669
+ - spec/dummy/app/models/tree.rb
672
670
  - spec/dummy/app/assets/config/manifest.js
673
- - spec/dummy/app/controllers/application_controller.rb
671
+ - spec/dummy/app/assets/stylesheets/application.css
672
+ - spec/dummy/app/assets/javascripts/application.js
674
673
  - 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
679
- - spec/rails_helper.rb
674
+ - spec/dummy/app/controllers/application_controller.rb
675
+ - spec/dummy/app/views/layouts/application.html.erb
676
+ - spec/dummy/app/helpers/application_helper.rb
677
+ - spec/dummy/README.rdoc
678
+ - spec/helpers/forest_liana/schema_helper_spec.rb
679
+ - spec/helpers/forest_liana/query_helper_spec.rb