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 +4 -4
- data/app/controllers/forest_liana/actions_controller.rb +3 -1
- data/app/models/forest_liana/model/action.rb +6 -0
- data/app/services/forest_liana/filters_parser.rb +29 -11
- data/app/services/forest_liana/token.rb +1 -0
- data/lib/forest_liana/version.rb +1 -1
- data/spec/requests/actions_controller_spec.rb +13 -2
- data/spec/requests/authentications_spec.rb +5 -1
- data/spec/services/forest_liana/filters_parser_spec.rb +29 -1
- data/spec/services/forest_liana/resource_updater_spec.rb +1 -1
- metadata +124 -124
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9661846cededb74e730dcd16808b9a34f13e4094467efad90d069c3eccb89e31
|
4
|
+
data.tar.gz: 7c7da61924546e78660f9e6674ddc15fb787432793fca4866e53681a0b4d463c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 602f195379f0e5175aaccd55eff08a49da25a6f720a68cca54fce1a40cc46d3b2e878b42fa85512a43b2de94fba9fe9476e01d6a267a572c6a4f2d73e4b182d3
|
7
|
+
data.tar.gz: 5dac79fb17eaddc9bece92948109934cf043e61a6afb0e697b423419e45c7ffac05b4cb6575650eceb9b3cdcd006c334ab984954e01b37a836047dd0c1f0f493
|
@@ -78,7 +78,9 @@ module ForestLiana
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
|
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
|
-
|
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'
|
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
|
data/lib/forest_liana/version.rb
CHANGED
@@ -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
|
-
|
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" >
|
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.
|
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-
|
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/
|
517
|
-
- test/
|
518
|
-
- test/
|
519
|
-
- test/
|
520
|
-
- test/
|
521
|
-
- test/
|
522
|
-
- test/
|
523
|
-
- test/
|
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/
|
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/
|
527
|
+
- test/dummy/config/initializers/inflections.rb
|
557
528
|
- test/dummy/config/initializers/cookies_serializer.rb
|
558
|
-
- test/dummy/config/initializers/
|
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/
|
565
|
-
- test/dummy/config/
|
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/
|
595
|
-
- test/dummy/
|
596
|
-
- test/dummy/
|
597
|
-
- test/
|
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/
|
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/
|
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/
|
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/
|
626
|
-
- spec/
|
627
|
-
- spec/
|
628
|
-
- spec/
|
629
|
-
- spec/dummy/
|
630
|
-
- spec/dummy/
|
631
|
-
- spec/dummy/
|
632
|
-
- spec/dummy/
|
633
|
-
- spec/dummy/
|
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/
|
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/
|
646
|
-
- spec/dummy/config/
|
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/
|
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/
|
655
|
-
- spec/dummy/config/
|
656
|
-
- spec/dummy/config/
|
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/
|
661
|
-
- spec/dummy/app/
|
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/
|
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/
|
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/
|
676
|
-
- spec/dummy/
|
677
|
-
- spec/dummy/
|
678
|
-
- spec/dummy/
|
679
|
-
- spec/
|
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
|