我们正在探索使用鳍状宝石(https://github.com/jnunemaker/flipper)来看门人看到新功能。在我们的第一个测试中,我们希望仅向第一个看到促销它的横幅的X用户显示特定功能。
我们考虑使用一个百分比,但业务对数字非常具体,并且还想立即达到该数字,然后为所有其他用户禁用该功能,而不会为那些首先看到它的人禁用它。使用百分比,我们无法找到确保正确数字看到它的方法,并且第一个x的每个人都会看到它。
在gate / actor.rb里面,有这样的:
enabled_actor_ids = value
这意味着我们可以获取已启用ID的列表,并对其执行计数,但我们无法确定是否可以公开该列表或将其暴露在何处。
由于我们使用AR适配器作为试验,我们在一个连接到flipper_gates表的actor对象上创建了一个范围,但这感觉非常脆弱,并且非常深入到gem的内部工作中。
非常感谢任何建议。
答案 0 :(得分:1)
您应该能够通过编程turning the feature on for Individual Actors完成此操作,直到达到上限。
重要提示: according to the documentation:
单个演员门通常不是为数百或者设计的 成千上万的演员要被启用。这是一个明确的选择 更容易从适配器批量加载数据而不是执行 个别检查演员一遍又一遍。如果您需要启用 超过20个人的东西,我建议使用 一个小组。
现在我们已经同意我们想要继续推进这个......让我们谈谈实施。
您需要做的第一件事是确保演员(可能是用户)响应flipper_id
并且flipper_id
对每个演员都是唯一的。设置完成后,您应该能够在用户看到这样的横幅时为该用户启用该功能:
flipper[:stats].enable_actor user
现在,为了确定我们是否应该为用户启用该功能,我们需要确定已在该功能中注册了多少用户。
为此,我们可以直接查询Gate:
Flipper::Adapters::ActiveRecord::Gate.where(
feature_key: "stats",
key: "actors"
).count
这将返回在功能中注册的参与者数量的计数。
好吧,让我们来看看宝石。
flipper[:stats].enable_actor
实际上调用了Feature#enable_actor
user
我们之前传递的flipper_id
(响应thing
)作为参与者传入。
接下来,Feature#enable_actor
将actor传递给Types::Actor.wrap
,它创建了一个新的Types :: Actor实例,它检查以确保actor不是nil并且它有一个flipper_id然后设置两个实例变量,value
设置为actor,flipper_id
设置为actor的Types::Actor
。
现在我们有gate
的实例,我们将其传递到Feature#enable
,查找Adapters::ActiveRecord.enable
,在我们的例子中,它将是Gates::Actor
个实例。最后,我们在适配器上调用enable(在您的情况下是ActiveRecord)。
在gate.data_type
我们首先看一下@gate_class.create! do |g|
g.feature_key = feature.key
g.key = gate.key
g.value = thing.value.to_s
end
,在我们的例子中,:set
。从那里我们做:
thing.value
如前所述,flipper_id
是@gate_class
。答对了! number_of_actors_enrolled_in_stats_feature = Flipper::Adapters::ActiveRecord::Gate.where(
feature_key: "stats",
key: "actors"
).count
是负责门表的活动记录类,而the default table name是“flipper_gates”。
现在我们确切地知道要查询的内容以获取在该功能中注册的演员的数量!
{{1}}
答案 1 :(得分:0)
现在您可以执行Flipper[:some_feature].actors_value.size
,假设您已使用Flipper.configure
配置了默认的鳍状板实例。