草庐IT

ruby-on-rails - 在 ruby​​ 中测试 mixin

我正在尝试为混合类编写rspec测试。我有以下内容。moduleonemoduletwodefmethodmethod_details=superifmethod_details.a&&method_details.bsomethingelsifmethod_details.banotherthingelselastthingendendendend现在我已经模拟了将传递给类的“方法”对象。但我正在努力访问super方法。我做到了,let(:dummy_class){Class.new{includeone::two}}如何传递模拟method反对这个虚拟类?我该如何进行测试?ruby

ruby - rubyists 是否从 mixin 中引用访问器?

从混合方法中引用扩展对象的访问器是否被认为是不好的做法?一个简单的例子:moduleWindInstrumentdefplaymouthpiece.blow#requiresamouthpieceendendclassSaxophoneattr_reader:mouthpiecedefinitialize@mouthpiece=Mouthpiece.newendincludeWindInstrumentendSaxophone.new.play在这种情况下,我实际上只是将对喉舌的要求直接移至WindInstrument模块,但在更复杂的情况下,访问器驻留在扩展对象上真的有意义吗?这只是

Ruby,mixin 实例变量和方法

我有两个文件,一个带有模块ToMix:moduleToMix@module_var="modulevar"defself.mix_functionputs"mix_functionSELF:#{@module_var}"enddefmix_functionputs"mix_function:#{@module_var}"endclassMixClassattr_accessor:mixclassvardefinitialize(value)@mixclassvar=valueendendend我想将其混合到另一个文件中的类TestInclude中:classTestIncludereq

Ruby mixins 寻找最佳实践

我正在编写RubyGem,其中有用于Faraday配置的Connection模块moduleExamplemoduleConnectionprivatedefconnectionFaraday.new(url:'http://localhost:3000/api')do|conn|conn.request:url_encoded#form-encodePOSTparamsconn.response:logger#logrequeststoSTDOUTconn.adapterFaraday.default_adapter#makerequestswithNet::HTTPconn.use

ruby-on-rails - 从 mixin 访问类名

在我的Rails项目中,我将全局设置存储在一个字符串索引哈希中,其中每个类(模型)都有一个用于其自己设置的“命名空间”。例如,新闻模型可能具有设置“news.stories_per_page”或“news.show_date”。为了避免在任何地方都进行名称修改,我有一个mixin,它提供了用于访问这些设置的通用类方法。使用这个mixin,我可以使用如下代码访问“news.show_date”:News.setting:show_date=>true现在,问题来了。为了生成字符串“news.show_date”,我需要知道混合我的模块的模型的类名。但是在类方法中,self.class=>

ruby - 在实例方法中使用 mixin 方法

为什么这不起作用:classMyclassincludeHTTPartydefdosomethingbase_uri("some_url")endendbase_uri方法是HTTParty的一个类方法。如果我从我的类、任何实例方法之外或从类方法调用它,它工作正常,但是当尝试从实例方法调用它时,我得到“NoMethodError:undefinedmethod`base_uri'for#”为什么?难道不应该有某种方法从我的实例方法中引用HTTParty类,以便我可以调用该HTTParty类方法吗?我可以将其更改为类方法,但这样我的类的每个实例都将具有相同的base_uri值。

ruby - mixin 是否应该对它们的包含类做出假设?

我发现了一个mixin的例子,它对包含的类有哪些实例变量进行了假设。像这样:moduleFooabledefcalculate@val_one+@val_twoendendclassBarattr_accessor:val_one,:val_twoincludeFooableend我找到了支持和反对这是否是一种好做法的论点。明显的替代方法是将val_one和val_two作为参数传递,但这似乎并不常见,并且具有更多参数化方法可能是一个缺点。是否存在关于mixin对类状态的依赖的传统观点?从实例变量读取值与将它们作为参数传递有哪些优点/缺点?或者,如果您开始修改实例变量而不是仅仅读取它们

ruby - 如何编写卫生的 Ruby mixin?

假设我正在编写一个向第三方类添加功能的混合模块。显然,我想让第三方类及其客户端可以访问某些方法和实例变量。这些构成了mixin模块的公共(public)接口(interface)。但是我想封装一些其他的方法和实例变量。我不希望我正在混合的类可以访问它们,特别是我不希望它们意外地覆盖、隐藏、冲突或以其他方式干扰mixee类的方法或实例变量——无论是那些当前可能存在的,或者如果第三方修改我正在混入的类,将来可能会创建的。如果有的话,我需要采取什么预防措施来确保我的mixin以这种方式“卫生”? 最佳答案 创建一个单独的对象来封装您的功能

ruby-on-rails - 使用 mixins 初始化类变量

我有classFruit和mixin模块moduleSkindefinitializeself.skin="fuzzy"endend我想要这样>>Fruit.new# 最佳答案 使用ActiveRecordafter_initialize回调。moduleSkindefself.included(base)base.after_initialize:skin_initenddefskin_initself.skin=...endendclassFruit 关于ruby-on-rails-

python - 什么是 mixin,它为什么有用?

在ProgrammingPython,MarkLutz提到了mixin这个词。我来自C/C++/C#背景,之前没有听说过这个词。什么是混入?thisexample的行间阅读(我已经链接到它,因为它很长),我假设这是使用多重继承来扩展类而不是适当的子类化的情况。是这样吗?我为什么要这样做而不是将新功能放入子类中?就此而言,为什么混合/多重继承方法比使用组合更好?mixin与多重继承的区别是什么?只是语义问题吗? 最佳答案 mixin是一种特殊的多重继承。使用mixin主要有两种情况:您想为类(class)提供许多可选功能。您想在许多不