alchemy-custom-model 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +147 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/alchemy_custom_model_manifest.js +3 -0
  6. data/app/assets/images/alchemy-custom-model/no_image.png +0 -0
  7. data/app/assets/javascripts/alchemy-custom-model/change_language.js +11 -0
  8. data/app/assets/javascripts/alchemy-custom-model/common_init.js +16 -0
  9. data/app/assets/javascripts/alchemy-custom-model/custom_admin_element_editor.js.coffee +25 -0
  10. data/app/assets/javascripts/alchemy-custom-model/custom_tiny_mce.js.coffee.erb +95 -0
  11. data/app/assets/javascripts/alchemy-custom-model/el_finder.js.coffee.erb +241 -0
  12. data/app/assets/javascripts/alchemy-custom-model/elfinder_ui_manifest.js +4 -0
  13. data/app/assets/javascripts/alchemy-custom-model/manifest.js +23 -0
  14. data/app/assets/javascripts/alchemy-custom-model/nested_attributes_sortable.js.coffee +25 -0
  15. data/app/assets/javascripts/alchemy-custom-model/select2filter.js +51 -0
  16. data/app/assets/javascripts/alchemy-custom-model/subobjects.js +98 -0
  17. data/app/assets/javascripts/alchemy-custom-model/total_page_elfinder.js.coffee +15 -0
  18. data/app/assets/stylesheets/alchemy-custom-model/custom_elfinder.css.scss +130 -0
  19. data/app/assets/stylesheets/alchemy-custom-model/custom_style.css.scss +228 -0
  20. data/app/assets/stylesheets/alchemy-custom-model/custom_tiny_mce.scss +6 -0
  21. data/app/assets/stylesheets/alchemy-custom-model/manifest.css +16 -0
  22. data/app/controllers/alchemy/custom/model/admin/base_controller.rb +189 -0
  23. data/app/controllers/alchemy/custom/model/admin/files_controller.rb +106 -0
  24. data/app/controllers/alchemy/pages_controller_decorator.rb +1 -0
  25. data/app/helpers/alchemy/custom/model/admin/base_helper.rb +379 -0
  26. data/app/helpers/alchemy/custom/model/base_helper.rb +18 -0
  27. data/app/helpers/alchemy/custom/model/custom_model_helper.rb +112 -0
  28. data/app/helpers/alchemy/pages_helper_decorator.rb +95 -0
  29. data/app/models/admin_override_to_param.rb +9 -0
  30. data/app/models/application_record.rb +9 -0
  31. data/app/views/alchemy/custom/model/admin/base/_buttons_tool.html.erb +16 -0
  32. data/app/views/alchemy/custom/model/admin/base/_gallery_item.html.erb +4 -0
  33. data/app/views/alchemy/custom/model/admin/base/_language_tree_select.html.erb +9 -0
  34. data/app/views/alchemy/custom/model/admin/base/_search_box.html.erb +19 -0
  35. data/app/views/alchemy/custom/model/admin/base/_seo.html.erb +8 -0
  36. data/app/views/alchemy/custom/model/admin/base/_table.html.erb +33 -0
  37. data/app/views/alchemy/custom/model/admin/base/_title.html.erb +3 -0
  38. data/app/views/alchemy/custom/model/admin/base/edit.html.erb +18 -0
  39. data/app/views/alchemy/custom/model/admin/base/index.html.erb +39 -0
  40. data/app/views/alchemy/custom/model/admin/base/new.html.erb +19 -0
  41. data/app/views/alchemy/custom/model/admin/files/error_notice.json.jbuilder +1 -0
  42. data/app/views/alchemy/custom/model/admin/files/ui.html.erb +13 -0
  43. data/config/initializers/elfinder_abilities.rb +1 -0
  44. data/config/locales/en.yml +11 -0
  45. data/config/locales/it.yml +21 -0
  46. data/config/routes.rb +8 -0
  47. data/lib/alchemy-custom-model.rb +29 -0
  48. data/lib/alchemy/custom/model/el_finder.rb +17 -0
  49. data/lib/alchemy/custom/model/el_finder/ability.rb +16 -0
  50. data/lib/alchemy/custom/model/el_finder/connector.rb +435 -0
  51. data/lib/alchemy/custom/model/el_finder/image.rb +35 -0
  52. data/lib/alchemy/custom/model/el_finder/path_name.rb +220 -0
  53. data/lib/alchemy/custom/model/el_finder/paths.rb +21 -0
  54. data/lib/alchemy/custom/model/el_finder/paths/active_record_reference.rb +50 -0
  55. data/lib/alchemy/custom/model/el_finder/paths/base.rb +298 -0
  56. data/lib/alchemy/custom/model/el_finder/paths/component_file.rb +59 -0
  57. data/lib/alchemy/custom/model/el_finder/paths/component_files.rb +34 -0
  58. data/lib/alchemy/custom/model/el_finder/paths/file.rb +23 -0
  59. data/lib/alchemy/custom/model/el_finder/paths/files.rb +25 -0
  60. data/lib/alchemy/custom/model/el_finder/paths/image.rb +42 -0
  61. data/lib/alchemy/custom/model/el_finder/paths/images.rb +31 -0
  62. data/lib/alchemy/custom/model/el_finder/paths/root.rb +24 -0
  63. data/lib/alchemy/custom/model/el_finder/volumes.rb +18 -0
  64. data/lib/alchemy/custom/model/el_finder/volumes/alchemy_file.rb +197 -0
  65. data/lib/alchemy/custom/model/el_finder/volumes/alchemy_files.rb +51 -0
  66. data/lib/alchemy/custom/model/el_finder/volumes/alchemy_images.rb +69 -0
  67. data/lib/alchemy/custom/model/el_finder/volumes/base.rb +149 -0
  68. data/lib/alchemy/custom/model/el_finder/volumes/component_attribute.rb +130 -0
  69. data/lib/alchemy/custom/model/engine.rb +40 -0
  70. data/lib/alchemy/custom/model/global_id_setter.rb +35 -0
  71. data/lib/alchemy/custom/model/model_decoration.rb +82 -0
  72. data/lib/alchemy/custom/model/pages_controller_dec.rb +132 -0
  73. data/lib/alchemy/custom/model/translation_scope.rb +18 -0
  74. data/lib/alchemy/custom/model/version.rb +7 -0
  75. data/lib/alchemy/touching_decorator.rb +12 -0
  76. data/lib/tasks/alchemy_custom_model_tasks.rake +41 -0
  77. data/vendor/elfinder/css/elfinder.full.css +5117 -0
  78. data/vendor/elfinder/css/elfinder.min.css +9 -0
  79. data/vendor/elfinder/css/theme.css +349 -0
  80. data/vendor/elfinder/js/elfinder.full.js +34270 -0
  81. data/vendor/elfinder/js/elfinder.min.js +25 -0
  82. metadata +194 -0
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'shellwords'
3
+ require 'image_size'
4
+
5
+
6
+ module Alchemy::Custom::Model::ElFinder
7
+
8
+ # Represents default image handler.
9
+ # It uses *mogrify* to resize images and *convert* to create thumbnails.
10
+ class Image
11
+
12
+ def self.size(pathname)
13
+ return nil unless File.exist?(pathname)
14
+ s = ::ImageSize.new(File.open(pathname)).size.to_s
15
+ s = nil if s.empty?
16
+ return s
17
+ rescue
18
+ nil
19
+ end
20
+
21
+ def self.resize(pathname, options = {})
22
+ return nil unless File.exist?(pathname)
23
+ system(::Shellwords.join(['mogrify', '-resize', "#{options[:width]}x#{options[:height]}!", pathname.to_s]))
24
+ end
25
+
26
+ # of self.resize
27
+
28
+ def self.thumbnail(src, dst, options = {})
29
+ return nil unless File.exist?(src)
30
+ system(::Shellwords.join(['convert', '-resize', "#{options[:width]}x#{options[:height]}", '-background', 'white', '-gravity', 'center', '-extent', "#{options[:width]}x#{options[:height]}", src.to_s, dst.to_s]))
31
+ end # of self.resize
32
+
33
+ end # of class Image
34
+
35
+ end # of module ElFinder
@@ -0,0 +1,220 @@
1
+ require 'fileutils'
2
+ require 'pathname'
3
+
4
+ module Alchemy::Custom::Model::ElFinder
5
+
6
+ class PathName
7
+ attr_reader :root, :path
8
+
9
+ #
10
+ def initialize(root, path = '.')
11
+ @root = root.is_a?(PathName) ? root.root : ::Pathname.new(root)
12
+
13
+ @path = ::Pathname.new(path)
14
+ @path = path.is_a?(PathName) ? path.path : ::Pathname.new(path)
15
+ if absolute?
16
+ if @path.cleanpath.to_s.start_with?(@root.to_s)
17
+ @path = ::Pathname.new @path.to_s.slice((@root.to_s.length + 1)..-1)
18
+ elsif @path.cleanpath.to_s.start_with?(@root.realpath.to_s)
19
+ @path = ::Pathname.new @path.to_s.slice((@root.realpath.to_s.length + 1)..-1)
20
+ else
21
+ raise SecurityError, "Absolute paths are not allowed"
22
+ end
23
+ end
24
+ raise SecurityError, "Paths outside the root are not allowed" if outside_of_root?
25
+
26
+ end
27
+
28
+ # of initialize
29
+
30
+ #
31
+ def +(other)
32
+ if other.is_a? PathN ame
33
+ other = other.path
34
+ end
35
+ self.class.new(@root, (@path + other).to_s)
36
+ end
37
+
38
+ # of +
39
+
40
+ #
41
+ def is_root?
42
+ @path.to_s == '.'
43
+ end
44
+
45
+ #
46
+ def absolute?
47
+ @path.absolute?
48
+ end
49
+
50
+ # of absolute?
51
+
52
+ #
53
+ def relative?
54
+ @path.relative?
55
+ end
56
+
57
+ # of relative?
58
+
59
+ #
60
+ def outside_of_root?
61
+ !cleanpath.to_s.start_with?(@root.to_s)
62
+ end
63
+
64
+ # of outside_of_root?
65
+
66
+ #
67
+ def fullpath
68
+ @path.nil? ? @root : @root + @path
69
+ end
70
+
71
+ # of fullpath
72
+
73
+ #
74
+ def cleanpath
75
+ fullpath.cleanpath
76
+ end
77
+
78
+ # of cleanpath
79
+
80
+ #
81
+ def realpath
82
+ fullpath.realpath
83
+ end
84
+
85
+ # of realpath
86
+
87
+ #
88
+ def basename(*args)
89
+ @path.basename(*args)
90
+ end
91
+
92
+ # of basename
93
+
94
+ #
95
+ def basename_sans_extension
96
+ @path.basename(@path.extname)
97
+ end
98
+
99
+ # of basename
100
+
101
+ #
102
+ def basename(*args)
103
+ @path.basename(*args)
104
+ end
105
+
106
+ # of basename
107
+
108
+ #
109
+ def dirname
110
+ self.class.new(@root, @path.dirname)
111
+ end
112
+
113
+ # of basename
114
+
115
+ #
116
+ def extname
117
+ @path.nil? ? '' : @path.extname
118
+ end
119
+
120
+ # of extname
121
+
122
+ #
123
+ def to_s
124
+ cleanpath.to_s
125
+ end
126
+
127
+ # of to_s
128
+ alias_method :to_str, :to_s
129
+
130
+ #
131
+ def child_directories(with_directory = true)
132
+ realpath.children(with_directory).select {|child| child.directory?}.map {|e| self.class.new(@root, e)}
133
+ end
134
+
135
+ #
136
+ def children(with_directory = true)
137
+ realpath.children(with_directory).map {|e| self.class.new(@root, e)}
138
+ end
139
+
140
+ #
141
+ def touch(options = {})
142
+ FileUtils.touch(cleanpath, options)
143
+ end
144
+
145
+ #
146
+ def relative_to(other)
147
+ @path.relative_path_from(other)
148
+ end
149
+
150
+ #
151
+ def unique
152
+ return self.dup unless self.file?
153
+ copy = 1
154
+ begin
155
+ new_file = self.class.new(@root, dirname + "#{basename_sans_extension} #{copy}#{extname}")
156
+ copy += 1
157
+ end while new_file.exist?
158
+ new_file
159
+ end
160
+
161
+ # of unique
162
+
163
+ #
164
+ def duplicate
165
+ _basename = basename_sans_extension
166
+ copy = 1
167
+ if _basename.to_s =~ /^(.*) copy (\d+)$/
168
+ _basename = $1
169
+ copy = $2.to_i
170
+ end
171
+ begin
172
+ new_file = self.class.new(@root, dirname + "#{_basename} copy #{copy}#{extname}")
173
+ copy += 1
174
+ end while new_file.exist?
175
+ new_file
176
+ end
177
+
178
+ # of duplicate
179
+
180
+ #
181
+ def rename(to)
182
+ to = self.class.new(@root, to.to_s)
183
+ realpath.rename(to.fullpath.to_s)
184
+ rescue Errno::EXDEV
185
+ FileUtils.move(realpath.to_s, to.fullpath.to_s)
186
+ ensure
187
+ @path = to.path
188
+ end
189
+
190
+ # of rename
191
+
192
+ {
193
+ 'directory?' => {:path => 'realpath', :rescue => true},
194
+ 'exist?' => {:path => 'realpath', :rescue => true},
195
+ 'file?' => {:path => 'realpath', :rescue => true},
196
+ 'ftype' => {:path => 'realpath', },
197
+ 'mkdir' => {:path => 'fullpath', :args => '(*args)'},
198
+ 'mtime' => {:path => 'realpath', },
199
+ 'open' => {:path => 'fullpath', :args => '(*args, &block)'},
200
+ 'read' => {:path => 'fullpath', :args => '(*args)'},
201
+ 'readlink' => {:path => 'fullpath', },
202
+ 'readable?' => {:path => 'realpath', :rescue => true},
203
+ 'size' => {:path => 'realpath', },
204
+ 'symlink?' => {:path => 'fullpath', },
205
+ 'unlink' => {:path => 'realpath', },
206
+ 'writable?' => {:path => 'realpath', :rescue => true},
207
+ }.each_pair do |meth, opts|
208
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
209
+ def #{meth}#{opts[:args]}
210
+ #{opts[:path]}.#{meth}#{opts[:args]}
211
+ #{"rescue Errno::ENOENT\nfalse" if opts[:rescue]}
212
+ end
213
+ METHOD
214
+ end
215
+
216
+
217
+ end # of class Pathname
218
+
219
+ end # of module ElFinder
220
+
@@ -0,0 +1,21 @@
1
+ module Alchemy
2
+ module Custom
3
+ module Model
4
+ module ElFinder::Paths
5
+ extend ActiveSupport::Autoload
6
+
7
+ autoload :ActiveRecordReference
8
+ autoload :Base
9
+ autoload :ComponentFile
10
+ autoload :ComponentFiles
11
+ autoload :File
12
+ autoload :Files
13
+ autoload :Image
14
+ autoload :Images
15
+ autoload :Root
16
+ # eager_autoload do
17
+ # end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,50 @@
1
+ module Alchemy::Custom::Model::ElFinder
2
+ module Paths
3
+ class ActiveRecordReference < Base
4
+
5
+
6
+ URI_SPACER = '___'
7
+
8
+ def file?
9
+ true
10
+ end
11
+
12
+ def directory?
13
+ false
14
+ end
15
+
16
+ def active_record_class
17
+ raise "ToOverride"
18
+ end
19
+
20
+ def active_record_instance=(v)
21
+ @_active_record_instance = v
22
+ end
23
+
24
+ def active_record_instance
25
+ return @_active_record_instance if @_active_record_instance
26
+ id = self.path.basename.to_s.split(URI_SPACER).first
27
+ @_active_record_instance = self.active_record_class.find(id)
28
+
29
+ # gid = "gid://#{self.path.basename.to_s}"#.split(URI_SPACER)
30
+ # @_active_record_instance = GlobalID::Locator.locate gid# self.active_record_class.find(id)
31
+ end
32
+
33
+ def self.file_to_uri(p)
34
+ #p.to_global_id.uri.to_s.gsub(/^gid\:\/\//,'')
35
+ "#{p.id}#{URI_SPACER}"
36
+ end
37
+
38
+ def file
39
+ active_record_instance.file
40
+ end
41
+
42
+ def fisical_path
43
+ file.path
44
+ end
45
+
46
+ delegate :name, :mime_type, :size, to: :file
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,298 @@
1
+ module Alchemy::Custom::Model::ElFinder
2
+ module Paths
3
+ class Base
4
+
5
+ attr_reader :root, :path, :volume
6
+
7
+ #
8
+ def initialize(root, path = '.', opts = {})
9
+
10
+ Rails.logger.debug {root.inspect}
11
+ Rails.logger.debug {path.inspect}
12
+
13
+ @volume = opts.delete(:volume)
14
+
15
+ @root = root.is_a?(PathName) ? root.root : ::Pathname.new(root)
16
+
17
+ @path = ::Pathname.new(path)
18
+ @path = path.is_a?(PathName) ? path.path : ::Pathname.new(path)
19
+ if absolute?
20
+ if @path.cleanpath.to_s.start_with?(@root.to_s)
21
+ @path = ::Pathname.new @path.to_s.slice((@root.to_s.length + 1)..-1)
22
+ elsif @path.cleanpath.to_s.start_with?(@root.realpath.to_s)
23
+ @path = ::Pathname.new @path.to_s.slice((@root.realpath.to_s.length + 1)..-1)
24
+ else
25
+ raise SecurityError, "Absolute paths are not allowed"
26
+ end
27
+ end
28
+ raise SecurityError, "Paths outside the root are not allowed" if outside_of_root?
29
+
30
+ end
31
+
32
+ # of initialize
33
+
34
+ #
35
+ # def +(other)
36
+ # if other.is_a? ::ElFinder::Pathname
37
+ # other = other.path
38
+ # end
39
+ # self.class.new(@root, (@path + other).to_s)
40
+ # end
41
+
42
+ # of +
43
+
44
+ #
45
+ def is_root?
46
+ Rails.logger.debug {"IS_ROOT?:#{@path} - #{ @path.to_s == '.'}"}
47
+ @path.to_s == '.'
48
+ end
49
+
50
+ #
51
+ def absolute?
52
+ @path.absolute?
53
+ end
54
+
55
+ # of absolute?
56
+
57
+ #
58
+ def relative?
59
+ @path.relative?
60
+ end
61
+
62
+ # of relative?
63
+
64
+ #
65
+ def outside_of_root?
66
+ !cleanpath.to_s.start_with?(@root.to_s)
67
+ end
68
+
69
+ # of outside_of_root?
70
+
71
+ #
72
+ def fullpath
73
+ @path.nil? ? @root : @root + @path
74
+ end
75
+
76
+ # of fullpath
77
+
78
+ #
79
+ def cleanpath
80
+ fullpath.cleanpath
81
+ end
82
+
83
+ # of cleanpath
84
+
85
+ #
86
+ def realpath
87
+ fullpath
88
+ end
89
+
90
+ # of realpath
91
+
92
+ #
93
+ def basename(*args)
94
+ @path.basename(*args)
95
+ end
96
+
97
+ # of basename
98
+
99
+ #
100
+ def basename_sans_extension
101
+ @path.basename(@path.extname)
102
+ end
103
+
104
+ # of basename
105
+
106
+ #
107
+ def basename(*args)
108
+ Rails.logger.debug {"BASE_NAME:#{@path.inspect}"}
109
+ @path.basename(*args)
110
+ end
111
+
112
+ # of basename
113
+
114
+ #
115
+ def dirname
116
+ self.class.new(@root, @path.dirname, volume: @volume)
117
+ end
118
+
119
+ # of basename
120
+
121
+ #
122
+ def extname
123
+ @path.nil? ? '' : @path.extname
124
+ end
125
+
126
+ # of extname
127
+
128
+ #
129
+ def to_s
130
+ cleanpath.to_s
131
+ end
132
+
133
+ # of to_s
134
+ alias_method :to_str, :to_s
135
+
136
+ #
137
+ def child_directories(with_directory = true)
138
+ realpath.children(with_directory).select {|child| child.directory?}.map {|e| self.class.new(@root, e, volume: @volume)}
139
+ end
140
+
141
+ #
142
+ # def children(with_directory = true)
143
+ # realpath.children(with_directory).map {|e| self.class.new(@root, e)}
144
+ # end
145
+
146
+ #
147
+ # def touch(options = {})
148
+ # FileUtils.touch(cleanpath, options)
149
+ # end
150
+
151
+ #
152
+ def relative_to(other)
153
+ @path.relative_path_from(other)
154
+ end
155
+
156
+ #
157
+ def unique
158
+ return self.dup unless self.file?
159
+ copy = 1
160
+ begin
161
+ new_file = self.class.new(@root, dirname + "#{basename_sans_extension} #{copy}#{extname}", volume: @volume)
162
+ copy += 1
163
+ end while new_file.exist?
164
+ new_file
165
+ end
166
+
167
+ # of unique
168
+
169
+ #
170
+ def duplicate
171
+ _basename = basename_sans_extension
172
+ copy = 1
173
+ if _basename.to_s =~ /^(.*) copy (\d+)$/
174
+ _basename = $1
175
+ copy = $2.to_i
176
+ end
177
+ begin
178
+ new_file = self.class.new(@root, dirname + "#{_basename} copy #{copy}#{extname}", volume: @volume)
179
+ copy += 1
180
+ end while new_file.exist?
181
+ new_file
182
+ end
183
+
184
+ # of duplicate
185
+
186
+ #
187
+ def rename(to)
188
+ to = self.class.new(@root, to.to_s, volume: @volume)
189
+ realpath.rename(to.fullpath.to_s)
190
+ rescue Errno::EXDEV
191
+ FileUtils.move(realpath.to_s, to.fullpath.to_s)
192
+ ensure
193
+ @path = to.path
194
+ end
195
+
196
+ # of rename
197
+
198
+ # {
199
+ # 'directory?' => {:path => 'realpath', :rescue => true},
200
+ # 'exist?' => {:path => 'realpath', :rescue => true},
201
+ # 'file?' => {:path => 'realpath', :rescue => true},
202
+ # 'ftype' => {:path => 'realpath', },
203
+ # 'mkdir' => {:path => 'fullpath', :args => '(*args)'},
204
+ # 'mtime' => {:path => 'realpath', },
205
+ # 'open' => {:path => 'fullpath', :args => '(*args, &block)'},
206
+ # 'read' => {:path => 'fullpath', :args => '(*args)'},
207
+ # 'readlink' => {:path => 'fullpath', },
208
+ # 'readable?' => {:path => 'realpath', :rescue => true},
209
+ # 'size' => {:path => 'realpath', },
210
+ # 'symlink?' => {:path => 'fullpath', },
211
+ # 'unlink' => {:path => 'realpath', },
212
+ # 'writable?' => {:path => 'realpath', :rescue => true},
213
+ # }.each_pair do |meth, opts|
214
+ # class_eval <<-METHOD, __FILE__, __LINE__ + 1
215
+ # def #{meth}#{opts[:args]}
216
+ # #{opts[:path]}.#{meth}#{opts[:args]}
217
+ # #{"rescue Errno::ENOENT\nfalse" if opts[:rescue]}
218
+ # end
219
+ # METHOD
220
+ # end
221
+
222
+ #
223
+ def file?
224
+ false
225
+ end
226
+
227
+ def is_image?
228
+ false
229
+ end
230
+
231
+ def directory?
232
+ true
233
+ end
234
+
235
+ # def is_root?
236
+ # false
237
+ # end
238
+ #
239
+ def with_sub_dirs?
240
+ false
241
+ end
242
+
243
+ #
244
+ # def basename
245
+ # ''
246
+ # end
247
+ #
248
+ # def parent_path
249
+ # self.root
250
+ # end
251
+ #
252
+ # def path
253
+ # File.join(self.root, basename)
254
+ # end
255
+ #
256
+ # ##
257
+ # # Data Di modifica della cartella
258
+ def mtime
259
+ DateTime.now
260
+ end
261
+
262
+ #
263
+ def children(with_directory = true)
264
+ []
265
+ end
266
+
267
+ #
268
+ # url per la thumb
269
+ def tmb
270
+ nil
271
+ end
272
+
273
+ ##
274
+ # Nome visualizzato in interfaccia
275
+ def name
276
+ self.basename.to_s
277
+ end
278
+
279
+ def mime_type
280
+ 'directory'
281
+ end
282
+
283
+ def fisical_path
284
+ ''
285
+ end
286
+
287
+ def global_id
288
+ nil
289
+ end
290
+
291
+ def full_fill_paylod(payload)
292
+ payload
293
+ end
294
+
295
+ end
296
+ end
297
+ end
298
+