问题标签 [dry-rb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1412 浏览

ruby-on-rails - 如何使用干验证 gem 验证日期字符串?

我想允许使用干验证 gem 的日期格式字符串,但我不能。

日期格式的字符串在 0.13 之前是允许的,但从 1.0 开始似乎就被禁止了。现在我正在尝试升级我的 Rails 应用程序中的干式验证 gem。

编辑

我不知道为什么,但上面的代码现在可以工作了。也许缓存问题?(不过我记得我跑过bin/rake tmp:cache:clear)请忽略这个问题。

0 投票
0 回答
100 浏览

ruby - postgresql 中枚举类型列的包含过滤

我有一个 postgres 枚举create_enum(:status_type, %i[requested approved])。我在一个带有status_type :status, null: false.

我正在尝试像这样在红宝石中包含包含在内进行过滤root.where(requests[:status].in(*values)values是一个字符串数组。

此代码返回以下错误: Dry::Types::ConstraintError: ["requested"] violates constraints (included_in?(["requested", "approved"], ["requested"]) failed)

如果我通过平等过滤它,它可以正常工作。root.where(requests[:status].is('requested')

您知道我在自定义类型列中包含包含过滤的方法吗?

0 投票
1 回答
296 浏览

mysql - 为什么干结构初始化很慢?

我有一个 Rails 应用程序,它将其配置存储在 34 个 MySQL 表中,这些表由各种对象和关联组成,总共大约 900 条记录。直到最近,业务逻辑都建立在 ActiveRecord 上,但性能不稳定,因为我没有足够的控制来控制多少查询被触发。最近我将业务逻辑“移植”到Dry::Struct,将所有涉及的 ActiveRecord 类复制到Dry::Struct值模型并预加载Configuration实例中的所有配置对象:这大大减少了查询数量到固定的小数量,并显着提高了性能因为所有的联想“行走”都是在记忆中完成的,而且还有很多。

到目前为止一切顺利,但加载 34 个表(我在每次请求时都需要其中的大部分)仍然需要 34 个查询和大约 160 毫秒。该策略在 ActiveRecord 上处于低级别,将所有表中的所有记录加载为普通哈希,然后用这些初始化结构并将所有内容存储在Configuration对象中。

我想进一步提高性能,所以我想通过UNION在所有表中的所有字段中创建一个查询来获取所有数据。这构成了一个强大的 30 KB 的 SQL 查询,令人惊讶的是,它仅在 20 毫秒内执行。出色的!现在我只需要在大约 10 毫秒内展开这个大结构,我就赢了!

嗯,不。事实证明,仅扫描结果数组需要 48 毫秒(其中 20 是 SQL 查询),当在这里和那里解析一些 JSON 字段并准备哈希以初始化结构时,时间会增加到 78 毫秒......然后初始化它们本身需要额外的89 毫秒。如果我没有通过重复算法 100 次来测量每一步(当然是在预热记忆值之后),我不会相信,但确实如此。总而言之,与之前单独加载每个表的简单得多的算法相比,尽管单个查询很有效,但没有任何性能提升。

下面是 SQL 的样子:

产生这样的“对角线”结构

然后以下算法将其展开为原始记录:

我试图尽可能地收紧代码,但只是删除v_class.new部分将时间缩短了一半。有没有改进的余地?

附带说明一下,从 Redis 加载Marshaled 完成的Configuration对象只需要 10 毫秒,但我想避免使用 Redis 来防止错位。

0 投票
0 回答
459 浏览

ruby - Ruby - dry-rb - 如何更新现有对象的属性?

使用 dry-rb结构和类型,我正在尝试修改一个已经创建的对象,但似乎无法弄清楚。

这是不可能的,还是我错过了一些非常明显的东西?任何帮助深表感谢

0 投票
0 回答
209 浏览

ruby-on-rails - 在 Rails/RSpec 中存根 Dry::Matcher 案例

我们在我们的应用程序中使用 Dry::Monads 和 Dry::Matchers。我们主要使用 Dry::Matchers 案例语法在控制器级别使用单子结果,如下所示:

在上述情况下,我们使用集成测试对其进行测试,因此无需存根任何东西。

在某些情况下,我们希望在工作流程的中间步骤使用上述块语法来处理单子响应,因此我们希望对上述内容进行存根/模拟,result但不存根块。我们发现成功的一种方法是:

然而,这感觉就像一个非常严厉的间谍。有没有人遇到过这个用例?一般来说,这是一个坏主意吗?另一种方法是使用 case 语句处理单子响应,该语句同样有效,但看起来不太好。

0 投票
0 回答
132 浏览

ruby - 如何使用干模式 gem 验证一组不同的对象

鉴于我有这样的 JSON 对象,其中包含各种对象的数组,例如:

根据 JSON 模式验证,我可以使用这个 JSOM 模式定义来验证这个模式:

如何使用干模式 gem 验证输入 JSON?你有什么想法?

0 投票
1 回答
38 浏览

ruby-on-rails - rails 7 和 ruby​​ 3.1 中的依赖注入问题

我有一个简单的 rails 应用程序,使用dry-container& dry-auto_injectby dry-rb 在控制器上注入服务,这种方法在 rails 6 & below 和 ruby​​ 2.7 & below 上运行良好。

我创建的服务app/services/v1

我在下面注册了一个服务等级lib/marka/

并尝试包含在控制器上app/controllers/api/v1/

我收到一个错误,看起来像