我读到了一篇blog post,它建议将你的猴子补丁命名为空格,这样就可以很容易地查看和包含它们。
例如:
module CoreExtensions
module DateTime
module BusinessDays
def weekday?
!sunday? && !saturday?
end
end
end
end将包含在:lib/core_extensions/class_name/group.rb文件中。
它可以通过Module#include实例方法包含在DateTime类中(类继承该方法,因为Class是Module)
# Actually monkey-patch DateTime
DateTime.include CoreExtensions::DateTime::BusinessDays我的问题是include语句的去向是什么?有约定吗?
例如:
我有以下猴子补丁:
# http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/
module CoreExtensions
module String
module Cases
def snakecase
return self if self !~ /[A-Z]+.*/
# http://rubular.com/r/afGWPWLRBB
underscored = gsub(/(.)([A-Z])/, '\1_\2')
underscored.downcase
end
def camelcase
return self if self !~ /_/ && self =~ /[A-Z]+.*/
split('_').map{ |e| e.capitalize }.join
end
end
end
end存在于lib/core_extensions/string/cases.rb文件中的。
我应该把我的String.include CoreExtensions::String::Cases语句放在哪里?
另外需要说明的是,这只是一个ruby项目,这有什么不同吗?
我试过把它放到lib/devify.rb里面
require 'devify/version'
require 'devify/some_dir'
require 'devify/scaffold'
require 'devify/tree_cloner'
require 'devify/renderer'
require 'devify/project'
require 'devify/tasks/some_task'
require 'devify/tasks/bootstrap'
require 'core_extensions/string/cases'
module Devify
String.include CoreExtensions::String::Cases
end这是可行的,也是有道理的。这是因为我的整个应用程序都驻留在Devify模块或名称空间中。
这种方式也很好,因为我没有污染全局名称空间,对吗?因为我只是在修补Devify内部的String
只是不确定这是否是正确的方法。
https://stackoverflow.com/questions/41497350
复制相似问题