首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组织猴子补丁

组织猴子补丁
EN

Stack Overflow用户
提问于 2017-01-06 09:03:19
回答 0查看 222关注 0票数 2

我读到了一篇blog post,它建议将你的猴子补丁命名为空格,这样就可以很容易地查看和包含它们。

例如:

代码语言:javascript
复制
module CoreExtensions
  module DateTime
    module BusinessDays
      def weekday?
        !sunday? && !saturday?
      end
    end
  end
end

将包含在:lib/core_extensions/class_name/group.rb文件中。

它可以通过Module#include实例方法包含在DateTime类中(类继承该方法,因为ClassModule)

代码语言:javascript
复制
# Actually monkey-patch DateTime
DateTime.include CoreExtensions::DateTime::BusinessDays

我的问题是include语句的去向是什么?有约定吗?

例如:

我有以下猴子补丁:

代码语言:javascript
复制
# 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里面

代码语言:javascript
复制
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

只是不确定这是否是正确的方法。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41497350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档