小编Aje*_*i32的帖子

在Ruby中,有没有办法在子类中"覆盖"常量,以便继承的方法使用新常量而不是旧常量?

在Ruby中,是否有一种方法可以"覆盖"子类中的常量,从而从子类调用继承的方法会导致该方法使用新常量而不是旧常量?例如:

class SuperClass
  CONST = "Hello, world!"
  def self.say_hello
    CONST
  end
end

class SubClass < SuperClass
  override_const :CONST, "Hello, Bob!"
end

SuperClass.say_hello # => "Hello, world!"
SubClass.say_hello   # => "Hello, Bob!"
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有办法做这样的事情呢?

class SuperClass
  CONST = "Hello, world!"
  def self.say_hello
    CONST
  end
end

SubClass = SuperClass.clone
SubClass.send(:remove_const, :CONST)
SubClass.const_set(:CONST, "Hello, Bob!")

SubClass.say_hello # => "Hello, Bob!"
Run Code Online (Sandbox Code Playgroud)

注意:我在irb中尝试了我的第二个例子,它似乎工作,除了在克隆类之后类方法似乎无法访问CONST:

irb(main):012:0> SubClass.say_hello
NameError: uninitialized constant Class::CONST
        from (irb):4:in `say_hello'
        from (irb):12
        from C:/Ruby193/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

ruby

40
推荐指数
2
解决办法
1万
查看次数

在任何主流浏览器中都有内置的HTML验证器吗?

在Firefox中,有一个名为"Html Validator"的扩展.它会在窗口的右下角添加一个小指示符图标.当您访问的页面无效时,它会亮起.您可以单击它以查看错误.这个扩展的真正重要特征是它不与w3c的验证器建立连接.w3c使用的相同验证SGML解析器是捆绑的.这意味着它可以验证本地HTML文件.(这对我来说是最重要的用途,因为我使用手动编码的html文件进行Web开发.每次我在浏览器中预览HTML时,我也可以知道它是否有验证错误.)

谷歌Chrome,Opera,Safari甚至IE都有类似的东西吗?当我查看过去几年时,我见过的所有其他验证器只是将当前的URL发送到w3c的验证器站点.

html html-parsing

28
推荐指数
3
解决办法
3万
查看次数

jQuery Deferred:拒绝完成过滤器中的承诺

Fyi,我刚刚开始学习jQuery的承诺,所以我在这里可能有点困惑.

无论如何,我有一个AJAX请求,我想根据响应的内容在完成过滤器中拒绝:

return doAJAXRequest().then(function (data) {
    if (data.responseText == "YES") {
        return doOtherAJAXRequest();
    } else {
        this.reject(data);
    }
});
Run Code Online (Sandbox Code Playgroud)

这不像我预期的那样有效:

Uncaught TypeError: Object #<Object> has no method 'reject'
Run Code Online (Sandbox Code Playgroud)

我如何根据其响应使此承诺失败?那可能吗?或者我只是对这里需要做什么感到困惑?

jquery jquery-deferred

23
推荐指数
1
解决办法
9807
查看次数

体面的Git Branch可视化工具

我正在使用git进行个人和大型项目,其范围很广(不仅仅是编程)和大量文件.因此我有很多分支和合并,我希望在Git中有一个很好的可视化工具用于分支和合并(特别是如果它提供动画就像gource或图形功能,如PlasticSCM).gitk或git log是很好的工具,我现在使用它们但不是确切的解决方案.

我喜欢开源项目,我更喜欢一个只完成工作的应用程序(不是一个完整的git前端)但是如果没有开源解决方案,那么欢迎使用封闭式或重型git软件.我发现:

SeeGitApp(对我来说不好,特别是长而重的分支和合并),

GitCola(我在第一次尝试时无法在Windows上安装它),

GitVersionTree(非常基本),

gitlist(基于服务器,php,我无法尝试),

gittreemap,

git2html.sh,

git log --pretty.

正如我所说,我只是搜索开源和实用程序.如果这项任务没有这样的效用,你会提供什么呢?

git git-gui

23
推荐指数
3
解决办法
4万
查看次数

如何在Rails 3中的Postgres数据库中使用枚举?

PostgreSQL具有内置于数据库中的枚举类型的概念.

如何实现一个包含在Rails 3中使用枚举类型的列的表?你需要以某种方式在PostgreSQL中定义枚举吗?你怎么能创建一个这样做的数据库迁移?

使用Rails 3.07,Ruby 1.92p180,PostgreSQL 8.3.

postgresql enums ruby-on-rails database-migration ruby-on-rails-3

21
推荐指数
2
解决办法
7033
查看次数

为什么模块`ClassMethods`在同一名称空间中定义和扩展?

我试图理解来自github repo的代码.它是设置客户端的gem的主要模块.

module Github
  # more code
  class << self
    def included(base)
      base.extend ClassMethods # what would this be for?
    end
    def new(options = {}, &block)
      Client.new(options, &block)
    end
    def method_missing(method_name, *args, &block)
      if new.respond_to?(method_name)
        new.send(method_name, *args, &block)
      elsif configuration.respond_to?(method_name)
        Github.configuration.send(method_name, *args, &block)
      else
        super
      end
    end
    def respond_to?(method_name, include_private = false)
      new.respond_to?(method_name, include_private) ||
      configuration.respond_to?(method_name) ||
      super(method_name, include_private)
    end
  end

  module ClassMethods
    def require_all(prefix, *libs)
      libs.each do |lib|
        require "#{File.join(prefix, lib)}"
      end
    end
    # more methods ...
  end …
Run Code Online (Sandbox Code Playgroud)

ruby gem

18
推荐指数
1
解决办法
4887
查看次数

如果成功有时导致退出代码为1,我如何可靠地确定pg_restore是否成功?

运行pg_restore --clean --dbname=my_database backup_file.sql以将数据库转储还原到空数据库时,还原成功,但出现以下警告消息:

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 161; 1259 16549 TABLE example_table root
pg_restore: [archiver (db)] could not execute query: ERROR:  table "example_table" does not exist
    Command was: DROP TABLE public.example_table;

WARNING: errors ignored on restore: 1
Run Code Online (Sandbox Code Playgroud)

如消息所示,恢复成功.有错误,但pg_restore声称忽略了它们.我还能够手动查询数据库,以验证在恢复后我预期在转储中的所有数据是否都存在于数据库中.

问题是上面的命令退出状态为1,而不是0.当以编程方式执行数据库恢复时(正如我打算在自动执行此过程时那样),这是有问题的,因为我的脚本需要能够可靠地确定是否恢复成功与否.

有没有办法pg_restore在确定退出状态时发出忽略警告?或者pg_restore我可以使用一些替代方法,我可以从中获得更准确的成功/失败信息?如何还原数据库并可靠地以编程方式确定还原是否成功?

请注意,我目前正在使用PostgreSQL 9.1.

postgresql postgresql-9.1

17
推荐指数
1
解决办法
6546
查看次数

使用Capybara,我如何判断当前使用的驱动程序是否支持JavaScript?

在我的Rails应用程序中,我有一组黄瓜验收测试,用于测试我的应用程序的各个页面.使用黄瓜,标记特定测试(场景),@javascript导致场景使用JavaScript驱动程序而不是不支持JavaScript的简单驱动程序运行.

有没有一种简单的方法可以让我的测试确定它们当前是使用支持JavaScript的驱动程序还是不支持JavaScript的驱动程序运行?我希望这样,这样如果在启用JavaScript的情况下运行,我可以使我的测试行为略有不同.

ruby-on-rails cucumber capybara

14
推荐指数
2
解决办法
5612
查看次数

有没有办法表达"无限时间"?

我正在使用Range该类代表一系列次数.现在我想要一个代表给定时间后任意点的范围.

我尝试过(DateTime.now .. nil),但是Range类不允许不同类的对象成为相同范围的端点.(尝试Range使用此属性创建结果ArgumentError: bad value for range.)

时间是否等于无穷大,即Time.now + (1.0/0.0)?或者,有没有办法绕过Range类的要求,它的值minmax值是同一个类?

ruby

12
推荐指数
2
解决办法
5760
查看次数

本机Web组件中的双向数据绑定

我一直在阅读网络组件,并且对新生规范非常感兴趣.有没有人知道在DOM中是否支持双向数据绑定,而不必使用Polymer?一个例子将不胜感激.

html5 web-component 2-way-object-databinding

12
推荐指数
1
解决办法
5719
查看次数