微信号:ruby_and_rails

介绍:[Ruby程序员]旨在分享最新的Ruby & Rails,移动开发以及其他相关技术的分享,内容通俗易懂,有来自北京,上海,广州的技术达人不定期的分享.

屌丝版annotate

2015-04-03 14:42 ruby程序员

annotate介绍

annotate是一个文档类的gem,可以在model中以注释的方式插入到文件中。实际的效果如下图所示:


在model注释了表名、字段名、字段类型和约束。在团队开发的时候可能会涉及多人对一个model进行了多次编辑,容易造成团队中的人员对这个model的结构理解混乱。在开发的时候引入这个gem可以将model 的表结构清晰的展现在model文件中有利于开发人员理解。不仅如此,annotate注释tests, fixtures, factories。


使用方式

  • annotate默认注释 models, tests, fixtures, factories:

   cd /path/to/app
   annotate
  • 仅注释model:

   annotate --exclude tests,fixtures,factories,serializers
  • 注释路由:

   annotate --routes
  • 删除 model/test/fixture/factory/serializer 里的注释:

   annotate --delete

屌丝版annotate

因为感觉用不到annotate其他的功能只要在model里添加注释就可以了,所以就以rake的方式做了一个屌丝版的annotate步骤如下:
1.编写一个rake接受类名作为参数取到对应的类:

namespace :model do
  task :db_structure, [:klass] => :environment do |t, args|
    klass = Class.const_get(args[:klass])
  endend

2.取到类的数据库列表信息

   columns = klass.columns

3.在columns就可以拿到想要的信息了示例如下

   c = columns.first
   c.name
   c.type
   c.sql_type
   c.null
   c.default
   c.limit
   c.primary

4.依靠约定找到对应的文件

   file = File.expand_path klass.to_s.underscore + ".rb", Rails.root.to_s + "/app/models/" 

5.格式化输出

   # @length : 字段长度
   # @name:字段
   "%-#{@length.to_s}s%2s" % [@name, ""]

6.打开文件插入内容

   #@file : 文件路径
   #@data_table : 将格式化好的列整合到一个数组中
   File.open(@file, "a+") do |f|
      content = f.readlines          
      `> #{@file}`
      content.insert(@data_table)
      content.flatten!
      content.each do |s|
        f.write s
      end
   end

本次消息由Mars编辑~欢迎关注!

 
ruby程序员 更多文章 rails 中使用roo读取excel数据 ruby中的鸭子类型(duck type) Rails中如何使用jsonp实现跨域访问 一道笔试题 ruby设计模式-单例模式
猜您喜欢 PHP7 的抽象语法树(AST)带来的变化 HTML 5 Web Workers 技术改变世界 云智慧CEO殷晋的创业之路 一篇文章让你吃透Python迭代对象、迭代器、生成器 如何通过纸笔可视化创新想法