rademade_admin 0.1.5 → 0.1.6
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 +4 -4
- data/app/assets/javascripts/rademade_admin.coffee +1 -0
- data/app/assets/javascripts/rademade_admin/app/common/cropper.coffee +0 -4
- data/app/assets/javascripts/rademade_admin/app/common/image-preview.coffee +33 -0
- data/app/assets/javascripts/rademade_admin/app/templates/image-preview-popup.jst.ejs +3 -0
- data/app/assets/javascripts/rademade_admin/app/templates/related-item.jst.ejs +2 -2
- data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +1 -0
- data/app/assets/stylesheets/edit.css +15 -0
- data/app/assets/stylesheets/rademade_admin/base/main.sass +45 -39
- data/app/assets/stylesheets/rademade_admin/blocks/buttons/main.sass +6 -1
- data/app/assets/stylesheets/rademade_admin/blocks/form/select2.sass +85 -60
- data/app/controllers/rademade_admin/model_controller.rb +3 -0
- data/app/helpers/rademade_admin/field_helper.rb +25 -13
- data/app/helpers/rademade_admin/form_helper.rb +4 -6
- data/app/helpers/rademade_admin/uri_helper.rb +3 -3
- data/app/services/csv_service.rb +38 -0
- data/app/services/linker.rb +3 -1
- data/app/services/model_controller/instance_options.rb +7 -2
- data/app/services/model_controller/notifier.rb +15 -19
- data/app/services/model_controller/templates.rb +1 -0
- data/app/services/saver.rb +6 -1
- data/app/services/template_service.rb +38 -19
- data/app/services/upload/preview_service.rb +2 -1
- data/app/views/rademade_admin/_blocks/_form.html.erb +6 -5
- data/app/views/rademade_admin/_blocks/button/_hide.html.erb +2 -2
- data/app/views/rademade_admin/_layouts/main.html.erb +3 -6
- data/app/views/rademade_admin/abstract/index.html.erb +4 -2
- data/config/locales/rademade_admin.en.yml +2 -1
- data/config/locales/rademade_admin.ru.yml +2 -1
- data/lib/rademade_admin/{hrml_buffer.rb → html_buffer.rb} +0 -0
- data/lib/rademade_admin/input/related_select_input/related_list.rb +8 -5
- data/lib/rademade_admin/model/adapter/data/mongoid.rb +1 -1
- data/lib/rademade_admin/model/adapter/query/active_record.rb +1 -1
- data/lib/rademade_admin/model/configuration.rb +17 -1
- data/lib/rademade_admin/model/configuration/csv_fields.rb +12 -0
- data/lib/rademade_admin/model/configuration/list_field.rb +5 -1
- data/lib/rademade_admin/model/info.rb +10 -1
- data/lib/rademade_admin/model/info/data_item.rb +31 -13
- data/lib/rademade_admin/model/info/data_item/initializer.rb +37 -0
- data/lib/rademade_admin/model/info/data_items.rb +11 -1
- data/lib/rademade_admin/model/info/fields.rb +39 -26
- data/lib/rademade_admin/version.rb +1 -1
- metadata +22 -4
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.tablednd.js +0 -1
@@ -61,7 +61,7 @@ module RademadeAdmin
|
|
61
61
|
:has_many => has_many_relations.include?(type),
|
62
62
|
:sortable => is_sortable,
|
63
63
|
:sortable_field => is_sortable ? relation_info.sortable_field : nil,
|
64
|
-
:foreign_key => relation_info.foreign_key.to_sym
|
64
|
+
:foreign_key => relation_info.foreign_key ? relation_info.foreign_key.to_sym : nil
|
65
65
|
})
|
66
66
|
end
|
67
67
|
relations
|
@@ -35,7 +35,7 @@ module RademadeAdmin
|
|
35
35
|
field = "`#{part[:field]}`"
|
36
36
|
if part[:value].is_a? Regexp
|
37
37
|
# hack temporary fix
|
38
|
-
condition += "#{field} REGEXP ?"
|
38
|
+
condition += "LOWER(#{field}) REGEXP ?"
|
39
39
|
part[:value] = part[:value].source
|
40
40
|
elsif part[:value].is_a? Array
|
41
41
|
condition += "#{field} IN (?)"
|
@@ -29,6 +29,14 @@ module RademadeAdmin
|
|
29
29
|
@list_fields ||= RademadeAdmin::Model::Configuration::ListFields.new
|
30
30
|
end
|
31
31
|
|
32
|
+
# Return configured csv info
|
33
|
+
#
|
34
|
+
# @return [RademadeAdmin::Model::Configuration::CsvFields]
|
35
|
+
#
|
36
|
+
def csv_fields
|
37
|
+
@csv_fields ||= RademadeAdmin::Model::Configuration::CsvFields.new
|
38
|
+
end
|
39
|
+
|
32
40
|
# Return configured fields info
|
33
41
|
#
|
34
42
|
# @return [RademadeAdmin::Model::Configuration::FormFields]
|
@@ -46,7 +54,11 @@ module RademadeAdmin
|
|
46
54
|
end
|
47
55
|
|
48
56
|
def all_field_names
|
49
|
-
@all_field_names ||= Set.new(
|
57
|
+
@all_field_names ||= Set.new([
|
58
|
+
list_fields.all.map(&:name),
|
59
|
+
form_fields.all.map(&:name),
|
60
|
+
csv_fields.all.map(&:name)
|
61
|
+
].flatten(1))
|
50
62
|
end
|
51
63
|
|
52
64
|
def model(model_name)
|
@@ -79,6 +91,10 @@ module RademadeAdmin
|
|
79
91
|
list_fields.configure(*field_options, &block)
|
80
92
|
end
|
81
93
|
|
94
|
+
def csv(*field_options, &block)
|
95
|
+
csv_fields.configure(*field_options, &block)
|
96
|
+
end
|
97
|
+
|
82
98
|
def form(*field_options, &block)
|
83
99
|
form_fields.configure(*field_options, &block)
|
84
100
|
end
|
@@ -57,17 +57,25 @@ module RademadeAdmin
|
|
57
57
|
@model_configuration.menu_count_block.try(:call)
|
58
58
|
end
|
59
59
|
|
60
|
+
# TODO it's not Model::Info logic. Move method
|
60
61
|
def preview_url(item)
|
61
62
|
unless @model_configuration.preview_url_block.nil?
|
62
63
|
# calls within url helpers context
|
63
64
|
Rails.application.routes.url_helpers.instance_exec(item, &@model_configuration.preview_url_block)
|
64
65
|
end
|
66
|
+
rescue
|
67
|
+
nil
|
65
68
|
end
|
66
69
|
|
67
70
|
def data_items
|
68
71
|
fields.data_items
|
69
72
|
end
|
70
73
|
|
74
|
+
# TODO it's not Model::Info logic. Move method
|
75
|
+
def has_csv?
|
76
|
+
not data_items.csv_fields.empty?
|
77
|
+
end
|
78
|
+
|
71
79
|
# Fields data class
|
72
80
|
#
|
73
81
|
# @return [RademadeAdmin::Model::Info::Fields]
|
@@ -95,6 +103,8 @@ module RademadeAdmin
|
|
95
103
|
model_reflection.data_adapter
|
96
104
|
end
|
97
105
|
|
106
|
+
# TODO add galleries component
|
107
|
+
|
98
108
|
# @return [RademadeAdmin::Model::Info::Relations]
|
99
109
|
def relations
|
100
110
|
@model_relations ||= RademadeAdmin::Model::Info::Relations.new(_data_adapter)
|
@@ -104,7 +114,6 @@ module RademadeAdmin
|
|
104
114
|
def uploaders
|
105
115
|
@model_uploaders ||= RademadeAdmin::Model::Info::Uploaders.new(_data_adapter)
|
106
116
|
end
|
107
|
-
|
108
117
|
end
|
109
118
|
end
|
110
119
|
end
|
@@ -4,36 +4,44 @@ module RademadeAdmin
|
|
4
4
|
class Info
|
5
5
|
class DataItem
|
6
6
|
|
7
|
+
# TODO extract sub classes
|
8
|
+
|
7
9
|
attr_accessor :name,
|
8
10
|
:field,
|
9
11
|
:relation,
|
10
12
|
:label,
|
13
|
+
:has_uploader,
|
14
|
+
:order_column,
|
15
|
+
:form_params,
|
16
|
+
|
11
17
|
:form_position,
|
12
18
|
:list_position,
|
13
|
-
:
|
14
|
-
|
19
|
+
:csv_position,
|
20
|
+
|
21
|
+
:in_form,
|
22
|
+
:in_list,
|
23
|
+
:in_csv,
|
15
24
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
25
|
+
:list_preview_accessor,
|
26
|
+
:list_preview_handler,
|
27
|
+
:csv_preview_accessor,
|
28
|
+
:csv_preview_handler
|
20
29
|
|
21
30
|
#
|
22
31
|
# @param name [Symbol]
|
23
32
|
# @param field [RademadeAdmin::Model::Info::Field]
|
24
33
|
# @param relation [RademadeAdmin::Model::Info::Relation]
|
25
|
-
# @param
|
34
|
+
# @param order_column [String]
|
26
35
|
#
|
27
|
-
def initialize(name, field = nil, relation = nil,
|
36
|
+
def initialize(name, field = nil, relation = nil, order_column = nil)
|
28
37
|
@name = name
|
29
38
|
@field = field
|
30
39
|
@relation = relation
|
31
|
-
@has_uploader = has_uploader
|
32
40
|
@order_column = order_column
|
41
|
+
@has_uploader = false
|
33
42
|
@in_list = false
|
34
43
|
@in_form = false
|
35
|
-
@
|
36
|
-
@preview_accessor = nil
|
44
|
+
@in_csv = false
|
37
45
|
end
|
38
46
|
|
39
47
|
def has_name?(name)
|
@@ -81,14 +89,24 @@ module RademadeAdmin
|
|
81
89
|
@setter ||= :"#{getter}="
|
82
90
|
end
|
83
91
|
|
84
|
-
def
|
85
|
-
@
|
92
|
+
def list_preview_accessor
|
93
|
+
return @list_preview_accessor if @list_preview_accessor
|
94
|
+
getter
|
95
|
+
end
|
96
|
+
|
97
|
+
def csv_preview_accessor
|
98
|
+
return @csv_preview_accessor if @csv_preview_accessor
|
99
|
+
getter
|
86
100
|
end
|
87
101
|
|
88
102
|
def in_list?
|
89
103
|
@in_list
|
90
104
|
end
|
91
105
|
|
106
|
+
def in_csv?
|
107
|
+
@in_csv
|
108
|
+
end
|
109
|
+
|
92
110
|
def in_form?
|
93
111
|
@in_form
|
94
112
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module RademadeAdmin
|
3
|
+
module Model
|
4
|
+
class Info
|
5
|
+
class DataItem
|
6
|
+
class Initializer
|
7
|
+
|
8
|
+
def auto
|
9
|
+
return from_relation if @relation
|
10
|
+
return form_field if @field
|
11
|
+
raise 'No relation and field given for DateItem initialization' # TODO custom exception
|
12
|
+
end
|
13
|
+
|
14
|
+
def from_relation
|
15
|
+
build(@relation.name, @relation.foreign_key)
|
16
|
+
end
|
17
|
+
|
18
|
+
def form_field
|
19
|
+
name = @field.name
|
20
|
+
build(name, name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def build(name, order_column)
|
24
|
+
RademadeAdmin::Model::Info::DataItem.new(name, @field, @relation, order_column)
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def initialize(field, relation)
|
30
|
+
@field, @relation = field, relation
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -4,6 +4,7 @@ module RademadeAdmin
|
|
4
4
|
class Info
|
5
5
|
class DataItems
|
6
6
|
include ::Enumerable
|
7
|
+
|
7
8
|
# rm_todo extract mixins
|
8
9
|
|
9
10
|
UNINFORMATIVE_FIELDS = [:_id, :deleted_at, :position]
|
@@ -17,7 +18,7 @@ module RademadeAdmin
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def each(&block)
|
20
|
-
items.each(&block)
|
21
|
+
items.values.each(&block)
|
21
22
|
end
|
22
23
|
|
23
24
|
# @param data_item [RademadeAdmin::Model::Info::DataItem]
|
@@ -57,6 +58,10 @@ module RademadeAdmin
|
|
57
58
|
@list_fields ||= collect_list_fields
|
58
59
|
end
|
59
60
|
|
61
|
+
def csv_fields
|
62
|
+
@csv_fields ||= collect_csv_fields
|
63
|
+
end
|
64
|
+
|
60
65
|
def filter_fields
|
61
66
|
@autocomplete_fields ||= collect_field_names { |data_item| data_item.string_field? }
|
62
67
|
end
|
@@ -95,6 +100,11 @@ module RademadeAdmin
|
|
95
100
|
fields.empty? ? _default_fields.values : fields.values.sort_by(&:list_position)
|
96
101
|
end
|
97
102
|
|
103
|
+
def collect_csv_fields
|
104
|
+
fields = items.select { |_, data_item| data_item.in_csv? }
|
105
|
+
fields.empty? ? [] : fields.values.sort_by(&:csv_position)
|
106
|
+
end
|
107
|
+
|
98
108
|
def collect_form_fields
|
99
109
|
fields = items.select { |_, data_item| data_item.in_form? }
|
100
110
|
fields.empty? ? _default_fields : fields
|
@@ -24,56 +24,59 @@ module RademadeAdmin
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def data_items
|
27
|
-
@data_items ||=
|
27
|
+
@data_items ||= build_items
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
protected
|
31
31
|
|
32
|
-
def
|
32
|
+
def item_initializer
|
33
|
+
RademadeAdmin::Model::Info::DataItem::Initializer
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_items
|
33
37
|
data_items = RademadeAdmin::Model::Info::DataItems.new
|
34
38
|
used_relations = []
|
35
39
|
|
40
|
+
# TODO extract sub - methods
|
36
41
|
@data_adapter.fields.each do |_, field|
|
37
42
|
relation = field.relation_name.nil? ? nil : @data_adapter.relation(field.relation_name)
|
38
43
|
used_relations << field.relation_name if relation
|
39
|
-
|
44
|
+
data_item = item_initializer.new(field, relation).auto
|
45
|
+
data_items.add_data_item( data_item )
|
40
46
|
end
|
41
47
|
|
42
48
|
@data_adapter.relations.each do |_, relation|
|
43
49
|
unless used_relations.include? relation.name
|
44
|
-
data_items.add_data_item(
|
50
|
+
data_items.add_data_item( item_initializer.new(nil, relation).from_relation )
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
48
54
|
@model_configuration.all_field_names.each do |field_name|
|
49
55
|
unless data_items.has_field?(field_name)
|
50
|
-
|
51
|
-
add_configuration_data(data_item, field_name)
|
52
|
-
data_items.add_data_item(data_item)
|
56
|
+
data_items.add_data_item( item_initializer.new(nil, nil).build(field_name, nil) )
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
60
|
+
configure_items(data_items)
|
61
|
+
|
56
62
|
data_items
|
57
63
|
end
|
58
64
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
order_column = name
|
63
|
-
else
|
64
|
-
name = relation.name
|
65
|
-
order_column = relation.foreign_key
|
66
|
-
end
|
67
|
-
data_item = RademadeAdmin::Model::Info::DataItem.new(
|
68
|
-
name, field, relation,
|
69
|
-
@uploaders.has_uploader?(name),
|
70
|
-
@data_adapter.columns.include?(order_column) ? order_column : nil
|
71
|
-
)
|
72
|
-
add_configuration_data(data_item, name)
|
73
|
-
data_item
|
65
|
+
def configure_items(data_items)
|
66
|
+
data_items.each { |item| configure_item(item) }
|
67
|
+
|
74
68
|
end
|
75
69
|
|
76
|
-
|
70
|
+
# @param [RademadeAdmin::Model::Info::DataItem]
|
71
|
+
def configure_item(data_item)
|
72
|
+
|
73
|
+
# TODO extract sub methods
|
74
|
+
|
75
|
+
name = data_item.name
|
76
|
+
|
77
|
+
data_item.has_uploader = @uploaders.has_uploader?(name)
|
78
|
+
data_item.order_column = nil unless @data_adapter.columns.include?(data_item.order_column)
|
79
|
+
|
77
80
|
@model_configuration.field_labels.find(name) do |label_data|
|
78
81
|
data_item.label = label_data.label
|
79
82
|
end
|
@@ -84,11 +87,21 @@ module RademadeAdmin
|
|
84
87
|
data_item.form_position = index
|
85
88
|
end
|
86
89
|
|
87
|
-
@model_configuration.list_fields.find_with_index(name) do |
|
90
|
+
@model_configuration.list_fields.find_with_index(name) do |data, index|
|
88
91
|
data_item.in_list = true
|
89
|
-
data_item.
|
92
|
+
data_item.list_preview_accessor = data.preview_accessor
|
93
|
+
data_item.list_preview_handler = data.preview_handler
|
90
94
|
data_item.list_position = index
|
91
95
|
end
|
96
|
+
|
97
|
+
@model_configuration.csv_fields.find_with_index(name) do |data, index|
|
98
|
+
data_item.in_csv = true
|
99
|
+
data_item.csv_preview_accessor = data.preview_accessor
|
100
|
+
data_item.csv_preview_handler = data.preview_handler
|
101
|
+
data_item.csv_position = index
|
102
|
+
end
|
103
|
+
|
104
|
+
data_item
|
92
105
|
end
|
93
106
|
|
94
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rademade_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladislav Melanitskiy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-06-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -142,6 +142,20 @@ dependencies:
|
|
142
142
|
- - '='
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: 2.11.0
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: sass
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '3.1'
|
152
|
+
type: :runtime
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '3.1'
|
145
159
|
- !ruby/object:Gem::Dependency
|
146
160
|
name: sass-rails
|
147
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -408,6 +422,7 @@ files:
|
|
408
422
|
- app/assets/javascripts/rademade_admin/app/common/datetime-picker.coffee
|
409
423
|
- app/assets/javascripts/rademade_admin/app/common/dnd-sort.coffee
|
410
424
|
- app/assets/javascripts/rademade_admin/app/common/droplist.coffee
|
425
|
+
- app/assets/javascripts/rademade_admin/app/common/image-preview.coffee
|
411
426
|
- app/assets/javascripts/rademade_admin/app/common/lang-panel.coffee
|
412
427
|
- app/assets/javascripts/rademade_admin/app/common/location.coffee.erb
|
413
428
|
- app/assets/javascripts/rademade_admin/app/common/pagination.coffee
|
@@ -434,13 +449,13 @@ files:
|
|
434
449
|
- app/assets/javascripts/rademade_admin/app/select2/related/view.coffee
|
435
450
|
- app/assets/javascripts/rademade_admin/app/select2/view.coffee
|
436
451
|
- app/assets/javascripts/rademade_admin/app/templates/crop.jst.ejs
|
452
|
+
- app/assets/javascripts/rademade_admin/app/templates/image-preview-popup.jst.ejs
|
437
453
|
- app/assets/javascripts/rademade_admin/app/templates/related-item.jst.ejs
|
438
454
|
- app/assets/javascripts/rademade_admin/form/form-ajax.coffee
|
439
455
|
- app/assets/javascripts/rademade_admin/form/form-initializater.coffee
|
440
456
|
- app/assets/javascripts/rademade_admin/form/form-validation.coffee
|
441
457
|
- app/assets/javascripts/rademade_admin/form/form.coffee
|
442
458
|
- app/assets/javascripts/rademade_admin/library/ckeditor/config.js
|
443
|
-
- app/assets/javascripts/rademade_admin/library/jquery/jquery.tablednd.js
|
444
459
|
- app/assets/javascripts/rademade_admin/library/notifier.custom.min.js
|
445
460
|
- app/assets/javascripts/rademade_admin/settings/ajax-csrf.coffee
|
446
461
|
- app/assets/stylesheets/edit.css
|
@@ -510,6 +525,7 @@ files:
|
|
510
525
|
- app/models/rademade_admin/ability.rb
|
511
526
|
- app/serializers/autocomplete/base_serializer.rb
|
512
527
|
- app/serializers/autocomplete/link_serializer.rb
|
528
|
+
- app/services/csv_service.rb
|
513
529
|
- app/services/gallery/manager.rb
|
514
530
|
- app/services/linker.rb
|
515
531
|
- app/services/loader_service.rb
|
@@ -589,7 +605,7 @@ files:
|
|
589
605
|
- lib/rademade_admin/file_info_formatter.rb
|
590
606
|
- lib/rademade_admin/gallery.rb
|
591
607
|
- lib/rademade_admin/hideable.rb
|
592
|
-
- lib/rademade_admin/
|
608
|
+
- lib/rademade_admin/html_buffer.rb
|
593
609
|
- lib/rademade_admin/input/related_select_input/model_data.rb
|
594
610
|
- lib/rademade_admin/input/related_select_input/related_list.rb
|
595
611
|
- lib/rademade_admin/model/adapter/data.rb
|
@@ -599,6 +615,7 @@ files:
|
|
599
615
|
- lib/rademade_admin/model/adapter/query/active_record.rb
|
600
616
|
- lib/rademade_admin/model/adapter/query/mongoid.rb
|
601
617
|
- lib/rademade_admin/model/configuration.rb
|
618
|
+
- lib/rademade_admin/model/configuration/csv_fields.rb
|
602
619
|
- lib/rademade_admin/model/configuration/field_label.rb
|
603
620
|
- lib/rademade_admin/model/configuration/fields.rb
|
604
621
|
- lib/rademade_admin/model/configuration/fields_labels.rb
|
@@ -609,6 +626,7 @@ files:
|
|
609
626
|
- lib/rademade_admin/model/graph.rb
|
610
627
|
- lib/rademade_admin/model/info.rb
|
611
628
|
- lib/rademade_admin/model/info/data_item.rb
|
629
|
+
- lib/rademade_admin/model/info/data_item/initializer.rb
|
612
630
|
- lib/rademade_admin/model/info/data_items.rb
|
613
631
|
- lib/rademade_admin/model/info/field.rb
|
614
632
|
- lib/rademade_admin/model/info/fields.rb
|