forest_liana 2.6.1 → 2.7.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/resources_controller.rb +3 -0
- data/app/controllers/forest_liana/stats_controller.rb +4 -1
- data/app/services/forest_liana/live_query_checker.rb +28 -0
- data/app/services/forest_liana/query_stat_getter.rb +1 -11
- data/app/services/forest_liana/resources_getter.rb +16 -0
- data/config/initializers/errors.rb +6 -0
- data/lib/forest_liana/version.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +445 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2d05f6e1fc47af580463c80aa4280ec65496f31
|
4
|
+
data.tar.gz: a401f01f830a7f9c0f29cde8253d76d1e5d4685d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19390d26df07518f0e348b309776cec643f66ba7b2b8d9f6e9450cbb1ace482031ae3ba04ab18818a4a63f2453eb1737a0265c512a020c2cee32a08c03c4674d
|
7
|
+
data.tar.gz: 9b1c599b01dd841082f876458a05c96e287a5b29e9a2b0c56a08c81a57966024ba8beb548b6bf855d5a5850d47c4d9bc020c07c62cd0424b20d5c2c5c7fa5b23
|
@@ -22,6 +22,9 @@ module ForestLiana
|
|
22
22
|
format.json { render_jsonapi(getter) }
|
23
23
|
format.csv { render_csv(getter, @resource) }
|
24
24
|
end
|
25
|
+
rescue ForestLiana::Errors::LiveQueryError => error
|
26
|
+
render json: { errors: [{ status: 422, detail: error.message }] },
|
27
|
+
status: :unprocessable_entity, serializer: nil
|
25
28
|
rescue => error
|
26
29
|
FOREST_LOGGER.error "Records Index error: #{error}\n#{format_stacktrace(error)}"
|
27
30
|
internal_server_error
|
@@ -34,8 +34,11 @@ module ForestLiana
|
|
34
34
|
else
|
35
35
|
render json: {status: 404}, status: :not_found, serializer: nil
|
36
36
|
end
|
37
|
+
rescue ForestLiana::Errors::LiveQueryError => error
|
38
|
+
render json: { errors: [{ status: 422, detail: error.message }] },
|
39
|
+
status: :unprocessable_entity, serializer: nil
|
37
40
|
rescue => error
|
38
|
-
FOREST_LOGGER.error "Live Query error: #{error.message}"
|
41
|
+
FOREST_LOGGER.error "Live Query error: #{error.message}"
|
39
42
|
render json: { errors: [{ status: 422, detail: error.message }] },
|
40
43
|
status: :unprocessable_entity, serializer: nil
|
41
44
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class LiveQueryChecker
|
3
|
+
QUERY_SELECT = /\ASELECT\s.*FROM\s.*\z/im
|
4
|
+
|
5
|
+
def initialize(query, context)
|
6
|
+
@query = query
|
7
|
+
@context = context
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
raise generate_error 'You cannot execute an empty SQL query.' if @query.blank?
|
12
|
+
|
13
|
+
if @query.include?(';') && @query.index(';') < (@query.length - 1)
|
14
|
+
raise generate_error 'You cannot chain SQL queries.'
|
15
|
+
end
|
16
|
+
|
17
|
+
raise generate_error 'Only SELECT queries are allowed.' if QUERY_SELECT.match(@query).nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def generate_error message
|
23
|
+
error_message = "#{@context}: #{message}"
|
24
|
+
FOREST_LOGGER.error(error_message)
|
25
|
+
ForestLiana::Errors::LiveQueryError.new(error_message)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
2
|
class QueryStatGetter
|
3
|
-
QUERY_SELECT = /\ASELECT\s.*FROM\s.*\z/im
|
4
|
-
|
5
3
|
attr_accessor :record
|
6
4
|
|
7
5
|
def initialize(params)
|
@@ -11,7 +9,7 @@ module ForestLiana
|
|
11
9
|
def perform
|
12
10
|
raw_query = @params['query'].strip
|
13
11
|
|
14
|
-
|
12
|
+
LiveQueryChecker.new(raw_query, 'Live Query Chart').validate()
|
15
13
|
|
16
14
|
if @params['record_id']
|
17
15
|
raw_query.gsub!('?', @params['record_id'].to_s)
|
@@ -69,14 +67,6 @@ module ForestLiana
|
|
69
67
|
|
70
68
|
private
|
71
69
|
|
72
|
-
def check_query(query)
|
73
|
-
raise 'You cannot execute an empty SQL query.' if query.blank?
|
74
|
-
if query.include?(';') && query.index(';') < (query.length - 1)
|
75
|
-
raise 'You cannot chain SQL queries.'
|
76
|
-
end
|
77
|
-
raise 'Only SELECT queries are allowed.' if QUERY_SELECT.match(query).nil?
|
78
|
-
end
|
79
|
-
|
80
70
|
def error_message(result, key_names)
|
81
71
|
"The result columns must be named #{key_names} instead of '#{result.keys.join("', '")}'"
|
82
72
|
end
|
@@ -19,6 +19,22 @@ module ForestLiana
|
|
19
19
|
@records = @records.where(@segment.where.call())
|
20
20
|
end
|
21
21
|
|
22
|
+
# NOTICE: Live Query mode
|
23
|
+
if @params[:segmentQuery]
|
24
|
+
LiveQueryChecker.new(@params[:segmentQuery], 'Live Query Segment').validate()
|
25
|
+
|
26
|
+
begin
|
27
|
+
results = ActiveRecord::Base.connection.execute(@params[:segmentQuery])
|
28
|
+
rescue => error
|
29
|
+
error_message = "Live Query Segment: #{error.message}"
|
30
|
+
FOREST_LOGGER.error(error_message)
|
31
|
+
raise ForestLiana::Errors::LiveQueryError.new(error_message)
|
32
|
+
end
|
33
|
+
|
34
|
+
record_ids = results.to_a.map { |record| record['id'] }
|
35
|
+
@records = @records.where(id: record_ids)
|
36
|
+
end
|
37
|
+
|
22
38
|
@records = search_query
|
23
39
|
@records_to_count = @records
|
24
40
|
|
data/lib/forest_liana/version.rb
CHANGED
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
data/test/dummy/log/test.log
CHANGED
@@ -21751,3 +21751,448 @@ ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribut
|
|
21751
21751
|
[1m[35m (0.0ms)[0m SAVEPOINT active_record_1
|
21752
21752
|
[1m[36m (0.0ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m
|
21753
21753
|
[1m[35m (0.0ms)[0m rollback transaction
|
21754
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.5ms)[0m [1mSELECT "schema_migrations".* FROM "schema_migrations"[0m
|
21755
|
+
[1m[35mActiveRecord::SchemaMigration Load (0.1ms)[0m SELECT "schema_migrations".* FROM "schema_migrations"
|
21756
|
+
[1m[36m (0.4ms)[0m [1m SELECT sql
|
21757
|
+
FROM sqlite_master
|
21758
|
+
WHERE name='index_belongs_to_class_name_fields_on_foo_id' AND type='index'
|
21759
|
+
UNION ALL
|
21760
|
+
SELECT sql
|
21761
|
+
FROM sqlite_temp_master
|
21762
|
+
WHERE name='index_belongs_to_class_name_fields_on_foo_id' AND type='index'
|
21763
|
+
[0m
|
21764
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
21765
|
+
FROM sqlite_master
|
21766
|
+
WHERE name='index_belongs_to_fields_on_has_many_field_id' AND type='index'
|
21767
|
+
UNION ALL
|
21768
|
+
SELECT sql
|
21769
|
+
FROM sqlite_temp_master
|
21770
|
+
WHERE name='index_belongs_to_fields_on_has_many_field_id' AND type='index'
|
21771
|
+
|
21772
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
21773
|
+
FROM sqlite_master
|
21774
|
+
WHERE name='index_belongs_to_fields_on_has_many_class_name_field_id' AND type='index'
|
21775
|
+
UNION ALL
|
21776
|
+
SELECT sql
|
21777
|
+
FROM sqlite_temp_master
|
21778
|
+
WHERE name='index_belongs_to_fields_on_has_many_class_name_field_id' AND type='index'
|
21779
|
+
[0m
|
21780
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
21781
|
+
FROM sqlite_master
|
21782
|
+
WHERE name='index_belongs_to_fields_on_has_one_field_id' AND type='index'
|
21783
|
+
UNION ALL
|
21784
|
+
SELECT sql
|
21785
|
+
FROM sqlite_temp_master
|
21786
|
+
WHERE name='index_belongs_to_fields_on_has_one_field_id' AND type='index'
|
21787
|
+
|
21788
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
21789
|
+
FROM sqlite_master
|
21790
|
+
WHERE name='index_has_many_fields_on_has_many_through_field_id' AND type='index'
|
21791
|
+
UNION ALL
|
21792
|
+
SELECT sql
|
21793
|
+
FROM sqlite_temp_master
|
21794
|
+
WHERE name='index_has_many_fields_on_has_many_through_field_id' AND type='index'
|
21795
|
+
[0m
|
21796
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
21797
|
+
FROM sqlite_master
|
21798
|
+
WHERE name='index_polymorphic_fields_on_has_one_field_id' AND type='index'
|
21799
|
+
UNION ALL
|
21800
|
+
SELECT sql
|
21801
|
+
FROM sqlite_temp_master
|
21802
|
+
WHERE name='index_polymorphic_fields_on_has_one_field_id' AND type='index'
|
21803
|
+
|
21804
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
21805
|
+
FROM sqlite_master
|
21806
|
+
WHERE name='index_trees_on_owner_id' AND type='index'
|
21807
|
+
UNION ALL
|
21808
|
+
SELECT sql
|
21809
|
+
FROM sqlite_temp_master
|
21810
|
+
WHERE name='index_trees_on_owner_id' AND type='index'
|
21811
|
+
[0m
|
21812
|
+
[1m[36mActiveRecord::SchemaMigration Load (0.1ms)[0m [1mSELECT "schema_migrations".* FROM "schema_migrations"[0m
|
21813
|
+
[1m[35m (0.1ms)[0m begin transaction
|
21814
|
+
[1m[36mFixture Delete (1.1ms)[0m [1mDELETE FROM "has_many_through_fields"[0m
|
21815
|
+
[1m[35mFixture Insert (0.4ms)[0m INSERT INTO "has_many_through_fields" ("id") VALUES (1)
|
21816
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_many_through_fields" ("id") VALUES (2)[0m
|
21817
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_through_fields" ("id") VALUES (3)
|
21818
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_many_through_fields" ("id") VALUES (4)[0m
|
21819
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_through_fields" ("id") VALUES (5)
|
21820
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_many_through_fields" ("id") VALUES (6)[0m
|
21821
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_through_fields" ("id") VALUES (7)
|
21822
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_many_through_fields" ("id") VALUES (8)[0m
|
21823
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_through_fields" ("id") VALUES (9)
|
21824
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_many_through_fields" ("id") VALUES (10)[0m
|
21825
|
+
[1m[35mFixture Delete (0.3ms)[0m DELETE FROM "string_fields"
|
21826
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (1, 'Test 1')[0m
|
21827
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (2, 'Test 2')
|
21828
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (3, 'Test 3')[0m
|
21829
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (4, 'Test 4')
|
21830
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (5, 'Test 5')[0m
|
21831
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (6, 'Test 6')
|
21832
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (7, 'Test 7')[0m
|
21833
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (8, 'Test 8')
|
21834
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (9, 'Test 9')[0m
|
21835
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (10, 'Test 10')
|
21836
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (11, 'Test 11')[0m
|
21837
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (12, 'Test 12')
|
21838
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (13, 'Test 13')[0m
|
21839
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (14, 'Test 14')
|
21840
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (15, 'Test 15')[0m
|
21841
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (16, 'Test 16')
|
21842
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (17, 'Test 17')[0m
|
21843
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (18, 'Test 18')
|
21844
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (19, 'Test 19')[0m
|
21845
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (20, 'Test 20')
|
21846
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (21, 'Test 21')[0m
|
21847
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (22, 'Test 22')
|
21848
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (23, 'Test 23')[0m
|
21849
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (24, 'Test 24')
|
21850
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (25, 'Test 25')[0m
|
21851
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (26, 'Test 26')
|
21852
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (27, 'Test 27')[0m
|
21853
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (28, 'Test 28')
|
21854
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "string_fields" ("id", "field") VALUES (29, 'Test 29')[0m
|
21855
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "string_fields" ("id", "field") VALUES (30, 'Test 30')
|
21856
|
+
[1m[36mFixture Delete (1.3ms)[0m [1mDELETE FROM "belongs_to_fields"[0m
|
21857
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (1, 1, 1)
|
21858
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (2, 2, 1)[0m
|
21859
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (3, 3, 1)
|
21860
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (4, 4, 2)[0m
|
21861
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (5, 5, 2)
|
21862
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (6, 6, 2)[0m
|
21863
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (7, 7, 3)
|
21864
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (8, 8, 3)[0m
|
21865
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (9, 9, 3)
|
21866
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (10, 10, 4)[0m
|
21867
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (11, 11, 4)
|
21868
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (12, 12, 4)[0m
|
21869
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (13, 13, 5)
|
21870
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (14, 14, 5)[0m
|
21871
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (15, 15, 5)
|
21872
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (16, 16, 6)[0m
|
21873
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (17, 17, 6)
|
21874
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (18, 18, 6)[0m
|
21875
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (19, 19, 7)
|
21876
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (20, 20, 7)[0m
|
21877
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (21, 21, 7)
|
21878
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (22, 22, 7)[0m
|
21879
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (23, 23, 8)
|
21880
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (24, 24, 8)[0m
|
21881
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (25, 25, 9)
|
21882
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (26, 26, 9)[0m
|
21883
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (27, 27, 9)
|
21884
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (28, 28, 10)[0m
|
21885
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (29, 29, 10)
|
21886
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (30, 30, 10)[0m
|
21887
|
+
[1m[35mFixture Delete (1.0ms)[0m DELETE FROM "trees"
|
21888
|
+
[1m[36mFixture Insert (0.2ms)[0m [1mINSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (1, 'Oak', 1, '2011-02-11 11:00:00.000000', '2011-02-11 11:00:00.000000')[0m
|
21889
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (2, 'Mapple', 2, '2011-02-15 21:00:00.000000', '2011-02-15 21:00:00.000000')
|
21890
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (3, 'Mapple', 2, '2013-04-11 12:00:00.000000', '2013-04-11 12:00:00.000000')[0m
|
21891
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (4, 'Oak', 2, '2016-06-18 09:00:00.000000', '2016-06-18 09:00:00.000000')
|
21892
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (5, 'Oak', 3, '2015-06-18 09:00:00.000000', '2015-06-18 09:00:00.000000')[0m
|
21893
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (6, 'Oak', 3, '2018-06-01 18:27:39.000000', '2018-06-01 18:27:39.000000')
|
21894
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (7, 'Sequoia', 1, '2018-06-01 18:27:39.000000', '2018-06-01 18:27:39.000000')[0m
|
21895
|
+
[1m[35mFixture Insert (0.2ms)[0m INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (8, 'Fir', 1, '2018-06-01 18:27:39.000000', '2018-06-01 18:27:39.000000')
|
21896
|
+
[1m[36mFixture Delete (0.6ms)[0m [1mDELETE FROM "has_one_fields"[0m
|
21897
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (1, 't', 0)
|
21898
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (2, 't', 0)[0m
|
21899
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (3, 't', 0)
|
21900
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (4, 't', 0)[0m
|
21901
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (5, 't', 0)
|
21902
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (6, 't', 0)[0m
|
21903
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (7, 't', 0)
|
21904
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (8, 't', 0)[0m
|
21905
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (9, 't', 0)
|
21906
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (10, 't', 0)[0m
|
21907
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (11, 't', 0)
|
21908
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (12, 't', 0)[0m
|
21909
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (13, 't', 0)
|
21910
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (14, 't', 0)[0m
|
21911
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (15, 't', 0)
|
21912
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (16, 't', 0)[0m
|
21913
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (17, 't', 0)
|
21914
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (18, 't', 0)[0m
|
21915
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (19, 't', 0)
|
21916
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (20, 't', 0)[0m
|
21917
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (21, 't', 0)
|
21918
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (22, 't', 0)[0m
|
21919
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (23, 't', 0)
|
21920
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (24, 't', 0)[0m
|
21921
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (25, 't', 0)
|
21922
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (26, 't', 0)[0m
|
21923
|
+
[1m[35mFixture Insert (4.6ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (27, 't', 0)
|
21924
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (28, 't', 0)[0m
|
21925
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (29, 't', 0)
|
21926
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (30, 't', 1)[0m
|
21927
|
+
[1m[35mFixture Delete (0.5ms)[0m DELETE FROM "owners"
|
21928
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "owners" ("id", "name", "created_at", "updated_at") VALUES (1, 'Sandro Munda', '2017-05-30 09:00:00.000000', '2018-06-27 20:00:00.000000')[0m
|
21929
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "owners" ("id", "name", "created_at", "updated_at") VALUES (2, 'Arnaud Besnier', '2018-05-02 09:00:00.000000', '2018-06-28 08:00:00.000000')
|
21930
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "owners" ("id", "name", "created_at", "updated_at") VALUES (3, 'John Doe', '2016-05-02 09:00:00.000000', '2017-06-28 08:00:00.000000')[0m
|
21931
|
+
[1m[35mFixture Delete (0.9ms)[0m DELETE FROM "has_many_fields"
|
21932
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_many_fields" ("id") VALUES (1)[0m
|
21933
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_many_fields" ("id") VALUES (2)
|
21934
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_many_fields" ("id") VALUES (3)[0m
|
21935
|
+
[1m[35mFixture Insert (0.1ms)[0m INSERT INTO "has_many_fields" ("id") VALUES (4)
|
21936
|
+
[1m[36mFixture Insert (0.1ms)[0m [1mINSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (5, 3)[0m
|
21937
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (6, 2)
|
21938
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_many_fields" ("id") VALUES (7)[0m
|
21939
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (8, 2)
|
21940
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "has_many_fields" ("id") VALUES (9)[0m
|
21941
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "has_many_fields" ("id") VALUES (10)
|
21942
|
+
[1m[36mFixture Delete (0.1ms)[0m [1mDELETE FROM "serialize_fields"[0m
|
21943
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "serialize_fields" ("id", "field") VALUES (1, 'value 1')
|
21944
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "serialize_fields" ("id", "field") VALUES (2, 'value 2')[0m
|
21945
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "serialize_fields" ("id", "field") VALUES (3, 'value 3')
|
21946
|
+
[1m[36mFixture Insert (0.0ms)[0m [1mINSERT INTO "serialize_fields" ("id", "field") VALUES (4, 'value 4')[0m
|
21947
|
+
[1m[35mFixture Insert (0.0ms)[0m INSERT INTO "serialize_fields" ("id", "field") VALUES (5, 'value 5')
|
21948
|
+
[1m[36m (2.4ms)[0m [1mcommit transaction[0m
|
21949
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21950
|
+
-----------------------------------------------------------
|
21951
|
+
ForestLiana::SchemaAdapterTest: test_belongsTo_relationship
|
21952
|
+
-----------------------------------------------------------
|
21953
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
21954
|
+
[1m[35m (0.2ms)[0m begin transaction
|
21955
|
+
----------------------------------------------------------------------------------
|
21956
|
+
ForestLiana::SchemaAdapterTest: test_hasMany_relationhip_with_specified_class_name
|
21957
|
+
----------------------------------------------------------------------------------
|
21958
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
21959
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21960
|
+
--------------------------------------------------------
|
21961
|
+
ForestLiana::SchemaAdapterTest: test_hasOne_relationship
|
21962
|
+
--------------------------------------------------------
|
21963
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21964
|
+
[1m[35m (0.1ms)[0m begin transaction
|
21965
|
+
---------------------------------------------------------------------
|
21966
|
+
ForestLiana::SchemaAdapterTest: test_Date_should_have_the_type_`Date`
|
21967
|
+
---------------------------------------------------------------------
|
21968
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21969
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21970
|
+
-------------------------------------------------------------------------
|
21971
|
+
ForestLiana::SchemaAdapterTest: test_DateTime_should_have_the_type_`Date`
|
21972
|
+
-------------------------------------------------------------------------
|
21973
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21974
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21975
|
+
------------------------------------------------------------------------
|
21976
|
+
ForestLiana::SchemaAdapterTest: test_Float_should_have_the_type_`Number`
|
21977
|
+
------------------------------------------------------------------------
|
21978
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21979
|
+
[1m[35m (0.1ms)[0m begin transaction
|
21980
|
+
--------------------------------------------------------------------------
|
21981
|
+
ForestLiana::SchemaAdapterTest: test_Decimal_should_have_the_type_`Number`
|
21982
|
+
--------------------------------------------------------------------------
|
21983
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21984
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21985
|
+
------------------------------------------------------------------------------------
|
21986
|
+
ForestLiana::SchemaAdapterTest: test_belongsTo_relationhip_with_specified_class_name
|
21987
|
+
------------------------------------------------------------------------------------
|
21988
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21989
|
+
[1m[35m (0.1ms)[0m begin transaction
|
21990
|
+
---------------------------------------------------------------------------
|
21991
|
+
ForestLiana::SchemaAdapterTest: test_Boolean_should_have_the_type_`Boolean`
|
21992
|
+
---------------------------------------------------------------------------
|
21993
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21994
|
+
[1m[35m (0.0ms)[0m begin transaction
|
21995
|
+
-------------------------------------------------------------------------
|
21996
|
+
ForestLiana::SchemaAdapterTest: test_String_should_have_the_type_`String`
|
21997
|
+
-------------------------------------------------------------------------
|
21998
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
21999
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22000
|
+
---------------------------------------------------------
|
22001
|
+
ForestLiana::SchemaAdapterTest: test_hasMany_relationship
|
22002
|
+
---------------------------------------------------------
|
22003
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22004
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22005
|
+
--------------------------------------------------------------------------
|
22006
|
+
ForestLiana::SchemaAdapterTest: test_Integer_should_have_the_type_`Number`
|
22007
|
+
--------------------------------------------------------------------------
|
22008
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22009
|
+
[1m[35m (0.1ms)[0m begin transaction
|
22010
|
+
-----------------------------------
|
22011
|
+
ForestLiana::RouteTest: test_Routes
|
22012
|
+
-----------------------------------
|
22013
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22014
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22015
|
+
-------------------------------------------------------------------------------------------
|
22016
|
+
ForestLiana::ResourcesGetterTest: test_Filter_on_an_updated_at_field_of_the_main_collection
|
22017
|
+
-------------------------------------------------------------------------------------------
|
22018
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "owners"."id" AS t0_r0, "owners"."name" AS t0_r1, "owners"."created_at" AS t0_r2, "owners"."updated_at" AS t0_r3 FROM "owners" WHERE ("owners"."updated_at" BETWEEN '2017-01-01 08:00:00 UTC' AND '2018-01-01 07:59:59 UTC') ORDER BY owners.created_at DESC LIMIT 10 OFFSET 0[0m
|
22019
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "owners" WHERE ("owners"."updated_at" BETWEEN '2017-01-01 08:00:00 UTC' AND '2018-01-01 07:59:59 UTC')
|
22020
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22021
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22022
|
+
----------------------------------------------------------
|
22023
|
+
ForestLiana::ResourcesGetterTest: test_Filter_after_x_days
|
22024
|
+
----------------------------------------------------------
|
22025
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4 FROM "trees" WHERE ("trees"."created_at" > '2018-06-01 18:26:40 UTC') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0[0m
|
22026
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "trees" WHERE ("trees"."created_at" > '2018-06-01 18:26:40 UTC')
|
22027
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22028
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22029
|
+
-----------------------------------------------------------------
|
22030
|
+
ForestLiana::ResourcesGetterTest: test_StringField_page_2_size_10
|
22031
|
+
-----------------------------------------------------------------
|
22032
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "string_fields"."id" AS t0_r0, "string_fields"."field" AS t0_r1 FROM "string_fields" ORDER BY string_fields.id DESC LIMIT 10 OFFSET 10[0m
|
22033
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "string_fields"
|
22034
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22035
|
+
[1m[35m (0.1ms)[0m begin transaction
|
22036
|
+
------------------------------------------------------------------------------------------------------
|
22037
|
+
ForestLiana::ResourcesGetterTest: test_Filter_equal_on_an_updated_at_field_of_an_associated_collection
|
22038
|
+
------------------------------------------------------------------------------------------------------
|
22039
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.updated_at = 'Sat Jul 02 2016 11:52:00 GMT-0400 (EDT)') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0[0m
|
22040
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(DISTINCT "trees"."id") FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.updated_at = 'Sat Jul 02 2016 11:52:00 GMT-0400 (EDT)')
|
22041
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22042
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22043
|
+
------------------------------------------------------------------------------------
|
22044
|
+
ForestLiana::ResourcesGetterTest: test_Sort_on_an_ambiguous_field_name_with_a_filter
|
22045
|
+
------------------------------------------------------------------------------------
|
22046
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.name = 'Arnaud Besnier') ORDER BY trees.name DESC LIMIT 10 OFFSET 0[0m
|
22047
|
+
[1m[35m (0.5ms)[0m SELECT COUNT(DISTINCT "trees"."id") FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.name = 'Arnaud Besnier')
|
22048
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22049
|
+
[1m[35m (0.7ms)[0m begin transaction
|
22050
|
+
------------------------------------------------------------------------------------------------
|
22051
|
+
ForestLiana::ResourcesGetterTest: test_Filter_on_an_updated_at_field_of_an_associated_collection
|
22052
|
+
------------------------------------------------------------------------------------------------
|
22053
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.updated_at BETWEEN '2017-01-01 08:00:00 UTC' AND '2018-01-01 07:59:59 UTC') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0[0m
|
22054
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(DISTINCT "trees"."id") FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.updated_at BETWEEN '2017-01-01 08:00:00 UTC' AND '2018-01-01 07:59:59 UTC')
|
22055
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22056
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22057
|
+
-----------------------------------------------------------------------
|
22058
|
+
ForestLiana::ResourcesGetterTest: test_Sort_by_a_belongs_to_association
|
22059
|
+
-----------------------------------------------------------------------
|
22060
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "belongs_to_fields"."id" AS t0_r0, "belongs_to_fields"."has_one_field_id" AS t0_r1, "belongs_to_fields"."has_many_class_name_field_id" AS t0_r2, "belongs_to_fields"."has_many_field_id" AS t0_r3, "has_one_fields"."id" AS t1_r0, "has_one_fields"."checked" AS t1_r1, "has_one_fields"."status" AS t1_r2, "has_many_fields"."id" AS t2_r0, "has_many_fields"."has_many_through_field_id" AS t2_r1, "has_many_class_name_fields"."id" AS t3_r0 FROM "belongs_to_fields" LEFT OUTER JOIN "has_one_fields" ON "has_one_fields"."id" = "belongs_to_fields"."has_one_field_id" LEFT OUTER JOIN "has_many_fields" ON "has_many_fields"."id" = "belongs_to_fields"."has_many_field_id" LEFT OUTER JOIN "has_many_class_name_fields" ON "has_many_class_name_fields"."id" = "belongs_to_fields"."has_many_class_name_field_id" ORDER BY "has_one_fields"."id" ASC LIMIT 10 OFFSET 0[0m
|
22061
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "belongs_to_fields"
|
22062
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22063
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22064
|
+
--------------------------------------------------------------------
|
22065
|
+
ForestLiana::ResourcesGetterTest: test_Sort_by_a_has_one_association
|
22066
|
+
--------------------------------------------------------------------
|
22067
|
+
[1m[36mSQL (0.5ms)[0m [1mSELECT "has_one_fields"."id" AS t0_r0, "has_one_fields"."checked" AS t0_r1, "has_one_fields"."status" AS t0_r2, "belongs_to_fields"."id" AS t1_r0, "belongs_to_fields"."has_one_field_id" AS t1_r1, "belongs_to_fields"."has_many_class_name_field_id" AS t1_r2, "belongs_to_fields"."has_many_field_id" AS t1_r3, "belongs_to_class_name_fields"."id" AS t2_r0, "belongs_to_class_name_fields"."foo_id" AS t2_r1 FROM "has_one_fields" LEFT OUTER JOIN "belongs_to_fields" ON "belongs_to_fields"."has_one_field_id" = "has_one_fields"."id" LEFT OUTER JOIN "belongs_to_class_name_fields" ON "belongs_to_class_name_fields"."foo_id" = "has_one_fields"."id" ORDER BY "belongs_to_fields"."id" DESC LIMIT 10 OFFSET 0[0m
|
22068
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "has_one_fields"
|
22069
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22070
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22071
|
+
----------------------------------------------------------------
|
22072
|
+
ForestLiana::ResourcesGetterTest: test_Filter_on_ambiguous_field
|
22073
|
+
----------------------------------------------------------------
|
22074
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE ("trees"."created_at" > '2015-06-18 08:00:00') AND (owners.name = 'Arnaud Besnier') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0[0m
|
22075
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(DISTINCT "trees"."id") FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE ("trees"."created_at" > '2015-06-18 08:00:00') AND (owners.name = 'Arnaud Besnier')
|
22076
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22077
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22078
|
+
-----------------------------------------------------------------
|
22079
|
+
ForestLiana::ResourcesGetterTest: test_StringField_page_1_size_15
|
22080
|
+
-----------------------------------------------------------------
|
22081
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "string_fields"."id" AS t0_r0, "string_fields"."field" AS t0_r1 FROM "string_fields" ORDER BY string_fields.id DESC LIMIT 15 OFFSET 0[0m
|
22082
|
+
[1m[35m (0.0ms)[0m SELECT COUNT(*) FROM "string_fields"
|
22083
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22084
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22085
|
+
------------------------------------------------------------
|
22086
|
+
ForestLiana::ResourcesGetterTest: test_Filter_before_x_hours
|
22087
|
+
------------------------------------------------------------
|
22088
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4 FROM "trees" WHERE ("trees"."created_at" < '2018-06-01 18:26:40 UTC') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0[0m
|
22089
|
+
[1m[35m (0.0ms)[0m SELECT COUNT(*) FROM "trees" WHERE ("trees"."created_at" < '2018-06-01 18:26:40 UTC')
|
22090
|
+
[1m[36mOwner Load (0.2ms)[0m [1mSELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1[0m [["id", 2]]
|
22091
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22092
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22093
|
+
----------------------------------------------------------------
|
22094
|
+
ForestLiana::ResourcesGetterTest: test_StringField_sort_by_field
|
22095
|
+
----------------------------------------------------------------
|
22096
|
+
[1m[35mSQL (0.2ms)[0m SELECT "string_fields"."id" AS t0_r0, "string_fields"."field" AS t0_r1 FROM "string_fields" ORDER BY string_fields.field DESC LIMIT 10 OFFSET 0
|
22097
|
+
[1m[36m (0.0ms)[0m [1mSELECT COUNT(*) FROM "string_fields"[0m
|
22098
|
+
[1m[35m (0.0ms)[0m rollback transaction
|
22099
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22100
|
+
---------------------------
|
22101
|
+
ForestLianaTest: test_truth
|
22102
|
+
---------------------------
|
22103
|
+
[1m[35m (0.0ms)[0m rollback transaction
|
22104
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22105
|
+
-------------------------------------------------------------------------------------------------
|
22106
|
+
ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_enum_field
|
22107
|
+
-------------------------------------------------------------------------------------------------
|
22108
|
+
[1m[35m (0.3ms)[0m SELECT DISTINCT COUNT(DISTINCT "belongs_to_fields"."id") FROM "belongs_to_fields" LEFT OUTER JOIN "has_one_fields" ON "has_one_fields"."id" = "belongs_to_fields"."has_one_field_id" LEFT OUTER JOIN "has_many_fields" ON "has_many_fields"."id" = "belongs_to_fields"."has_many_field_id" LEFT OUTER JOIN "has_many_class_name_fields" ON "has_many_class_name_fields"."id" = "belongs_to_fields"."has_many_class_name_field_id" WHERE ("has_one_fields"."status" = '1')
|
22109
|
+
[1m[36m (4.0ms)[0m [1mrollback transaction[0m
|
22110
|
+
[1m[35m (0.1ms)[0m begin transaction
|
22111
|
+
-----------------------------------------------------------------------------
|
22112
|
+
ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_simple_filter
|
22113
|
+
-----------------------------------------------------------------------------
|
22114
|
+
[1m[36m (0.5ms)[0m [1mSELECT DISTINCT COUNT(DISTINCT "boolean_fields"."id") FROM "boolean_fields" WHERE ("boolean_fields"."field" = 1)[0m
|
22115
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22116
|
+
[1m[36m (0.1ms)[0m [1mbegin transaction[0m
|
22117
|
+
----------------------------------------------------------------------------------------------------
|
22118
|
+
ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_boolean_field
|
22119
|
+
----------------------------------------------------------------------------------------------------
|
22120
|
+
[1m[35m (0.2ms)[0m SELECT DISTINCT COUNT(DISTINCT "belongs_to_fields"."id") FROM "belongs_to_fields" LEFT OUTER JOIN "has_one_fields" ON "has_one_fields"."id" = "belongs_to_fields"."has_one_field_id" LEFT OUTER JOIN "has_many_fields" ON "has_many_fields"."id" = "belongs_to_fields"."has_many_field_id" LEFT OUTER JOIN "has_many_class_name_fields" ON "has_many_class_name_fields"."id" = "belongs_to_fields"."has_many_class_name_field_id" WHERE ("has_one_fields"."checked" = 0)
|
22121
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22122
|
+
[1m[35m (0.1ms)[0m begin transaction
|
22123
|
+
----------------------------------------------------------------------------------------------------
|
22124
|
+
ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_integer_field
|
22125
|
+
----------------------------------------------------------------------------------------------------
|
22126
|
+
[1m[36m (0.2ms)[0m [1mSELECT DISTINCT COUNT(DISTINCT "belongs_to_fields"."id") FROM "belongs_to_fields" LEFT OUTER JOIN "has_one_fields" ON "has_one_fields"."id" = "belongs_to_fields"."has_one_field_id" LEFT OUTER JOIN "has_many_fields" ON "has_many_fields"."id" = "belongs_to_fields"."has_many_field_id" LEFT OUTER JOIN "has_many_class_name_fields" ON "has_many_class_name_fields"."id" = "belongs_to_fields"."has_many_class_name_field_id" WHERE ("has_one_fields"."id" = '3')[0m
|
22127
|
+
[1m[35m (0.0ms)[0m rollback transaction
|
22128
|
+
[1m[36m (0.1ms)[0m [1mbegin transaction[0m
|
22129
|
+
---------------------------------------------------------------------------------------------------------
|
22130
|
+
ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_bad_format_value
|
22131
|
+
---------------------------------------------------------------------------------------------------------
|
22132
|
+
[1m[35mSerializeField Load (0.1ms)[0m SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
|
22133
|
+
[1m[36m (0.1ms)[0m [1mrollback transaction[0m
|
22134
|
+
[1m[35m (0.0ms)[0m begin transaction
|
22135
|
+
------------------------------------------------------------------------------------------------------
|
22136
|
+
ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_missing_value
|
22137
|
+
------------------------------------------------------------------------------------------------------
|
22138
|
+
[1m[36mSerializeField Load (0.1ms)[0m [1mSELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1[0m [["id", 1]]
|
22139
|
+
[1m[35m (0.1ms)[0m SAVEPOINT active_record_1
|
22140
|
+
[1m[36m (0.1ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m
|
22141
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22142
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22143
|
+
------------------------------------------------------------------------------------------------------------
|
22144
|
+
ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_well_formated_value
|
22145
|
+
------------------------------------------------------------------------------------------------------------
|
22146
|
+
[1m[35mSerializeField Load (0.1ms)[0m SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
|
22147
|
+
[1m[36m (0.0ms)[0m [1mSAVEPOINT active_record_1[0m
|
22148
|
+
[1m[35mSQL (0.9ms)[0m UPDATE "serialize_fields" SET "field" = ? WHERE "serialize_fields"."id" = ? [["field", "---\n- test\n- test\n"], ["id", 1]]
|
22149
|
+
[1m[36m (0.0ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m
|
22150
|
+
[1m[35m (0.5ms)[0m rollback transaction
|
22151
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22152
|
+
---------------------------------------------------------------------------------------------------
|
22153
|
+
ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_null_value
|
22154
|
+
---------------------------------------------------------------------------------------------------
|
22155
|
+
[1m[35mSerializeField Load (0.1ms)[0m SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
|
22156
|
+
[1m[36m (0.0ms)[0m [1mSAVEPOINT active_record_1[0m
|
22157
|
+
[1m[35mSQL (0.2ms)[0m UPDATE "serialize_fields" SET "field" = ? WHERE "serialize_fields"."id" = ? [["field", nil], ["id", 1]]
|
22158
|
+
[1m[36m (0.0ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m
|
22159
|
+
[1m[35m (0.4ms)[0m rollback transaction
|
22160
|
+
[1m[36m (0.1ms)[0m [1mbegin transaction[0m
|
22161
|
+
-----------------------------------------------------------------------------------------
|
22162
|
+
ForestLiana::PieStatGetterTest: test_Pie_stat_getter_with_an_aggregate_on_a_boolean_field
|
22163
|
+
-----------------------------------------------------------------------------------------
|
22164
|
+
[1m[35m (0.2ms)[0m SELECT COUNT(*) AS count_all, boolean_fields.field AS boolean_fields_field FROM "boolean_fields" GROUP BY boolean_fields.field ORDER BY count_all DESC
|
22165
|
+
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
|
22166
|
+
[1m[35m (0.1ms)[0m begin transaction
|
22167
|
+
---------------------------------------------------------------------------------------
|
22168
|
+
ForestLiana::PieStatGetterTest: test_Pie_stat_getter_with_an_aggregate_on_a_foreign_key
|
22169
|
+
---------------------------------------------------------------------------------------
|
22170
|
+
[1m[36m (0.6ms)[0m [1mSELECT COUNT(DISTINCT "belongs_to_fields"."id") AS count_id, belongs_to_fields.has_one_field_id AS belongs_to_fields_has_one_field_id FROM "belongs_to_fields" LEFT OUTER JOIN "has_one_fields" ON "has_one_fields"."id" = "belongs_to_fields"."has_one_field_id" LEFT OUTER JOIN "has_many_fields" ON "has_many_fields"."id" = "belongs_to_fields"."has_many_field_id" LEFT OUTER JOIN "has_many_class_name_fields" ON "has_many_class_name_fields"."id" = "belongs_to_fields"."has_many_class_name_field_id" GROUP BY belongs_to_fields.has_one_field_id ORDER BY count_id DESC[0m
|
22171
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22172
|
+
[1m[36m (0.1ms)[0m [1mbegin transaction[0m
|
22173
|
+
------------------------------------------------------------------
|
22174
|
+
ForestLiana::HasManyGetterTest: test_HasMany_Getter_page_1_size_15
|
22175
|
+
------------------------------------------------------------------
|
22176
|
+
[1m[35mOwner Load (0.1ms)[0m SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
|
22177
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ?[0m [["owner_id", 1]]
|
22178
|
+
[1m[35m (0.2ms)[0m SELECT COUNT(DISTINCT count_column) FROM (SELECT "trees"."id" AS count_column FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? LIMIT 15 OFFSET 0) subquery_for_count [["owner_id", 1]]
|
22179
|
+
[1m[36mSQL (0.2ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? ORDER BY "trees"."id" ASC LIMIT 1 OFFSET 0[0m [["owner_id", 1]]
|
22180
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22181
|
+
[1m[36m (0.1ms)[0m [1mbegin transaction[0m
|
22182
|
+
-------------------------------------------------------------------------
|
22183
|
+
ForestLiana::HasManyGetterTest: test_HasMany_Getter_with_search_parameter
|
22184
|
+
-------------------------------------------------------------------------
|
22185
|
+
[1m[35mOwner Load (0.1ms)[0m SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
|
22186
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? AND (LOWER("trees"."name") LIKE '%fir%')[0m [["owner_id", 1]]
|
22187
|
+
[1m[35m (0.2ms)[0m SELECT COUNT(DISTINCT count_column) FROM (SELECT "trees"."id" AS count_column FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? AND (LOWER("trees"."name") LIKE '%fir%') LIMIT 15 OFFSET 0) subquery_for_count [["owner_id", 1]]
|
22188
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? AND (LOWER("trees"."name") LIKE '%fir%') ORDER BY "trees"."id" ASC LIMIT 1 OFFSET 0[0m [["owner_id", 1]]
|
22189
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
22190
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
22191
|
+
-----------------------------------------------------------------------
|
22192
|
+
ForestLiana::HasManyGetterTest: test_HasMany_Getter_with_sort_parameter
|
22193
|
+
-----------------------------------------------------------------------
|
22194
|
+
[1m[35mOwner Load (0.1ms)[0m SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
|
22195
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? ORDER BY trees.id DESC[0m [["owner_id", 1]]
|
22196
|
+
[1m[35m (0.1ms)[0m SELECT COUNT(DISTINCT count_column) FROM (SELECT "trees"."id" AS count_column FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? LIMIT 15 OFFSET 0) subquery_for_count [["owner_id", 1]]
|
22197
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "trees"."id" AS t0_r0, "trees"."name" AS t0_r1, "trees"."owner_id" AS t0_r2, "trees"."created_at" AS t0_r3, "trees"."updated_at" AS t0_r4, "owners"."id" AS t1_r0, "owners"."name" AS t1_r1, "owners"."created_at" AS t1_r2, "owners"."updated_at" AS t1_r3 FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE "trees"."owner_id" = ? ORDER BY trees.id DESC LIMIT 1 OFFSET 0[0m [["owner_id", 1]]
|
22198
|
+
[1m[35m (0.1ms)[0m rollback transaction
|
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: 2.
|
4
|
+
version: 2.7.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: 2018-
|
11
|
+
date: 2018-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -183,6 +183,7 @@ files:
|
|
183
183
|
- app/services/forest_liana/intercom_conversation_getter.rb
|
184
184
|
- app/services/forest_liana/intercom_conversations_getter.rb
|
185
185
|
- app/services/forest_liana/line_stat_getter.rb
|
186
|
+
- app/services/forest_liana/live_query_checker.rb
|
186
187
|
- app/services/forest_liana/operator_date_interval_parser.rb
|
187
188
|
- app/services/forest_liana/operator_value_parser.rb
|
188
189
|
- app/services/forest_liana/pie_stat_getter.rb
|