forest_liana 7.0.0 → 7.2.0

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: 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