forest_liana 9.16.1 → 9.17.1
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
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16bdb91facdb11410af87209603b89aee45670322979b84bcb586a753fe47179
|
|
4
|
+
data.tar.gz: 0c748d62bc3081e48a2ad46f1c7a27ce133b7e5c2b2eb9e9fa1f5c64c2a6491e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 426d29525742b6b53c939838a6db17ccfc40f781fa3ae9bc1e9d085170468944d9487c52c653c5d5ff45ea991303ceb809916c1b6e49389153baf3476026a448
|
|
7
|
+
data.tar.gz: 1f7db109fff86b8d6ac6bfb53e31aa0a6e2a449a8074243359ece98c69058a4f361aa0ce92f4d632dfd08a0e758e316e70e2b09d446fcfa646d029fe394969c5
|
|
@@ -454,7 +454,31 @@ module ForestLiana
|
|
|
454
454
|
def add_default_value(column_schema, column)
|
|
455
455
|
# TODO: detect/introspect the attribute default value with Rails 5
|
|
456
456
|
# ex: attribute :email, :string, default: 'arnaud@forestadmin.com'
|
|
457
|
-
|
|
457
|
+
|
|
458
|
+
unless column.default.nil?
|
|
459
|
+
column_schema[:default_value] = normalize_default_value(column)
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
def normalize_default_value(column)
|
|
464
|
+
# In Ruby 4.0+ and Rails 8+, ActiveRecord returns default values as strings
|
|
465
|
+
case column.type
|
|
466
|
+
when :boolean
|
|
467
|
+
case column.default.to_s
|
|
468
|
+
when '0', 'f', 'false'
|
|
469
|
+
false
|
|
470
|
+
when '1', 't', 'true'
|
|
471
|
+
true
|
|
472
|
+
else
|
|
473
|
+
column.default
|
|
474
|
+
end
|
|
475
|
+
when :integer
|
|
476
|
+
column.default.to_i
|
|
477
|
+
when :float, :decimal
|
|
478
|
+
column.default.to_f
|
|
479
|
+
else
|
|
480
|
+
column.default
|
|
481
|
+
end
|
|
458
482
|
end
|
|
459
483
|
|
|
460
484
|
def add_validations(column_schema, column)
|
data/lib/forest_liana/version.rb
CHANGED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
module ForestLiana
|
|
2
|
+
describe SchemaAdapter do
|
|
3
|
+
describe 'normalize_default_value' do
|
|
4
|
+
context 'with boolean fields' do
|
|
5
|
+
before(:each) do
|
|
6
|
+
@original_apimap = ForestLiana.apimap.dup
|
|
7
|
+
@original_models = ForestLiana.models.dup
|
|
8
|
+
|
|
9
|
+
Object.const_set(:BooleanFieldWithDefault, Class.new(ActiveRecord::Base) do
|
|
10
|
+
self.table_name = 'boolean_fields_with_defaults'
|
|
11
|
+
end)
|
|
12
|
+
|
|
13
|
+
ActiveRecord::Migration.suppress_messages do
|
|
14
|
+
if ActiveRecord::Base.connection.table_exists?('boolean_fields_with_defaults')
|
|
15
|
+
ActiveRecord::Base.connection.drop_table('boolean_fields_with_defaults')
|
|
16
|
+
end
|
|
17
|
+
ActiveRecord::Base.connection.create_table('boolean_fields_with_defaults') do |t|
|
|
18
|
+
t.boolean :active, default: false
|
|
19
|
+
t.boolean :verified, default: true
|
|
20
|
+
t.boolean :nullable
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
after(:each) do
|
|
26
|
+
ForestLiana.apimap = @original_apimap
|
|
27
|
+
ForestLiana.models = @original_models
|
|
28
|
+
|
|
29
|
+
ActiveRecord::Migration.suppress_messages do
|
|
30
|
+
ActiveRecord::Base.connection.drop_table('boolean_fields_with_defaults') if ActiveRecord::Base.connection.table_exists?('boolean_fields_with_defaults')
|
|
31
|
+
end
|
|
32
|
+
Object.send(:remove_const, :BooleanFieldWithDefault) if Object.const_defined?(:BooleanFieldWithDefault)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should convert boolean default values to proper booleans' do
|
|
36
|
+
ForestLiana.models = [BooleanFieldWithDefault]
|
|
37
|
+
ForestLiana.apimap = []
|
|
38
|
+
|
|
39
|
+
adapter = SchemaAdapter.new(BooleanFieldWithDefault)
|
|
40
|
+
collection = adapter.perform
|
|
41
|
+
|
|
42
|
+
active_field = collection.fields.find { |f| f[:field] == 'active' }
|
|
43
|
+
verified_field = collection.fields.find { |f| f[:field] == 'verified' }
|
|
44
|
+
nullable_field = collection.fields.find { |f| f[:field] == 'nullable' }
|
|
45
|
+
|
|
46
|
+
expect(active_field[:default_value]).to eq(false)
|
|
47
|
+
expect(active_field[:default_value].class).to eq(FalseClass)
|
|
48
|
+
|
|
49
|
+
expect(verified_field[:default_value]).to eq(true)
|
|
50
|
+
expect(verified_field[:default_value].class).to eq(TrueClass)
|
|
51
|
+
|
|
52
|
+
expect(nullable_field[:default_value]).to be_nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'with enum fields' do
|
|
57
|
+
before(:each) do
|
|
58
|
+
@original_apimap = ForestLiana.apimap.dup
|
|
59
|
+
@original_models = ForestLiana.models.dup
|
|
60
|
+
|
|
61
|
+
Object.const_set(:EnumFieldModel, Class.new(ActiveRecord::Base) do
|
|
62
|
+
self.table_name = 'enum_field_models'
|
|
63
|
+
enum status: { inactive: 0, active: 1, archived: 2 }
|
|
64
|
+
enum role: { user: "0", admin: "1", superadmin: "2" }
|
|
65
|
+
end)
|
|
66
|
+
|
|
67
|
+
ActiveRecord::Migration.suppress_messages do
|
|
68
|
+
if ActiveRecord::Base.connection.table_exists?('enum_field_models')
|
|
69
|
+
ActiveRecord::Base.connection.drop_table('enum_field_models')
|
|
70
|
+
end
|
|
71
|
+
ActiveRecord::Base.connection.create_table('enum_field_models') do |t|
|
|
72
|
+
t.integer :status, default: 0
|
|
73
|
+
t.integer :role, default: 1
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
after(:each) do
|
|
79
|
+
ForestLiana.apimap = @original_apimap
|
|
80
|
+
ForestLiana.models = @original_models
|
|
81
|
+
|
|
82
|
+
ActiveRecord::Migration.suppress_messages do
|
|
83
|
+
ActiveRecord::Base.connection.drop_table('enum_field_models') if ActiveRecord::Base.connection.table_exists?('enum_field_models')
|
|
84
|
+
end
|
|
85
|
+
Object.send(:remove_const, :EnumFieldModel) if Object.const_defined?(:EnumFieldModel)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'should convert enum default values to integers' do
|
|
89
|
+
ForestLiana.models = [EnumFieldModel]
|
|
90
|
+
ForestLiana.apimap = []
|
|
91
|
+
|
|
92
|
+
adapter = SchemaAdapter.new(EnumFieldModel)
|
|
93
|
+
collection = adapter.perform
|
|
94
|
+
|
|
95
|
+
status_field = collection.fields.find { |f| f[:field] == 'status' }
|
|
96
|
+
role_field = collection.fields.find { |f| f[:field] == 'role' }
|
|
97
|
+
|
|
98
|
+
expect(status_field[:default_value]).to eq(0)
|
|
99
|
+
expect(status_field[:default_value].class).to eq(Integer)
|
|
100
|
+
|
|
101
|
+
expect(role_field[:default_value]).to eq(1)
|
|
102
|
+
expect(role_field[:default_value].class).to eq(Integer)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context 'with numeric fields' do
|
|
107
|
+
before(:each) do
|
|
108
|
+
@original_apimap = ForestLiana.apimap.dup
|
|
109
|
+
@original_models = ForestLiana.models.dup
|
|
110
|
+
|
|
111
|
+
Object.const_set(:NumericFieldModel, Class.new(ActiveRecord::Base) do
|
|
112
|
+
self.table_name = 'numeric_field_models'
|
|
113
|
+
end)
|
|
114
|
+
|
|
115
|
+
ActiveRecord::Migration.suppress_messages do
|
|
116
|
+
if ActiveRecord::Base.connection.table_exists?('numeric_field_models')
|
|
117
|
+
ActiveRecord::Base.connection.drop_table('numeric_field_models')
|
|
118
|
+
end
|
|
119
|
+
ActiveRecord::Base.connection.create_table('numeric_field_models') do |t|
|
|
120
|
+
t.integer :count, default: 0
|
|
121
|
+
t.float :rate, default: 0.5
|
|
122
|
+
t.decimal :price, default: 9.99
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
after(:each) do
|
|
128
|
+
ForestLiana.apimap = @original_apimap
|
|
129
|
+
ForestLiana.models = @original_models
|
|
130
|
+
|
|
131
|
+
ActiveRecord::Migration.suppress_messages do
|
|
132
|
+
ActiveRecord::Base.connection.drop_table('numeric_field_models') if ActiveRecord::Base.connection.table_exists?('numeric_field_models')
|
|
133
|
+
end
|
|
134
|
+
Object.send(:remove_const, :NumericFieldModel) if Object.const_defined?(:NumericFieldModel)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it 'should convert numeric default values to proper types' do
|
|
138
|
+
ForestLiana.models = [NumericFieldModel]
|
|
139
|
+
ForestLiana.apimap = []
|
|
140
|
+
|
|
141
|
+
adapter = SchemaAdapter.new(NumericFieldModel)
|
|
142
|
+
collection = adapter.perform
|
|
143
|
+
|
|
144
|
+
count_field = collection.fields.find { |f| f[:field] == 'count' }
|
|
145
|
+
rate_field = collection.fields.find { |f| f[:field] == 'rate' }
|
|
146
|
+
price_field = collection.fields.find { |f| f[:field] == 'price' }
|
|
147
|
+
|
|
148
|
+
expect(count_field[:default_value]).to eq(0)
|
|
149
|
+
expect(count_field[:default_value].class).to eq(Integer)
|
|
150
|
+
|
|
151
|
+
expect(rate_field[:default_value]).to be_a(Float)
|
|
152
|
+
expect(price_field[:default_value]).to be_a(Float)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
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: 9.
|
|
4
|
+
version: 9.17.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sandro Munda
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -192,6 +192,34 @@ dependencies:
|
|
|
192
192
|
- - ">="
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
194
|
version: '0'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: ostruct
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '0'
|
|
202
|
+
type: :runtime
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
209
|
+
- !ruby/object:Gem::Dependency
|
|
210
|
+
name: csv
|
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: '0'
|
|
216
|
+
type: :runtime
|
|
217
|
+
prerelease: false
|
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - ">="
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '0'
|
|
195
223
|
description: Forest is a modern admin interface that works on all major web frameworks.
|
|
196
224
|
forest_liana is the gem that makes Forest admin work on any Rails application (Rails
|
|
197
225
|
>= 4.0).
|
|
@@ -433,6 +461,7 @@ files:
|
|
|
433
461
|
- spec/services/forest_liana/resource_updater_spec.rb
|
|
434
462
|
- spec/services/forest_liana/resources_getter_composite_keys_spec.rb
|
|
435
463
|
- spec/services/forest_liana/resources_getter_spec.rb
|
|
464
|
+
- spec/services/forest_liana/schema_adapter_default_values_spec.rb
|
|
436
465
|
- spec/services/forest_liana/schema_adapter_spec.rb
|
|
437
466
|
- spec/services/forest_liana/scope_manager_spec.rb
|
|
438
467
|
- spec/services/forest_liana/serializer_factory_spec.rb
|
|
@@ -741,6 +770,7 @@ test_files:
|
|
|
741
770
|
- spec/services/forest_liana/resource_updater_spec.rb
|
|
742
771
|
- spec/services/forest_liana/resources_getter_composite_keys_spec.rb
|
|
743
772
|
- spec/services/forest_liana/resources_getter_spec.rb
|
|
773
|
+
- spec/services/forest_liana/schema_adapter_default_values_spec.rb
|
|
744
774
|
- spec/services/forest_liana/schema_adapter_spec.rb
|
|
745
775
|
- spec/services/forest_liana/scope_manager_spec.rb
|
|
746
776
|
- spec/services/forest_liana/serializer_factory_spec.rb
|