标签: yard

在YARD中使用多种方法记录duck类型

YARD允许我指定方法参数和返回值的类型.由于我真的喜欢鸭子类型,很高兴看到YARD还支持通过指定必须支持的方法来定义类型.

正如你在这里看到的,表达式如

#first_method, #second_method
被解释为逻辑分离.这意味着对象需要支持#first_method或#second_method或两者.这不是我需要的.

我希望能够指定一个对象需要支持#first_method和#second_method作为我的参数.有没有办法指定这个?

ruby documentation yard

6
推荐指数
1
解决办法
1366
查看次数

如何自定义diff git以忽略码数日期生成

我正在用院子来生成我项目的文件.即使认为文档可以生成,因此不需要进行版本化,我们决定这样做,因为它可以更容易地看到代码(注释)在实际文档中的变化的影响.

问题是每个时间段生成文档,它会更改每个文件开头的日期,导致所有文件被视为已更改.

有没有办法告诉git忽略那些行来检测文件是否已经改变,或者是一种方法来配置码不重新生成文件,如果它们是相同的?

谢谢

更新

我知道我可以做一个脚本或其他什么,如果只有日期改变了,它会清理文件.所以我的问题是有一种Git方法可以做.我应该阅读有关diff驱动程序的内容,还是应该使用干净的脚本.

如果我要走向清理路径,那么使用git hook或将其集成到doc生成中会更好.

最终,我对跟踪由于生成的doc中的特定提交而导致的更改的任何其他方式感兴趣.

我还没有真正解释我的问题是什么(以及为什么我要尝试编写不需要的东西)所以我们去了.

有时,代码中的一点修改搞砸了文档,因此我将能够看到提交对文档的影响.

示例:我使用modeline for vim(文件第一行的注释告诉vim不同的信息)

知道我有一个包含模块文档的文件

#vi: my vim setting 
# Documentation of module A
module A
  .... some code

end
Run Code Online (Sandbox Code Playgroud)

在其他地方我使用这个模块

#vi : my vim setting

           ( 2 blank lines)
module A
   .... some different code
end
Run Code Online (Sandbox Code Playgroud)

那时,一切都很好,A的文档就是Documentation of module A.但是如果某个人(像我一样)删除了最后一个文件中的空白行并且只留下一行(是的,我在模式行和代码之间放了2个空行),那么院子认为模式行是模块A的文档vi : my vim setting.

问题是,除了查看每一页之外,没有办法检测到文档被搞砸了.使用git,我可以快速查看并检查更改的内容,甚至可以找到什么时候(这很重要,因为那时我可以弄清楚它为什么会发生变化).

git yard

6
推荐指数
1
解决办法
1113
查看次数

使用rakefile从源生成文档

我下载了ruby Twitter gem源代码,我正在尝试使用yard来生成文档,我通过它安装gem install yard.在rakefile中,我发现了以下内容,我假设它用于生成Twitter gem的文档:

require 'yard'
YARD::Rake::YardocTask.new
Run Code Online (Sandbox Code Playgroud)

我试着require yard用irb然后跑,YARD::Rake::YardocTask.new但什么都没发生.

你能帮助我走上正轨吗?

ruby rake yard

6
推荐指数
1
解决办法
1995
查看次数

不带参数的文档块

我正在编写我的第一个 gem,并使用 YARD 进行记录。我已经让我的一个类有一个构造函数,它需要一个不带参数的块1

YARD 提供了@yield [params] description标签来根据方法将传递给它的参数来描述块参数,但如果列表params为空,则它的格式不正确。我应该如何记录没有参数的块?

1:从技术上讲,我什至没有yield达到目标;我的代码如下所示:

def initialize(&block)
  define_singleton_method(:create, block)
  create
  class << self; undef_method :create; end
end
Run Code Online (Sandbox Code Playgroud)

...因此该块包含要在新创建的对象的上下文中运行的代码。如果出于某种原因这是一个糟糕的主意,我也很高兴知道这一点:)

ruby block yard

6
推荐指数
1
解决办法
1460
查看次数

使用YARD时忽略注释掉的代码

我有一些看起来像这样的Ruby代码:

# some_string = "{really?}"
Run Code Online (Sandbox Code Playgroud)

花括号需要成为字符串的一部分.这行是注释掉的代码,我想留在那里.我另外使用YARD来记录代码,所以当我运行yard doc它时(自然地)抛出一个关于无法链接"真的"的警告.

有没有办法告诉YARD忽略注释掉的代码?

ruby yard

6
推荐指数
1
解决办法
522
查看次数

为 YARD 创建一个全新的模板?

我需要更改Yard生成的 HTML 文档的结构;与默认 HTML 模板没有太多共同之处。

据我了解,解决方案是创建一个新的 YARD 模板,但我在创建模板时遇到了问题。该YARD文档上定制关于这一主题旧的博客文章似乎更倾向于让已经存在的模板为目标。

我希望有人可以帮助我提供一些关于创建全新 YARD 模板的参考或示例。

ruby yard

6
推荐指数
0
解决办法
521
查看次数

如何引用当前类作为 YARD 中的返回类型?

考虑这样的代码:

module Foo
  # returns a copy of self
  # @return [ ___ ]
  def returns_new_self
    self.class.new
  end
end

class Bar
  include Foo
end

class Zap
  include Foo
end
Run Code Online (Sandbox Code Playgroud)

这样,Bar.new.returns_new_self将返回另一个Bar,同样的情况也是如此Zap.new.returns_new_self

我想要用retuns_new_self返回类型记录 YARD。
如果我能做一些像Rust@return [Self]那样的事情那就太好了Self

我可以做类似的事情吗?


编辑:(回复@spickermann)

实际的代码是这样的:

module MultipleItemBehaviour
  # @return [Integer]
  def count; not_implemented end

  # @return [Enumerator]
  def each_count
    return enum_for(:each_count) unless block_given?

    count.times do
      yield single_item
    end
  end

  # @return [ __SELF__ ]
  def single_item; …
Run Code Online (Sandbox Code Playgroud)

ruby yard

6
推荐指数
1
解决办法
1486
查看次数

如何使用 Yield 记录方法的返回类型?

我想使用 YARD 更好地记录此 na\xc3\xafve 记忆方法的返回类型:

\n
# Ensures that given block is only executed exactly once and on subsequent\n# calls returns result from first execution. Useful for memoizing methods.\n#\n# @param key [Symbol]\n#   Name or unique identifier of the method that is being memoized\n# @yield\n# @return [Object] Whatever the block returns\ndef memoize(key, &_block)\n  return @memos[key] if @memos.key?(key)\n\n  @memos[key] = yield\nend\n
Run Code Online (Sandbox Code Playgroud)\n

注意:@memos此类的#initialize方法上正在初始化一个空哈希。

\n

现在,很高兴表达该方法始终返回给定块返回的任何内容,但我不确定如何最好地做到这一点。我想过使用@yieldreturn,但随后需要像泛型这样的东西来表达类似的东西:

\n
# @yieldreturn [<T>]\n# @return [<T>] Whatever …
Run Code Online (Sandbox Code Playgroud)

ruby code-documentation yard

6
推荐指数
0
解决办法
638
查看次数

Python 中是否有相当于 Ruby's Yard 的东西?

我同时使用 Python 和 Ruby,而且我真的很喜欢 Ruby's Yard 文档服务器:

http://yardoc.org/

我想知道Python世界里是否有类似的东西?“pydoc -p”确实很旧,丑陋,使用起来一点也不舒服,而且看起来Sphinx和Epydoc不支持服务器模式。

你知道有什么等价的吗?

谢谢

ruby python documentation-generation yard

5
推荐指数
1
解决办法
1321
查看次数

使用 Yard 记录 Rails 项目

我正在使用 Yard 生成文档,但找不到任何关于 ruby​​ on rails 项目的示例文档。我在rubydoc.info上只找到了简短的入门教程和一些 github 项目,但根本没有记录它们。请有人告诉我如何正确记录控制器(带动作)、模型、rails 项目的路线

例如我有这样的控制器:

class ArticlesController < ApplicationController
  before_filter :authenticate_user!, except: [:show]
  before_filter :restrict_user, only: [:edit, :update]

  def index
    @articles = current_user.articles.sort_by_rating.
        paginate(:page => params[:page],
                 per_page: 5)
  end

  def new
    @user = User.find(params[:user_id])
    @article = @user.articles.build
  end

  def create
    @user = User.find(params[:user_id])
    @article = @user.articles.build(params[:article])

    if @article.save
      redirect_to  @article, notice: 'Article was successfully created.'
    else
      render action: "new"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

和一个用户模型:

class User < ActiveRecord::Base
  # Include default …
Run Code Online (Sandbox Code Playgroud)

documentation ruby-on-rails yard

5
推荐指数
1
解决办法
3322
查看次数