Skip to content

Commit 9aceedb

Browse files
author
Matthew Elwell
authored
Add BaseFlag and DefaultFlag classes (#14)
* Add BaseFlag and DefaultFlag classes * Add require_relative statements * Add new line to terminate file * tab size * Fix ruby syntax * Update engine test data * Update example code * Rationalise flags models to a single file
1 parent 414ccf0 commit 9aceedb

File tree

5 files changed

+78
-71
lines changed

5 files changed

+78
-71
lines changed

example/config/initializers/flagsmith.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
enable_local_evaluation: true,
33
environment_refresh_interval_seconds: 60,
44
default_flag_handler: lambda { |feature_name|
5-
Flagsmith::Flag.new(
6-
feature_name: feature_name, enabled: false, value: {}.to_json, feature_id: nil
7-
)
5+
Flagsmith::Flags::DefaultFlag.new(enabled: false, value: {}.to_json)
86
}
97
)

lib/flagsmith.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
require 'flagsmith/sdk/errors'
1515
require 'flagsmith/sdk/intervals'
1616
require 'flagsmith/sdk/pooling_manager'
17-
require 'flagsmith/sdk/models/flag'
18-
require 'flagsmith/sdk/models/flags/collection'
17+
require 'flagsmith/sdk/models/flags'
1918
require 'flagsmith/sdk/instance_methods'
2019

2120
require 'flagsmith/engine/core'

lib/flagsmith/sdk/models/flag.rb

Lines changed: 0 additions & 62 deletions
This file was deleted.

lib/flagsmith/sdk/models/flags/collection.rb renamed to lib/flagsmith/sdk/models/flags.rb

Lines changed: 75 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,79 @@ module Flagsmith
44
module Flags
55
class NotFound < StandardError; end
66

7-
# Flag Collection
7+
class BaseFlag
8+
include Comparable
9+
10+
attr_reader :enabled, :value, :default
11+
12+
def initialize(enabled:, value:, default:)
13+
@enabled = enabled
14+
@value = value
15+
@default = default
16+
end
17+
18+
def enabled?
19+
enabled
20+
end
21+
22+
alias is_default default
23+
end
24+
25+
class DefaultFlag < BaseFlag
26+
def initialize(enabled:, value:)
27+
super(enabled: enabled, value: value, default: true)
28+
end
29+
end
30+
31+
class Flag < BaseFlag
32+
33+
attr_reader :feature_name, :feature_id
34+
35+
def initialize(feature_name:, enabled:, value:, feature_id:)
36+
super(enabled: enabled, value: value, default: false)
37+
@feature_name = feature_name
38+
@feature_id = feature_id
39+
end
40+
41+
def <=>(other)
42+
feature_name <=> other.feature_name
43+
end
44+
45+
def [](key)
46+
to_h[key]
47+
end
48+
49+
def to_h
50+
{
51+
feature_id: feature_id,
52+
feature_name: feature_name,
53+
value: value,
54+
enabled: enabled,
55+
default: default
56+
}
57+
end
58+
59+
class << self
60+
def from_feature_state_model(feature_state_model, identity_id)
61+
new(
62+
enabled: feature_state_model.enabled,
63+
value: feature_state_model.get_value(identity_id),
64+
feature_name: feature_state_model.feature.name,
65+
feature_id: feature_state_model.feature.id
66+
)
67+
end
68+
69+
def from_api(json_flag_data)
70+
new(
71+
enabled: json_flag_data[:enabled],
72+
value: json_flag_data[:feature_state_value] || json_flag_data[:value],
73+
feature_name: json_flag_data.dig(:feature, :name),
74+
feature_id: json_flag_data.dig(:feature, :id)
75+
)
76+
end
77+
end
78+
end
79+
880
class Collection
981
include Enumerable
1082

@@ -75,7 +147,7 @@ class << self
75147
def from_api(json_data, **args)
76148
to_flag_object = lambda { |json_flag, acc|
77149
acc[normalize_key(json_flag.dig(:feature, :name))] =
78-
Flagsmith::Flag.from_api(json_flag)
150+
Flagsmith::Flags::Flag.from_api(json_flag)
79151
}
80152

81153
new(
@@ -87,7 +159,7 @@ def from_api(json_data, **args)
87159
def from_feature_state_models(feature_states, identity_id: nil, **args)
88160
to_flag_object = lambda { |feature_state, acc|
89161
acc[normalize_key(feature_state.feature.name)] =
90-
Flagsmith::Flag.from_feature_state_model(feature_state, identity_id)
162+
Flagsmith::Flags::Flag.from_feature_state_model(feature_state, identity_id)
91163
}
92164

93165
new(

0 commit comments

Comments
 (0)