ld 0.1.11 → 0.2.1

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: 31e65b0b6e0a68b1d4a35b9d5f1e9c9c4364fff3
4
- data.tar.gz: 12293376c449b5710e269c4192dad98a31fd0d4a
3
+ metadata.gz: 2acbbafdf3e01f577026de5c256f855e1df73292
4
+ data.tar.gz: 218fbc767629bd56444da6fc2daa5d4e583c0922
5
5
  SHA512:
6
- metadata.gz: 6df4819aa0c43ef8c68c261b37790528adb59a1edff7dd3c4f0fb32e96b8f3c7cc9a0c13a45c70d593b5544d2b3309f9191e190140afdf45ee7168b3b8a7e1c9
7
- data.tar.gz: 21c356ac110b52f79d39d5445a32d7c89d3782714a9b53eb789eb90d6ba73c212f070298b1b1cedbea0e2de705c8650d87b93fcfed30d96f7698fa48c2ecea66
6
+ metadata.gz: 188cd278cc8181e2e88ef61da49ab0e3d854578926a64e67c67563c9686b2248dce840335e20f3ad87fa4f7930e24937a54f10c58c9a3c74986a87526dc6b2e3
7
+ data.tar.gz: e82c382dba6355c86d7357fbba66b0c0e2ccd2d6ce8fbb95bd22726601b7f0567daa6224a3ce71839ddc02d204d51eb6e04ab2eb950f176adc3f41875b359eee
data/README.md CHANGED
@@ -5,18 +5,39 @@ For the sake of efficiency,
5
5
  The Module is my name abbreviations LD,
6
6
  Basically has the following Class.
7
7
 
8
+
8
9
  ```ruby
9
10
  module Ld
10
- class excel
11
+ class Excel
12
+ end
13
+ class Sheets
11
14
  end
12
- class file
15
+
16
+ class File
13
17
  end
14
- class table
18
+ class Files
15
19
  end
16
- class project
20
+
21
+ class Print
22
+ end
23
+
24
+ module Project
25
+ class Structure
26
+ end
27
+ class Parse
28
+ end
17
29
  end
18
30
  end
19
31
  ```
32
+ ## Introduction to the
33
+
34
+ 设计这个gem,我希望可以帮助大家在开发简单rails应用时,可以帮助大家完成50%以上的简单而重复的工作
35
+ 我会提供一些类与方法,在console中使用,调用它们会生成项目结构xls文件,生成的这个xls文件中的数据,类似于一个小型文件数据库
36
+ 然后我们可以以此为基础,查询项目中的一些信息.我想这样会有助于我们快速理解一个项目的基本结构,与重要文件在哪
37
+ 也可以在修复bug时对bug相关文件与方法,起到快速定位的作用
38
+ 这是我设计本gem的初衷,未来应该会持续更新这个gem,让它变得更加强大与方便
39
+ 最终的目的是,希望这个gem可以起到快速搭建简单rails应用的作用,提升工作效率,节省时间
40
+ 比如我们可以集成一些常用的模块到这个gem中,在搭建项目时只需要执行一条简单的命令就可以创建
20
41
 
21
42
  ## Installation
22
43
 
@@ -63,6 +84,10 @@ Ld::Excel.open('/Users/liudong/Desktop/excel_test.xls').read('sheet1?a1:e10')
63
84
 
64
85
  # Read Dir
65
86
  Ld::File.open_dir('dir_path').children.each{|f| puts f.path}
87
+
88
+ # Project details to xls 查看项目详情,会生成xls文件,在: config/project.xls
89
+ Ld::Project.new
90
+
66
91
  ```
67
92
 
68
93
  ## Development
@@ -1,6 +1,6 @@
1
1
  require 'terminal-table'
2
2
 
3
- class Ld::Table
3
+ class Ld::Print
4
4
 
5
5
  def initialize models
6
6
  @models = models
@@ -0,0 +1,110 @@
1
+ module Ld::Project::Parse
2
+
3
+ def parse_routes root
4
+ system "rake routes > #{root.path}/routes.txt"
5
+ rows = root.find('routes.txt').lines.map{|line|
6
+ arr = line.split(' ')
7
+ arr.unshift(nil) if arr.size == 3
8
+ arr
9
+ }
10
+ .delete_if{|arr| arr.size >= 5 or arr.size <= 2 }
11
+ .map{|row|
12
+ controller, action = row[3].split('#')
13
+ type = row[1]
14
+ help_method = row[0]
15
+ uri = row[2]
16
+ #
17
+ [controller, action, type, uri, help_method]
18
+ }
19
+ File.delete("#{root.path}/routes.txt") if File.exist? "#{root.path}/routes.txt"
20
+ {
21
+ :headings => ['控制器', 'action', '请求类型','URI','帮助方法'],
22
+ :rows => rows
23
+ }
24
+ end
25
+
26
+ def parse_schema root
27
+ lines = root.db.find('schema.rb').lines
28
+ tables = {}
29
+ read_flag = false
30
+ table = ""
31
+ lines.each do |l|
32
+ if l.lstrip.rstrip.split('end').size == 0
33
+ read_flag = false
34
+ end
35
+ if l.match(/create_table /) and l.match(/ do /)
36
+ read_flag = true
37
+ table = l.split('"')[1]
38
+ tables[table] = []
39
+ end
40
+ if read_flag
41
+ tables[table] << l
42
+ end
43
+ end
44
+ rows = tables.map{|k, v|
45
+ v.delete_at(0)
46
+ [k, v.join(':')]
47
+ }
48
+ {
49
+ :headings => ['tables', 'comment'],
50
+ :rows => rows
51
+ }
52
+ end
53
+
54
+ def parse_models root
55
+ rows = []
56
+ @models = root.app.models.search_files(/.rb$/)
57
+ @controllers = root.app.controllers.search_files(/_controller.rb$/)
58
+ @views = root.app.views.search_dirs
59
+ @tables = parse_schema
60
+ @models.each do |model_file|
61
+ model_name = model_file.name.split('.')[0]
62
+ next if !@tables[model_name.pluralize]
63
+ model_lines = model_file.lines
64
+ actions_full_name = model_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact
65
+ actions = actions_full_name.map{|action| action.split(' ')[0]}
66
+ model_instance = eval("#{model_name.camelize}.new")
67
+ fields = model_instance.attributes.keys
68
+
69
+ controller = find_controller model_name.pluralize
70
+ if controller
71
+ controller_lines = controller.lines
72
+ controller_methods = controller_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact
73
+ end
74
+
75
+ view = find_view model_name.pluralize
76
+ if view
77
+ views = view.search_files(/.html/)
78
+ end
79
+
80
+ rows << [
81
+ model_name, # 模型
82
+ model_name.camelize, # 类
83
+ model_lines.size, # 模型lines
84
+ model_file.path, # 模型文件
85
+ (controller.nil? ? '' : controller.path), # 控制器文件
86
+ (controller.nil? ? 0 : controller_lines.size),# 控制器lines
87
+ actions.size, # 模型方法size
88
+ actions.join(','), # 模型方法
89
+ fields.size, # 字段size
90
+ fields.join(','), # 字段
91
+ (views.nil? ? 0 : views.size), # 视图size
92
+ (views.nil? ? '' : views.map{|v| "#{v.name.split('.')[0]}-#{v.path}"}.join(',')), # 视图
93
+ (controller_methods.nil? ? 0 : controller_methods.size), # action-size
94
+ (controller_methods.nil? ? '' : controller_methods.join(',')) # actions
95
+ ]
96
+ end
97
+ rows = rows.compact.sort{|a,b| b[2] <=> a[2]} # 按 模型文件行数 排序
98
+ {
99
+ :headings => ['模型','类',
100
+ '模型lines','模型文件',
101
+ '控制器文件','控制器lines',
102
+ '模型方法size','模型方法',
103
+ '字段size','字段',
104
+ '视图size', '视图',
105
+ 'action-size','actions'],
106
+ :rows => rows
107
+ }
108
+ end
109
+
110
+ end
@@ -0,0 +1,57 @@
1
+ class Ld::Project::Structure
2
+ include Ld::Project::Parse
3
+ attr_accessor :root, :name, :path
4
+
5
+ def initialize path = Rails.root.to_s
6
+ @root = Ld::File.new path
7
+ @name = @root.name
8
+ @path = @root.path
9
+ end
10
+
11
+
12
+
13
+ def generate path = "#{@root.path}/project.xls"
14
+ Ld::Excel.create path do |excel|
15
+ # sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'})
16
+ excel.write_sheet 'routes' do |sheet|
17
+ @routes = parse_routes @root
18
+ sheet.set_headings @routes[:headings]
19
+ sheet.set_rows @routes[:rows]
20
+ end
21
+ excel.write_sheet 'tables' do |sheet|
22
+ @tables = parse_schema @root
23
+ sheet.set_headings @tables[:headings]
24
+ sheet.set_rows @tables[:rows]
25
+ end
26
+ excel.write_sheet 'models' do |sheet|
27
+ @models = parse_models @root
28
+ sheet.set_headings @models[:headings]
29
+ sheet.set_rows @models[:rows]
30
+ end
31
+ end
32
+ end
33
+
34
+ def find_controller model_name
35
+ @controllers.each do |c|
36
+ if c.name.split('_controller.rb')[0] == model_name
37
+ return c
38
+ end
39
+ end
40
+ nil
41
+ end
42
+
43
+ def find_view model_name
44
+ @views.each do |v|
45
+ if v.name == model_name
46
+ return v
47
+ end
48
+ end
49
+ nil
50
+ end
51
+
52
+ def camelize name
53
+ name.camelize
54
+ end
55
+
56
+
57
+ end
data/lib/ld/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ld
2
- VERSION = "0.1.11"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/ld.rb CHANGED
@@ -1,12 +1,35 @@
1
1
  require "ld/version"
2
2
 
3
- module Ld
4
- end
5
3
 
6
- require "ld/search_module"
7
- require "ld/file"
4
+ class Excel
5
+ end
6
+ class Sheets
7
+ end
8
+
9
+ class File
10
+ end
11
+ class Files
12
+ end
13
+
14
+ class Print
15
+ end
16
+
17
+ module Project
18
+ module Parse
19
+ end
20
+ class Structure
21
+ end
22
+ end
23
+
24
+
25
+ require "ld/file/file"
26
+ require "ld/file/files"
27
+
28
+ require "ld/project/parse"
29
+ require "ld/project/structure"
30
+
31
+ require "ld/excel/excel"
32
+ require "ld/excel/sheet"
33
+
34
+ require "ld/print/table"
8
35
 
9
- require "ld/excel"
10
- require "ld/sheet"
11
- require "ld/table"
12
- require "ld/project"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ld
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Dong
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-29 00:00:00.000000000 Z
11
+ date: 2017-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: terminal-table
@@ -92,14 +92,14 @@ files:
92
92
  - bin/setup
93
93
  - ld.gemspec
94
94
  - lib/ld.rb
95
- - lib/ld/dir.rb
96
- - lib/ld/excel.rb
97
- - lib/ld/file.rb
98
- - lib/ld/files.rb
99
- - lib/ld/project.rb
100
- - lib/ld/search_module.rb
101
- - lib/ld/sheet.rb
102
- - lib/ld/table.rb
95
+ - lib/ld/excel/excel.rb
96
+ - lib/ld/excel/sheet.rb
97
+ - lib/ld/file/dir.rb
98
+ - lib/ld/file/file.rb
99
+ - lib/ld/file/files.rb
100
+ - lib/ld/print/print.rb
101
+ - lib/ld/project/parse.rb
102
+ - lib/ld/project/structure.rb
103
103
  - lib/ld/version.rb
104
104
  homepage: https://github.com/18810625123/ld
105
105
  licenses:
data/lib/ld/project.rb DELETED
@@ -1,205 +0,0 @@
1
- class Ld::Project
2
-
3
- attr_accessor :app, :name, :models, :views_dir, :views, :controllers, :routes
4
-
5
- def initialize
6
- @@root = Ld::File.new Rails.root.to_s
7
- system "rake routes > #{@@root.config.path}/routes.txt"
8
- Ld::Excel.create "#{@@root.config.path}/project.xls" do |excel|
9
- excel.write_sheet 'routes' do |sheet|
10
- sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'})
11
- sheet.set_headings ['控制器', 'action', '请求类型','URI','帮助方法']
12
- sheet.set_point 'a1'
13
- sheet.set_rows @@root.config.find('routes.txt').lines
14
- .map{|line|
15
- arr = line.split(' ')
16
- arr.unshift(nil) if arr.size == 3
17
- arr
18
- }
19
- .delete_if{|arr| arr.size >= 5 or arr.size <= 2 }
20
- .map{|row|
21
- controller, action = row[3].split('#')
22
- type = row[1]
23
- help_method = row[0]
24
- uri = row[2]
25
- [controller, action, type, uri, help_method]
26
- }
27
- end
28
- excel.write_sheet 'tables' do |sheet|
29
- sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'})
30
- sheet.set_headings ['tables', 'commit']
31
- sheet.set_point 'a1'
32
- lines = @@root.db.find('schema.rb').lines
33
- @tables = {}
34
- read_flag = false
35
- table = ""
36
- lines.each do |l|
37
- if l.lstrip.rstrip.split('end').size == 0
38
- read_flag = false
39
- end
40
- if l.match(/create_table /) and l.match(/ do /)
41
- read_flag = true
42
- table = l.split('"')[1]
43
- @tables[table] = []
44
- end
45
- if read_flag
46
- @tables[table] << l
47
- end
48
- end
49
- @tables.each do |k, v|
50
- v.delete_at(0)
51
- sheet.set_row [k, v.join(':')]
52
- end
53
- end
54
-
55
- excel.write_sheet 'models' do |sheet|
56
- sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'})
57
- sheet.set_point 'a1'
58
-
59
- @models = @@root.app.models.search_files(/.rb$/)
60
- @controllers = @@root.app.controllers.search_files(/_controller.rb$/)
61
- @views = @@root.app.views.search_dirs
62
-
63
- rows = []
64
- @models.each do |model_file|
65
- model_name = model_file.name.split('.')[0]
66
- next if @tables[model_name.pluralize].nil?
67
-
68
- model_lines = model_file.lines
69
- actions_full_name = model_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact
70
- actions = actions_full_name.map{|action| action.split(' ')[0]}
71
- model_instance = eval("#{model_name.camelize}.new")
72
- fields = model_instance.attributes.keys
73
-
74
-
75
- controller = find_controller model_name.pluralize
76
- if controller
77
- controller_lines = controller.lines
78
- controller_methods = controller_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact
79
- end
80
-
81
- view = find_view model_name.pluralize
82
- if view
83
- views = view.search_files(/.html/)
84
- end
85
-
86
- rows << [
87
- model_name, # 模型
88
- model_name.camelize, # 类
89
- model_lines.size, # 模型lines
90
- model_file.path, # 模型文件
91
- (controller.nil? ? '' : controller.path), # 控制器文件
92
- (controller.nil? ? 0 : controller_lines.size),# 控制器lines
93
- actions.size, # 模型方法size
94
- actions.join(','), # 模型方法
95
- fields.size, # 字段size
96
- fields.join(','), # 字段
97
- (views.nil? ? 0 : views.size), # 视图size
98
- (views.nil? ? '' : views.map{|v| "#{v.name.split('.')[0]}-#{v.path}"}.join(',')), # 视图
99
- (controller_methods.nil? ? 0 : controller_methods.size), # action-size
100
- (controller_methods.nil? ? '' : controller_methods.join(',')) # actions
101
- ]
102
- end
103
- rows = rows.compact.sort{|a,b| b[2] <=> a[2]} # 按 模型文件行数 排序
104
- sheet.set_rows rows
105
-
106
- sheet.set_row []
107
- sheet.set_row []
108
- sheet.set_headings ['模型','类',
109
- '模型lines','模型文件',
110
- '控制器文件','控制器lines',
111
- '模型方法size','模型方法',
112
- '字段size','字段',
113
- '视图size', '视图',
114
- 'action-size','actions']
115
- end
116
- end
117
- end
118
-
119
- def find_controller model_name
120
- @controllers.each do |c|
121
- if c.name.split('_controller.rb')[0] == model_name
122
- return c
123
- end
124
- end
125
- nil
126
- end
127
- def find_view model_name
128
- @views.each do |v|
129
- if v.name == model_name
130
- return v
131
- end
132
- end
133
- nil
134
- end
135
- def camelize name
136
- name.camelize
137
- end
138
- def name
139
- @@root.name
140
- end
141
- def path
142
- @@root.path
143
- end
144
-
145
-
146
- def self.save_info
147
- @@p ||= Ld::Project.new(Rails.root.to_s)
148
-
149
- end
150
-
151
- def self.get_routes
152
- @@p ||= Ld::Project.new(Rails.root.to_s)
153
- file = Ld::File.new @@p.config.path + '/routes.txt'
154
- system "rake routes > #{file.path}"
155
- file.lines.map{|line| arr = line.split(' '); arr.size == 3 ? arr.unshift(nil) : arr}
156
- t.headings = ['controller', 'action', 'type']
157
- arrs.map{|arr| controller,action = arr[3].split('#'); [controller, action, arr[1]]}
158
- .each{|arr| t.add_row arr}
159
- end
160
-
161
- def self.p model = :all
162
- @@p ||= Ld::Project.new(Rails.root.to_s)
163
-
164
- t = Terminal::Table.new
165
- case model.to_s
166
- when 'all'
167
- t.title = "project:#{@@root.name}"
168
- t.headings = ['models', 'views', 'controllers', 'routes']
169
- t.add_row [@@p.models.size, @@p.views.size, @@p.controllers.size, @@p.routes.lines.size]
170
- when 'models'
171
- t.title = 'models'
172
- t.headings = ['name', 'action-size', 'line-size', 'routes']
173
- @@p.models.map{|f| [f.name.split('.')[0], f.lines.map{|l| l if l.match(/def /)}.compact.size, f.lines.size, nil] }
174
- .sort{|a,b| b[1]-a[1]}.each{|i| t.add_row i}
175
- when 'controllers'
176
- t.title = 'controllers'
177
- t.headings = ['name', 'action-size', 'line-size']
178
- @@p.controllers.map{|f| [f.name.split('.')[0], f.lines.map{|l| l if l.match(/def /)}.compact.size, f.lines.size] }
179
- .sort{|a,b| b[1]-a[1]}.each{|i| t.add_row i}
180
- when 'views'
181
- t.title = 'views'
182
- t.headings = ['name', 'file-size', 'html']
183
- @@p.app.views.children('shared')
184
- .map{|f| htmls = f.search(/.html/);[f.name, htmls.size, htmls.map{|f2| f2.name.split('.')[0]}.join(' ')]}
185
- .sort{|a,b| b[1]-a[1]}
186
- .each{|arr| t.add_row arr}
187
- when 'routes'
188
- file = Ld::File.new @@root.path + '/routes.txt'
189
- if !file.exist?
190
- system "rake routes > #{@@root.path + '/routes.txt'}"
191
- end
192
- arrs = file.lines.map{|l| lines = l.split(' '); lines.size == 3 ? lines.unshift(nil) : lines}
193
- arrs.delete_at 0
194
- t.title = 'routes'
195
- t.headings = ['controller', 'action', 'type']
196
- arrs.map{|arr| controller,action = arr[3].split('#'); [controller, action, arr[1]]}
197
- .each{|arr| t.add_row arr}
198
- else
199
- puts '(models/controllers/views)'
200
- return
201
- end
202
- puts t
203
- end
204
-
205
- end
@@ -1,3 +0,0 @@
1
- module SearchModule
2
-
3
- end
File without changes
File without changes
File without changes
File without changes
File without changes