erp_tech_svcs 4.0.0 → 4.2.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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -24
  3. data/app/controllers/api/v1/audit_log_items_controller.rb +33 -0
  4. data/app/controllers/api/v1/audit_logs_controller.rb +32 -0
  5. data/app/controllers/api/v1/capabilities_controller.rb +160 -0
  6. data/app/controllers/api/v1/file_assets_controller.rb +40 -0
  7. data/app/controllers/api/v1/groups_controller.rb +236 -0
  8. data/app/controllers/api/v1/security_roles_controller.rb +276 -0
  9. data/app/controllers/api/v1/users_controller.rb +262 -0
  10. data/app/controllers/erp_tech_svcs/session_controller.rb +8 -5
  11. data/app/controllers/erp_tech_svcs/user_controller.rb +14 -15
  12. data/app/mailers/user_mailer.rb +8 -5
  13. data/app/models/audit_log.rb +111 -36
  14. data/app/models/audit_log_item.rb +30 -0
  15. data/app/models/audit_log_item_type.rb +1 -0
  16. data/app/models/audit_log_type.rb +19 -0
  17. data/app/models/capability.rb +22 -6
  18. data/app/models/extensions/tracked_status_type.rb +3 -0
  19. data/app/models/file_asset.rb +245 -20
  20. data/app/models/file_asset_holder.rb +20 -0
  21. data/app/models/group.rb +38 -25
  22. data/app/models/notification.rb +32 -13
  23. data/app/models/notification_type.rb +13 -0
  24. data/app/models/security_role.rb +17 -4
  25. data/app/models/user.rb +116 -29
  26. data/app/validators/password_strength_validator.rb +1 -1
  27. data/app/views/user_mailer/activation_needed_email.html.erb +293 -15
  28. data/app/views/user_mailer/reset_password_email.html.erb +268 -13
  29. data/config/initializers/logger.rb +19 -0
  30. data/config/initializers/sorcery.rb +2 -0
  31. data/config/initializers/wickedpdf.rb +4 -0
  32. data/config/routes.rb +64 -0
  33. data/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.rb +1 -5
  34. data/db/data_migrations/20150819140550_create_job_tracker_for_notification.rb +14 -0
  35. data/db/migrate/20080805000010_base_tech_services.rb +99 -39
  36. data/db/migrate/20150414151421_add_nested_set_columns_to_security_role.rb +13 -0
  37. data/db/migrate/20150609003216_update_user_for_sorcery.rb +11 -0
  38. data/db/migrate/20150819135108_add_custom_fields_to_notifications.rb +5 -0
  39. data/db/migrate/20160122155402_add_description_to_file_asset.rb +13 -0
  40. data/db/migrate/20160310163060_add_created_by_updated_by_to_erp_tech_svcs.rb +35 -0
  41. data/db/migrate/20160313161611_add_tenant_id_to_audit_log.rb +16 -0
  42. data/lib/erp_tech_svcs.rb +6 -10
  43. data/lib/erp_tech_svcs/config.rb +7 -2
  44. data/lib/erp_tech_svcs/delayed_jobs/delete_expired_sessions_job.rb +49 -0
  45. data/lib/erp_tech_svcs/delayed_jobs/notification_job.rb +50 -0
  46. data/lib/erp_tech_svcs/engine.rb +0 -1
  47. data/lib/erp_tech_svcs/erp_tech_svcs_audit_log.rb +12 -6
  48. data/lib/erp_tech_svcs/extensions.rb +0 -1
  49. data/lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb +57 -29
  50. data/lib/erp_tech_svcs/extensions/active_record/has_file_assets.rb +57 -31
  51. data/lib/erp_tech_svcs/extensions/active_record/has_security_roles.rb +12 -4
  52. data/lib/erp_tech_svcs/extensions/active_record/is_json.rb +22 -15
  53. data/lib/erp_tech_svcs/extensions/active_record/scoped_by.rb +16 -13
  54. data/lib/erp_tech_svcs/extensions/compass_ae/erp_base_erp_svcs/controllers/api/parties_controller.rb +15 -0
  55. data/lib/erp_tech_svcs/file_support.rb +1 -0
  56. data/lib/erp_tech_svcs/file_support/file_system_manager.rb +77 -44
  57. data/lib/erp_tech_svcs/file_support/manager.rb +12 -3
  58. data/lib/erp_tech_svcs/file_support/railties/compass_ae_resolver.rb +49 -0
  59. data/lib/erp_tech_svcs/file_support/s3_manager.rb +73 -51
  60. data/lib/erp_tech_svcs/utils/compass_access_negotiator.rb +11 -2
  61. data/lib/erp_tech_svcs/utils/default_nested_set_methods.rb +238 -46
  62. data/lib/erp_tech_svcs/version.rb +1 -1
  63. data/lib/tasks/erp_tech_svcs_tasks.rake +43 -5
  64. metadata +73 -42
  65. data/app/models/user_defined_data.rb +0 -6
  66. data/app/models/user_defined_field.rb +0 -8
  67. data/config/initializers/pdfkit.rb +0 -18
  68. data/db/data_migrations/20121130212146_note_capabilities.rb +0 -23
  69. data/db/migrate/20121116151510_create_groups.rb +0 -18
  70. data/db/migrate/20121126171612_upgrade_security.rb +0 -53
  71. data/db/migrate/20121126173506_upgrade_security2.rb +0 -274
  72. data/db/migrate/20130410135419_add_queue_to_delayed_jobs.rb +0 -13
  73. data/db/migrate/20130610163240_create_notifications.rb +0 -37
  74. data/db/migrate/20130725212647_add_party_id_idx_to_users.rb +0 -9
  75. data/db/migrate/20131113213843_add_audit_log_item_old_value.rb +0 -13
  76. data/db/migrate/20131113213844_add_erp_tech_svcs_missing_indexes.rb +0 -31
  77. data/db/migrate/20131129203603_add_user_defined_fields.rb +0 -43
  78. data/db/migrate/20141013060204_add_custom_fields_to_notifications.rb +0 -12
  79. data/db/migrate/20141108182427_add_scoped_by_to_file_assets.rb +0 -14
  80. data/lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb +0 -147
  81. data/lib/erp_tech_svcs/sessions/delete_expired_sessions_job.rb +0 -47
  82. data/lib/erp_tech_svcs/sessions/delete_expired_sessions_service.rb +0 -15
  83. data/lib/erp_tech_svcs/utils/compass_logger.rb +0 -87
@@ -1,25 +1,40 @@
1
1
  module ErpTechSvcs
2
- module Extensions
3
- module ActiveRecord
4
- module HasFileAssets
5
-
6
- def self.included(base)
7
- base.extend(ClassMethods)
8
- end
9
-
10
- module ClassMethods
11
- def has_file_assets
12
- extend HasFileAssets::SingletonMethods
13
- include HasFileAssets::InstanceMethods
14
-
15
- has_many :files, :as => :file_asset_holder, :class_name => 'FileAsset', :dependent => :destroy, :include => :capabilities
16
- end
17
- end
18
-
19
- module SingletonMethods
20
- end
21
-
22
- module InstanceMethods
2
+ module Extensions
3
+ module ActiveRecord
4
+ module HasFileAssets
5
+
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ end
9
+
10
+ # If set to auto destroy any files related to a model via this mixin will automatically be removed
11
+ # regardless of any other relationships they have. It defaults to true since most files
12
+ # should be removed when the model is removed.
13
+ module ClassMethods
14
+ def has_file_assets(auto_destroy=true)
15
+ extend HasFileAssets::SingletonMethods
16
+ include HasFileAssets::InstanceMethods
17
+
18
+ if auto_destroy
19
+ before_destroy :destroy_all_files
20
+ end
21
+
22
+ has_many :file_asset_holders,
23
+ :as => :file_asset_holder,
24
+ :dependent => :destroy
25
+
26
+ has_many :files,
27
+ :through => :file_asset_holders,
28
+ :class_name => 'FileAsset',
29
+ :source => :file_asset,
30
+ :include => :capabilities
31
+ end
32
+ end
33
+
34
+ module SingletonMethods
35
+ end
36
+
37
+ module InstanceMethods
23
38
 
24
39
  # Capabilites can be passed via a hash
25
40
  # {
@@ -28,22 +43,25 @@ module ErpTechSvcs
28
43
  # }
29
44
  #
30
45
  def add_file(data, path=nil, capabilities=nil)
31
- file_asset = FileAsset.create!(:file_asset_holder => self, :base_path => path, :data => data)
46
+ file_asset = FileAsset.create!(:base_path => path, :data => data)
32
47
 
33
- #set capabilites if they are passed
48
+ # set capabilites if they are passed
34
49
  capabilities.each do |capability_type, roles|
35
50
  file_asset.add_capability(capability_type, nil, roles)
36
51
  end if capabilities
37
52
 
53
+ self.files << file_asset
54
+ self.save
55
+
38
56
  file_asset
39
57
  end
40
58
 
41
59
  def images
42
- self.files.where('type = ?', 'Image')
60
+ self.files.where('type = ?', 'Image')
43
61
  end
44
62
 
45
63
  def templates
46
- self.files.where('type = ?', 'Template')
64
+ self.files.where('type = ?', 'Template')
47
65
  end
48
66
 
49
67
  def stylesheets
@@ -57,9 +75,17 @@ module ErpTechSvcs
57
75
  def xmls
58
76
  self.files.where('type = ?', 'XmlFile')
59
77
  end
60
-
61
- end
62
- end
63
- end
64
- end
65
- end
78
+
79
+ # destroy all files related to this model regardless of other relationships
80
+ def destroy_all_files
81
+ statement = "delete from file_assets where id in (select file_asset_id from file_asset_holders where (file_asset_holder_type = '#{self.class.to_s}' or file_asset_holder_type = '#{self.class.superclass.to_s}' ) and file_asset_holder_id = #{self.id} )"
82
+
83
+ ::ActiveRecord::Base.connection.execute(statement)
84
+ end
85
+
86
+ end
87
+
88
+ end # HasFileAssets
89
+ end # ActiveRecord
90
+ end # Extensions
91
+ end # ErpTechSvcs
@@ -32,7 +32,7 @@ module ErpTechSvcs
32
32
 
33
33
  def roles
34
34
  self.security_roles
35
- end
35
+ end
36
36
 
37
37
  def add_role(role)
38
38
  role = role.is_a?(SecurityRole) ? role : SecurityRole.find_by_internal_identifier(role.to_s)
@@ -40,7 +40,8 @@ module ErpTechSvcs
40
40
  self.security_roles << role
41
41
  self.save
42
42
  end
43
- end
43
+ end
44
+ alias :add_security_role :add_role
44
45
 
45
46
  def add_roles(*passed_roles)
46
47
  passed_roles.flatten!
@@ -49,23 +50,28 @@ module ErpTechSvcs
49
50
  self.add_role(role)
50
51
  end
51
52
  end
53
+ alias :add_security_roles :add_roles
52
54
 
53
55
  def remove_role(role)
54
56
  role = role.is_a?(SecurityRole) ? role : SecurityRole.find_by_internal_identifier(role.to_s)
55
57
  self.security_roles.delete(role) if has_role?(role)
56
- end
58
+ end
59
+ alias :remove_security_role :remove_role
60
+
57
61
 
58
62
  def remove_roles(*passed_roles)
59
63
  passed_roles.flatten!
60
64
  passed_roles.each do |role|
61
65
  self.remove_role(role)
62
66
  end
63
- end
67
+ end
68
+ alias :remove_security_roles :remove_roles
64
69
 
65
70
  def remove_all_roles
66
71
  self.security_roles = []
67
72
  self.save
68
73
  end
74
+ alias :remove_all_security_roles :remove_all_roles
69
75
 
70
76
  def has_role?(*passed_roles)
71
77
  result = false
@@ -80,6 +86,8 @@ module ErpTechSvcs
80
86
  end
81
87
  result
82
88
  end
89
+ alias :has_security_role? :has_role?
90
+
83
91
  end
84
92
  end #HasSecurityRoles
85
93
  end #ActiveRecord
@@ -13,36 +13,43 @@ module ErpTechSvcs
13
13
 
14
14
  module ClassMethods
15
15
 
16
- def is_json(attr_name, class_name=nil)
17
- class_name = if class_name
18
- class_name
19
- else
20
- case ::ActiveRecord::Base.connection.instance_values["config"][:adapter]
21
- when 'postgresql'
22
- ::ActiveRecord::Coders::NestedHstore
23
- else
24
- JSON
25
- end
26
- end
27
-
28
-
29
- serialize attr_name, class_name
16
+ def is_json(attr_name)
17
+ serialize attr_name, JSON
30
18
 
31
19
  extend SingletonMethods
32
20
  include InstanceMethods
33
21
 
34
22
  # create method to initialize the json field with an empty hash
35
23
  define_method("initialize_#{attr_name}_json") do
36
- if self.new_record?
24
+ if attributes.keys.include?(attr_name.to_s) && send("#{attr_name}").nil?
37
25
  send("#{attr_name}=", {})
38
26
  end
39
27
  end
40
28
  after_initialize "initialize_#{attr_name}_json"
29
+
30
+ define_method("stringify_keys_for_#{attr_name}_json") do
31
+ if send(attr_name).is_a?(Hash)
32
+ send("#{attr_name}=", send(attr_name).stringify_keys)
33
+ end
34
+ end
35
+ before_save "stringify_keys_for_#{attr_name}_json".to_sym
41
36
  end
42
37
 
43
38
  end
44
39
 
45
40
  module SingletonMethods
41
+ def matches_is_json(attr_name, keyword, attr=nil)
42
+ if attr
43
+ arel_table[attr_name.to_sym].matches("%\"#{attr}\":\"#{keyword}\"%").
44
+ or(arel_table[attr_name.to_sym].matches("%\"#{attr}\":#{keyword}%"))
45
+ else
46
+ arel_table[attr_name.to_sym].matches("%#{keyword}%")
47
+ end
48
+ end
49
+
50
+ def with_json_attribute(attr_name, attr, keyword)
51
+ where(self.matches_is_json(attr_name, keyword, attr))
52
+ end
46
53
  end
47
54
 
48
55
  module InstanceMethods
@@ -10,15 +10,24 @@ module ErpTechSvcs
10
10
  base.extend(ClassMethods)
11
11
  end
12
12
 
13
+ def _config
14
+ @config
15
+ end
16
+
13
17
  module ClassMethods
14
18
 
15
- def add_scoped_by(attr_name)
19
+ def add_scoped_by(attr_name=:scoped_by)
16
20
  # serialize Scope attributes
17
21
  is_json attr_name
18
22
 
19
23
  extend SingletonMethods
20
24
  include InstanceMethods
21
25
 
26
+ # create method to retrieve scoped_by attribute name
27
+ define_singleton_method("retrieve_scoped_by_name") do
28
+ attr_name
29
+ end
30
+
22
31
  # create method to initialize the json field with an empty hash
23
32
  define_method("initialize_#{attr_name}_scoped_by_json") do
24
33
  if self.new_record?
@@ -32,28 +41,23 @@ module ErpTechSvcs
32
41
 
33
42
  module SingletonMethods
34
43
  def scoped_by(scope_name, scope_value)
35
- if ::ActiveRecord::Base.connection.instance_values["config"][:adapter] == 'postgresql'
36
- where("(scoped_by @> '\"#{scope_name}\"=>\"#{scope_value}\"'::hstore )")
37
- else
38
- where(arel_table[:scoped_by].matches("%\"#{scope_name}\":\"#{scope_value}\"%")
39
- .or(arel_table[:scoped_by].matches("%\"#{scope_name}\":#{scope_value}%")))
40
- end
44
+ where(arel_table[retrieve_scoped_by_name].matches("%\"#{scope_name}\":\"#{scope_value}\"%").or(arel_table[retrieve_scoped_by_name].matches("%\"#{scope_name}\":#{scope_value}%")))
41
45
  end
42
46
  end
43
47
 
44
48
  module InstanceMethods
45
49
  def add_scope(scope_name, scope_value)
46
- scoped_by[scope_name.to_s] = scope_value
47
- save
50
+ send(self.class.retrieve_scoped_by_name)[scope_name.to_s] = scope_value
51
+ save!
48
52
  end
49
53
 
50
54
  def remove_scope(scope_name)
51
- scoped_by[scope_name.to_s] = nil
52
- save
55
+ send(self.class.retrieve_scoped_by_name)[scope_name.to_s] = nil
56
+ save!
53
57
  end
54
58
 
55
59
  def get_scope(scope_name)
56
- scoped_by[scope_name.to_s]
60
+ send(self.class.retrieve_scoped_by_name)[scope_name.to_s]
57
61
  end
58
62
  end
59
63
 
@@ -61,4 +65,3 @@ module ErpTechSvcs
61
65
  end # ActiveRecord
62
66
  end # Extensions
63
67
  end # ErpTechSvcs
64
-
@@ -0,0 +1,15 @@
1
+ Api::V1::PartiesController.class_eval do
2
+
3
+ def user
4
+ party = Party.find(params[:id])
5
+
6
+ user = party.user
7
+
8
+ if user
9
+ render json: {success: true, user: user.to_data_hash}
10
+ else
11
+ render json: {success: true, user: nil}
12
+ end
13
+ end
14
+
15
+ end
@@ -6,6 +6,7 @@ require 'erp_tech_svcs/file_support/file_manipulator'
6
6
 
7
7
  #path resolvers
8
8
  require 'erp_tech_svcs/file_support/railties/s3_resolver'
9
+ require 'erp_tech_svcs/file_support/railties/compass_ae_resolver'
9
10
 
10
11
  #paperclip
11
12
  require 'erp_tech_svcs/file_support/paperclip_patch'
@@ -8,12 +8,12 @@ module ErpTechSvcs
8
8
  end
9
9
 
10
10
  def update_file(path, content)
11
- File.open(path, 'wb+') {|f| f.write(content) }
11
+ File.open(path, 'wb+') { |f| f.write(content) }
12
12
  end
13
13
 
14
14
  def create_file(path, name, contents)
15
15
  FileUtils.mkdir_p path unless File.exists? path
16
- File.open(File.join(path,name), 'wb+') {|f| f.write(contents) }
16
+ File.open(File.join(path, name), 'wb+') { |f| f.write(contents) }
17
17
  end
18
18
 
19
19
  # copy a file
@@ -24,12 +24,14 @@ module ErpTechSvcs
24
24
  end
25
25
 
26
26
  def create_folder(path, name)
27
- FileUtils.mkdir_p File.join(path,name) unless File.directory? File.join(path,name)
27
+ unless File.directory? File.join(path, name)
28
+ FileUtils.mkdir_p File.join(path, name)
29
+ end
28
30
  end
29
31
 
30
32
  def save_move(path, new_parent_path)
31
33
  old_path = File.join(path)
32
- new_path = File.join(Rails.root,new_parent_path)
34
+ new_path = File.join(Rails.root, new_parent_path)
33
35
  result = false
34
36
  unless File.exists? old_path
35
37
  message = FILE_DOES_NOT_EXIST
@@ -37,7 +39,7 @@ module ErpTechSvcs
37
39
  name = File.basename(path)
38
40
  #make sure path is there.
39
41
  FileUtils.mkdir_p new_path unless File.directory? new_path
40
- FileUtils.mv(old_path, File.join(new_path,name))
42
+ FileUtils.mv(old_path, File.join(new_path, name))
41
43
  message = "#{name} was moved to #{new_parent_path} successfully"
42
44
  result = true
43
45
  end
@@ -77,12 +79,18 @@ module ErpTechSvcs
77
79
  if File.directory? path
78
80
  is_directory = true
79
81
  entries = Dir.entries(path)
80
- entries.delete_if{|entry| entry =~ REMOVE_FILES_REGEX}
82
+ entries.delete_if { |entry| entry =~ REMOVE_FILES_REGEX }
81
83
  if entries.count > 0 && !options[:force]
82
84
  message = FOLDER_IS_NOT_EMPTY
83
85
  result = false
84
86
  else
85
87
  FileUtils.rm_rf(path)
88
+
89
+ child_files = FileAsset.where(FileAsset.arel_table[:directory].matches("#{path.gsub(root, '')}%"))
90
+ child_files.each do |file|
91
+ file.destroy
92
+ end
93
+
86
94
  message = "Folder #{name} was deleted #{name} successfully"
87
95
  result = true
88
96
  end
@@ -102,7 +110,7 @@ module ErpTechSvcs
102
110
  unless File.exists? path
103
111
  message = FILE_DOES_NOT_EXIST
104
112
  else
105
- contents = File.open(path, 'rb') {|file| file.read }
113
+ contents = File.open(path, 'rb') { |file| file.read }
106
114
  end
107
115
  return contents, message
108
116
  end
@@ -112,65 +120,90 @@ module ErpTechSvcs
112
120
  end
113
121
 
114
122
  def find_node(path, options={})
115
- parent = if options[:file_asset_holder]
123
+ if options[:file_asset_holder]
116
124
  super
117
125
  else
118
- path_pieces = path.split('/')
119
- parent = build_tree_for_directory(path, options)
120
- unless parent[:id] == path
121
- path_pieces.each do |path_piece|
122
- next if path_piece.blank?
123
- parent[:children].each do |child_node|
124
- if child_node[:text] == path_piece
125
- parent = child_node
126
- break
126
+ if File.exists? path
127
+ if File.directory? path
128
+ path_pieces = path.split('/')
129
+ parent = build_tree_for_directory(path, options)
130
+ unless parent[:id] == path
131
+ path_pieces.each do |path_piece|
132
+ next if path_piece.blank?
133
+ parent[:children].each do |child_node|
134
+ if child_node[:text] == path_piece
135
+ parent = child_node
136
+ break
137
+ end
138
+ end
127
139
  end
128
140
  end
141
+
142
+ parent = nil if parent[:id] != path
143
+ parent
144
+ else
145
+ build_node(path, options)
129
146
  end
147
+ else
148
+ nil
130
149
  end
131
-
132
- parent = nil if parent[:id] != path
133
- parent
134
150
  end
151
+ end
135
152
 
136
- parent
153
+ def build_node(path, options={})
154
+ if File.directory?(path)
155
+ if options[:preload]
156
+ build_tree_for_directory(path, options) if options[:preload]
157
+ else
158
+ path.gsub!(root, '') unless options[:keep_full_path]
159
+
160
+ {:text => path.split('/').last, :id => path, :iconCls => 'icon-content'}
161
+ end
162
+ else
163
+ path.gsub!(root, '') unless options[:keep_full_path]
164
+
165
+ parts = path.split('/')
166
+ parts.pop
167
+ download_path = parts.join('/')
168
+
169
+ if !options[:included_file_extensions_regex].nil? && entry =~ options[:included_file_extensions_regex]
170
+ {:text => path.split('/').last, :leaf => true, :iconCls => 'icon-document', :downloadPath => download_path, :id => path}
171
+ elsif options[:included_file_extensions_regex].nil?
172
+ {:text => path.split('/').last, :leaf => true, :iconCls => 'icon-document', :downloadPath => download_path, :id => path}
173
+ end
174
+
175
+ end
137
176
  end
138
177
 
139
178
  private
140
179
 
141
180
  def build_tree_for_directory(directory, options)
142
- keep_full_path = nil
143
- if directory.index(Rails.root.to_s).nil?
144
- tree_data = {:text => directory.split('/').last, :id => directory, :leaf => false, :children => []}
145
- else
146
- keep_full_path = true
147
- tree_data = {:text => directory.split('/').last, :id => directory, :leaf => false, :children => []}
181
+ if options[:keep_full_path] != false and !directory.index(root).nil?
182
+ options[:keep_full_path] = true
148
183
  end
149
184
 
185
+ tree_data = {
186
+ :text => directory.split('/').last,
187
+ :iconCls => File.directory?(directory) ? 'icon-content' : 'icon-document',
188
+ :id => directory,
189
+ :leaf => !File.directory?(directory),
190
+ :children => []
191
+ }
192
+
193
+ tree_data[:id].gsub!(root, '') unless options[:keep_full_path]
194
+
150
195
  Dir.entries(directory).each do |entry|
151
196
  #ignore .svn folders and any other folders starting with .
152
197
  next if entry =~ REMOVE_FILES_REGEX
153
198
 
154
- path = File.join(directory, entry)
155
- path.gsub!(root,'') unless keep_full_path
199
+ tree_data[:children] << build_node(File.join(directory, entry), options)
156
200
 
157
- if File.directory?(File.join(directory,entry))
158
- tree_data[:children] << if options[:preload]
159
- build_tree_for_directory(path, options) if options[:preload]
160
- else
161
- {:text => entry, :id => path, :iconCls => 'icon-content'}
162
- end
163
- elsif !options[:included_file_extensions_regex].nil? && entry =~ options[:included_file_extensions_regex]
164
- tree_data[:children] << {:text => entry, :leaf => true, :iconCls => 'icon-document', :downloadPath => directory, :id => path}
165
- elsif options[:included_file_extensions_regex].nil?
166
- tree_data[:children] << {:text => entry, :leaf => true, :iconCls => 'icon-document', :downloadPath => directory, :id => path}
167
- end
168
201
  end if File.directory?(directory)
169
202
 
170
- tree_data[:children].sort_by!{|item| [item[:text]]}
203
+ tree_data[:children].sort_by! { |item| [item[:text]] }
171
204
  tree_data
172
205
  end
173
206
 
174
- end#FileSystemManager
175
- end#FileSupport
176
- end#ErpTechSvcs
207
+ end #FileSystemManager
208
+ end #FileSupport
209
+ end #ErpTechSvcs