forest_liana 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2d05f6e1fc47af580463c80aa4280ec65496f31
4
- data.tar.gz: a401f01f830a7f9c0f29cde8253d76d1e5d4685d
3
+ metadata.gz: 1b08bed249ddd6e1952907c833a4d4f237d40570
4
+ data.tar.gz: f0c5cb42a036d878557deefeaa360ffff9e5f882
5
5
  SHA512:
6
- metadata.gz: 19390d26df07518f0e348b309776cec643f66ba7b2b8d9f6e9450cbb1ace482031ae3ba04ab18818a4a63f2453eb1737a0265c512a020c2cee32a08c03c4674d
7
- data.tar.gz: 9b1c599b01dd841082f876458a05c96e287a5b29e9a2b0c56a08c81a57966024ba8beb548b6bf855d5a5850d47c4d9bc020c07c62cd0424b20d5c2c5c7fa5b23
6
+ metadata.gz: d298b6fc5dc79110893d3215e489cccfab300e68d660adf71e2397d3d0789b5e7551e8f2e261764c17234175f01c68c71bd20072e9dfb5131d5e3544b293ab28
7
+ data.tar.gz: 683efae48efd13f44662d3fde2ba3d4706bded4e57c2ef63c91925997e36720d33b7df90ef150cd204981ddd535d795ba0baa4f52f455bae66cb75b62e121919
@@ -15,6 +15,14 @@ module ForestLiana
15
15
 
16
16
  def index
17
17
  begin
18
+ if request.format == 'csv'
19
+ return head :forbidden unless PermissionsChecker.new(@resource, 'export').is_authorized?
20
+ elsif params.has_key?(:searchToEdit)
21
+ return head :forbidden unless PermissionsChecker.new(@resource, 'searchToEdit').is_authorized?
22
+ else
23
+ return head :forbidden unless PermissionsChecker.new(@resource, 'list').is_authorized?
24
+ end
25
+
18
26
  getter = ForestLiana::ResourcesGetter.new(@resource, params)
19
27
  getter.perform
20
28
 
@@ -33,6 +41,8 @@ module ForestLiana
33
41
 
34
42
  def show
35
43
  begin
44
+ return head :forbidden unless PermissionsChecker.new(@resource, 'show').is_authorized?
45
+
36
46
  getter = ForestLiana::ResourceGetter.new(@resource, params)
37
47
  getter.perform
38
48
 
@@ -46,6 +56,8 @@ module ForestLiana
46
56
 
47
57
  def create
48
58
  begin
59
+ return head :forbidden unless PermissionsChecker.new(@resource, 'create').is_authorized?
60
+
49
61
  creator = ForestLiana::ResourceCreator.new(@resource, params)
50
62
  creator.perform
51
63
 
@@ -67,6 +79,8 @@ module ForestLiana
67
79
 
68
80
  def update
69
81
  begin
82
+ return head :forbidden unless PermissionsChecker.new(@resource, 'update').is_authorized?
83
+
70
84
  updater = ForestLiana::ResourceUpdater.new(@resource, params)
71
85
  updater.perform
72
86
 
@@ -88,6 +102,8 @@ module ForestLiana
88
102
 
89
103
  def destroy
90
104
  begin
105
+ return head :forbidden unless PermissionsChecker.new(@resource, 'delete').is_authorized?
106
+
91
107
  @resource.destroy(params[:id])
92
108
  head :no_content
93
109
  rescue => error
@@ -0,0 +1,22 @@
1
+ module ForestLiana
2
+ class ForestApiRequester
3
+ def perform_request
4
+ http = Net::HTTP.new(@uri.host, @uri.port)
5
+ http.use_ssl = true if forest_api_url.start_with?('https')
6
+
7
+ http.start do |client|
8
+ request = Net::HTTP::Get.new(@uri.path)
9
+ request['Content-Type'] = 'application/json'
10
+ request['forest-secret-key'] = ForestLiana.env_secret
11
+ request['forest-token'] = @forest_token if @forest_token
12
+ response = client.request(request)
13
+
14
+ handle_service_response(response)
15
+ end
16
+ end
17
+
18
+ def forest_api_url
19
+ ENV['FOREST_URL'] || 'https://api.forestadmin.com';
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,48 @@
1
+ module ForestLiana
2
+ class PermissionsChecker
3
+ @@permissions = nil
4
+ @@last_retrieve = nil
5
+ @@expiration_in_seconds = (ENV['FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS'] || 3600).to_i
6
+
7
+ def initialize(resource, permission_name)
8
+ @collection_name = ForestLiana.name_for(resource)
9
+ @permission_name = permission_name
10
+ end
11
+
12
+ def is_authorized?
13
+ (is_permission_expired? || !is_allowed?) ? retrieve_permissions_and_check_allowed : true
14
+ end
15
+
16
+ private
17
+
18
+ def is_allowed?
19
+ if @@permissions && @@permissions[@collection_name] &&
20
+ @@permissions[@collection_name]['collection']
21
+ @@permissions[@collection_name]['collection'][@permission_name]
22
+ else
23
+ false
24
+ end
25
+ end
26
+
27
+ def retrieve_permissions
28
+ @@permissions = PermissionsGetter.new.perform
29
+ @@last_retrieve = Time.now
30
+ end
31
+
32
+ def date_difference_in_seconds(date1, date2)
33
+ (date1 - date2).to_i
34
+ end
35
+
36
+ def is_permission_expired?
37
+ return true if @@last_retrieve.nil?
38
+
39
+ elapsed_seconds = date_difference_in_seconds(Time.now, @@last_retrieve)
40
+ elapsed_seconds >= @@expiration_in_seconds
41
+ end
42
+
43
+ def retrieve_permissions_and_check_allowed
44
+ retrieve_permissions
45
+ is_allowed?
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ module ForestLiana
2
+ class PermissionsGetter < ForestApiRequester
3
+ def initialize
4
+ @uri = URI.parse("#{forest_api_url}/liana/v1/permissions")
5
+ end
6
+
7
+ def perform
8
+ perform_request
9
+ rescue => exception
10
+ FOREST_LOGGER.error "Cannot retrieve the permissions for the project you\'re trying to unlock. Forest API seems to be down right now."
11
+ FOREST_LOGGER.error exception
12
+ nil
13
+ end
14
+
15
+ private
16
+
17
+ def handle_service_response(response)
18
+ if response.is_a?(Net::HTTPOK)
19
+ JSON.parse(response.body)
20
+ elsif response.is_a?(Net::HTTPNotFound) || response.is_a?(Net::HTTPUnprocessableEntity)
21
+ FOREST_LOGGER.error "Cannot retrieve the permissions from the Forest server. Can you check that you properly set up the forest_env_secret?"
22
+ nil
23
+ else
24
+ FOREST_LOGGER.error "Cannot retrieve the data from the Forest server. An error occured in Forest API."
25
+ nil
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,37 +1,19 @@
1
1
  module ForestLiana
2
- class UsersGetter
2
+ class UsersGetter < ForestApiRequester
3
3
  def initialize(endpoint, rendering_id)
4
- @uri = URI.parse("#{forest_url}/forest/renderings/#{rendering_id}/#{endpoint}")
4
+ @uri = URI.parse("#{forest_api_url}/forest/renderings/#{rendering_id}/#{endpoint}")
5
5
  end
6
6
 
7
7
  def perform
8
- http = Net::HTTP.new(@uri.host, @uri.port)
9
- http.use_ssl = true if forest_url.start_with?('https')
10
-
11
- begin
12
- http.start do |client|
13
- request = Net::HTTP::Get.new(@uri.path)
14
- request['Content-Type'] = 'application/json'
15
- request['forest-secret-key'] = ForestLiana.env_secret
16
- request['forest-token'] = @forest_token if @forest_token
17
- response = client.request(request)
18
-
19
- handle_service_response(response)
20
- end
21
- rescue => exception
22
- puts exception
23
- FOREST_LOGGER.error "Cannot retrieve any users for the project " \
24
- "you\'re trying to unlock. Forest API seems to be down right now."
25
- nil
26
- end
8
+ perform_request
9
+ rescue => exception
10
+ FOREST_LOGGER.error "Cannot retrieve any users for the project you\'re trying to unlock. Forest API seems to be down right now."
11
+ FOREST_LOGGER.error exception
12
+ nil
27
13
  end
28
14
 
29
15
  private
30
16
 
31
- def forest_url
32
- ENV['FOREST_URL'] || 'https://api.forestadmin.com';
33
- end
34
-
35
17
  def handle_service_response
36
18
  raise 'Abstract class method, this method must be implemented.'
37
19
  end
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "2.7.0"
2
+ VERSION = "2.8.0"
3
3
  end
Binary file
@@ -22196,3 +22196,448 @@ ForestLiana::HasManyGetterTest: test_HasMany_Getter_with_sort_parameter
22196
22196
   (0.1ms) 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
22197
  SQL (0.1ms) SELECT "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 [["owner_id", 1]]
22198
22198
   (0.1ms) rollback transaction
22199
+ ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations"
22200
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
22201
+  (0.1ms)  SELECT sql
22202
+ FROM sqlite_master
22203
+ WHERE name='index_belongs_to_class_name_fields_on_foo_id' AND type='index'
22204
+ UNION ALL
22205
+ SELECT sql
22206
+ FROM sqlite_temp_master
22207
+ WHERE name='index_belongs_to_class_name_fields_on_foo_id' AND type='index'
22208
+ 
22209
+  (0.1ms) SELECT sql
22210
+ FROM sqlite_master
22211
+ WHERE name='index_belongs_to_fields_on_has_many_field_id' AND type='index'
22212
+ UNION ALL
22213
+ SELECT sql
22214
+ FROM sqlite_temp_master
22215
+ WHERE name='index_belongs_to_fields_on_has_many_field_id' AND type='index'
22216
+
22217
+  (0.1ms)  SELECT sql
22218
+ FROM sqlite_master
22219
+ WHERE name='index_belongs_to_fields_on_has_many_class_name_field_id' AND type='index'
22220
+ UNION ALL
22221
+ SELECT sql
22222
+ FROM sqlite_temp_master
22223
+ WHERE name='index_belongs_to_fields_on_has_many_class_name_field_id' AND type='index'
22224
+ 
22225
+  (0.1ms) SELECT sql
22226
+ FROM sqlite_master
22227
+ WHERE name='index_belongs_to_fields_on_has_one_field_id' AND type='index'
22228
+ UNION ALL
22229
+ SELECT sql
22230
+ FROM sqlite_temp_master
22231
+ WHERE name='index_belongs_to_fields_on_has_one_field_id' AND type='index'
22232
+
22233
+  (0.2ms)  SELECT sql
22234
+ FROM sqlite_master
22235
+ WHERE name='index_has_many_fields_on_has_many_through_field_id' AND type='index'
22236
+ UNION ALL
22237
+ SELECT sql
22238
+ FROM sqlite_temp_master
22239
+ WHERE name='index_has_many_fields_on_has_many_through_field_id' AND type='index'
22240
+ 
22241
+  (0.1ms) SELECT sql
22242
+ FROM sqlite_master
22243
+ WHERE name='index_polymorphic_fields_on_has_one_field_id' AND type='index'
22244
+ UNION ALL
22245
+ SELECT sql
22246
+ FROM sqlite_temp_master
22247
+ WHERE name='index_polymorphic_fields_on_has_one_field_id' AND type='index'
22248
+
22249
+  (0.1ms)  SELECT sql
22250
+ FROM sqlite_master
22251
+ WHERE name='index_trees_on_owner_id' AND type='index'
22252
+ UNION ALL
22253
+ SELECT sql
22254
+ FROM sqlite_temp_master
22255
+ WHERE name='index_trees_on_owner_id' AND type='index'
22256
+ 
22257
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
22258
+  (0.1ms) begin transaction
22259
+ Fixture Delete (0.6ms) DELETE FROM "has_many_through_fields"
22260
+ Fixture Insert (0.5ms) INSERT INTO "has_many_through_fields" ("id") VALUES (1)
22261
+ Fixture Insert (0.1ms) INSERT INTO "has_many_through_fields" ("id") VALUES (2)
22262
+ Fixture Insert (0.1ms) INSERT INTO "has_many_through_fields" ("id") VALUES (3)
22263
+ Fixture Insert (0.2ms) INSERT INTO "has_many_through_fields" ("id") VALUES (4)
22264
+ Fixture Insert (0.1ms) INSERT INTO "has_many_through_fields" ("id") VALUES (5)
22265
+ Fixture Insert (0.0ms) INSERT INTO "has_many_through_fields" ("id") VALUES (6)
22266
+ Fixture Insert (0.0ms) INSERT INTO "has_many_through_fields" ("id") VALUES (7)
22267
+ Fixture Insert (0.0ms) INSERT INTO "has_many_through_fields" ("id") VALUES (8)
22268
+ Fixture Insert (0.0ms) INSERT INTO "has_many_through_fields" ("id") VALUES (9)
22269
+ Fixture Insert (0.0ms) INSERT INTO "has_many_through_fields" ("id") VALUES (10)
22270
+ Fixture Delete (0.4ms) DELETE FROM "string_fields"
22271
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (1, 'Test 1')
22272
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (2, 'Test 2')
22273
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (3, 'Test 3')
22274
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (4, 'Test 4')
22275
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (5, 'Test 5')
22276
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (6, 'Test 6')
22277
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (7, 'Test 7')
22278
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (8, 'Test 8')
22279
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (9, 'Test 9')
22280
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (10, 'Test 10')
22281
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (11, 'Test 11')
22282
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (12, 'Test 12')
22283
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (13, 'Test 13')
22284
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (14, 'Test 14')
22285
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (15, 'Test 15')
22286
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (16, 'Test 16')
22287
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (17, 'Test 17')
22288
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (18, 'Test 18')
22289
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (19, 'Test 19')
22290
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (20, 'Test 20')
22291
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (21, 'Test 21')
22292
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (22, 'Test 22')
22293
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (23, 'Test 23')
22294
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (24, 'Test 24')
22295
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (25, 'Test 25')
22296
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (26, 'Test 26')
22297
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (27, 'Test 27')
22298
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (28, 'Test 28')
22299
+ Fixture Insert (0.0ms) INSERT INTO "string_fields" ("id", "field") VALUES (29, 'Test 29')
22300
+ Fixture Insert (0.1ms) INSERT INTO "string_fields" ("id", "field") VALUES (30, 'Test 30')
22301
+ Fixture Delete (1.2ms) DELETE FROM "belongs_to_fields"
22302
+ Fixture Insert (0.1ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (1, 1, 1)
22303
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (2, 2, 1)
22304
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (3, 3, 1)
22305
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (4, 4, 2)
22306
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (5, 5, 2)
22307
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (6, 6, 2)
22308
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (7, 7, 3)
22309
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (8, 8, 3)
22310
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (9, 9, 3)
22311
+ Fixture Insert (0.1ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (10, 10, 4)
22312
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (11, 11, 4)
22313
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (12, 12, 4)
22314
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (13, 13, 5)
22315
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (14, 14, 5)
22316
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (15, 15, 5)
22317
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (16, 16, 6)
22318
+ Fixture Insert (0.1ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (17, 17, 6)
22319
+ Fixture Insert (0.1ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (18, 18, 6)
22320
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (19, 19, 7)
22321
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (20, 20, 7)
22322
+ Fixture Insert (0.1ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (21, 21, 7)
22323
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (22, 22, 7)
22324
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (23, 23, 8)
22325
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (24, 24, 8)
22326
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (25, 25, 9)
22327
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (26, 26, 9)
22328
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (27, 27, 9)
22329
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (28, 28, 10)
22330
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (29, 29, 10)
22331
+ Fixture Insert (0.0ms) INSERT INTO "belongs_to_fields" ("id", "has_one_field_id", "has_many_field_id") VALUES (30, 30, 10)
22332
+ Fixture Delete (0.8ms) DELETE FROM "trees"
22333
+ Fixture Insert (0.1ms) INSERT 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')
22334
+ Fixture Insert (0.0ms) 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')
22335
+ Fixture Insert (0.1ms) INSERT 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')
22336
+ Fixture Insert (0.1ms) 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')
22337
+ Fixture Insert (0.1ms) INSERT 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')
22338
+ Fixture Insert (0.0ms) INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (6, 'Oak', 3, '2018-06-05 12:19:23.000000', '2018-06-05 12:19:23.000000')
22339
+ Fixture Insert (0.0ms) INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (7, 'Sequoia', 1, '2018-06-05 12:19:23.000000', '2018-06-05 12:19:23.000000')
22340
+ Fixture Insert (0.0ms) INSERT INTO "trees" ("id", "name", "owner_id", "created_at", "updated_at") VALUES (8, 'Fir', 1, '2018-06-05 12:19:23.000000', '2018-06-05 12:19:23.000000')
22341
+ Fixture Delete (0.5ms) DELETE FROM "has_one_fields"
22342
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (1, 't', 0)
22343
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (2, 't', 0)
22344
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (3, 't', 0)
22345
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (4, 't', 0)
22346
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (5, 't', 0)
22347
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (6, 't', 0)
22348
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (7, 't', 0)
22349
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (8, 't', 0)
22350
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (9, 't', 0)
22351
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (10, 't', 0)
22352
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (11, 't', 0)
22353
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (12, 't', 0)
22354
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (13, 't', 0)
22355
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (14, 't', 0)
22356
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (15, 't', 0)
22357
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (16, 't', 0)
22358
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (17, 't', 0)
22359
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (18, 't', 0)
22360
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (19, 't', 0)
22361
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (20, 't', 0)
22362
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (21, 't', 0)
22363
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (22, 't', 0)
22364
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (23, 't', 0)
22365
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (24, 't', 0)
22366
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (25, 't', 0)
22367
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (26, 't', 0)
22368
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (27, 't', 0)
22369
+ Fixture Insert (0.0ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (28, 't', 0)
22370
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (29, 't', 0)
22371
+ Fixture Insert (0.1ms) INSERT INTO "has_one_fields" ("id", "checked", "status") VALUES (30, 't', 1)
22372
+ Fixture Delete (0.4ms) DELETE FROM "owners"
22373
+ Fixture Insert (0.1ms) INSERT 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')
22374
+ Fixture Insert (0.1ms) 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')
22375
+ Fixture Insert (0.0ms) INSERT 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')
22376
+ Fixture Delete (1.0ms) DELETE FROM "has_many_fields"
22377
+ Fixture Insert (0.1ms) INSERT INTO "has_many_fields" ("id") VALUES (1)
22378
+ Fixture Insert (0.1ms) INSERT INTO "has_many_fields" ("id") VALUES (2)
22379
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id") VALUES (3)
22380
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id") VALUES (4)
22381
+ Fixture Insert (0.1ms) INSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (5, 3)
22382
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (6, 2)
22383
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id") VALUES (7)
22384
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id", "has_many_through_field_id") VALUES (8, 2)
22385
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id") VALUES (9)
22386
+ Fixture Insert (0.0ms) INSERT INTO "has_many_fields" ("id") VALUES (10)
22387
+ Fixture Delete (0.1ms) DELETE FROM "serialize_fields"
22388
+ Fixture Insert (0.1ms) INSERT INTO "serialize_fields" ("id", "field") VALUES (1, 'value 1')
22389
+ Fixture Insert (0.0ms) INSERT INTO "serialize_fields" ("id", "field") VALUES (2, 'value 2')
22390
+ Fixture Insert (0.1ms) INSERT INTO "serialize_fields" ("id", "field") VALUES (3, 'value 3')
22391
+ Fixture Insert (0.0ms) INSERT INTO "serialize_fields" ("id", "field") VALUES (4, 'value 4')
22392
+ Fixture Insert (0.0ms) INSERT INTO "serialize_fields" ("id", "field") VALUES (5, 'value 5')
22393
+  (1.9ms) commit transaction
22394
+  (0.0ms) begin transaction
22395
+ ---------------------------
22396
+ ForestLianaTest: test_truth
22397
+ ---------------------------
22398
+  (0.0ms) rollback transaction
22399
+  (0.0ms) begin transaction
22400
+ ---------------------------------------------------------------------
22401
+ ForestLiana::SchemaAdapterTest: test_Date_should_have_the_type_`Date`
22402
+ ---------------------------------------------------------------------
22403
+  (0.1ms) rollback transaction
22404
+  (0.0ms) begin transaction
22405
+ ---------------------------------------------------------
22406
+ ForestLiana::SchemaAdapterTest: test_hasMany_relationship
22407
+ ---------------------------------------------------------
22408
+  (0.1ms) rollback transaction
22409
+  (0.1ms) begin transaction
22410
+ -----------------------------------------------------------
22411
+ ForestLiana::SchemaAdapterTest: test_belongsTo_relationship
22412
+ -----------------------------------------------------------
22413
+  (0.1ms) rollback transaction
22414
+  (0.0ms) begin transaction
22415
+ ------------------------------------------------------------------------
22416
+ ForestLiana::SchemaAdapterTest: test_Float_should_have_the_type_`Number`
22417
+ ------------------------------------------------------------------------
22418
+  (0.0ms) rollback transaction
22419
+  (0.0ms) begin transaction
22420
+ -------------------------------------------------------------------------
22421
+ ForestLiana::SchemaAdapterTest: test_String_should_have_the_type_`String`
22422
+ -------------------------------------------------------------------------
22423
+  (0.0ms) rollback transaction
22424
+  (0.0ms) begin transaction
22425
+ --------------------------------------------------------
22426
+ ForestLiana::SchemaAdapterTest: test_hasOne_relationship
22427
+ --------------------------------------------------------
22428
+  (0.0ms) rollback transaction
22429
+  (0.0ms) begin transaction
22430
+ ----------------------------------------------------------------------------------
22431
+ ForestLiana::SchemaAdapterTest: test_hasMany_relationhip_with_specified_class_name
22432
+ ----------------------------------------------------------------------------------
22433
+  (0.0ms) rollback transaction
22434
+  (0.0ms) begin transaction
22435
+ ------------------------------------------------------------------------------------
22436
+ ForestLiana::SchemaAdapterTest: test_belongsTo_relationhip_with_specified_class_name
22437
+ ------------------------------------------------------------------------------------
22438
+  (0.0ms) rollback transaction
22439
+  (0.0ms) begin transaction
22440
+ -------------------------------------------------------------------------
22441
+ ForestLiana::SchemaAdapterTest: test_DateTime_should_have_the_type_`Date`
22442
+ -------------------------------------------------------------------------
22443
+  (0.0ms) rollback transaction
22444
+  (0.1ms) begin transaction
22445
+ ---------------------------------------------------------------------------
22446
+ ForestLiana::SchemaAdapterTest: test_Boolean_should_have_the_type_`Boolean`
22447
+ ---------------------------------------------------------------------------
22448
+  (0.0ms) rollback transaction
22449
+  (0.0ms) begin transaction
22450
+ --------------------------------------------------------------------------
22451
+ ForestLiana::SchemaAdapterTest: test_Decimal_should_have_the_type_`Number`
22452
+ --------------------------------------------------------------------------
22453
+  (0.2ms) rollback transaction
22454
+  (0.0ms) begin transaction
22455
+ --------------------------------------------------------------------------
22456
+ ForestLiana::SchemaAdapterTest: test_Integer_should_have_the_type_`Number`
22457
+ --------------------------------------------------------------------------
22458
+  (0.0ms) rollback transaction
22459
+  (0.0ms) begin transaction
22460
+ ----------------------------------------------------------------------------------------------------
22461
+ ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_integer_field
22462
+ ----------------------------------------------------------------------------------------------------
22463
+  (0.1ms) 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"."id" = '3')
22464
+  (0.0ms) rollback transaction
22465
+  (0.1ms) begin transaction
22466
+ ----------------------------------------------------------------------------------------------------
22467
+ ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_boolean_field
22468
+ ----------------------------------------------------------------------------------------------------
22469
+  (0.2ms) 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)
22470
+  (0.1ms) rollback transaction
22471
+  (0.0ms) begin transaction
22472
+ -------------------------------------------------------------------------------------------------
22473
+ ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_filter_on_a_belongs_to_enum_field
22474
+ -------------------------------------------------------------------------------------------------
22475
+  (0.2ms) 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')
22476
+  (0.0ms) rollback transaction
22477
+  (0.0ms) begin transaction
22478
+ -----------------------------------------------------------------------------
22479
+ ForestLiana::ValueStatGetterTest: test_Value_stat_getter_with_a_simple_filter
22480
+ -----------------------------------------------------------------------------
22481
+  (0.5ms) SELECT DISTINCT COUNT(DISTINCT "boolean_fields"."id") FROM "boolean_fields" WHERE ("boolean_fields"."field" = 1)
22482
+  (0.1ms) rollback transaction
22483
+  (0.0ms) begin transaction
22484
+ -----------------------------------------------------------------------------------------
22485
+ ForestLiana::PieStatGetterTest: test_Pie_stat_getter_with_an_aggregate_on_a_boolean_field
22486
+ -----------------------------------------------------------------------------------------
22487
+  (0.1ms) 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
22488
+  (0.0ms) rollback transaction
22489
+  (0.0ms) begin transaction
22490
+ ---------------------------------------------------------------------------------------
22491
+ ForestLiana::PieStatGetterTest: test_Pie_stat_getter_with_an_aggregate_on_a_foreign_key
22492
+ ---------------------------------------------------------------------------------------
22493
+  (0.6ms) SELECT 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
22494
+  (0.0ms) rollback transaction
22495
+  (0.0ms) begin transaction
22496
+ ------------------------------------------------------------------
22497
+ ForestLiana::HasManyGetterTest: test_HasMany_Getter_page_1_size_15
22498
+ ------------------------------------------------------------------
22499
+ Owner Load (0.2ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
22500
+ SQL (0.2ms) SELECT "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" = ? [["owner_id", 1]]
22501
+  (0.2ms) 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]]
22502
+ SQL (0.2ms) SELECT "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 [["owner_id", 1]]
22503
+  (0.1ms) rollback transaction
22504
+  (0.1ms) begin transaction
22505
+ -------------------------------------------------------------------------
22506
+ ForestLiana::HasManyGetterTest: test_HasMany_Getter_with_search_parameter
22507
+ -------------------------------------------------------------------------
22508
+ Owner Load (0.1ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
22509
+ SQL (0.1ms) SELECT "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%') [["owner_id", 1]]
22510
+  (0.1ms) 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]]
22511
+ SQL (0.2ms) SELECT "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 [["owner_id", 1]]
22512
+  (0.0ms) rollback transaction
22513
+  (0.1ms) begin transaction
22514
+ -----------------------------------------------------------------------
22515
+ ForestLiana::HasManyGetterTest: test_HasMany_Getter_with_sort_parameter
22516
+ -----------------------------------------------------------------------
22517
+ Owner Load (0.1ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 1]]
22518
+ SQL (0.1ms) SELECT "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 [["owner_id", 1]]
22519
+  (0.1ms) 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]]
22520
+ SQL (0.1ms) SELECT "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 [["owner_id", 1]]
22521
+  (0.0ms) rollback transaction
22522
+  (0.0ms) begin transaction
22523
+ -----------------------------------
22524
+ ForestLiana::RouteTest: test_Routes
22525
+ -----------------------------------
22526
+  (0.1ms) rollback transaction
22527
+  (0.0ms) begin transaction
22528
+ ------------------------------------------------------------------------------------------------------------
22529
+ ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_well_formated_value
22530
+ ------------------------------------------------------------------------------------------------------------
22531
+ SerializeField Load (0.2ms) SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
22532
+  (0.1ms) SAVEPOINT active_record_1
22533
+ SQL (1.3ms) UPDATE "serialize_fields" SET "field" = ? WHERE "serialize_fields"."id" = ? [["field", "---\n- test\n- test\n"], ["id", 1]]
22534
+  (0.0ms) RELEASE SAVEPOINT active_record_1
22535
+  (0.8ms) rollback transaction
22536
+  (0.0ms) begin transaction
22537
+ ---------------------------------------------------------------------------------------------------------
22538
+ ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_bad_format_value
22539
+ ---------------------------------------------------------------------------------------------------------
22540
+ SerializeField Load (0.1ms) SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
22541
+  (0.0ms) rollback transaction
22542
+  (0.0ms) begin transaction
22543
+ ------------------------------------------------------------------------------------------------------
22544
+ ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_missing_value
22545
+ ------------------------------------------------------------------------------------------------------
22546
+ SerializeField Load (0.0ms) SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
22547
+  (0.0ms) SAVEPOINT active_record_1
22548
+  (0.0ms) RELEASE SAVEPOINT active_record_1
22549
+  (0.0ms) rollback transaction
22550
+  (0.0ms) begin transaction
22551
+ ---------------------------------------------------------------------------------------------------
22552
+ ForestLiana::ResourceUpdaterTest: test_Update_a_record_on_a_"serialize"_attribute_with_a_null_value
22553
+ ---------------------------------------------------------------------------------------------------
22554
+ SerializeField Load (0.1ms) SELECT "serialize_fields".* FROM "serialize_fields" WHERE "serialize_fields"."id" = ? LIMIT 1 [["id", 1]]
22555
+  (0.0ms) SAVEPOINT active_record_1
22556
+ SQL (0.3ms) UPDATE "serialize_fields" SET "field" = ? WHERE "serialize_fields"."id" = ? [["field", nil], ["id", 1]]
22557
+  (0.1ms) RELEASE SAVEPOINT active_record_1
22558
+  (0.4ms) rollback transaction
22559
+  (0.0ms) begin transaction
22560
+ -----------------------------------------------------------------------
22561
+ ForestLiana::ResourcesGetterTest: test_Sort_by_a_belongs_to_association
22562
+ -----------------------------------------------------------------------
22563
+ SQL (0.2ms) SELECT "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
22564
+  (0.1ms) SELECT COUNT(*) FROM "belongs_to_fields"
22565
+  (0.0ms) rollback transaction
22566
+  (0.0ms) begin transaction
22567
+ -------------------------------------------------------------------------------------------
22568
+ ForestLiana::ResourcesGetterTest: test_Filter_on_an_updated_at_field_of_the_main_collection
22569
+ -------------------------------------------------------------------------------------------
22570
+ SQL (0.2ms) SELECT "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
22571
+  (0.1ms) SELECT COUNT(*) FROM "owners" WHERE ("owners"."updated_at" BETWEEN '2017-01-01 08:00:00 UTC' AND '2018-01-01 07:59:59 UTC')
22572
+  (0.0ms) rollback transaction
22573
+  (0.0ms) begin transaction
22574
+ ------------------------------------------------------------
22575
+ ForestLiana::ResourcesGetterTest: test_Filter_before_x_hours
22576
+ ------------------------------------------------------------
22577
+ SQL (0.1ms) SELECT "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-05 12:18:23 UTC') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0
22578
+  (0.0ms) SELECT COUNT(*) FROM "trees" WHERE ("trees"."created_at" < '2018-06-05 12:18:23 UTC')
22579
+ Owner Load (0.0ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 2]]
22580
+  (0.0ms) rollback transaction
22581
+  (0.1ms) begin transaction
22582
+ -----------------------------------------------------------------
22583
+ ForestLiana::ResourcesGetterTest: test_StringField_page_1_size_15
22584
+ -----------------------------------------------------------------
22585
+ SQL (0.1ms) SELECT "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
22586
+  (0.1ms) SELECT COUNT(*) FROM "string_fields"
22587
+  (0.0ms) rollback transaction
22588
+  (0.0ms) begin transaction
22589
+ ----------------------------------------------------------
22590
+ ForestLiana::ResourcesGetterTest: test_Filter_after_x_days
22591
+ ----------------------------------------------------------
22592
+ SQL (0.2ms) SELECT "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-05 12:18:23 UTC') ORDER BY trees.created_at DESC LIMIT 10 OFFSET 0
22593
+  (0.3ms) SELECT COUNT(*) FROM "trees" WHERE ("trees"."created_at" > '2018-06-05 12:18:23 UTC')
22594
+  (0.1ms) rollback transaction
22595
+  (0.0ms) begin transaction
22596
+ ------------------------------------------------------------------------------------------------------
22597
+ ForestLiana::ResourcesGetterTest: test_Filter_equal_on_an_updated_at_field_of_an_associated_collection
22598
+ ------------------------------------------------------------------------------------------------------
22599
+ SQL (0.1ms) SELECT "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
22600
+  (0.1ms) 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)')
22601
+  (0.0ms) rollback transaction
22602
+  (0.0ms) begin transaction
22603
+ ----------------------------------------------------------------
22604
+ ForestLiana::ResourcesGetterTest: test_Filter_on_ambiguous_field
22605
+ ----------------------------------------------------------------
22606
+ SQL (0.1ms) SELECT "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
22607
+  (0.1ms) 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')
22608
+  (0.0ms) rollback transaction
22609
+  (0.0ms) begin transaction
22610
+ ------------------------------------------------------------------------------------------------
22611
+ ForestLiana::ResourcesGetterTest: test_Filter_on_an_updated_at_field_of_an_associated_collection
22612
+ ------------------------------------------------------------------------------------------------
22613
+ SQL (0.2ms) SELECT "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
22614
+  (0.1ms) 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')
22615
+  (0.0ms) rollback transaction
22616
+  (0.0ms) begin transaction
22617
+ ------------------------------------------------------------------------------------
22618
+ ForestLiana::ResourcesGetterTest: test_Sort_on_an_ambiguous_field_name_with_a_filter
22619
+ ------------------------------------------------------------------------------------
22620
+ SQL (0.1ms) SELECT "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
22621
+  (0.1ms) SELECT COUNT(DISTINCT "trees"."id") FROM "trees" LEFT OUTER JOIN "owners" ON "owners"."id" = "trees"."owner_id" WHERE (owners.name = 'Arnaud Besnier')
22622
+  (0.0ms) rollback transaction
22623
+  (0.0ms) begin transaction
22624
+ ----------------------------------------------------------------
22625
+ ForestLiana::ResourcesGetterTest: test_StringField_sort_by_field
22626
+ ----------------------------------------------------------------
22627
+ SQL (0.1ms) 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
22628
+  (0.1ms) SELECT COUNT(*) FROM "string_fields"
22629
+  (0.0ms) rollback transaction
22630
+  (0.0ms) begin transaction
22631
+ -----------------------------------------------------------------
22632
+ ForestLiana::ResourcesGetterTest: test_StringField_page_2_size_10
22633
+ -----------------------------------------------------------------
22634
+ SQL (0.2ms) SELECT "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
22635
+  (0.1ms) SELECT COUNT(*) FROM "string_fields"
22636
+  (0.1ms) rollback transaction
22637
+  (0.0ms) begin transaction
22638
+ --------------------------------------------------------------------
22639
+ ForestLiana::ResourcesGetterTest: test_Sort_by_a_has_one_association
22640
+ --------------------------------------------------------------------
22641
+ SQL (0.9ms) SELECT "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
22642
+  (0.1ms) SELECT COUNT(*) FROM "has_one_fields"
22643
+  (0.1ms) 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.7.0
4
+ version: 2.8.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-06-01 00:00:00.000000000 Z
11
+ date: 2018-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -174,6 +174,7 @@ files:
174
174
  - app/services/forest_liana/base_getter.rb
175
175
  - app/services/forest_liana/belongs_to_updater.rb
176
176
  - app/services/forest_liana/controller_factory.rb
177
+ - app/services/forest_liana/forest_api_requester.rb
177
178
  - app/services/forest_liana/google_authorized_user_getter.rb
178
179
  - app/services/forest_liana/has_many_associator.rb
179
180
  - app/services/forest_liana/has_many_dissociator.rb
@@ -186,6 +187,8 @@ files:
186
187
  - app/services/forest_liana/live_query_checker.rb
187
188
  - app/services/forest_liana/operator_date_interval_parser.rb
188
189
  - app/services/forest_liana/operator_value_parser.rb
190
+ - app/services/forest_liana/permissions_checker.rb
191
+ - app/services/forest_liana/permissions_getter.rb
189
192
  - app/services/forest_liana/pie_stat_getter.rb
190
193
  - app/services/forest_liana/query_stat_getter.rb
191
194
  - app/services/forest_liana/resource_creator.rb