@@ -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