ld 0.3.2 → 0.3.3

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