erp_tech_svcs 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|