forest_liana 2.7.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  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