go_import 3.0.9 → 3.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/bin/go-import CHANGED
@@ -56,6 +56,11 @@ class GoImportCommandLine < Thor
56
56
  puts "WARNING: FILES_FOLDER should be set unless you are only importing files with absolute paths."
57
57
  end
58
58
 
59
+ if model.documents.files.length > 0 && (!defined?(FILES_FOLDER_AT_CUSTOMER) || FILES_FOLDER_AT_CUSTOMER.empty?())
60
+ puts "WARNING: It looks like you are importing files but FILES_FOLDER_AT_CUSTOMER has not been set in your converter.rb"
61
+ puts "WARNING: This means that files with an absolute path will be imported with their original path. Set this constant if you want to get files from the FILES_FOLDER directory."
62
+ end
63
+
59
64
  is_ok, error_msg = can_be_serialized?(model)
60
65
  if is_ok
61
66
  go_data_zip = options.output.nil? == true ? "go.zip" : options.output
@@ -102,43 +102,88 @@ module GoImport
102
102
  end
103
103
  end
104
104
 
105
- def validate
106
- error = String.new
107
-
105
+ # This is the path to where the file should be accessed
106
+ # from within the project.
107
+ def path_for_project
108
108
  if @path.nil? || @path.empty?
109
- error = "Path is required for file.\n"
109
+ return ""
110
+ end
111
+
112
+ # Get the folder where files should be accessed from
113
+ # during the import. If not defined in converter.rb use
114
+ # the current directory
115
+ if defined?(FILES_FOLDER) && !FILES_FOLDER.empty?()
116
+ root_folder = FILES_FOLDER
117
+ else
118
+ root_folder = Dir.pwd
119
+ end
120
+
121
+ if has_relative_path?()
122
+ # since this file is stored with a relative file name
123
+ # we should get it from the root folder
124
+ path_for_project = ::File.expand_path(@path, root_folder)
110
125
  else
111
- if has_relative_path?()
112
- if defined?(FILES_FOLDER) && !FILES_FOLDER.empty?()
113
- root_folder = FILES_FOLDER
114
- else
115
- root_folder = Dir.pwd
116
- end
117
-
118
- if !::File.exists?("#{root_folder}/#{@path}")
119
- error = "#{error}Can't find file '#{root_folder}/#{@path}'.\n"
120
- end
126
+ # the file is stored with an absolute path, if the
127
+ # file cant be access using that path we must change
128
+ # it to a path that is accessible from this computer.
129
+ # The FILES_FOLDER_AT_CUSTOMER constant states what
130
+ # part of the path that should be replaced with the
131
+ # root folder.
132
+
133
+ # We assume that the original system used ONE location
134
+ # for all its files. If not, we should change
135
+ # FILES_FOLDER_AT_CUSTOMER to a list of folders.
136
+ if defined?(FILES_FOLDER_AT_CUSTOMER) && !FILES_FOLDER_AT_CUSTOMER.empty?()
137
+ files_folder_at_customer = FILES_FOLDER_AT_CUSTOMER
121
138
  else
122
- if !::File.exists?(@path)
123
- error = "#{error}Can't find file '#{@path}'.\n"
124
- end
139
+ files_folder_at_customer = ""
125
140
  end
141
+
142
+ if files_folder_at_customer.empty?
143
+ path_for_project = @path
144
+ else
145
+ path_for_project = ::File.expand_path(@path.downcase.sub(files_folder_at_customer.downcase, root_folder))
146
+ end
147
+ end
148
+
149
+ return path_for_project
150
+ end
151
+
152
+ def add_to_zip_file(zip_file)
153
+ if has_relative_path?
154
+ @location_in_zip_file = "files/#{@path}"
155
+ else
156
+ @location_in_zip_file = "files/__abs/#{SecureRandom.uuid}/#{::File.basename(@path).to_s}"
126
157
  end
127
158
 
159
+ zip_file.add(@location_in_zip_file, path_for_project)
160
+ end
161
+
162
+ def validate
163
+ error = String.new
164
+
128
165
  if @name.nil? || @name.empty?
129
166
  error = "#{error}A file must have a name.\n"
130
167
  end
131
168
 
169
+ if @path.nil? || @path.empty?
170
+ error = "Path is required for file.\n"
171
+ else
172
+ if !::File.exists?(path_for_project())
173
+ error = "#{error}Can't find file with name '#{@name}' and original path '#{@path}' at '#{path_for_project()}'."
174
+ end
175
+ end
176
+
132
177
  if @created_by_reference.nil?
133
- error = "#{error}Created_by is required for file.\n"
178
+ error = "#{error}Created_by is required for file (#{@name}).\n"
134
179
  end
135
180
 
136
181
  if @organization_reference.nil? && @deal_reference.nil?
137
- error = "#{error}A file must have either an organization or a deal.\n"
182
+ error = "#{error}The file (#{@name}) must have either an organization or a deal.\n"
138
183
  end
139
184
 
140
185
  if !@organization_reference.nil? && !@deal_reference.nil?
141
- error = "#{error}A file can't be attached to both an organization and a deal."
186
+ error = "#{error}The file (#{@name}) can't be attached to both an organization and a deal."
142
187
  end
143
188
 
144
189
  return error
@@ -399,18 +399,7 @@ module GoImport
399
399
  # we dont need to check that the file exists since
400
400
  # we assume that rootmodel.validate has been
401
401
  # called before save_to_zip.
402
- if file.has_relative_path?
403
- file.location_in_zip_file = "files/#{file.path}"
404
- zip_file.add(file.location_in_zip_file, "#{root_folder}/#{file.path}")
405
- else
406
- file.location_in_zip_file = "files/__abs/#{SecureRandom.uuid}/#{::File.basename(file.path).to_s}"
407
- if files_folder_at_customer.empty?
408
- zip_file.add(file.location_in_zip_file, file.path)
409
- else
410
- zip_file.add(file.location_in_zip_file,
411
- file.path.downcase.sub(files_folder_at_customer.downcase, root_folder))
412
- end
413
- end
402
+ file.add_to_zip_file(zip_file)
414
403
  end
415
404
 
416
405
  # 2) go.xml - with all data from source
@@ -190,6 +190,8 @@ def from_project_document_to_organization_document(row, includes, rootmodel)
190
190
 
191
191
  organization_id = includes[row['idProject']]
192
192
  file.organization = rootmodel.find_organization_by_integration_id(organization_id)
193
+
194
+ return file
193
195
  end
194
196
 
195
197
  def init_deal(row, rootmodel, includes)
data/spec/file_spec.rb CHANGED
@@ -27,6 +27,18 @@ describe "File" do
27
27
  file.validate.should eq ""
28
28
  end
29
29
 
30
+ # it "fe" do
31
+ # # given
32
+ # FILES_FOLDER = "./files"
33
+ # FILES_FOLDER_AT_CUSTOMER = ""
34
+ # file.name = "Offert"
35
+ # file.path = "spec/sample_data/offert.docx"
36
+
37
+ # # when, then
38
+
39
+ # end
40
+
41
+
30
42
  it "is not valid when it has path and deal" do
31
43
  # must have a created_by
32
44
  # given
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_import
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.9
4
+ version: 3.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-10-08 00:00:00.000000000 Z
15
+ date: 2014-10-09 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: iso_country_codes