Ruby实现命令行中查看函数源码的方法
如果要查看 ActiveRecord 的 update_attribute 函数的源代码,一个比较常见的方法是直接在 Rails 源码中搜索 def update_attribute。博客 The Pragmatic Studio 介绍了一个更方便的技巧,在 Ruby 命令行中就能启动编辑器直接访问。
通过 Object#method 方法可以获得 update_attribute 方法的对象,而 Method#source_location 则返回这个方法定义的文件和位置。有了这个信息后,就能启动编辑器查看源代码了:
> method = User.first.method(:update_attribute)
User Load (0.5ms) SELECT `users`.* FROM `users` LIMIT 1
=> #<Method: User(ActiveRecord::Persistence)#update_attribute>
> location = method.source_location
=> ["/Users/wyx/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.2.11/lib/active_record/persistence.rb",
177]
> `subl #{location[0]}:#{location[1]}`
=> ""
把这段代码封装成函数,加到 .pryrc 或者 .irbrc 中:
def source_for(object, method)
location = object.method(method).source_location
`subl #{location[0]}:#{location[1]}` if location && location[0] != '(eval)'
location
end
如果要查看 User 的实例方法 update_attribute,可以直接在 pry / irb 中调用
source_for(User.first, :update_attribute)
如果要使用其他编辑器,得把 subl #{location[0]}:#{location[1]} 换成这个编辑器对应的命令行:
# TextMate
mate #{location[0]} -l #{location[1]}
# MacVim
mvim #{location[0]} +#{location[1]}
# Emacs
emacs {location[0]} +#{location[1]}
相关推荐
-
Ruby中常用的字符串处理函数使用实例
1.返回字符串的长度 复制代码 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 复制代码 代码如下: str.include? other_str => true or false "hello".include? "lo" #=> true "hello".include? "ol" #=> false "hello".includ
-
Ruby中的方法(函数)学习总结
1.Ruby中方法名和变量名的命名规则一样(以小写字母开头,单词之间的分隔使用"_",),不过可以在方法名后边带上!(重磅方法)或者?(布尔类型返回值). 2.方法的参数请使用(),参数都是局部变量,可以为这些参数设置默认值,带"*"的参数是可选动态参数,可以传入一个或者多个,如果有普通参数,也有可选参数,可选参数要放在最后,如下边示例代码. 复制代码 代码如下: def read_book(chinese='水浒传',english='Jane Eyre',*ot
-
Ruby里4种比较函数(equal?, eql?, ==, ===)详解
Ruby里面有4种比较方法,equal?, eql?, ==, ===,而且在不同的类里面表现的很不一样.在使用的时候也特别容易搞糊涂. 这篇博文将演示一些代码来讲解各个方法. == - 类意义上的 相等,需要每个类自己定义实现 在特定类中觉得两个对象是否相同,需要看业务上的逻辑表象,所有由程序员覆盖该方法的定义,决定两个对象是否相同. 比如 String 类,他是来计较实际的文字串是否相同,而不在意是否来自同一个内存区域. >> a = "abc" #=> &quo
-
ruby中的双等号==问题详解
前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑. 问题根源 其中,在找到的漏洞出现的地方,都存在类似以下这样的 slim 代码: input class='xxx' value==params[:account] 问题就出在双等号 == 上,因为在 slim 跟 ERB 模板(其他模板比
-
Ruby实现命令行中查看函数源码的方法
如果要查看 ActiveRecord 的 update_attribute 函数的源代码,一个比较常见的方法是直接在 Rails 源码中搜索 def update_attribute.博客 The Pragmatic Studio 介绍了一个更方便的技巧,在 Ruby 命令行中就能启动编辑器直接访问. 通过 Object#method 方法可以获得 update_attribute 方法的对象,而 Method#source_location 则返回这个方法定义的文件和位置.有了这个信息后,就能
-
Android shell命令行中过滤adb logcat输出的方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法. 1.只显示需要的输出(白名单) 最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp: adb logcat | grep MyApp adb logcat |
-
在Linux系统的命令行中为MySQL创建用户的方法
要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可进行.每个MySQL用户帐号都有许多与之相关连的属性,例如用户名.密码以及权限和资源限制."权限"定义了特定用户能够在MySQL服务器中做什么,而"资源限制"为用户设置了一系列服务器资源的使用许可.创建或更新一个用户涉及到了对用户帐号所有属性的管理. 下面展示了如何在Linux中创建和设置一个MySQL用户. 首先以root身份登录到MySQL服务器中. $ mysql -u root -p 当验证提示出
-
Android shell命令行中过滤adb logcat输出的几种方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法. 1.只显示需要的输出(白名单) 最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp: adb logcat | grep MyApp adb logcat | grep -i
-
Linux ftp 命令行中下载文件get与上传文件put的命令应用详解
介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户peo相应目录下的文件所使用的命令为:ls,登录到ftp后在ftp命令提示符下查看本地机器用户anok相应目录下文件的命令是:!ls.查询ftp命令可在提示符下输入:?,然后回车. 1.从远程ftp服务器下载文件的命令格式: get 远程ftp服务器上当前目录下要下载的文件名 [下载到本地机器上当前
-
实例讲解yii2.0在php命令行中运行的步骤
Yii中的资源是和Web页面相关的文件,可为CSS文件,JavaScript文件,图片或视频等,资源放在Web可访问的目录下,直接被Web服务器调用. 有时候有些功能需要做到计划任务中去,因此就需要yii能用php命令去执行.yii2.0是支持php命令行运行的,操作方法如下: 在yii根目录下面有个"yii"文件(不是"yii.bat"),这个文件就是入口.然后"commands"目录下会默认有个"HelloController.ph
-
MySQL在Linux系统中隐藏命令行中的密码的方法
在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?,类似MySQL在ps命令下隐藏密码. 假设我这里系统里两个用户,一个是root ,一个是dabu .测试系统为centos 6.5在按照下面的步骤做: [root@dabu.info ~]#su dabu #切换到dabu这个账号 [dabu@dabu.info ~]$cd ~ #切换到dabu的h
-
shell 命令行中操作HBase数据库实例详解
shell 命令行中操作HBase数据库 Shell控制 进入到shell命令行界面,执行hbase命令,并附加shell关键字: [grid@hdnode3 ~]$ hbase shell HBase Shell; enter ¨help¨ for list of supported commands. Type "exit" to leave the HBase Shell Version 0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 2011
-
在 Linux 命令行中使用 tcpdump 抓包的一些功能
tcpdump 是一款灵活.功能强大的抓包工具,能有效地帮助排查网络故障问题. 以我作为管理员的经验,在网络连接中经常遇到十分难以排查的故障问题.对于这类情况, tcpdump 便能派上用场. tcpdump 是一个命令行实用工具,允许你抓取和分析经过系统的流量数据包.它通常被用作于网络故障分析工具以及安全工具. tcpdump 是一款强大的工具,支持多种选项和过滤规则,适用场景十分广泛.由于它是命令行工具,因此适用于在远程服务器或者没有图形界面的设备中收集数据包以便于事后分析.它可以在后台启动
-
使用devenv在命令行中编译项目的方法
本文介绍如何使用命令行运行Visual Studio编译项目. 一.devenv介绍 devenv是VisualStudio的可执行程序,一般在"..\Microsoft Visual Studio 12.0\Common7\IDE"下,用于运行Visual Studio. 使用devenv来编译项目的实例: devenv D:\Build\MyProject\Src\MyProject.sln /Build "Debug|x64" 二.devenv的使用帮助 1.
随机推荐
- AngularJs实现分页功能不带省略号的代码
- Java equals 方法与hashcode 方法的深入解析
- JavaScript必知必会(七)js对象继承
- js获取内联样式的方法
- 详细总结各种排序算法(Java实现)
- IOS 实现3D 浮动效果动画
- Java使用Jedis操作Redis服务器的实例代码
- 详解JS函数重载
- javascript 如何生成不重复的随机数
- Smarty中调用FCKeditor的方法
- linux系统下php安装mbstring扩展的二种方法
- python itchat实现微信自动回复的示例代码
- Webpack打包css后z-index被重新计算的解决方法
- htaccess 将所有请求重定向到某个URL地址的规则
- 初探JavaScript 面向对象(推荐)
- jQuery实现切换页面布局使用介绍
- Javascript中实现trim()函数的两种方法
- Java RandomAccessFile 指定位置实现文件读取与写入
- ASP.NET中如何实现回调
- 解决Oracle字符串中包含数字、特殊符号的排序问题