erp_tech_svcs 3.0.0 → 3.0.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.
- data/README.md +62 -0
- data/app/controllers/erp_tech_svcs/session_controller.rb +12 -7
- data/app/controllers/erp_tech_svcs/user_controller.rb +35 -14
- data/app/mailers/user_mailer.rb +8 -2
- data/app/models/attribute_type.rb +30 -0
- data/app/models/attribute_value.rb +41 -0
- data/app/models/file_asset.rb +58 -12
- data/app/models/secured_model.rb +4 -2
- data/app/models/user.rb +9 -7
- data/app/validators/password_strength_validator.rb +8 -0
- data/app/views/user_mailer/activation_needed_email.html.erb +1 -1
- data/config/initializers/erp_tech_svcs.rb +6 -1
- data/config/initializers/file_support.rb +9 -1
- data/config/initializers/sorcery.rb +3 -3
- data/config/routes.rb +2 -1
- data/db/data_migrations/20120109173616_create_download_capability_type.rb +13 -0
- data/db/migrate/20080805000010_base_tech_services.rb +12 -5
- data/db/migrate/20111117183144_create_has_attribute_tables.rb +38 -0
- data/db/migrate/{20111109161549_add_capabilites.rb → upgrade/20111109161549_add_capabilites.rb} +0 -0
- data/db/migrate/upgrade/20120329161641_add_file_asset_indexes.rb +22 -0
- data/lib/erp_tech_svcs/config.rb +20 -2
- data/lib/erp_tech_svcs/engine.rb +6 -0
- data/lib/erp_tech_svcs/extensions/active_record/has_capabilities.rb +18 -6
- data/lib/erp_tech_svcs/extensions/active_record/has_file_assets.rb +16 -3
- data/lib/erp_tech_svcs/extensions/active_record/has_relational_dynamic_attributes.rb +99 -0
- data/lib/erp_tech_svcs/extensions/active_record/has_roles.rb +3 -0
- data/lib/erp_tech_svcs/extensions/sorcery/user_activation.rb +13 -0
- data/lib/erp_tech_svcs/extensions.rb +5 -1
- data/lib/erp_tech_svcs/file_support/base.rb +1 -3
- data/lib/erp_tech_svcs/file_support/file_system_manager.rb +21 -19
- data/lib/erp_tech_svcs/file_support/manager.rb +29 -9
- data/lib/erp_tech_svcs/file_support/paperclip_patch.rb +13 -9
- data/lib/erp_tech_svcs/file_support/railties/s3_resolver.rb +24 -4
- data/lib/erp_tech_svcs/file_support/s3_manager.rb +133 -86
- data/lib/erp_tech_svcs/file_support.rb +5 -3
- data/lib/erp_tech_svcs/sms_wrapper/clickatell.rb +25 -0
- data/lib/erp_tech_svcs/sms_wrapper.rb +1 -0
- data/lib/erp_tech_svcs/utils/compass_access_negotiator.rb +12 -6
- data/lib/erp_tech_svcs/utils/default_nested_set_methods.rb +14 -1
- data/lib/erp_tech_svcs/version.rb +7 -1
- data/lib/erp_tech_svcs.rb +4 -2
- data/lib/tasks/erp_tech_svcs_tasks.rake +1 -1
- data/spec/controllers/erp_tech_svcs/user_controller_spec.rb +0 -0
- data/spec/lib/file_support/file_system_manager_spec.rb +82 -0
- data/spec/lib/file_support/s3_manager_spec.rb +92 -0
- data/spec/models/file_asset_spec.rb +78 -0
- data/spec/models/secured_model_spec.rb +22 -0
- data/spec/spec_helper.rb +9 -7
- metadata +146 -133
- data/README.rdoc +0 -2
- data/lib/erp_tech_svcs/file_support/aws_s3_patch.rb +0 -3
- data/spec/dummy/db/schema.rb +0 -571
- data/spec/dummy/db/spec.sqlite3 +0 -0
- data/spec/dummy/log/spec.log +0 -2862
@@ -5,72 +5,76 @@ module ErpTechSvcs
|
|
5
5
|
module FileSupport
|
6
6
|
class S3Manager < Manager
|
7
7
|
class << self
|
8
|
-
cattr_accessor :node_tree
|
8
|
+
cattr_accessor :node_tree, :s3_connection
|
9
9
|
|
10
10
|
def setup_connection
|
11
11
|
@@configuration = YAML::load_file(File.join(Rails.root,'config','s3.yml'))[Rails.env]
|
12
|
-
|
13
|
-
|
12
|
+
|
13
|
+
# S3 debug logging
|
14
|
+
# AWS.config(
|
15
|
+
# :logger => Rails.logger,
|
16
|
+
# :log_level => :info
|
17
|
+
# )
|
18
|
+
|
19
|
+
@@s3_connection = AWS::S3.new(
|
14
20
|
:access_key_id => @@configuration['access_key_id'],
|
15
21
|
:secret_access_key => @@configuration['secret_access_key']
|
16
22
|
)
|
17
23
|
|
18
|
-
@@s3_bucket =
|
19
|
-
|
24
|
+
@@s3_bucket = @@s3_connection.buckets[@@configuration['bucket'].to_sym]
|
25
|
+
build_node_tree(true)
|
20
26
|
end
|
21
27
|
|
22
28
|
def reload
|
23
|
-
|
29
|
+
!@@s3_connection.nil? ? build_node_tree(true) : setup_connection
|
24
30
|
end
|
25
31
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
nesting_depth = objects.collect{|object| object.key.split('/').count}.max
|
32
|
-
unless nesting_depth.nil?
|
33
|
-
levels = []
|
34
|
-
(1..nesting_depth).each do |i|
|
35
|
-
current_items = []
|
36
|
-
objects_this_depth = objects.collect{|object|
|
37
|
-
text = object.key.split('/')[i - 1]
|
38
|
-
path ='/' + (object.key.split('/')[0..(i-1)].join('/'))
|
39
|
-
if object.key.split('/').count >= i && current_items.select{|item| item[:text] == text and item[:path] == path}.empty?
|
40
|
-
item_hash = {:text => text, :path => path, :last_modified => object.last_modified}
|
41
|
-
current_items << item_hash
|
42
|
-
item_hash
|
43
|
-
end
|
44
|
-
}
|
45
|
-
objects_this_depth.delete_if{|item| (item.nil? or item[:text].nil?)}
|
46
|
-
levels << objects_this_depth
|
47
|
-
end
|
32
|
+
def cache_key
|
33
|
+
'node_tree'
|
34
|
+
end
|
48
35
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
36
|
+
def cache_node_tree(node_tree)
|
37
|
+
Rails.cache.write(cache_key, node_tree, :expires_in => ErpTechSvcs::Config.s3_cache_expires_in_minutes.minutes)
|
38
|
+
node_tree
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_children(parent_hash, tree)
|
42
|
+
tree.children.each do |child|
|
43
|
+
child_hash = {
|
44
|
+
:last_modified => '',
|
45
|
+
#:last_modified => (child.leaf? ? @@s3_bucket.objects[child.key].last_modified : ''),
|
46
|
+
:text => (child.leaf? ? File.basename(child.key) : File.basename(child.prefix)),
|
47
|
+
:downloadPath => (child.leaf? ? '/'+File.dirname(child.key) : "/#{child.parent.prefix}".sub(%r{/$},'')),
|
48
|
+
:leaf => child.leaf?,
|
49
|
+
:id => (child.leaf? ? '/'+child.key : "/#{child.prefix}".sub(%r{/$},'')),
|
50
|
+
:children => []
|
51
|
+
}
|
52
|
+
child_hash = add_children(child_hash, child) unless child.leaf?
|
53
|
+
parent_hash[:children] << child_hash
|
62
54
|
end
|
63
55
|
|
64
|
-
|
56
|
+
parent_hash
|
57
|
+
end
|
58
|
+
|
59
|
+
def build_node_tree(reload=false)
|
60
|
+
node_tree = Rails.cache.read(cache_key)
|
61
|
+
if !reload and !node_tree.nil?
|
62
|
+
#Rails.logger.info "@@@@@@@@@@@@@@ USING CACHED node_tree: #{node_tree.inspect}"
|
63
|
+
return node_tree
|
64
|
+
end
|
65
|
+
|
66
|
+
tree_data = {:text => @@s3_bucket.name, :leaf => false, :id => '', :children => []}
|
67
|
+
tree_data = [add_children(tree_data, @@s3_bucket.as_tree)]
|
68
|
+
cache_node_tree(tree_data)
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
72
|
def buckets
|
69
|
-
|
73
|
+
@@s3_connection.buckets
|
70
74
|
end
|
71
75
|
|
72
76
|
def bucket=(name)
|
73
|
-
@@s3_bucket =
|
77
|
+
@@s3_bucket = @@s3_connection.buckets[name.to_sym]
|
74
78
|
end
|
75
79
|
|
76
80
|
def bucket
|
@@ -81,29 +85,54 @@ module ErpTechSvcs
|
|
81
85
|
''
|
82
86
|
end
|
83
87
|
|
88
|
+
def cache_key
|
89
|
+
ErpTechSvcs::FileSupport::S3Manager.cache_key
|
90
|
+
end
|
91
|
+
|
92
|
+
def clear_cache(path)
|
93
|
+
path = path.sub(%r{^/},'')
|
94
|
+
#Rails.logger.info "deleting cache with key: #{path}"
|
95
|
+
Rails.cache.delete(path) # delete template from cache
|
96
|
+
Rails.cache.delete(cache_key) # delete node tree from cache
|
97
|
+
end
|
98
|
+
|
84
99
|
def update_file(path, content)
|
85
|
-
|
100
|
+
path = path.sub(%r{^/},'')
|
101
|
+
bucket.objects[path].write(content)
|
102
|
+
clear_cache(path)
|
86
103
|
end
|
87
104
|
|
88
|
-
def create_file(path, name,
|
89
|
-
|
105
|
+
def create_file(path, name, content)
|
106
|
+
path = path.sub(%r{^/},'')
|
107
|
+
bucket.objects[File.join(path, name)].write(content)
|
108
|
+
clear_cache(path)
|
90
109
|
end
|
91
110
|
|
92
111
|
def create_folder(path, name)
|
93
|
-
|
112
|
+
path = path.sub(%r{^/},'')
|
113
|
+
folder = File.join(path, name) + "/"
|
114
|
+
bucket.objects[folder].write('')
|
115
|
+
clear_cache(path)
|
94
116
|
end
|
95
117
|
|
96
118
|
def save_move(path, new_parent_path)
|
97
|
-
result =
|
119
|
+
result = false
|
98
120
|
unless self.exists? path
|
99
|
-
message =
|
121
|
+
message = FILE_DOES_NOT_EXIST
|
100
122
|
else
|
123
|
+
file = FileAsset.where(:name => ::File.basename(path)).where(:directory => ::File.dirname(path)).first
|
124
|
+
acl = (file.has_capabilities? ? :private : :public_read) unless file.nil?
|
125
|
+
options = (file.nil? ? {} : {:acl => acl})
|
101
126
|
name = File.basename(path)
|
102
|
-
|
103
|
-
|
127
|
+
path = path.sub(%r{^/},'')
|
128
|
+
new_path = File.join(new_parent_path,name).sub(%r{^/},'')
|
129
|
+
old_object = bucket.objects[path]
|
130
|
+
if new_object = old_object.move_to(new_path, options)
|
131
|
+
message = "#{name} was moved to #{new_path} successfully"
|
104
132
|
result = true
|
133
|
+
clear_cache(path)
|
105
134
|
else
|
106
|
-
message = "
|
135
|
+
message = "Error moving file #{path}"
|
107
136
|
end
|
108
137
|
end
|
109
138
|
|
@@ -111,50 +140,67 @@ module ErpTechSvcs
|
|
111
140
|
end
|
112
141
|
|
113
142
|
def rename_file(path, name)
|
114
|
-
result =
|
143
|
+
result = false
|
115
144
|
old_name = File.basename(path)
|
116
145
|
path_pieces = path.split('/')
|
117
146
|
path_pieces.delete(path_pieces.last)
|
118
147
|
path_pieces.push(name)
|
119
148
|
new_path = path_pieces.join('/')
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
149
|
+
begin
|
150
|
+
file = FileAsset.where(:name => ::File.basename(path)).where(:directory => ::File.dirname(path)).first
|
151
|
+
acl = (file.has_capabilities? ? :private : :public_read) unless file.nil?
|
152
|
+
options = (file.nil? ? {} : {:acl => acl})
|
153
|
+
path = path.sub(%r{^/},'')
|
154
|
+
new_path = new_path.sub(%r{^/},'')
|
155
|
+
# Rails.logger.info "renaming from #{path} to #{new_path}"
|
156
|
+
old_object = bucket.objects[path]
|
157
|
+
if new_object = old_object.move_to(new_path, options)
|
158
|
+
message = "#{old_name} was renamed to #{name} successfully"
|
159
|
+
result = true
|
160
|
+
clear_cache(path)
|
161
|
+
else
|
162
|
+
message = "Error renaming #{old_name}"
|
163
|
+
end
|
164
|
+
rescue AWS::S3::Errors::NoSuchKey=>ex
|
165
|
+
message = FILE_FOLDER_DOES_NOT_EXIST
|
125
166
|
end
|
126
167
|
|
127
168
|
return result, message
|
128
169
|
end
|
129
170
|
|
171
|
+
def set_permissions(path, canned_acl=:public_read)
|
172
|
+
path = path.sub(%r{^/},'')
|
173
|
+
bucket.objects[path].acl = canned_acl
|
174
|
+
end
|
175
|
+
|
130
176
|
def delete_file(path, options={})
|
131
|
-
|
177
|
+
path = path.sub(%r{^/},'')
|
178
|
+
result = false
|
132
179
|
message = nil
|
133
180
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
node[:children].each do |child|
|
144
|
-
delete_file(child[:id], options)
|
181
|
+
begin
|
182
|
+
is_directory = !bucket.objects[path].exists?
|
183
|
+
if options[:force] or bucket.as_tree(:prefix => path).children.count == 0
|
184
|
+
bucket.objects.with_prefix(path).delete_all
|
185
|
+
message = "File was deleted successfully"
|
186
|
+
result = true
|
187
|
+
clear_cache(path)
|
188
|
+
else
|
189
|
+
message = FOLDER_IS_NOT_EMPTY
|
145
190
|
end
|
146
|
-
|
147
|
-
|
148
|
-
|
191
|
+
rescue Exception => e
|
192
|
+
result = false
|
193
|
+
message = e
|
194
|
+
end
|
149
195
|
|
150
|
-
return result, message, is_directory
|
196
|
+
return result, message, is_directory
|
151
197
|
end
|
152
198
|
|
153
199
|
def exists?(path)
|
154
200
|
begin
|
155
|
-
path = path
|
156
|
-
!
|
157
|
-
rescue AWS::S3::NoSuchKey
|
201
|
+
path = path.sub(%r{^/},'')
|
202
|
+
!bucket.objects[path].nil?
|
203
|
+
rescue AWS::S3::Errors::NoSuchKey
|
158
204
|
return false
|
159
205
|
end
|
160
206
|
end
|
@@ -163,20 +209,21 @@ module ErpTechSvcs
|
|
163
209
|
contents = nil
|
164
210
|
message = nil
|
165
211
|
|
166
|
-
path = path
|
212
|
+
path = path.sub(%r{^/},'')
|
167
213
|
begin
|
168
|
-
object =
|
169
|
-
rescue AWS::S3::NoSuchKey => error
|
170
|
-
message =
|
214
|
+
object = bucket.objects[path]
|
215
|
+
rescue AWS::S3::Errors::NoSuchKey => error
|
216
|
+
message = FILE_DOES_NOT_EXIST
|
171
217
|
end
|
172
218
|
|
173
|
-
contents = object.
|
219
|
+
contents = object.read if message.nil?
|
174
220
|
|
175
221
|
return contents, message
|
176
222
|
end
|
177
223
|
|
178
224
|
def build_tree(starting_path, options={})
|
179
|
-
|
225
|
+
starting_path = "/" + starting_path unless starting_path.first == "/"
|
226
|
+
#ErpTechSvcs::FileSupport::S3Manager.reload
|
180
227
|
node_tree = find_node(starting_path, options)
|
181
228
|
node_tree.nil? ? [] : node_tree
|
182
229
|
end
|
@@ -185,7 +232,7 @@ module ErpTechSvcs
|
|
185
232
|
parent = if options[:file_asset_holder]
|
186
233
|
super
|
187
234
|
else
|
188
|
-
parent =
|
235
|
+
parent = ErpTechSvcs::FileSupport::S3Manager.build_node_tree(false).first
|
189
236
|
unless path.nil?
|
190
237
|
path_pieces = path.split('/')
|
191
238
|
path_pieces.each do |path_piece|
|
@@ -197,7 +244,7 @@ module ErpTechSvcs
|
|
197
244
|
end
|
198
245
|
end
|
199
246
|
end
|
200
|
-
parent = nil
|
247
|
+
parent = nil unless parent[:id] == path
|
201
248
|
end
|
202
249
|
|
203
250
|
parent
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'erp_tech_svcs/file_support/base'
|
2
2
|
require 'erp_tech_svcs/file_support/manager'
|
3
|
+
require 'erp_tech_svcs/file_support/paperclip_patch'
|
3
4
|
require 'erp_tech_svcs/file_support/file_system_manager'
|
4
5
|
require 'erp_tech_svcs/file_support/s3_manager'
|
5
|
-
require 'erp_tech_svcs/file_support/aws_s3_patch'
|
6
|
-
require 'erp_tech_svcs/file_support/paperclip_patch'
|
7
6
|
require 'erp_tech_svcs/file_support/file_manipulator'
|
8
7
|
|
9
8
|
#path resolvers
|
10
|
-
require 'erp_tech_svcs/file_support/railties/s3_resolver'
|
9
|
+
require 'erp_tech_svcs/file_support/railties/s3_resolver'
|
10
|
+
|
11
|
+
#paperclip
|
12
|
+
require 'erp_tech_svcs/file_support/paperclip_patch'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ErpTechSvcs
|
2
|
+
module SmsWrapper
|
3
|
+
class Clickatell
|
4
|
+
attr_accessor :api
|
5
|
+
|
6
|
+
def initialize()
|
7
|
+
configuration = YAML::load_file(File.join(Rails.root,'config','clickatell.yml'))[Rails.env]
|
8
|
+
@api = ::Clickatell::API.authenticate(configuration['api_id'].to_s, configuration['username'], configuration['password'])
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_message(phone_number, message, options={})
|
12
|
+
phone_number = phone_number.insert(0,'1') if phone_number.length == 10
|
13
|
+
|
14
|
+
result = nil
|
15
|
+
begin
|
16
|
+
result = @api.send_message(phone_number, message, options)
|
17
|
+
rescue ::Clickatell::API::Error=>ex
|
18
|
+
Rails.logger.error("Clickatell Error:#{ex.message}")
|
19
|
+
end
|
20
|
+
result
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'erp_tech_svcs/sms_wrapper/clickatell'
|
@@ -3,14 +3,20 @@ module ErpTechSvcs
|
|
3
3
|
module CompassAccessNegotiator
|
4
4
|
|
5
5
|
def has_capability?(model, capability_type, resource)
|
6
|
-
|
6
|
+
result = true
|
7
|
+
result = model.user_has_capability?(capability_type.to_s, resource, self) if model.has_capabilities?
|
8
|
+
result
|
7
9
|
end
|
8
10
|
|
9
11
|
def with_capability(model, capability_type, resource, &block)
|
10
|
-
if model.
|
11
|
-
|
12
|
+
if model.has_capabilities?
|
13
|
+
if model.user_has_capability?(capability_type.to_s, resource, self)
|
14
|
+
yield
|
15
|
+
else
|
16
|
+
raise ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability
|
17
|
+
end
|
12
18
|
else
|
13
|
-
|
19
|
+
yield
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
@@ -33,9 +39,9 @@ module ErpTechSvcs
|
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
|
-
|
42
|
+
class CapabilityTypeDoesNotExist < StandardError
|
37
43
|
def to_s
|
38
|
-
"Capability type not exist."
|
44
|
+
"Capability type does not exist."
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
@@ -6,7 +6,7 @@ module ErpTechSvcs
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def to_label
|
9
|
-
|
9
|
+
description
|
10
10
|
end
|
11
11
|
|
12
12
|
def leaf
|
@@ -18,6 +18,18 @@ module ErpTechSvcs
|
|
18
18
|
end
|
19
19
|
alias_method_chain :to_json, :leaf
|
20
20
|
|
21
|
+
def to_tree_hash(options={})
|
22
|
+
additional_values = options[:additional_values] || {}
|
23
|
+
options[:additional_values] = additional_values.merge({
|
24
|
+
:text => self.to_label,
|
25
|
+
:leaf => self.leaf,
|
26
|
+
:children => self.children.collect{|child| child.to_tree_hash(options)}
|
27
|
+
})
|
28
|
+
tree_hash = self.to_hash(options)
|
29
|
+
tree_hash[:iconCls] = options[:icon_cls] if options[:icon_cls]
|
30
|
+
tree_hash
|
31
|
+
end
|
32
|
+
|
21
33
|
module ClassMethods
|
22
34
|
def find_roots
|
23
35
|
where("parent_id = nil")
|
@@ -27,6 +39,7 @@ module ErpTechSvcs
|
|
27
39
|
parent_id.to_i == 0 ? self.roots : find(parent_id).children
|
28
40
|
end
|
29
41
|
end
|
42
|
+
|
30
43
|
end
|
31
44
|
end
|
32
45
|
end
|
data/lib/erp_tech_svcs.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
-
#
|
1
|
+
#compass_ae libraries
|
2
2
|
require 'erp_base_erp_svcs'
|
3
3
|
|
4
4
|
require 'paperclip'
|
5
5
|
require 'delayed_job'
|
6
6
|
require 'sorcery'
|
7
7
|
require 'pdfkit'
|
8
|
+
require "erp_tech_svcs/version"
|
8
9
|
require "erp_tech_svcs/utils/compass_logger"
|
9
10
|
require "erp_tech_svcs/utils/default_nested_set_methods"
|
10
11
|
require "erp_tech_svcs/utils/compass_access_negotiator"
|
11
12
|
require "erp_tech_svcs/extensions"
|
13
|
+
require 'aws'
|
12
14
|
require 'erp_tech_svcs/file_support'
|
15
|
+
require 'erp_tech_svcs/sms_wrapper'
|
13
16
|
require "erp_tech_svcs/config"
|
14
|
-
#require "erp_tech_svcs/application_installer"
|
15
17
|
require "erp_tech_svcs/engine"
|
16
18
|
require 'erp_tech_svcs/sessions/delete_expired_sessions_job'
|
17
19
|
require 'erp_tech_svcs/sessions/delete_expired_sessions_service'
|
@@ -23,7 +23,7 @@ namespace :erp_tech_svcs do
|
|
23
23
|
#sync themes
|
24
24
|
puts "Syncing Themes..."
|
25
25
|
Theme.all.each do |theme|
|
26
|
-
file_support.sync(File.join(file_support.root,
|
26
|
+
file_support.sync(File.join(file_support.root, theme.url), theme)
|
27
27
|
end
|
28
28
|
puts "Complete"
|
29
29
|
end
|
File without changes
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ErpTechSvcs::FileSupport::FileSystemManager do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@file_support = ErpTechSvcs::FileSupport::Base.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should have a root of Rails.root" do
|
10
|
+
@file_support.root.should eq Rails.root.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be able to build a hash tree from a path" do
|
14
|
+
path_tree_hash = @file_support.build_tree(File.join(Rails.root,'lib'))
|
15
|
+
|
16
|
+
path_tree_hash[:text].should eq 'lib'
|
17
|
+
path_tree_hash[:id].should eq File.join(Rails.root,'lib').to_s
|
18
|
+
path_tree_hash[:leaf].should eq false
|
19
|
+
path_tree_hash[:children].count.should eq 1
|
20
|
+
|
21
|
+
child_path_hash = path_tree_hash[:children].first
|
22
|
+
child_path_hash[:text].should eq 'assets'
|
23
|
+
child_path_hash[:id].should eq File.join(Rails.root,'lib', 'assets').to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow you to CRUD file / folder" do
|
27
|
+
@file_support.create_file(Rails.root.to_s, 'test_create_file.txt', 'test')
|
28
|
+
|
29
|
+
File.exists?(File.join(Rails.root.to_s, 'test_create_file.txt')).should eq true
|
30
|
+
contents, message = @file_support.get_contents(File.join(Rails.root,'test_create_file.txt'))
|
31
|
+
contents.should eq 'test'
|
32
|
+
|
33
|
+
@file_support.update_file(File.join(Rails.root,'test_create_file.txt'), 'test2')
|
34
|
+
contents, message = @file_support.get_contents(File.join(Rails.root,'test_create_file.txt'))
|
35
|
+
contents.should eq 'test2'
|
36
|
+
|
37
|
+
result, message, is_directory = @file_support.delete_file(File.join(Rails.root,'test_create_file.txt'))
|
38
|
+
result.should eq true
|
39
|
+
is_directory.should eq false
|
40
|
+
File.exists?(File.join(Rails.root.to_s, 'test_create_file.txt')).should eq false
|
41
|
+
|
42
|
+
@file_support.create_folder(Rails.root.to_s, 'test_folder')
|
43
|
+
File.exists?(File.join(Rails.root,'test_folder')).should eq true
|
44
|
+
|
45
|
+
result, message, is_directory = @file_support.delete_file(File.join(Rails.root,'test_folder'))
|
46
|
+
result.should eq true
|
47
|
+
is_directory.should eq true
|
48
|
+
File.exists?(File.join(Rails.root.to_s, 'test_folder')).should eq false
|
49
|
+
|
50
|
+
contents, message = @file_support.get_contents(File.join(Rails.root,'is_not_real.txt'))
|
51
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FILE_DOES_NOT_EXIST
|
52
|
+
|
53
|
+
result, message, is_directory = @file_support.delete_file(File.join(Rails.root,'not_real'))
|
54
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FILE_FOLDER_DOES_NOT_EXIST
|
55
|
+
|
56
|
+
result, message, is_directory = @file_support.delete_file(File.join(Rails.root,'db'))
|
57
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FOLDER_IS_NOT_EMPTY
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should allow you to rename a file" do
|
61
|
+
@file_support.create_file(Rails.root.to_s, 'test_create_file.txt', 'test')
|
62
|
+
File.exists?(File.join(Rails.root.to_s, 'test_rename.txt')).should eq false
|
63
|
+
File.exists?(File.join(Rails.root.to_s, 'test_create_file.txt')).should eq true
|
64
|
+
|
65
|
+
result, message = @file_support.rename_file(File.join(Rails.root.to_s, 'test_create_file.txt'), 'test_rename.txt')
|
66
|
+
result.should eq true
|
67
|
+
File.exists?(File.join(Rails.root.to_s, 'test_create_file.txt')).should eq false
|
68
|
+
File.exists?(File.join(Rails.root.to_s, 'test_rename.txt')).should eq true
|
69
|
+
|
70
|
+
result, message = @file_support.rename_file(File.join(Rails.root.to_s, 'not_real.txt'), 'test_rename.txt')
|
71
|
+
result.should eq false
|
72
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FILE_DOES_NOT_EXIST
|
73
|
+
end
|
74
|
+
|
75
|
+
after(:all) do
|
76
|
+
FileUtils.rm_rf(File.join(Rails.root.to_s, 'test_create_file.txt')) if File.exists?(File.join(Rails.root.to_s, 'test_create_file.txt'))
|
77
|
+
FileUtils.rm_rf(File.join(Rails.root.to_s, 'test_rename.txt')) if File.exists?(File.join(Rails.root.to_s, 'test_rename.txt'))
|
78
|
+
FileUtils.rm_rf(File.join(Rails.root.to_s, 'test_folder')) if File.exists?(File.join(Rails.root.to_s, 'test_folder'))
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ErpTechSvcs::FileSupport::S3Manager do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
ErpTechSvcs::FileSupport::S3Manager.setup_connection
|
7
|
+
@file_support = ErpTechSvcs::FileSupport::Base.new(:storage => :s3)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should have a root of nothing" do
|
11
|
+
@file_support.root.should eq ''
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should allow you to CRUD file / folder" do
|
15
|
+
contents, message = @file_support.get_contents('not_real')
|
16
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FILE_DOES_NOT_EXIST
|
17
|
+
|
18
|
+
@file_support.create_file('', 'test_create_file.txt', 'test')
|
19
|
+
@file_support.exists?('test_create_file.txt').should eq true
|
20
|
+
contents, message = @file_support.get_contents('test_create_file.txt')
|
21
|
+
contents.should eq 'test'
|
22
|
+
|
23
|
+
@file_support.update_file('test_create_file.txt', 'test2')
|
24
|
+
contents, message = @file_support.get_contents('test_create_file.txt')
|
25
|
+
contents.should eq 'test2'
|
26
|
+
|
27
|
+
result, message, is_directory = @file_support.delete_file('test_create_file.txt')
|
28
|
+
result.should eq true
|
29
|
+
is_directory.should eq false
|
30
|
+
@file_support.exists?('test_create_file.txt').should eq false
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be able to build a hash tree from a path" do
|
34
|
+
@file_support.create_folder('', 'test_folder')
|
35
|
+
@file_support.create_file('test_folder', 'test_create_file.txt', 'test')
|
36
|
+
|
37
|
+
path_tree_hash = @file_support.build_tree('test_folder')
|
38
|
+
|
39
|
+
path_tree_hash[:text].should eq 'test_folder'
|
40
|
+
path_tree_hash[:id].should eq '/test_folder'
|
41
|
+
path_tree_hash[:leaf].should eq false
|
42
|
+
path_tree_hash[:children].count.should eq 1
|
43
|
+
|
44
|
+
child_path_hash = path_tree_hash[:children].first
|
45
|
+
child_path_hash[:text].should eq 'test_create_file.txt'
|
46
|
+
child_path_hash[:id].should eq File.join('/test_folder', 'test_create_file.txt').to_s
|
47
|
+
|
48
|
+
result, message, is_directory = @file_support.delete_file('test_folder')
|
49
|
+
result.should eq false
|
50
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FOLDER_IS_NOT_EMPTY
|
51
|
+
result, message, is_directory = @file_support.delete_file(File.join('test_folder','test_create_file.txt'))
|
52
|
+
result.should eq true
|
53
|
+
is_directory.should eq false
|
54
|
+
result, message, is_directory = @file_support.delete_file('test_folder')
|
55
|
+
result.should eq true
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should allow you to rename a file" do
|
59
|
+
@file_support.create_file('', 'test_create_file.txt', 'test')
|
60
|
+
@file_support.exists?('test_create_file.txt').should eq true
|
61
|
+
|
62
|
+
result, message = @file_support.rename_file('test_create_file.txt', 'test_rename.txt')
|
63
|
+
result.should eq true
|
64
|
+
@file_support.exists?('test_create_file.txt').should eq false
|
65
|
+
@file_support.exists?('test_rename.txt').should eq true
|
66
|
+
|
67
|
+
result, message, is_directory = @file_support.delete_file('test_rename.txt')
|
68
|
+
@file_support.exists?('test_rename.txt').should eq false
|
69
|
+
|
70
|
+
result, message = @file_support.rename_file('not_real.txt', 'test_rename.txt')
|
71
|
+
result.should eq false
|
72
|
+
message.should eq ErpTechSvcs::FileSupport::Manager::FILE_FOLDER_DOES_NOT_EXIST
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should allow you to move a file" do
|
76
|
+
@file_support.create_file('', 'test_create_file.txt', 'test')
|
77
|
+
@file_support.exists?('test_create_file.txt').should eq true
|
78
|
+
|
79
|
+
@file_support.create_folder('', 'test_folder')
|
80
|
+
result, message = @file_support.save_move('test_create_file.txt', 'test_folder')
|
81
|
+
result.should eq true
|
82
|
+
@file_support.exists?(File.join('test_folder','test_create_file.txt')).should eq true
|
83
|
+
|
84
|
+
result, message, is_directory = @file_support.delete_file(File.join('test_folder','test_create_file.txt'))
|
85
|
+
result.should eq true
|
86
|
+
is_directory.should eq false
|
87
|
+
result, message, is_directory = @file_support.delete_file('test_folder')
|
88
|
+
result.should eq true
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|