From d1dc3e7d279f9bf76a89369b62f76571832255af Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 31 Jan 2023 16:10:49 -0500 Subject: [PATCH] Store feature flags on user for limiting commands, etc --- .rubocop.yml | 2 +- lib/command_list.rb | 2 +- lib/customer.rb | 4 +++- lib/customer_repo.rb | 12 ++++++++---- test/test_helper.rb | 4 ++++ 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index f46799f2d0b408ff96eef0863d5f947f496eae2a..f3d7110b10d3e19506b8972a504a1ec99d636981 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -24,7 +24,7 @@ Metrics/AbcSize: - test/* Metrics/ParameterLists: - Max: 6 + Max: 7 Naming/MethodParameterName: AllowNamesEndingInNumbers: false diff --git a/lib/command_list.rb b/lib/command_list.rb index fb87b7e831c761dcd5d8912173bd57885dc75de8..44965d0594040ea7c1cae2e406e0f08289ede58e 100644 --- a/lib/command_list.rb +++ b/lib/command_list.rb @@ -18,7 +18,7 @@ class CommandList args = { from_jid: from_jid, customer: customer, tel: customer&.registered? ? customer&.registered?&.phone : nil, - fwd: customer&.fwd, + fwd: customer&.fwd, feature_flags: customer&.feature_flags || [], payment_methods: [] } return EMPromise.resolve(args) unless customer&.plan_name diff --git a/lib/customer.rb b/lib/customer.rb index 4aa96adc407bd603cf0778842faa35a013884b83..c49052253f6b596b940ad4e1a6dfa7791f335f4f 100644 --- a/lib/customer.rb +++ b/lib/customer.rb @@ -18,7 +18,7 @@ require_relative "./trivial_backend_sgx_repo" class Customer extend Forwardable - attr_reader :customer_id, :balance, :jid, :tndetails + attr_reader :customer_id, :balance, :jid, :tndetails, :feature_flags alias billing_customer_id customer_id def_delegators :@plan, :active?, :activate_plan_starting_now, :bill_plan, @@ -53,6 +53,7 @@ class Customer plan: CustomerPlan.new(customer_id), balance: BigDecimal(0), tndetails: {}, + feature_flags: [], sgx: TrivialBackendSgxRepo.new.get(customer_id) ) @plan = plan @@ -62,6 +63,7 @@ class Customer @jid = jid @balance = balance @tndetails = tndetails + @feature_flags = feature_flags @sgx = sgx end diff --git a/lib/customer_repo.rb b/lib/customer_repo.rb index 207a40510442b4908fe42f417ce522417bbf67ec..98a7e584e31872970fe2eb0eb93be140ebce3dff 100644 --- a/lib/customer_repo.rb +++ b/lib/customer_repo.rb @@ -164,11 +164,15 @@ protected end def fetch_redis(customer_id) - mget( - "jmp_customer_auto_top_up_amount-#{customer_id}", - "jmp_customer_monthly_overage_limit-#{customer_id}" - ).then { |r| + EMPromise.all([ + mget( + "jmp_customer_auto_top_up_amount-#{customer_id}", + "jmp_customer_monthly_overage_limit-#{customer_id}" + ), + @redis.smembers("jmp_customer_feature_flags-#{customer_id}") + ]).then { |r, flags| r.transform_keys { |k| k.match(/^jmp_customer_([^-]+)/)[1].to_sym } + .merge(feature_flags: flags.map(&:to_sym)) } end diff --git a/test/test_helper.rb b/test/test_helper.rb index d6fdaceb8e8bc9d7593a6609fe450fd01524b5e0..260589f381e28ad473332702a11847273ed379ee 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -258,6 +258,10 @@ class FakeRedis @values[key]&.size || 0 end + def smembers(key) + @values[key]&.to_a || [] + end + def expire(_, _); end def exists(*keys)