如何使用解析器 gem 提取我想要的代码片段?

2023-12-24

我只是偶然发现这个解析器宝石 https://github.com/whitequark/parser.

我想做的是从长文件中提取特定的方法。

一个例子是这样的has_manyRails 的方法:

 def has_many(name, scope = nil, options = {}, &extension)
    reflection = Builder::HasMany.build(self, name, scope, options, &extension)
    Reflection.add_reflection self, name, reflection
  end

唯一的问题是,我还需要能够提取同一方法的另一个版本(来自较早的时间),该版本更加冗长和复杂。该版本看起来像这样:

def has_many(association_id, options = {})
    validate_options([ :foreign_key, :class_name, :exclusively_dependent, :dependent, :conditions, :order, :finder_sql ], options.keys)
    association_name, association_class_name, association_class_primary_key_name =
          associate_identification(association_id, options[:class_name], options[:foreign_key])

    require_association_class(association_class_name)

    if options[:dependent] and options[:exclusively_dependent]
      raise ArgumentError, ':dependent and :exclusively_dependent are mutually exclusive options.  You may specify one or the other.' # ' ruby-mode
    elsif options[:dependent]
      module_eval "before_destroy '#{association_name}.each { |o| o.destroy }'"
    elsif options[:exclusively_dependent]
      module_eval "before_destroy { |record| #{association_class_name}.delete_all(%(#{association_class_primary_key_name} = '\#{record.id}')) }"
    end

    define_method(association_name) do |*params|
      force_reload = params.first unless params.empty?
      association = instance_variable_get("@#{association_name}")
      if association.nil?
        association = HasManyAssociation.new(self,
          association_name, association_class_name,
          association_class_primary_key_name, options)
        instance_variable_set("@#{association_name}", association)
      end
      association.reload if force_reload
      association
    end

    # deprecated api
    deprecated_collection_count_method(association_name)
    deprecated_add_association_relation(association_name)
    deprecated_remove_association_relation(association_name)
    deprecated_has_collection_method(association_name)
    deprecated_find_in_collection_method(association_name)
    deprecated_find_all_in_collection_method(association_name)
    deprecated_create_method(association_name)
    deprecated_build_method(association_name)
  end

那么我如何使用该 gem 成功提取这两种方法呢?

Gem 的自述文件对于完成解析新手来说不是很友好。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用解析器 gem 提取我想要的代码片段? 的相关文章

  • Ruby:使用默认值定义类级别哈希

    我有一个基本的红宝石课程 class LogEntry end 我想做的是能够用几个值定义一个哈希 如下所示 EntryType error gt 0 warning gt 1 info gt 2 这样我就可以访问这样的值 或类似的值 Lo
  • 默认更新嵌套属性

    我尝试更新 iProduction 这是生产中的嵌套表单 但此行出现参数错误 参数数量错误 0 代表 1 生产 update iproducts attributes cow id cow 我的创作动作制作 def create produ
  • Rails 多租户架构,限制多个租户的访问范围

    目前我们有一个单租户数据库架构 MySQL 运行着超过 100 个数据库 我们使用 Apartment gem 切换子域上的数据库连接 一切都很顺利 然而 我们现在需要创建所谓的 伞 客户端 它可以访问一组现有客户端的所有数据 我不认为这对
  • 计算机AI算法写句子?

    我正在寻找有关处理文本句子或在创建在正常人类语言 例如英语 中有效的句子时遵循结构的算法的信息 我想知道这个领域是否有我可以学习或开始使用的项目 例如 如果我给一个程序一个名词 为其提供同义词库 相关单词 和词性 以便它理解每个单词在句子中
  • 安装 Ruby 后,MAC OS X 上的活动开发人员路径无效

    我收到此错误 xcrun 错误 无效的活动开发人员路径 Applications Xcode app 缺少 xcrun Applications Xcode app usr bin xcrun This solution https sta
  • Python itertools groupby 中令人不安的奇怪行为/错误?

    我在用itertools groupby解析一个短的制表符分隔的文本文件 文本文件有几列 我想做的就是对具有特定值的所有条目进行分组x在特定的列中 下面的代码对名为的列执行此操作name2 寻找变量中的值x 我尝试使用以下方法来做到这一点c
  • 每当 gem 仅在一台机器上有 cronjob 时?

    我们大规模部署了大约十几台服务器 我们想使用每当 gem 但我无法找到一种方法来说明 cron 作业应该在哪台机器上进行 我们只希望这些作业在执行后台作业的服务器上运行 有没有办法指定这一点 如果您使用 Capistrano 部署项目并使用
  • 将 Twitter 引导样式添加到 Rails 表单助手

    在阅读建议我使用带有引导程序集成的 Simple form gem 的答案后 我安装了它并根据 simple form 说明创建了我的表单 但输入框向右浮动 这是布局 正在使用部分 shared reg 调用该表单 div class co
  • 使用 google-drive-ruby gem 在 google 云端硬盘中创建文件夹

    我知道这里提出了类似的问题 但是我仍然无法完成这项工作 因为我的情况有点不同 我希望能够使用以下命令在谷歌驱动器中创建一个文件夹谷歌驱动器红宝石宝石 https github com gimite google drive ruby 根据谷
  • Flash观看后不清晰

    这是我的创建动作 它创建一个新的 Message 实例 并通过模型验证进行检查 然后有一个简单的 if else 循环 如果模型验证已完成 则发送消息 如果要发送另一个视图 则渲染 新 视图 如果模型验证未得到满足 它只会再次呈现 新 视图
  • Rails 中的 plusDomains.circles.addPeople 的 Google API 产生 403 Forbidden

    Using Google API Ruby 客户端 https github com google google api ruby client class GooglePlus def self follow contact contac
  • 需要 gem 是否会加载所有内容,包括我不使用的东西?

    Assume x是一颗宝石 包含两者Hello and Goodbye类 如果我写一个程序require x 但仅使用Hello班级 是个Goodbye类也加载了吗 您包含脚本或文件 而不是 gem With require x 你加载文件
  • 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

    我对 Angular 很陌生 所以这可能是一个新手问题 我正在尝试实现一个简单的任务管理器 只是一个练习 以 Rails 作为后端 以 Angular 作为前端 到目前为止 我遵循了教程 一切正常 现在我想在全球范围内实施身份验证 这意味着
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 在 Rails 中,我可以通过委托方法订购查询吗?

    我在通过委托方法订购查询时遇到困难 我的任务是帮助将一个相当大的 Rails 3 应用程序升级到 Rails 4 我在索引操作中遇到了这个查询 我知道这些对象的命名是可怕且令人困惑的 measurements controller rb d
  • 为什么对参数哈希进行切片会在批量分配时带来安全问题?

    通过批量分配来预防安全风险的官方方法是使用属性可访问 http api rubyonrails org classes ActiveModel MassAssignmentSecurity ClassMethods html 然而 一些程序
  • Mountain Lion 的 RVM 问题

    我可以在运行 Mountain Lion 的 Mac 上安装任何 Ruby 版本 我已经确保 Brew Doctor 一切正常 当我运行 ie rvm intall 1 9 3 head 时 我得到以下信息 From git github
  • 检查 Float 是否等于 Ruby 中的整数值

    假设我有以下代码 x 0 8 y 1 0 最好的检查方法是什么y相当于Integer 目前我正在做 y to int y 这可行 但我觉得应该有更好的方法 You mod值为 1 并检查该值是否等于 0 if y 1 0
  • 应该使用 Rspec Gem 在 Belong_to 测试中返回“String:Class 的未定义方法‘reflect_on_association’”

    在我的 Rails 应用程序中 我有我的模型Request Service and ServiceRequest 在我的 models rb 文件中 我有 request rb class Request lt ApplicationRec
  • Rails 7 缺失部分

    我正在升级到 Rails 7 1 并在使用 JS 部分的视图中遇到奇怪的错误 缺少部分 account stripe js erb application stripe js erb 与 locale gt fr formats gt ht

随机推荐