ld 0.3.2 → 0.3.3

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: c89ec7ff97e888e56b4ded299f4032294b1fe98c
4
- data.tar.gz: d7c4e6ada94439a6be03cfd00f32160638d17be9
3
+ metadata.gz: 59674cf5f131112be70e95b3b57c2fce00762ab7
4
+ data.tar.gz: 251914cdc6f67afa5361fd32854cfc969a8c7166
5
5
  SHA512:
6
- metadata.gz: 1493087439d5d094542e670c50791e0847bd106158fd6cbb737813f1c946faf77dd61374f4b1981e2de7f2492bd92205965b5b963a6fa74c1d8b1019dd37e2e3
7
- data.tar.gz: 056a73a325c41522f549662da363be5ce3bfcaf2f8e135ff913f46371572b3e9c071ccc727aa743ac25f162b36aaae500eea8ecf2fd8e1ba98f858bda2342d67
6
+ metadata.gz: b54d6f6e9eaac2a4dfd773c54601e1b44ccfbf37a9e4ae0813cb647b9ad14b31dff47fc4489ce6301c8272f833eaf432e71413dba30223d54cf9bfbb6dd1742b
7
+ data.tar.gz: 5d0b4a91596ad7a254b32110b9a5995d4099353b73df84a012f3bbbeb6c30fe9a9b6209d791c7bac1d21c798f99ac222f0d4297ea9875f776823aa2ed22fdd42
data/README.md CHANGED
@@ -8,17 +8,16 @@ Basically has the following Class.
8
8
 
9
9
  ```ruby
10
10
  module Ld
11
+ class File
12
+ end
13
+ class Excel
14
+ end
15
+ class Project
16
+ end
17
+ class Print
18
+ end
11
19
  end
12
20
  ```
13
- ## Introduction to the
14
-
15
- 设计这个gem,我希望可以帮助大家在开发简单rails应用时,可以帮助大家完成50%以上的简单而重复的工作
16
- 我会提供一些类与方法,在console中使用,调用它们会生成项目结构xls文件,生成的这个xls文件中的数据,类似于一个小型文件数据库
17
- 然后我们可以以此为基础,查询项目中的一些信息.我想这样会有助于我们快速理解一个项目的基本结构,与重要文件在哪
18
- 也可以在修复bug时对bug相关文件与方法,起到快速定位的作用
19
- 这是我设计本gem的初衷,未来应该会持续更新这个gem,让它变得更加强大与方便
20
- 最终的目的是,希望这个gem可以起到快速搭建简单rails应用的作用,提升工作效率,节省时间
21
- 比如我们可以集成一些常用的模块到这个gem中,在搭建项目时只需要执行一条简单的命令就可以创建
22
21
 
23
22
  ## Installation
24
23
 
@@ -38,47 +37,87 @@ Or install it yourself as:
38
37
 
39
38
  ## Usage
40
39
 
41
- First , into the console:
42
-
43
- $ rails c
44
-
45
- Then, can do this:
46
-
40
+ 1. Ld::Excel
47
41
  ```ruby
48
- # Project details to /project.xls 查看项目详情,会生成xls文件,在: /project.xls
49
- Ld::Project.new.to_xls
50
-
51
- # Read xls
52
- Ld::Excel.open('project.xls').read('models?a1:j100-f,h,i')
53
- Ld::Excel.open('project.xls').read('tables?a1:i300')
54
-
55
- # Create xls, Need to change the file path to your own, and then run
56
- Ld::Excel.create :file_path =>'excel_test.xls' do |excel|
57
- excel.write_sheet 'sheet1' do |sheet|
58
- sheet.set_format({color: :red, font_size: 11, font: '宋体'})
59
- sheet.set_headings ['title1','title2','title3']
42
+ # write excel
43
+ Ld::Excel.create :file_path => 'config/excel_test.xls' do |excel|
44
+ excel.write_sheet 'abc' do |sheet|
45
+ sheet.set_format({color: :red, font_size: 20, font: '微软雅黑'})
60
46
  sheet.set_point 'a1'
61
- sheet.set_rows [
62
- [1,2,3,4,5],
63
- [1,2,3,4],
64
- [1,2,3],
65
- [1,2],
66
- [1],
67
- ]
47
+ sheet.set_headings ['A','B','C','D']
48
+ sheet.set_rows([
49
+ ['1','2','3','4'],
50
+ ['2','3','4','5'],
51
+ ['3','4','5','6'],
52
+ ['4','5','6','7']
53
+ ])
68
54
  end
69
55
  end
70
- Ld::Excel.open('excel_test.xls').read('sheet1?a1:g6')
71
56
 
72
- # Print model, Need to change the User model to exist, to run again
73
- Ld::Print.p User.first(10), 'id ,name, created_at'
57
+ # read excel
58
+ excel = Ld::Excel.open('config/excel_test.xls')
59
+ excel.read('abc?a1:b5')
60
+ excel.read({sheet: 'abc', scope:'a1:b5'})
61
+ excel.read({sheet: 'abc', scope:'a1:b5', exclude:'3'})
62
+ excel.read({sheet: 'abc', scope:'a1:b5', exclude:'B'})
63
+ ```
64
+
65
+
66
+ 2. Ld::Project
67
+ ```ruby
68
+ # Check the project details
69
+ project = Ld::Project.new(Rails.root.to_s)
70
+
71
+ # create excel to 'config/project_details.xls'
72
+
73
+ # Check model infos
74
+ project.to_xls('config/project_details.xls')
75
+ project.print :user, :fields
76
+ project.print :user, :relations
77
+ project.print :user, :routes
78
+ project.print :user, :controllers
79
+ project.print :user, :views
80
+
81
+ ```
82
+
83
+
84
+ 3. Ld::File
85
+ ```ruby
86
+ # read file all lines
87
+ file = Ld::File.open('config/application.rb')
88
+ lines = file.lines
89
+
90
+ # read dir
91
+ dir = Ld::File.open('app/models')
92
+ files = dir.children
93
+
94
+ # search dir file by file name
95
+ files = dir.search_files(/.rb$/)
96
+
97
+ # Ld::File API
98
+ Ld::File.open path
99
+ Ld::File.new path
100
+ file.children
101
+ file.brothers
102
+ file.father
103
+ file.lines
104
+ file.search_files(//)
105
+ file.search_dirs(//)
106
+ file.name
107
+ file.path
108
+ file.type # 0=file, 1=dir
109
+ ```
74
110
 
75
- # Read dir or file
76
- Ld::File.new('Gemfile').lines.each{|l| puts l}
77
- Ld::File.new('app').models.children.each{|f| puts f.name}
78
- Ld::File.new('app').views.search_files(/.html/).each{|f| puts "#{f.father.name} : #{f.name}"}
79
111
 
112
+ 4. Ld::Print
113
+ ```ruby
114
+ users = User.first(10)
115
+ Ld::Print.p users, 'id ,name, created_at'
80
116
  ```
81
117
 
118
+
119
+
120
+
82
121
  ## Development
83
122
 
84
123
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -4,65 +4,58 @@ Spreadsheet.client_encoding = 'UTF-8'
4
4
  class Ld::Excel
5
5
  attr_accessor :excel, :path
6
6
 
7
- # 构造函数,如果未传path则是创建一个新的excel, 如果传了path,则打开这个excel,不过打开前会验证后缀与是否存在
8
7
  def initialize path = nil
9
8
  if path
10
9
  if path.match(/.xls$/)
11
10
  if File::exist? path
12
11
  @excel = Spreadsheet.open path
13
12
  @path = path
14
- puts "打开文件: #{path}"
15
13
  else
16
- raise "文件不存在: #{path}"
14
+ raise "File does not exist: #{path}"
17
15
  end
18
16
  else
19
- raise "只能打开.xls结尾的文件"
17
+ raise "Can only read .xls!"
20
18
  end
21
19
  else
22
20
  @excel = Spreadsheet::Workbook.new
23
- puts "创建新的Excel实例"
24
21
  end
25
22
  end
26
23
 
27
- # 打开一个excel
28
24
  def self.open path
29
25
  self.new path
30
26
  end
31
27
 
32
- # 获取一页
33
28
  def open_sheet name
34
29
  Ld::Sheet.open @excel, name
35
30
  end
36
31
 
37
- # 刷新 重读一次
38
32
  def flush
39
33
  @excel = Ld::Excel.open @path
40
34
  end
41
35
 
42
- # content_url = "Sheet1?b13:m27-g.j.k.(14:18)"
43
- def read address_path_full, simple = false, filter_nil = false
44
- raise "缺少?, 需要在'?'左边指定sheet的名称" if !address_path_full.match(/\?/)
45
- sheet_name, address_path = address_path_full.split('?')
46
- @current_sheet = open_sheet sheet_name
47
- arrs = @current_sheet.read address_path, simple
48
- # 除去不完整数据
49
- if filter_nil
50
- (arrs.size - 1).downto(0) do |i|
51
- arr = arrs[i]
52
- if arr[0] == nil or arr[1] == nil
53
- arrs.delete_at i
54
- end
55
- end
56
- end
36
+ # Example: address = "Sheet1?a1:f5"
37
+ def read params, show_location = false
57
38
 
58
- arrs
39
+ case params.class.to_s
40
+ when 'String'
41
+ shett_name, scope = params.split('?')
42
+ @current_sheet = open_sheet shett_name
43
+ @current_sheet.read scope, show_location
44
+ when 'Hash'
45
+ raise "Parameter error! \nnot find 'sheet'" if params[:sheet].nil?
46
+ raise "Parameter error! \nnot find 'scope'" if params[:scope].nil?
47
+ params[:location] = false if params[:location].nil?
48
+ @current_sheet = open_sheet params[:sheet]
49
+ @current_sheet.read params, params[:location]
50
+ end
59
51
  end
60
52
 
53
+
61
54
  # 保存文件
62
55
  def save path
63
- puts "这个操作将会覆盖了这个文件:#{path}" if File.exist? path
56
+ puts "Covers a file: #{path}" if File.exist? path
64
57
  @excel.write path
65
- puts "保存excel成功:#{path}"
58
+ puts "Excel save success!"
66
59
  self
67
60
  end
68
61
 
@@ -9,7 +9,7 @@ class Ld::Sheet
9
9
  end
10
10
 
11
11
  def initialize excel, name, type = 'new'
12
- raise "name nil" if !name
12
+ raise "sheet name is nil" if !name
13
13
  @excel = excel
14
14
  @name = name
15
15
  case type
@@ -20,226 +20,146 @@ class Ld::Sheet
20
20
  @rows = []
21
21
  when 'open'
22
22
  @sheet = excel.worksheet name
23
- raise "#{name} 不存在" if !@sheet
23
+ raise "sheet '#{name}' not found!" if !@sheet
24
24
  end
25
25
  @format = @sheet.default_format
26
26
  end
27
27
 
28
- def read address_str, simple = false
29
- map = generate_map address_str
30
- arrs = read_map map, simple
31
- if arrs.size == 0
32
- puts "没有任何内容的区域! #{address_str}"
33
- else
34
- puts "#{address_str}"
35
- end
36
- arrs
28
+ def read scope, show_location = false
29
+ raise "scope params is nil" if !scope
30
+ map = parse_scope_to_map scope
31
+ read_arrs map, show_location
37
32
  end
38
33
 
39
- # simple 带不带坐标index数据
40
- def read_map arrs, simple
41
- @scope_arrs = []
42
- arrs.each do |arr|
43
- rows = []
44
- arr.each do |a|
45
- if simple
46
- rows << {:index => a[0], :value => read_unit_by_xy(a[1], a[2], true)}
47
- else
48
- rows << read_unit_by_xy(a[1], a[2], true)
49
- end
34
+ def parse_string_scope scope
35
+ hash = {}
36
+ scope.upcase!
37
+ raise "params error! \n'+' 只能有1个" if scope.split('+').size > 2
38
+ raise "params error! \n'-' 只能有1个" if scope.split('-').size > 2
39
+ if scope.include? '+'
40
+ hash[:scope], other = scope.split('+')
41
+ if other.include? '-'
42
+ hash[:adds], hash[:mins] = other.split('-')
43
+ else
44
+ hash[:adds] = other
45
+ end
46
+ else
47
+ if scope.include? '-'
48
+ hash[:scope], hash[:mins] = scope.split('-')
49
+ else
50
+ hash[:scope] = scope
50
51
  end
51
- @scope_arrs << rows
52
52
  end
53
- @scope_arrs
53
+ hash
54
54
  end
55
55
 
56
- # 通过x,y坐标获取unit内容
57
- def read_unit_by_xy x, y, parse
58
- # puts "x: #{x}\ty: #{y}"
59
- unit = @sheet.row(y)[x]
60
- if unit.instance_of? Spreadsheet::Formula
61
- if parse
62
- return unit.value
56
+ def parse_scope_to_map scope
57
+ scope = parse_string_scope scope if scope.class == String
58
+ raise "params lack fields ':scope'!" if !scope[:scope]
59
+ raise "params syntax error! lack ':'" if !scope[:scope].match(/:/)
60
+ raise "params syntax error! ':' 只能有1个" if scope[:scope].split(':').size > 2
61
+ a, b = scope[:scope].split(':').map{|point| parse_point point}
62
+ cols = (a[:character]..b[:character]).to_a
63
+ rows = (a[:number]..b[:number]).to_a
64
+ maps_add rows, cols, scope[:adds].upcase if scope[:adds]
65
+ maps_min rows, cols, scope[:mins].upcase if scope[:mins]
66
+
67
+ if scope[:mins]
68
+ raise "mins 参数只能是 String" if scope[:mins].class != String
69
+ end
70
+ rows = rows.uniq.sort
71
+ cols = cols.uniq.sort
72
+ maps = rows.map do |row|
73
+ cols.map do |col|
74
+ col_i = ABSCISSA[col]
75
+ raise "不存在这个列 \n'#{col}'" if !col_i
76
+ {
77
+ location:"#{col}#{row}",
78
+ row:row,
79
+ col:col_i
80
+ }
63
81
  end
64
82
  end
65
- return unit
83
+ # 调试
84
+ # maps.each do |arr|
85
+ # puts arr.map{|a| a[:location]}.to_s
86
+ # end
87
+ maps
66
88
  end
67
89
 
68
- # 用坐标解析一个excel scope
69
- def generate_map address_str
70
- map = {:x => [], :y => []}
71
- config = parse_address address_str
72
- if config[:scope]
73
- if config[:scope].include? ':'
74
- # map初始化
75
- arr = config[:scope].split(':')
76
- if config[:scope].scan(/[0-9]+/).join == ''
77
- map_adds(map, ab_to(arr[0].scan(/[A-Z]+/).join, arr[1].scan(/[A-Z]+/).join))
78
- elsif config[:scope].scan(/[A-Z]+/).join == ''
79
- map_adds(map, ab_to(arr[0].scan(/[0-9]+/).join, arr[1].scan(/[0-9]+/).join))
80
- else
81
- map_adds(map, ab_to(arr[0].scan(/[0-9]+/).join, arr[1].scan(/[0-9]+/).join))
82
- map_adds(map, ab_to(arr[0].scan(/[A-Z]+/).join, arr[1].scan(/[A-Z]+/).join))
83
- end
84
- # map 添加
85
- if config[:add_str]
86
- config[:add_str].split(',').each do |add|
87
- if add.include? ":"
88
- map_adds(map, ab_to(add.split(':')[0], add.split(':')[1]))
89
- else
90
- map_add map, add
91
- end
92
- end
93
- end
94
- # map 减小
95
- if config[:min_str]
96
- config[:min_str].split(',').each do |min|
97
- if min.include? ":"
98
- map_mins(map, ab_to(min.split(':')[0], min.split(':')[1]))
99
- else
100
- map_min map, min
101
- end
102
- end
103
- end
90
+ def maps_add rows, cols, adds
91
+ raise "adds 参数只能是 String" if adds.class != String
92
+ add_arr = adds.split(',').map do |add|
93
+ if add.match(/:/)
94
+ raise "add params syntax error! \n'#{add}'" if add.split(':').size > 2
95
+ a, b = add.split(':')
96
+ (a..b).to_a
104
97
  else
105
- raise "scope 没有 ':' 无法解析"
98
+ add
106
99
  end
107
- else
108
- raise "scope == nil"
109
100
  end
110
- map[:x].uniq!
111
- map[:y].uniq!
112
- arrs = []
113
- map[:y].each do |y|
114
- rows = []
115
- map[:x].each do |x|
116
- rows << ["#{x}_#{y}", ABSCISSA[x], y.to_i - 1]
101
+ add_arr.flatten.each do |add|
102
+ if is_row? add
103
+ rows << add.to_i
104
+ else
105
+ cols << add.upcase
117
106
  end
118
- arrs << rows
119
107
  end
120
- return arrs
121
- rescue
122
- puts "生成map时发生错误: #{$!}"
123
- puts $@
124
108
  end
125
109
 
126
- def ab_to a, b
127
- type = nil
128
- if is_number?(a) == true and is_number?(b) == true
129
- type = 'y'
130
- case a.to_i <=> b.to_i
131
- when 1
132
- return [type, (b..a).to_a]
133
- when -1
134
- return [type, (a..b).to_a]
135
- when 0
136
- return [type, [a]]
110
+ def maps_min rows, cols, mins
111
+ raise "mins 参数只能是 String" if mins.class != String
112
+ min_arr = mins.split(',').map do |min|
113
+ if min.match(/:/)
114
+ raise "min params syntax error! \n'#{min}'" if min.split(':').size > 2
115
+ a, b = min.split(':')
116
+ (a..b).to_a
117
+ else
118
+ min
137
119
  end
138
- elsif is_number?(a) == false and is_number?(b) == false
139
- type = 'x'
140
- case a <=> b
141
- when 1
142
- return [type, (b..a).to_a]
143
- when -1
144
- return [type, (a..b).to_a]
145
- when 0
146
- return [type, [a]]
120
+ end
121
+ min_arr.flatten.each do |min|
122
+ if is_row? min
123
+ rows.delete min.to_i
124
+ else
125
+ cols.delete min.upcase
147
126
  end
148
- else
149
- raise "解析excel配置范围时,':'两边必须要么都是字母,要么都是数字!"
150
127
  end
151
128
  end
152
129
 
153
- def map_mins map, mins
154
- case mins[0]
155
- when 'x'
156
- mins[1].each do |min|
157
- map[:x].delete min
158
- end
159
- when 'y'
160
- mins[1].each do |min|
161
- map[:y].delete min
130
+ # show_location 带不带坐标index数据
131
+ def read_arrs map_arrs, show_location
132
+ map_arrs.map do |map_arr|
133
+ map_arr.map do |map|
134
+ value = read_unit_by_xy map[:col], map[:row], true
135
+ if show_location
136
+ {map[:location] => value}
137
+ else
138
+ value
162
139
  end
140
+ end
163
141
  end
164
142
  end
165
143
 
166
- def map_min map, min
167
- if is_number? min
168
- map[:y].delete min
169
- else
170
- map[:x].delete min
171
- end
172
- end
173
-
174
- def map_adds map, adds
175
- case adds[0]
176
- when 'x'
177
- adds[1].each do |add|
178
- map[:x] << add
179
- end
180
- when 'y'
181
- adds[1].each do |add|
182
- map[:y] << add
183
- end
144
+ # 通过x,y坐标获取unit内容
145
+ def read_unit_by_xy x, y, parse
146
+ # puts "x: #{x}\ty: #{y}"
147
+ unit = @sheet.row(y)[x]
148
+ if unit.instance_of? Spreadsheet::Formula
149
+ if parse
150
+ return unit.value
151
+ end
184
152
  end
153
+ return unit
185
154
  end
186
155
 
187
- def is_number? str
188
- if str.to_i.to_s == str.to_s
156
+ def is_row? row
157
+ if row.to_i.to_s == row.to_s
189
158
  return true
190
159
  end
191
160
  false
192
161
  end
193
162
 
194
- def map_add map, add
195
- if is_number? add
196
- map[:y] << add
197
- else
198
- map[:x] << add
199
- end
200
- end
201
-
202
- # 解析范围配置
203
- def parse_address address
204
- hash = {}
205
- if address
206
- address.upcase!
207
- else
208
- raise "address 为 nil"
209
- end
210
- if address.split('+').size > 2
211
- raise "'+'号只能有1个"
212
- end
213
- if address.split('-').size > 2
214
- raise "'-'号只能有1个"
215
- end
216
- if address.include?('+')
217
- a = address.split('+')[0]
218
- b = address.split('+')[1]
219
- if a.include?('-')
220
- hash.store :scope, a.split('-')[0]
221
- hash.store :min_str, a.split('-')[1]
222
- hash.store :add_str, b
223
- else
224
- hash.store :scope, a
225
- if b.include?('-')
226
- hash.store :min_str, b.split('-')[1]
227
- hash.store :add_str, b.split('-')[0]
228
- else
229
- hash.store :add_str, b
230
- end
231
- end
232
- else
233
- if address.include?('-')
234
- hash.store :scope, address.split('-')[0]
235
- hash.store :min_str, address.split('-')[1]
236
- else
237
- hash.store :scope, address
238
- end
239
- end
240
- hash
241
- end
242
-
243
163
  def self.open excel, name
244
164
  self.new excel, name, 'open'
245
165
  end
@@ -249,24 +169,30 @@ class Ld::Sheet
249
169
  end
250
170
 
251
171
  def save
252
- l = parse_location @point
172
+ point = parse_point @point
253
173
  raise '保存sheet必须要有内容,请 set_rows' if !@rows
254
174
  raise '保存sheet必须要有name,请 set_rows' if !@name
255
175
  @rows.unshift @headings if @headings
256
176
  @sheet.default_format = @format
257
- @rows.each_with_index do |row,r|
258
- row.each_with_index do |data,c|
259
- write_unit_by_xy(r+l[:y],c+l[:x],data)
177
+ @rows.each_with_index do |row, r|
178
+ row.each_with_index do |unit, c|
179
+ x = point[:number] + r
180
+ y = ABSCISSA[point[:character]] + c
181
+ write_unit_by_xy x, y, unit
260
182
  end
261
183
  end
262
184
  self
263
185
  end
264
186
 
265
187
  # 解析一个 content_url
266
- def parse_location location_str
267
- raise "无法解析excel坐标,坐标需要是String,不能是#{location_str.class.to_s}" if location_str and location_str.class != String
268
- location_str.upcase!
269
- return {:x => ABSCISSA[location_str.scan(/[A-Z]+/).join].to_i, :y => (location_str.scan(/[0-9]+/).join.to_i - 1)}
188
+ def parse_point point
189
+ raise "无法解析excel坐标,坐标需要是String,不能是#{point.class.to_s}" if point.class != String
190
+ point.upcase!
191
+ characters = point.scan(/[A-Z]+/)
192
+ raise "parse point error! \n'#{point}'" if characters.size != 1
193
+ numbers = point.scan(/[0-9]+/)
194
+ raise "parse point error! \n'#{point}'" if numbers.size != 1
195
+ {:character => characters[0], :number => numbers[0].to_i}
270
196
  end
271
197
 
272
198
  def set_rows rows
@@ -297,25 +223,6 @@ class Ld::Sheet
297
223
  @sheet.row(x)[y] = unit
298
224
  end
299
225
 
300
- # 将一维数组写到表中,可写成列,也可以写成行
301
- def write_arr_to_point(arr, rank = '|', point = "a1")
302
- l = Ld::Excel.parse_location(point)
303
- if rank == '|' or rank == 'col'
304
- arr.each_with_index do |data,r|
305
- # 坚写,行动列不动
306
- write_unit_by_xy(l[:r]+r,l[:c],data)
307
- end
308
- elsif rank == '-' or rank == 'row'
309
- arr.each_with_index do |data,c|
310
- # 横写,列动行不动
311
- write_unit_by_xy(l[:r],l[:c]+c,data)
312
- end
313
- else
314
- raise "横写rank | 竖写rank - 无法识别#{rank}"
315
- end
316
- self
317
- end
318
-
319
226
  def set_color color
320
227
  @format.font.color = color
321
228
  end
data/lib/ld/file/file.rb CHANGED
@@ -3,6 +3,7 @@ class Ld::File
3
3
  attr_accessor :path, :base_name, :name, :type
4
4
 
5
5
  def initialize path
6
+ # raise "file is not found!\n#{path}" if !File.exist? path
6
7
  @path = path
7
8
  @name = File.basename @path
8
9
  @base_name = name.split('.')[0]
@@ -13,6 +14,14 @@ class Ld::File
13
14
  Ld::File.new path
14
15
  end
15
16
 
17
+ def self.open path
18
+ if File.exist? path
19
+ self.new path
20
+ else
21
+ return nil
22
+ end
23
+ end
24
+
16
25
  def brothers
17
26
  father.children
18
27
  end
@@ -21,13 +21,14 @@ class Ld::Project
21
21
  end
22
22
 
23
23
  def print model_name, type = :relations
24
+ model_name = model_name.to_s
24
25
  if !@models.models.include? model_name
25
26
  puts "不存在 #{model_name}"
26
27
  return false
27
28
  end
28
29
 
29
30
  title_str = "#{model_name.camelize}(#{@table_hash[model_name]})"
30
-
31
+ type = type.to_sym
31
32
  case type
32
33
  when :fields
33
34
  fs = '字段,字段类型,描述,空约束,默认值,精度位数,limit'.split(',')
@@ -94,7 +95,7 @@ class Ld::Project
94
95
  @controllers.rows.delete_at 0
95
96
  end
96
97
 
97
- def to_xls path = "#{@root.path}/project.xls"
98
+ def to_xls path = {:file_path => "#{@root.path}/project.xls"}
98
99
  Ld::Excel.create path do |excel|
99
100
  excel.write_sheet 'routes' do |sheet|
100
101
  sheet.set_format({color: :red, font_size: 14, font: '微软雅黑'})
data/lib/ld/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ld
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ld
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Dong