@iBachue 谢谢,我也有同样的感觉,大多用 activesupport ...
@ruchee 我们还有将思维导图说成 "树图"
我到现在 Mac 上的 option(alt) 与 shift 还老弄混..
@neverlandxy_naix You are right. 我弄混了,多谢指正。:-)
今天心血来潮看了 CodeSchool 的 Creating Ruby Gems 然后中间有讲到 testing gem
报告~ 已经用 ag 替换掉了 grep ;)
@ashchan 用 Nginx 搭建两个 vhost 是使用 Passenger 吗?用 puma/thin 之类不同 RACK_ENV 相同端口应该会冲突吧?
@youfeis 的确,MRI 是 C 语言实现的 Ruby 解释器,我们一般都是安装 Ruby 是安装的编译好的二进制文件不需要源代码了。RubyMine 里面基本上是看的是 ruby 代码,object.rb 中的方法也就是个 stub. 不过你可以查看 ruby doc ,例如用 Dash 看 doc
然后跑到 github 上去看 object.c 源码..
我用 RubyMine 更多的是看各种 Ruby gem 的实现代码,例如:
超级超级酷!!
额,我在 Mongoid Doc 中没找到 key , 还有 references_many 也没在 Mongoid Relation 中找到... 是不是用了老版本的 API ?
@AlphaLiu Ruby 元编程的扁平作用域
@xdxie 额,好吧。其实我会 diff 一下两份 raw data , 看看会不会有差别。突然我想到了 Gmail 强大的 Spam 过滤。
@xdxie 然后你比较比较通过手动发送的邮件,与通过 Rails Mailer 发送的邮件他们会有什么差别吗?Gmail 里面有一个 Show original 可以看到发送邮件的所有信息。外面看不出来,就只能看具体参数信息了。
@hellolucky123 哈哈,我发现我也这样折腾过.
可以看看 timers, 也是 Celluloid 中用到了。不过实现也是 sleep, 代码上使用方便点。
require 'timers'
timers = Timers.new
timers.after(5) { puts 'do something' }
timers.wait # 5s 后 puts...
其实我是上次看 Sidekiq 的 scheduled.rb 找到 Celluloid , 然后再到 timers gem..
@hellolucky123 这个可以理解成脱离 Rails 使用 Rspec 吗?因为在 github 上,看到很多 gem 都会带上一个 spec/ 目录,用 Rspec 测试 Gem . 例 Celluloid
你可以先手动发送一封邮件到 [email protected] 邮箱,看看是否会成功自动转发。
邮件成功发送到 edu.tw 邮箱了,Rails Mailer 的工作也就做完了 - -||
@xjz19901211 :) 不要忘记测试 . 测试很重要。
@xjz19901211 换个方式,直接从 A 类处理了子类 include 的 module 的方法。感觉有点暴力啊,如果真要这么做一定要让所有单元测试跑通才行啊。
class A
class << self
# class macro 用于可动态调整, 例如
# B.class_eval do
# include M2
# check_super :m2_b
# end
# B.new.m2_b # m2-b
#
def check_super(method_name)
# 根据 method_name 查询所有的 module 的第一个 instance_method, 如果存在, 并且 self 不是 A 这个父类的话, 就使用 module 中的 method_name
first_module_method = self.included_modules.map { |_module| _module.instance_method(method_name) if _module.instance_methods(false).include?(method_name) }.first
self.send(:remove_method, method_name) if self != A and first_module_method
end
def method_added(method_name)
check_super(method_name)
end
end
end
module M
def a
puts 'm-a'
end
end
class B < A
include M
def a
puts 'b-a'
end
end
B.new.a # m-a
@xjz19901211 不知道我的理解是否正确。
require 'active_support/core_ext'
module M
# 可以不需要 Concern 转而使用 self.included(mod) 加 mod.send(..) 处理
extend ActiveSupport::Concern
included do
alias_method :ori_a, :a
remove_method :a
end
def a
puts 'm-a'
end
end
class A
end
class B < A
def a
puts 'b-a'
end
# 因为需要 B 先有 a 方法, 才能够在 Module 中处理 a 方法.
# 如果是动态 include 那应该没有问题.
include M
end
b_klass = B.new
b_klass.a # m-a
b_klass.ori_a # b-a
@ttt 马甲君好,马甲君再见。
DigitalOcean 相比 Linode , 我还是会选 Linode.
试用过后的感受,现在已经没有使用了。
哇~ 终于等到了~
春晚已经没有吸引力啦
意犹未尽 :)
非常值,比"世界末日"那一次还给力。