forest_liana 7.6.1 → 7.6.4

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
  SHA256:
3
- metadata.gz: a6bd9a95e79440b1a3c14664d2e60a18da465b6a7acbe303b13b74d2e8908625
4
- data.tar.gz: e3edb0a7092586733d2f18d35692f87f87fa072dbc249152c5dd1c2f4670d8f4
3
+ metadata.gz: 1f706a8e009cd73a7493662f62db58e8fa05daccd6c51b3303919354573bbdb6
4
+ data.tar.gz: 28c20ebe192a3e9aa366026c1e2f65401cc5627806c6e1348ca6a29297b3889b
5
5
  SHA512:
6
- metadata.gz: 5d408f4b76db6423df866bd4abab4b2e3bddf12141a7ea6e3dffe066bdff9af513b77fc77fb7b830395bc25542e5683f0ff571e3ba813fdcbc815af190e9df5e
7
- data.tar.gz: e0e945ce71184eca4c57651dda53086e38aee31e0e592f25a6ef6d1c6db95b9ec843617969cf7a47082b85fb8635c086fa2b5ee4baacbcc02a5254b82089d0be
6
+ metadata.gz: b7119a64a459718a8f65b7c5a85cefcd6e427360ce14a8f5bd0749ef5eb88b30441ea82c1f409e706a60919fc7615f2f2b7b7d21d41e10490d8f9f3f2010205f
7
+ data.tar.gz: e85658a00033eccc188f75e59cb15a4b299044e4f7e012f92b07dad854a40b3811b524a3ba7bfedd74f2d00193d01d53424c5da09468947f5c998fd24595380b
@@ -29,5 +29,27 @@ module ForestLiana
29
29
  def compute_includes
30
30
  @includes = ForestLiana::QueryHelper.get_one_association_names_symbol(@resource)
31
31
  end
32
+
33
+ def optimize_record_loading(resource, records)
34
+ instance_dependent_associations = instance_dependent_associations(resource)
35
+ eager_loads = @includes - instance_dependent_associations
36
+
37
+ result = records.eager_load(eager_loads)
38
+
39
+ # Rails 7 can mix `eager_load` and `preload` in the same scope
40
+ # Rails 6 cannot mix `eager_load` and `preload` in the same scope
41
+ # Rails 6 and 7 cannot mix `eager_load` and `includes` in the same scope
42
+ if Rails::VERSION::MAJOR >= 7
43
+ result = result.preload(instance_dependent_associations)
44
+ end
45
+
46
+ result
47
+ end
48
+
49
+ def instance_dependent_associations(resource)
50
+ @includes.select do |association_name|
51
+ resource.reflect_on_association(association_name)&.scope&.arity&.positive?
52
+ end
53
+ end
32
54
  end
33
55
  end
@@ -64,12 +64,8 @@ module ForestLiana
64
64
  end
65
65
 
66
66
  def prepare_query
67
- @records = @search_query_builder.perform(
68
- get_resource()
69
- .find(@params[:id])
70
- .send(@params[:association_name])
71
- .eager_load(@includes)
72
- )
67
+ association = get_resource().find(@params[:id]).send(@params[:association_name])
68
+ @records = optimize_record_loading(association, @search_query_builder.perform(association))
73
69
  end
74
70
 
75
71
  def offset
@@ -5,7 +5,7 @@ module ForestLiana
5
5
  def perform
6
6
  if @params[:group_by_field]
7
7
  timezone_offset = @params[:timezone].to_i
8
- resource = get_resource().eager_load(@includes)
8
+ resource = optimize_record_loading(@resource, get_resource)
9
9
 
10
10
  filters = ForestLiana::ScopeManager.append_scope_for_user(@params[:filters], @user, @resource.name)
11
11
 
@@ -12,7 +12,7 @@ module ForestLiana
12
12
  end
13
13
 
14
14
  def perform
15
- records = get_resource().eager_load(@includes)
15
+ records = optimize_record_loading(@resource, get_resource())
16
16
  scoped_records = ForestLiana::ScopeManager.apply_scopes_on_records(records, @user, @collection_name, @params[:timezone])
17
17
  @record = scoped_records.find(@params[:id])
18
18
  end
@@ -66,13 +66,13 @@ module ForestLiana
66
66
  end
67
67
 
68
68
  def perform
69
- @records = @records.eager_load(@includes)
69
+ @records = optimize_record_loading(@resource, @records)
70
70
  end
71
71
 
72
72
  def count
73
- # NOTICE: For performance reasons, do not eager load the data if there is no search or
73
+ # NOTICE: For performance reasons, do not optimize loading the data if there is no search or
74
74
  # filters on associations.
75
- @records_count = @count_needs_includes ? @records.eager_load(@includes).count : @records.count
75
+ @records_count = @count_needs_includes ? optimize_record_loading(@resource, @records).count : @records.count
76
76
  end
77
77
 
78
78
  def query_for_batch
@@ -8,6 +8,8 @@ module ForestLiana
8
8
  add_columns
9
9
  add_associations
10
10
 
11
+ collection.fields.sort_by! { |k| k[:field].to_s }
12
+
11
13
  # NOTICE: Add ActsAsTaggable fields
12
14
  if @model.try(:taggable?) && @model.respond_to?(:acts_as_taggable) &&
13
15
  @model.acts_as_taggable.respond_to?(:to_a)
@@ -61,7 +61,7 @@ module ForestLiana
61
61
  conditions = []
62
62
 
63
63
  @resource.columns.each_with_index do |column, index|
64
- @fields_searched << column.name if text_type? column.type
64
+ @fields_searched << column.name if text_type?(column.type) || column.type == :uuid
65
65
  column_name = format_column_name(@resource.table_name, column.name)
66
66
  if (@collection.search_fields && !@collection.search_fields.include?(column.name))
67
67
  conditions
@@ -73,6 +73,8 @@ module ForestLiana
73
73
  conditions << "#{@resource.table_name}.id = :search_value_for_uuid"
74
74
  end
75
75
  # NOTICE: Rails 3 do not have a defined_enums method
76
+ elsif REGEX_UUID.match(@search) && column.type == :uuid
77
+ conditions << "#{column_name} = :search_value_for_uuid"
76
78
  elsif @resource.respond_to?(:defined_enums) &&
77
79
  @resource.defined_enums.has_key?(column.name) &&
78
80
  !@resource.defined_enums[column.name][@search.downcase].nil?
@@ -4,7 +4,7 @@ module ForestLiana
4
4
 
5
5
  def perform
6
6
  return if @params[:aggregate].blank?
7
- resource = get_resource().eager_load(@includes)
7
+ resource = optimize_record_loading(@resource, get_resource)
8
8
 
9
9
  filters = ForestLiana::ScopeManager.append_scope_for_user(@params[:filters], @user, @resource.name)
10
10
 
@@ -59,8 +59,8 @@ module ForestLiana
59
59
  c = get_collection(collection['name'])
60
60
  unless c.nil?
61
61
  a = get_action(c, action['name'])
62
- load = !a.hooks.nil? && a.hooks.key?(:load) && a.hooks[:load].is_a?(Proc)
63
- change = !a.hooks.nil? && a.hooks.key?(:change) && a.hooks[:change].is_a?(Hash) ? a.hooks[:change].keys : []
62
+ load = !a.nil? && !a.hooks.nil? && a.hooks.key?(:load) && a.hooks[:load].is_a?(Proc)
63
+ change = !a.nil? && !a.hooks.nil? && a.hooks.key?(:change) && a.hooks[:change].is_a?(Hash) ? a.hooks[:change].keys : []
64
64
  action['hooks'] = {'load' => load, 'change' => change}
65
65
  end
66
66
  end
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "7.6.1"
2
+ VERSION = "7.6.4"
3
3
  end
@@ -3,4 +3,5 @@ class Island < ActiveRecord::Base
3
3
 
4
4
  has_many :trees
5
5
  has_one :location
6
+ has_one :eponymous_tree, ->(record) { where(name: record.name) }, class_name: 'Tree'
6
7
  end
@@ -2,4 +2,9 @@ class Tree < ActiveRecord::Base
2
2
  belongs_to :owner, class_name: 'User', inverse_of: :trees_owned
3
3
  belongs_to :cutter, class_name: 'User', inverse_of: :trees_cut
4
4
  belongs_to :island
5
+ belongs_to :eponymous_island,
6
+ ->(record) { where(name: record.name) },
7
+ class_name: 'Island',
8
+ inverse_of: :eponymous_tree,
9
+ optional: true
5
10
  end
@@ -14,29 +14,35 @@ module ForestLiana
14
14
  end
15
15
  end
16
16
 
17
- context 'on a model having 3 belongsTo associations' do
17
+ context 'on a model having some belongsTo associations' do
18
+ let(:expected_association_attributes) do
19
+ [
20
+ { name: :owner, klass: User },
21
+ { name: :cutter, klass: User },
22
+ { name: :island, klass: Island },
23
+ { name: :eponymous_island, klass: Island },
24
+ ]
25
+ end
26
+
18
27
  it 'should return the one-one associations' do
19
28
  associations = QueryHelper.get_one_associations(Tree)
20
- expect(associations.length).to eq(3)
21
- expect(associations.first.name).to eq(:owner)
22
- expect(associations.first.klass).to eq(User)
23
- expect(associations.second.name).to eq(:cutter)
24
- expect(associations.second.klass).to eq(User)
25
- expect(associations.third.name).to eq(:island)
26
- expect(associations.third.klass).to eq(Island)
29
+ expect(associations.length).to eq(expected_association_attributes.length)
30
+ associations.zip(expected_association_attributes).each do |association, expected_attributes|
31
+ expect(association).to have_attributes(expected_attributes)
32
+ end
27
33
  end
28
34
  end
29
35
  end
30
36
 
31
37
  describe 'get_one_association_names_symbol' do
32
38
  it 'should return the one-one associations names as symbols' do
33
- expect(QueryHelper.get_one_association_names_symbol(Tree)).to eq([:owner, :cutter, :island])
39
+ expect(QueryHelper.get_one_association_names_symbol(Tree)).to eq([:owner, :cutter, :island, :eponymous_island])
34
40
  end
35
41
  end
36
42
 
37
43
  describe 'get_one_association_names_string' do
38
44
  it 'should return the one-one associations names as strings' do
39
- expect(QueryHelper.get_one_association_names_string(Tree)).to eq(['owner', 'cutter', 'island'])
45
+ expect(QueryHelper.get_one_association_names_string(Tree)).to eq(['owner', 'cutter', 'island', 'eponymous_island'])
40
46
  end
41
47
  end
42
48
 
@@ -64,8 +70,9 @@ module ForestLiana
64
70
  end
65
71
 
66
72
  it 'should return relationships on models having a custom table name' do
67
- expect(tables_associated_to_relations_name['isle'].length).to eq(1)
73
+ expect(tables_associated_to_relations_name['isle'].length).to eq(2)
68
74
  expect(tables_associated_to_relations_name['isle'].first).to eq(:island)
75
+ expect(tables_associated_to_relations_name['isle'].second).to eq(:eponymous_island)
69
76
  end
70
77
  end
71
78
  end
@@ -8,5 +8,109 @@ module ForestLiana
8
8
  .to include(:database_type)
9
9
  end
10
10
  end
11
+
12
+ describe 'generate_action_hooks' do
13
+ schema = '{
14
+ "collections": [
15
+ {
16
+ "name": "Island",
17
+ "name_old": "Island",
18
+ "icon": null,
19
+ "is_read_only": false,
20
+ "is_searchable": true,
21
+ "is_virtual": false,
22
+ "only_for_relationships": false,
23
+ "pagination_type": "page",
24
+ "fields": [
25
+ {
26
+ "field": "id",
27
+ "type": "Number",
28
+ "default_value": null,
29
+ "enums": null,
30
+ "integration": null,
31
+ "is_filterable": true,
32
+ "is_read_only": false,
33
+ "is_required": false,
34
+ "is_sortable": true,
35
+ "is_virtual": false,
36
+ "reference": null,
37
+ "inverse_of": null,
38
+ "widget": null,
39
+ "validations": []
40
+ },
41
+ {
42
+ "field": "first_name",
43
+ "type": "String",
44
+ "default_value": null,
45
+ "enums": null,
46
+ "integration": null,
47
+ "is_filterable": true,
48
+ "is_read_only": false,
49
+ "is_required": false,
50
+ "is_sortable": true,
51
+ "is_virtual": false,
52
+ "reference": null,
53
+ "inverse_of": null,
54
+ "widget": null,
55
+ "validations": []
56
+ },
57
+ {
58
+ "field": "last_name",
59
+ "type": "String",
60
+ "default_value": null,
61
+ "enums": null,
62
+ "integration": null,
63
+ "is_filterable": true,
64
+ "is_read_only": false,
65
+ "is_required": false,
66
+ "is_sortable": true,
67
+ "is_virtual": false,
68
+ "reference": null,
69
+ "inverse_of": null,
70
+ "widget": null,
71
+ "validations": []
72
+ }
73
+ ],
74
+ "segments": [],
75
+ "actions": [
76
+ {
77
+ "name": "foo",
78
+ "type": "bulk",
79
+ "base_url": null,
80
+ "endpoint": "forest/actions/mark-as-live",
81
+ "http_method": "POST",
82
+ "redirect": null,
83
+ "download": false,
84
+ "fields": [],
85
+ "hooks": {
86
+ "load": false,
87
+ "change": []
88
+ }
89
+ }
90
+ ]
91
+ }
92
+ ],
93
+ "meta": {
94
+ "liana": "forest-rails",
95
+ "liana_version": "7.6.0",
96
+ "stack": {
97
+ "database_type": "postgresql",
98
+ "orm_version": "7.0.2.4"
99
+ }
100
+ }
101
+ }'
102
+
103
+
104
+ it "Should return actions hooks empty for the island collection" do
105
+ allow(ForestLiana).to receive(:env_secret).and_return(nil)
106
+ bootstrapper = Bootstrapper.new
107
+ content = JSON.parse(schema)
108
+ bootstrapper.instance_variable_set(:@collections_sent, content['collections'])
109
+ bootstrapper.instance_variable_set(:@meta_sent, content['meta'])
110
+ bootstrapper.send(:generate_action_hooks)
111
+
112
+ expect(bootstrapper.instance_variable_get("@collections_sent").first['actions'].first['hooks']).to eq({"load"=>false, "change"=>[]})
113
+ end
114
+ end
11
115
  end
12
116
  end
@@ -155,6 +155,21 @@ module ForestLiana
155
155
  end
156
156
  end
157
157
 
158
+ describe 'when getting instance dependent associations' do
159
+ let(:resource) { Island }
160
+ let(:fields) { { 'Island' => 'id,eponymous_tree', 'eponymous_tree' => 'id,name'} }
161
+
162
+ it 'should get only the expected records' do
163
+ getter.perform
164
+ records = getter.records
165
+ count = getter.count
166
+
167
+ expect(records.count).to eq Island.count
168
+ expect(count).to eq Island.count
169
+ expect(records.map(&:name)).to match_array(Island.pluck(:name))
170
+ end
171
+ end
172
+
158
173
  describe 'when filtering on an ambiguous field' do
159
174
  let(:resource) { Tree }
160
175
  let(:pageSize) { 5 }
@@ -8,7 +8,19 @@ module ForestLiana
8
8
  end
9
9
 
10
10
  expect(collection.fields.map { |field| field[:field] }).to eq(
11
- ["id", "name", "created_at", "updated_at", "trees", "location"]
11
+ ["created_at", "eponymous_tree", "id", "location", "name", "trees", "updated_at"]
12
+ )
13
+ end
14
+ end
15
+
16
+ context 'with standard fields' do
17
+ it 'should be sort by alphabetical order' do
18
+ collection = ForestLiana.apimap.find do |object|
19
+ object.name.to_s == ForestLiana.name_for(Tree)
20
+ end
21
+
22
+ expect(collection.fields.map { |field| field[:field].to_s}).to eq(
23
+ ["age", "created_at", "cutter", "eponymous_island", "id", "island", "name", "owner", "updated_at"]
12
24
  )
13
25
  end
14
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_liana
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.6.1
4
+ version: 7.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-10 00:00:00.000000000 Z
11
+ date: 2022-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -515,176 +515,176 @@ signing_key:
515
515
  specification_version: 4
516
516
  summary: Official Rails Liana for Forest
517
517
  test_files:
518
- - test/fixtures/belongs_to_field.yml
519
- - test/fixtures/has_many_field.yml
520
- - test/fixtures/serialize_field.yml
521
- - test/fixtures/tree.yml
522
- - test/fixtures/string_field.yml
523
- - test/fixtures/has_many_through_field.yml
524
- - test/fixtures/has_one_field.yml
525
- - test/fixtures/reference.yml
526
- - test/fixtures/owner.yml
518
+ - test/test_helper.rb
527
519
  - test/forest_liana_test.rb
528
520
  - test/routing/route_test.rb
529
- - test/test_helper.rb
530
- - test/services/forest_liana/operator_date_interval_parser_test.rb
531
521
  - test/services/forest_liana/schema_adapter_test.rb
522
+ - test/services/forest_liana/operator_date_interval_parser_test.rb
523
+ - test/dummy/app/helpers/application_helper.rb
524
+ - test/dummy/app/models/serialize_field.rb
525
+ - test/dummy/app/models/float_field.rb
526
+ - test/dummy/app/models/belongs_to_field.rb
527
+ - test/dummy/app/models/has_many_class_name_field.rb
528
+ - test/dummy/app/models/reference.rb
529
+ - test/dummy/app/models/has_many_field.rb
530
+ - test/dummy/app/models/has_many_through_field.rb
531
+ - test/dummy/app/models/integer_field.rb
532
+ - test/dummy/app/models/string_field.rb
533
+ - test/dummy/app/models/owner.rb
534
+ - test/dummy/app/models/decimal_field.rb
535
+ - test/dummy/app/models/has_and_belongs_to_many_field.rb
536
+ - test/dummy/app/models/polymorphic_field.rb
537
+ - test/dummy/app/models/tree.rb
538
+ - test/dummy/app/models/belongs_to_class_name_field.rb
539
+ - test/dummy/app/models/has_one_field.rb
540
+ - test/dummy/app/models/date_field.rb
541
+ - test/dummy/app/models/boolean_field.rb
542
+ - test/dummy/app/views/layouts/application.html.erb
543
+ - test/dummy/app/controllers/application_controller.rb
544
+ - test/dummy/app/assets/config/manifest.js
545
+ - test/dummy/app/assets/javascripts/application.js
546
+ - test/dummy/app/assets/stylesheets/application.css
547
+ - test/dummy/public/422.html
532
548
  - test/dummy/public/favicon.ico
533
549
  - test/dummy/public/404.html
534
550
  - test/dummy/public/500.html
535
- - test/dummy/public/422.html
536
- - test/dummy/db/migrate/20150608132621_create_string_field.rb
537
- - test/dummy/db/migrate/20160628173505_add_timestamps.rb
538
- - test/dummy/db/migrate/20160627172951_create_tree.rb
539
- - test/dummy/db/migrate/20150608130516_create_date_field.rb
540
- - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
541
- - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
542
- - test/dummy/db/migrate/20160627172810_create_owner.rb
543
- - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
544
- - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
545
- - test/dummy/db/migrate/20150608131430_create_integer_field.rb
546
- - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
547
- - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
548
- - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
549
- - test/dummy/db/migrate/20150608131610_create_float_field.rb
550
- - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
551
- - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
552
- - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
553
- - test/dummy/db/migrate/20181111162121_create_references_table.rb
554
- - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
555
- - test/dummy/db/schema.rb
556
551
  - test/dummy/config.ru
552
+ - test/dummy/config/routes.rb
553
+ - test/dummy/config/secrets.yml
557
554
  - test/dummy/config/application.rb
555
+ - test/dummy/config/boot.rb
558
556
  - test/dummy/config/environments/development.rb
559
557
  - test/dummy/config/environments/production.rb
560
558
  - test/dummy/config/environments/test.rb
561
- - test/dummy/config/boot.rb
562
- - test/dummy/config/routes.rb
563
- - test/dummy/config/secrets.yml
559
+ - test/dummy/config/environment.rb
564
560
  - test/dummy/config/database.yml
561
+ - test/dummy/config/initializers/assets.rb
562
+ - test/dummy/config/initializers/backtrace_silencers.rb
563
+ - test/dummy/config/initializers/filter_parameter_logging.rb
564
+ - test/dummy/config/initializers/cookies_serializer.rb
565
565
  - test/dummy/config/initializers/wrap_parameters.rb
566
+ - test/dummy/config/initializers/inflections.rb
566
567
  - test/dummy/config/initializers/mime_types.rb
567
- - test/dummy/config/initializers/cookies_serializer.rb
568
- - test/dummy/config/initializers/filter_parameter_logging.rb
569
568
  - test/dummy/config/initializers/session_store.rb
570
- - test/dummy/config/initializers/assets.rb
571
- - test/dummy/config/initializers/inflections.rb
572
- - test/dummy/config/initializers/backtrace_silencers.rb
573
- - test/dummy/config/environment.rb
574
569
  - test/dummy/config/locales/en.yml
575
- - test/dummy/README.rdoc
576
- - test/dummy/app/controllers/application_controller.rb
577
- - test/dummy/app/models/has_many_through_field.rb
578
- - test/dummy/app/models/polymorphic_field.rb
579
- - test/dummy/app/models/string_field.rb
580
- - test/dummy/app/models/date_field.rb
581
- - test/dummy/app/models/belongs_to_class_name_field.rb
582
- - test/dummy/app/models/owner.rb
583
- - test/dummy/app/models/decimal_field.rb
584
- - test/dummy/app/models/tree.rb
585
- - test/dummy/app/models/has_many_field.rb
586
- - test/dummy/app/models/has_many_class_name_field.rb
587
- - test/dummy/app/models/boolean_field.rb
588
- - test/dummy/app/models/integer_field.rb
589
- - test/dummy/app/models/belongs_to_field.rb
590
- - test/dummy/app/models/serialize_field.rb
591
- - test/dummy/app/models/has_and_belongs_to_many_field.rb
592
- - test/dummy/app/models/float_field.rb
593
- - test/dummy/app/models/has_one_field.rb
594
- - test/dummy/app/models/reference.rb
595
- - test/dummy/app/views/layouts/application.html.erb
596
- - test/dummy/app/assets/javascripts/application.js
597
- - test/dummy/app/assets/stylesheets/application.css
598
- - test/dummy/app/assets/config/manifest.js
599
- - test/dummy/app/helpers/application_helper.rb
600
- - test/dummy/Rakefile
570
+ - test/dummy/bin/setup
601
571
  - test/dummy/bin/rake
602
572
  - test/dummy/bin/rails
603
573
  - test/dummy/bin/bundle
604
- - test/dummy/bin/setup
574
+ - test/dummy/Rakefile
575
+ - test/dummy/db/schema.rb
576
+ - test/dummy/db/migrate/20150608131610_create_float_field.rb
577
+ - test/dummy/db/migrate/20150609114636_create_belongs_to_class_name_field.rb
578
+ - test/dummy/db/migrate/20150814081918_create_has_many_through_field.rb
579
+ - test/dummy/db/migrate/20181111162121_create_references_table.rb
580
+ - test/dummy/db/migrate/20150623115554_create_has_many_class_name_field.rb
581
+ - test/dummy/db/migrate/20170614141921_create_serialize_field.rb
582
+ - test/dummy/db/migrate/20150608131603_create_decimal_field.rb
583
+ - test/dummy/db/migrate/20150608132621_create_string_field.rb
584
+ - test/dummy/db/migrate/20150608130516_create_date_field.rb
585
+ - test/dummy/db/migrate/20160628173505_add_timestamps.rb
586
+ - test/dummy/db/migrate/20160627172810_create_owner.rb
587
+ - test/dummy/db/migrate/20150608133044_create_has_one_field.rb
588
+ - test/dummy/db/migrate/20160627172951_create_tree.rb
589
+ - test/dummy/db/migrate/20150608150016_create_has_many_field.rb
590
+ - test/dummy/db/migrate/20150608131430_create_integer_field.rb
591
+ - test/dummy/db/migrate/20150608133038_create_belongs_to_field.rb
592
+ - test/dummy/db/migrate/20150608132159_create_boolean_field.rb
593
+ - test/dummy/db/migrate/20150616150629_create_polymorphic_field.rb
594
+ - test/dummy/db/migrate/20150612112520_create_has_and_belongs_to_many_field.rb
595
+ - test/dummy/README.rdoc
596
+ - test/fixtures/serialize_field.yml
597
+ - test/fixtures/belongs_to_field.yml
598
+ - test/fixtures/has_one_field.yml
599
+ - test/fixtures/string_field.yml
600
+ - test/fixtures/reference.yml
601
+ - test/fixtures/owner.yml
602
+ - test/fixtures/tree.yml
603
+ - test/fixtures/has_many_through_field.yml
604
+ - test/fixtures/has_many_field.yml
605
+ - spec/helpers/forest_liana/query_helper_spec.rb
606
+ - spec/helpers/forest_liana/schema_helper_spec.rb
605
607
  - spec/lib/forest_liana/schema_file_updater_spec.rb
606
608
  - spec/lib/forest_liana/bootstrapper_spec.rb
607
- - spec/config/initializers/logger_spec.rb
608
- - spec/rails_helper.rb
609
+ - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
609
610
  - spec/services/forest_liana/scope_manager_spec.rb
610
- - spec/services/forest_liana/value_stat_getter_spec.rb
611
- - spec/services/forest_liana/line_stat_getter_spec.rb
612
- - spec/services/forest_liana/schema_adapter_spec.rb
613
- - spec/services/forest_liana/permissions_formatter_spec.rb
614
- - spec/services/forest_liana/pie_stat_getter_spec.rb
615
611
  - spec/services/forest_liana/has_many_getter_spec.rb
612
+ - spec/services/forest_liana/smart_action_field_validator_spec.rb
616
613
  - spec/services/forest_liana/permissions_getter_spec.rb
617
- - spec/services/forest_liana/permissions_checker_acl_enabled_spec.rb
614
+ - spec/services/forest_liana/apimap_sorter_spec.rb
615
+ - spec/services/forest_liana/resources_getter_spec.rb
616
+ - spec/services/forest_liana/ip_whitelist_checker_spec.rb
617
+ - spec/services/forest_liana/value_stat_getter_spec.rb
618
+ - spec/services/forest_liana/schema_adapter_spec.rb
619
+ - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
618
620
  - spec/services/forest_liana/filters_parser_spec.rb
621
+ - spec/services/forest_liana/pie_stat_getter_spec.rb
619
622
  - spec/services/forest_liana/permissions_checker_live_queries_spec.rb
620
- - spec/services/forest_liana/ip_whitelist_checker_spec.rb
621
623
  - spec/services/forest_liana/resource_updater_spec.rb
622
- - spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb
623
- - spec/services/forest_liana/apimap_sorter_spec.rb
624
- - spec/services/forest_liana/resources_getter_spec.rb
625
- - spec/services/forest_liana/smart_action_field_validator_spec.rb
626
- - spec/dummy/lib/forest_liana/controllers/owners_controller.rb
624
+ - spec/services/forest_liana/line_stat_getter_spec.rb
625
+ - spec/services/forest_liana/permissions_formatter_spec.rb
626
+ - spec/config/initializers/logger_spec.rb
627
+ - spec/dummy/app/helpers/application_helper.rb
628
+ - spec/dummy/app/models/reference.rb
629
+ - spec/dummy/app/models/owner.rb
630
+ - spec/dummy/app/models/location.rb
631
+ - spec/dummy/app/models/tree.rb
632
+ - spec/dummy/app/models/product.rb
633
+ - spec/dummy/app/models/user.rb
634
+ - spec/dummy/app/models/island.rb
635
+ - spec/dummy/app/views/layouts/application.html.erb
636
+ - spec/dummy/app/controllers/forest/islands_controller.rb
637
+ - spec/dummy/app/controllers/application_controller.rb
638
+ - spec/dummy/app/config/routes.rb
639
+ - spec/dummy/app/assets/config/manifest.js
640
+ - spec/dummy/app/assets/javascripts/application.js
641
+ - spec/dummy/app/assets/stylesheets/application.css
642
+ - spec/dummy/config.ru
627
643
  - spec/dummy/lib/forest_liana/controllers/owner_trees_controller.rb
644
+ - spec/dummy/lib/forest_liana/controllers/owners_controller.rb
645
+ - spec/dummy/lib/forest_liana/collections/location.rb
628
646
  - spec/dummy/lib/forest_liana/collections/user.rb
629
647
  - spec/dummy/lib/forest_liana/collections/island.rb
630
- - spec/dummy/lib/forest_liana/collections/location.rb
631
- - spec/dummy/db/migrate/20210511141752_create_owners.rb
632
- - spec/dummy/db/migrate/20190226173051_create_isle.rb
633
- - spec/dummy/db/migrate/20190226172951_create_user.rb
634
- - spec/dummy/db/migrate/20210526084712_create_products.rb
635
- - spec/dummy/db/migrate/20210326140855_create_locations.rb
636
- - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
637
- - spec/dummy/db/migrate/20190226174951_create_tree.rb
638
- - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
639
- - spec/dummy/db/migrate/20210326110524_create_references.rb
640
- - spec/dummy/db/schema.rb
641
- - spec/dummy/config.ru
648
+ - spec/dummy/config/routes.rb
649
+ - spec/dummy/config/secrets.yml
642
650
  - spec/dummy/config/application.rb
651
+ - spec/dummy/config/boot.rb
643
652
  - spec/dummy/config/environments/development.rb
644
653
  - spec/dummy/config/environments/production.rb
645
654
  - spec/dummy/config/environments/test.rb
646
- - spec/dummy/config/boot.rb
647
- - spec/dummy/config/routes.rb
648
- - spec/dummy/config/secrets.yml
655
+ - spec/dummy/config/environment.rb
649
656
  - spec/dummy/config/database.yml
650
- - spec/dummy/config/initializers/wrap_parameters.rb
651
- - spec/dummy/config/initializers/mime_types.rb
652
- - spec/dummy/config/initializers/cookies_serializer.rb
657
+ - spec/dummy/config/initializers/assets.rb
658
+ - spec/dummy/config/initializers/backtrace_silencers.rb
653
659
  - spec/dummy/config/initializers/filter_parameter_logging.rb
660
+ - spec/dummy/config/initializers/cookies_serializer.rb
654
661
  - spec/dummy/config/initializers/forest_liana.rb
655
- - spec/dummy/config/initializers/session_store.rb
656
- - spec/dummy/config/initializers/assets.rb
662
+ - spec/dummy/config/initializers/wrap_parameters.rb
657
663
  - spec/dummy/config/initializers/inflections.rb
658
- - spec/dummy/config/initializers/backtrace_silencers.rb
659
- - spec/dummy/config/environment.rb
660
- - spec/dummy/README.rdoc
661
- - spec/dummy/app/controllers/application_controller.rb
662
- - spec/dummy/app/controllers/forest/islands_controller.rb
663
- - spec/dummy/app/config/routes.rb
664
- - spec/dummy/app/models/user.rb
665
- - spec/dummy/app/models/product.rb
666
- - spec/dummy/app/models/owner.rb
667
- - spec/dummy/app/models/tree.rb
668
- - spec/dummy/app/models/island.rb
669
- - spec/dummy/app/models/reference.rb
670
- - spec/dummy/app/models/location.rb
671
- - spec/dummy/app/views/layouts/application.html.erb
672
- - spec/dummy/app/assets/javascripts/application.js
673
- - spec/dummy/app/assets/stylesheets/application.css
674
- - spec/dummy/app/assets/config/manifest.js
675
- - spec/dummy/app/helpers/application_helper.rb
676
- - spec/dummy/Rakefile
664
+ - spec/dummy/config/initializers/mime_types.rb
665
+ - spec/dummy/config/initializers/session_store.rb
666
+ - spec/dummy/bin/setup
677
667
  - spec/dummy/bin/rake
678
668
  - spec/dummy/bin/rails
679
669
  - spec/dummy/bin/bundle
680
- - spec/dummy/bin/setup
681
- - spec/helpers/forest_liana/query_helper_spec.rb
682
- - spec/helpers/forest_liana/schema_helper_spec.rb
683
- - spec/requests/actions_controller_spec.rb
684
- - spec/requests/resources_spec.rb
670
+ - spec/dummy/Rakefile
671
+ - spec/dummy/db/schema.rb
672
+ - spec/dummy/db/migrate/20190226173051_create_isle.rb
673
+ - spec/dummy/db/migrate/20210326140855_create_locations.rb
674
+ - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
675
+ - spec/dummy/db/migrate/20210326110524_create_references.rb
676
+ - spec/dummy/db/migrate/20210526084712_create_products.rb
677
+ - spec/dummy/db/migrate/20210511141752_create_owners.rb
678
+ - spec/dummy/db/migrate/20190226172951_create_user.rb
679
+ - spec/dummy/db/migrate/20190716135241_add_type_to_user.rb
680
+ - spec/dummy/db/migrate/20190226174951_create_tree.rb
681
+ - spec/dummy/README.rdoc
682
+ - spec/rails_helper.rb
685
683
  - spec/requests/test.ru
686
- - spec/requests/stats_spec.rb
687
684
  - spec/requests/count_spec.rb
688
685
  - spec/requests/cors_spec.rb
686
+ - spec/requests/stats_spec.rb
687
+ - spec/requests/resources_spec.rb
689
688
  - spec/requests/authentications_spec.rb
689
+ - spec/requests/actions_controller_spec.rb
690
690
  - spec/spec_helper.rb