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