struggle 2.2.0 → 2.2.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef72bc9812621c23ccbe70632bef93a7fc9a71dd
4
- data.tar.gz: e06e3ce96f749c6541be4e82a6f8327b997d2f2d
3
+ metadata.gz: 0de663c31ad25e4b730c910a5bb3a1d75fe00ac5
4
+ data.tar.gz: 1e85ed90acdac7bb95e1ed61eef1607999a24a3d
5
5
  SHA512:
6
- metadata.gz: c277df83f080cca01a0c507c4bb521ac5d31fbf146786e838fc028b495521f78a16f1e44bb6dee5e2d9604c6f342dc8c465ad86da9a9018a6786dcff93878a94
7
- data.tar.gz: ea97ced70716a7a72c0178d3ec96551765f20fb42cb3c59b717f0a7471de4c3681ecd5e8a29f48eb391d69f4641714c120cc076e09cf8a421bf53e31b17e8b7c
6
+ metadata.gz: 4611e93533123a3025394be48eaf1d07e29478f8b97cb92f70e2efc3b4355ae73a38560c1722a3bc9ae0f117c7eabf7ab7d66ead4b790a02da140c3702dba00a
7
+ data.tar.gz: d5869ca27cd5feefad64df206681d0078a8d37b7e034e24ec8fccce7631c5577749aa3aecf525d8955a31481345ae369fb83a98123484d92ba39d16e419afefd
@@ -0,0 +1,7 @@
1
+ module Struggle
2
+ module DecimalExtend
3
+ def clean
4
+ self.to_s.gsub(/0+?$/,"").gsub(/[.]$/,"")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,183 @@
1
+ module Struggle
2
+ class FtpTool
3
+ #实例化
4
+ def initialize(host, user, password, port = 21, mode = true)
5
+ require "net/ftp"
6
+ @current_ftp = Net::FTP.new
7
+ @current_ftp.connect(host, port)
8
+ @current_ftp.login(user, password)
9
+ @current_ftp.passive = mode
10
+ end
11
+
12
+ # 获取指定格式的文件名称列表
13
+ # 例如: source = "test/*.txt"
14
+ # 返回: [source/file_name.txt]
15
+ def fetch_remote_filenames(source)
16
+ return [] if source.blank?
17
+ log_info("source is " + source)
18
+ filenames = @current_ftp.nlst(source)
19
+ filenames
20
+ end
21
+
22
+ # 获取服务器上确切名称的文件
23
+ # 例如: get("test/test.txt")
24
+ # 文件将被保存到本地 tmp/test/test.txt
25
+ def get(origin_file)
26
+ local_file = local_file(origin_file)
27
+ local_file.gsub("\\", "\\\\") #此处注意是window下执行, 在linux下需要注意改成/
28
+ log_info("Ftp Get: #{origin_file} -> #{local_file}")
29
+ begin
30
+ @current_ftp.getbinaryfile(origin_file, local_file+".tmp")
31
+ rescue
32
+ delete_local_file(local_file+".tmp")
33
+ end
34
+ rename_local_file(local_file+".tmp", local_file) if File.exist?(local_file+".tmp")
35
+ end
36
+
37
+
38
+ # 上传文件到指定的路径
39
+ # 例如: put("tmp\\test\\test.txt", "/test/")
40
+ #
41
+ def put(origin_file, remote_path)
42
+ return nil if not File.exist?(origin_file)
43
+ _file_name = File.basename(origin_file)
44
+ _root = @current_ftp.getdir
45
+ begin
46
+ @current_ftp.chdir(remote_path)
47
+ rescue
48
+ @current_ftp.mkdir(remote_path)
49
+ @current_ftp.chdir(remote_path)
50
+ end
51
+ log_info("Ftp put: #{origin_file} -> #{remote_path}")
52
+ begin
53
+ @current_ftp.putbinaryfile(origin_file, remote_path + _file_name + ".tmp")
54
+ rescue
55
+ delete(remote_path + _file_name + ".tmp")
56
+ end
57
+ @current_ftp.chdir(_root)
58
+ rename(remote_path + _file_name + ".tmp", remote_path + _file_name)
59
+ end
60
+
61
+ # 关闭ftp
62
+ def close
63
+ @current_ftp.close if @current_ftp
64
+ end
65
+
66
+ # 服务器copy文件
67
+ def copy(origin_file, file_path)
68
+ local_file = local_file(origin_file)
69
+ _file_name = File.basename(origin_file)
70
+ begin
71
+ #1. 到本地
72
+ log_info("FTP get file to:" + local_file+".tmp")
73
+ @current_ftp.getbinaryfile(origin_file, local_file+".tmp")
74
+ return nil if not File.exist?(local_file+".tmp")
75
+ #2. 到服务器
76
+ log_info("FTP put file to :" + file_path + _file_name + ".tmp")
77
+ @current_ftp.putbinaryfile(local_file+".tmp", file_path + _file_name + ".tmp")
78
+ #3. 改名字
79
+ rename(file_path + _file_name + ".tmp", file_path + _file_name)
80
+ #5. 删除本地
81
+ delete_local_file(local_file + ".tmp")
82
+ rescue => e
83
+ log_info(e)
84
+ #4. 删除服务器上临时文件
85
+ delete(file_path + origin_file + ".tmp")
86
+ #5. 删除本地
87
+ delete_local_file(local_file + ".tmp")
88
+ end
89
+ end
90
+
91
+ # 服务器上移动文件
92
+ def move(origin_file, file_path)
93
+ _file_name = File.basename(origin_file)
94
+ begin
95
+ copy(origin_file, file_path)
96
+ # 删除服务器上源文件
97
+ delete(origin_file)
98
+ rescue => e
99
+ log_info(e)
100
+ # 删除临时文件,如果存在
101
+ delete(file_path + _file_name + ".tmp")
102
+ # 删除服务器上目标文件, 如果存在
103
+ delete(file_path + _file_name)
104
+ end
105
+ end
106
+
107
+ # 重命名服务器文件
108
+ def rename(origin_file, file)
109
+ if not @current_ftp.list(origin_file).blank?
110
+ log_info("FTP rename #{origin_file} to #{file}")
111
+ @current_ftp.rename(origin_file, file)
112
+ end
113
+ end
114
+
115
+ # 删除服务器上的文件
116
+ def delete(origin_file)
117
+ if not @current_ftp.list(origin_file).blank?
118
+ log_info("FTP delete #{origin_file}")
119
+ @current_ftp.delete(origin_file)
120
+ end
121
+ end
122
+
123
+ # ftp 是否关闭
124
+ def closed?
125
+ @current_ftp.closed?
126
+ end
127
+
128
+ class << self
129
+ # 文件编码转换
130
+ def convert(src_file, dest_file, from_encode, to_encode)
131
+ log_info("Convert #{src_file} to #{dest_file}")
132
+ cd = Iconv.new(to_encode, from_encode)
133
+ File.open(dest_file, "w") do |out|
134
+ File.open(src_file) do |in_stream|
135
+ in_stream.each_line do |line|
136
+ begin
137
+ new_line = cd.iconv(line)
138
+ out.write(new_line)
139
+ rescue => e
140
+ log_info "convert line error : #{line}"
141
+ next
142
+ end
143
+ end
144
+ end
145
+ end
146
+ cd.close
147
+ dest_file
148
+ end
149
+ end
150
+
151
+ protected
152
+
153
+ #本地路径
154
+ def local_file(file)
155
+ local = File.join("tmp/", file)
156
+ FileUtils.makedirs(File.dirname(local))
157
+ local
158
+ end
159
+
160
+ # 删除本地文件
161
+ def delete_local_file(file)
162
+ if File.exist?(file)
163
+ log_info("delete local file : " + file)
164
+ File.delete(file)
165
+ end
166
+ end
167
+
168
+ # 重命名本地文件
169
+ def rename_local_file(origin_file, file)
170
+ if File.exist?(origin_file)
171
+ log_info("rename local file : " + origin_file + " to " + file)
172
+ File.rename(origin_file, file)
173
+ end
174
+ end
175
+
176
+ private
177
+ def log_info(log)
178
+ if Rails.env == "development"
179
+ puts log
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,77 @@
1
+ # This is a simple example which uses rubyzip to
2
+ # recursively generate a zip file from the contents of
3
+ # a specified directory. The directory itself is not
4
+ # included in the archive, rather just its contents.
5
+ #
6
+ # Usage:
7
+ # directory_to_zip = "/tmp/input"
8
+ # output_file = "/tmp/out.zip"
9
+ # ZipTool.dir(directory_to_zip, output_file)
10
+ # ZipTool.dir("1.txt", output_file)
11
+ module Struggle
12
+ class ZipTool
13
+ class << self
14
+ def dir(input_dir, output_file)
15
+ @input_dir = input_dir
16
+ @output_file = output_file
17
+ entries = Dir.entries(@input_dir) - %w(. ..)
18
+
19
+ ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |io|
20
+ write_entries entries, '', io
21
+ end
22
+ end
23
+
24
+ def file(input_files, output_file)
25
+ Zip::File.open(output_file, Zip::File::CREATE) do |zipfile|
26
+ if input_files.class == Array
27
+ input_files.each do |filename|
28
+ idex = filename.rindex("/")
29
+ if idex
30
+ zipfile.add(filename[idex+1, filename.length-idex], filename)
31
+ else
32
+ zipfile.add(filename, filename)
33
+ end
34
+ end
35
+ elsif input_files.class == String
36
+ idex = input_files.rindex("/")
37
+ if idex
38
+ zipfile.add(input_files[idex+1, input_files.length-idex], input_files)
39
+ else
40
+ zipfile.add(input_files, input_files)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ private
48
+ class << self
49
+ # A helper method to make the recursion work.
50
+ def write_entries(entries, path, io)
51
+ entries.each do |e|
52
+ zip_file_path = path == '' ? e : File.join(path, e)
53
+ disk_file_path = File.join(@input_dir, zip_file_path)
54
+ puts "Deflating #{disk_file_path}"
55
+
56
+ if File.directory? disk_file_path
57
+ recursively_deflate_directory(disk_file_path, io, zip_file_path)
58
+ else
59
+ put_into_archive(disk_file_path, io, zip_file_path)
60
+ end
61
+ end
62
+ end
63
+
64
+ def recursively_deflate_directory(disk_file_path, io, zip_file_path)
65
+ io.mkdir zip_file_path
66
+ subdir = Dir.entries(disk_file_path) - %w(. ..)
67
+ write_entries subdir, zip_file_path, io
68
+ end
69
+
70
+ def put_into_archive(disk_file_path, io, zip_file_path)
71
+ io.get_output_stream(zip_file_path) do |f|
72
+ f.write(File.open(disk_file_path, 'rb').read)
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
data/lib/struggle.rb CHANGED
@@ -5,6 +5,7 @@ begin
5
5
  rescue LoadError
6
6
  #do nothing
7
7
  end
8
+ require 'zip'
8
9
  require 'struggle/tfile'
9
10
  require 'struggle/http'
10
11
  require 'struggle/logistic'
@@ -15,6 +16,10 @@ require 'struggle/code'
15
16
  require 'struggle/aes'
16
17
  require 'struggle/concerns/string_extend'
17
18
  require 'struggle/concerns/int_extend'
19
+ require 'struggle/concerns/decimal_extend'
20
+ require "struggle/ftp_tool"
21
+ require "struggle/zip_tool"
18
22
  require 'pay/jd_gateway'
19
23
  String.send :include, Struggle::StringExtend
20
24
  Integer.send :include, Struggle::IntExtend
25
+ Numeric.send :include, Struggle::DecimalExtend
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: struggle
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - lean
@@ -38,7 +38,21 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: code,tfile,pager,http,logistic,pay,tmagick,class_extend,aes;
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubyzip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: code,tfile,pager,http,logistic,pay,tmagick,class_extend,aes,ftp_tool,zip_tool;
42
56
  email: 54850915@qq.com
43
57
  executables: []
44
58
  extensions: []
@@ -50,15 +64,18 @@ files:
50
64
  - lib/struggle.rb
51
65
  - lib/struggle/aes.rb
52
66
  - lib/struggle/code.rb
67
+ - lib/struggle/concerns/decimal_extend.rb
53
68
  - lib/struggle/concerns/int_extend.rb
54
69
  - lib/struggle/concerns/string_extend.rb
55
70
  - lib/struggle/font/font.ttf
71
+ - lib/struggle/ftp_tool.rb
56
72
  - lib/struggle/http.rb
57
73
  - lib/struggle/logistic.rb
58
74
  - lib/struggle/pager.rb
59
75
  - lib/struggle/sms.rb
60
76
  - lib/struggle/tfile.rb
61
77
  - lib/struggle/tmagick.rb
78
+ - lib/struggle/zip_tool.rb
62
79
  homepage: http://rubygems.org/gems/struggle
63
80
  licenses:
64
81
  - struggle
@@ -79,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
96
  version: '0'
80
97
  requirements: []
81
98
  rubyforge_project:
82
- rubygems_version: 2.4.8
99
+ rubygems_version: 2.6.10
83
100
  signing_key:
84
101
  specification_version: 4
85
102
  summary: struggle!