lib/ld/project.rb in ld-0.1.9 vs lib/ld/project.rb in ld-0.1.10

- old
+ new

@@ -1,26 +1,141 @@ class Ld::Project - attr_accessor :root, :app, :name, :path, :models, :views_dir, :views, :controllers, :routes +attr_accessor :app, :name, :models, :views_dir, :views, :controllers, :routes - def initialize path - @root = Ld::File.new(path) - @app = @root.app - @models = @app.models.search(/.rb$/) - @views_dir = @app.views.children - @views = @app.views.search(/.html/) - @controllers = @app.controllers.search(/_controller.rb$/) - @routes = @root.config.find('routes.rb') + def initialize + @@root = Ld::File.new Rails.root.to_s + system "rake routes > #{@@root.config.path}/routes.txt" + Ld::Excel.create "#{@@root.config.path}/project.xls" do |excel| + excel.write_sheet 'routes' do |sheet| + sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'}) + sheet.set_headings ['控制器', 'action', '请求类型','URI','帮助方法'] + sheet.set_point 'a1' + sheet.set_rows @@root.config.find('routes.txt').lines + .map{|line| + arr = line.split(' ') + arr.unshift(nil) if arr.size == 3 + arr + } + .delete_if{|arr| arr.size == 5 } + .map{|row| + controller, action = row[3].split('#') + type = row[1] + help_method = row[0] + uri = row[2] + [controller, action, type, uri, help_method] + } + end + + excel.write_sheet 'models' do |sheet| + sheet.set_format({color: :black, font_size: 14, font: '微软雅黑'}) + sheet.set_point 'a1' + + @models = @@root.app.models.search_files(/.rb$/) + @controllers = @@root.app.controllers.search_files(/_controller.rb$/) + @views = @@root.app.views.search_dirs + + sheet.set_rows @models.map { |model_file| + model_name = model_file.name.split('.')[0] + model_lines = model_file.lines + actions_full_name = model_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact + actions = actions_full_name.map{|action| action.split(' ')[0]} + model_instance = eval("#{model_name.camelize}.new") + fields = model_instance.attributes.keys + + + controller = find_controller model_name.pluralize + if controller + controller_lines = controller.lines + controller_methods = controller_lines.map{|l| l.split('def ')[1] if l.match(/def /)}.compact + end + + view = find_view model_name.pluralize + if view + views = view.search_files(/.html/) + end + + [ + model_name, # 模型 + model_name.camelize, # 类 + model_lines.size, # 模型lines + model_file.path, # 模型文件 + (controller.nil? ? '' : controller.path), # 控制器文件 + (controller.nil? ? 0 : controller_lines.size),# 控制器lines + actions.size, # 模型方法size + actions.join(','), # 模型方法 + fields.size, # 字段size + fields.join(','), # 字段 + (views.nil? ? 0 : views.size), # 视图size + (views.nil? ? '' : views.map{|v| "#{v.name.split('.')[0]}-#{v.path}"}.join(',')), # 视图 + (controller_methods.nil? ? 0 : controller_methods.size), # action-size + (controller_methods.nil? ? '' : controller_methods.join(',')) # actions + ] + }.sort{|a,b| b[2] <=> a[2]} # 按 模型文件行数 排序 + + sheet.set_row [] + sheet.set_row [] + sheet.set_headings ['模型','类', + '模型lines','模型文件', + '控制器文件','控制器lines', + '模型方法size','模型方法', + '字段size','字段', + '视图size', '视图', + 'action-size','actions'] + end + end end + def find_controller model_name + @controllers.each do |c| + if c.name.split('_controller.rb')[0] == model_name + return c + end + end + nil + end + def find_view model_name + @views.each do |v| + if v.name == model_name + return v + end + end + nil + end + def camelize name + name.camelize + end + def name + @@root.name + end + def path + @@root.path + end + + + def self.save_info + @@p ||= Ld::Project.new(Rails.root.to_s) + + end + + def self.get_routes + @@p ||= Ld::Project.new(Rails.root.to_s) + file = Ld::File.new @@p.config.path + '/routes.txt' + system "rake routes > #{file.path}" + file.lines.map{|line| arr = line.split(' '); arr.size == 3 ? arr.unshift(nil) : arr} + t.headings = ['controller', 'action', 'type'] + arrs.map{|arr| controller,action = arr[3].split('#'); [controller, action, arr[1]]} + .each{|arr| t.add_row arr} + end + def self.p model = :all @@p ||= Ld::Project.new(Rails.root.to_s) t = Terminal::Table.new case model.to_s when 'all' - t.title = "project:#{@@p.root.name}" + t.title = "project:#{@@root.name}" t.headings = ['models', 'views', 'controllers', 'routes'] t.add_row [@@p.models.size, @@p.views.size, @@p.controllers.size, @@p.routes.lines.size] when 'models' t.title = 'models' t.headings = ['name', 'action-size', 'line-size', 'routes'] @@ -37,12 +152,12 @@ @@p.app.views.children('shared') .map{|f| htmls = f.search(/.html/);[f.name, htmls.size, htmls.map{|f2| f2.name.split('.')[0]}.join(' ')]} .sort{|a,b| b[1]-a[1]} .each{|arr| t.add_row arr} when 'routes' - file = Ld::File.new @@p.root.path + '/routes.txt' + file = Ld::File.new @@root.path + '/routes.txt' if !file.exist? - system "rake routes > #{@@p.root.path + '/routes.txt'}" + system "rake routes > #{@@root.path + '/routes.txt'}" end arrs = file.lines.map{|l| lines = l.split(' '); lines.size == 3 ? lines.unshift(nil) : lines} arrs.delete_at 0 t.title = 'routes' t.headings = ['controller', 'action', 'type'] \ No newline at end of file