Skip to content

Commit 0391c1e

Browse files
committed
Switch to symbolized keys in license data
1 parent eb0e7bc commit 0391c1e

3 files changed

Lines changed: 47 additions & 31 deletions

File tree

lib/code0/license.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def load(data)
2828

2929
decrypted_license = encryptor.decrypt(data)
3030

31-
new(JSON.parse(decrypted_license))
31+
new(JSON.parse(decrypted_license, symbolize_names: true))
3232
rescue JSON::ParserError
3333
raise ValidationError, "License data is invalid JSON"
3434
end
@@ -60,19 +60,23 @@ def initialize(data)
6060
def valid?
6161
return false if !licensee || !licensee.is_a?(Hash) || licensee.empty?
6262
return false if !start_date || !start_date.is_a?(Date)
63-
return false if (!end_date || !end_date.is_a?(Date)) && !options["allow_missing_end_date"]
63+
return false if (!end_date || !end_date.is_a?(Date)) && !options[:allow_missing_end_date]
6464

6565
true
6666
end
6767

6868
def in_active_time?
6969
return false if start_date > Date.today
70-
return true if !end_date && options["allow_missing_end_date"]
71-
return false if !end_date && !options["allow_missing_end_date"]
70+
return true if !end_date && options[:allow_missing_end_date]
71+
return false if !end_date && !options[:allow_missing_end_date]
7272

7373
end_date >= Date.today
7474
end
7575

76+
def restricted?(attribute)
77+
restrictions.key?(attribute)
78+
end
79+
7680
def data
7781
ATTRIBUTES.to_h { |attr| [attr, send(attr)] }
7882
end
@@ -82,15 +86,15 @@ def data
8286
attr_writer(*ATTRIBUTES)
8387

8488
def assign_attributes(data)
85-
%w[start_date end_date].each do |property|
89+
%i[start_date end_date].each do |property|
8690
value = data[property]
8791
value = parse_date(data[property]) unless data[property].is_a?(Date)
8892
send("#{property}=", value)
8993
end
9094

91-
send("licensee=", data["licensee"])
92-
send("restrictions=", data["restrictions"] || {})
93-
send("options=", data["options"] || {})
95+
send("licensee=", data[:licensee])
96+
send("restrictions=", data[:restrictions] || {})
97+
send("options=", data[:options] || {})
9498
end
9599

96100
def parse_date(str)

sig/code0/license.rbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ module Code0
1818

1919
def in_active_time?: -> bool
2020

21+
def restricted?: (Symbol) -> bool
22+
2123
def valid?: -> bool
2224

2325
private
2426

25-
def assign_attributes: (Hash[String, any]) -> void
27+
def assign_attributes: (Hash[Symbol, any]) -> void
2628

2729
def parse_date: (String) -> Date?
2830
end

spec/code0/license_spec.rb

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
let(:license) { described_class.new(license_data) }
88
let(:default_license_data) do
99
{
10-
"licensee" => { "company" => "Code0" },
11-
"start_date" => "2024-05-01",
12-
"end_date" => "2025-05-01",
13-
"restrictions" => { "users" => 1 },
14-
"options" => {}
10+
licensee: { company: "Code0" },
11+
start_date: "2024-05-01",
12+
end_date: "2025-05-01",
13+
restrictions: { users: 1 },
14+
options: {}
1515
}
1616
end
1717

@@ -24,10 +24,10 @@
2424
it "data returns hash of attributes" do
2525
expect(license.data).to match(
2626
{
27-
licensee: { "company" => "Code0" },
27+
licensee: { company: "Code0" },
2828
start_date: Date.new(2024, 5, 1),
2929
end_date: Date.new(2025, 5, 1),
30-
restrictions: { "users" => 1 },
30+
restrictions: { users: 1 },
3131
options: {}
3232
}
3333
)
@@ -82,39 +82,39 @@
8282
it { is_expected.to be true }
8383

8484
context "when missing licensee" do
85-
let(:license_data) { default_license_data.except("licensee") }
85+
let(:license_data) { default_license_data.except(:licensee) }
8686

8787
it { is_expected.to be false }
8888
end
8989

9090
context "when missing licensee is invalid" do
91-
let(:license_data) { default_license_data.merge("licensee" => "") }
91+
let(:license_data) { default_license_data.merge(licensee: "") }
9292

9393
it { is_expected.to be false }
9494
end
9595

9696
context "when missing licensee is empty" do
97-
let(:license_data) { default_license_data.merge("licensee" => {}) }
97+
let(:license_data) { default_license_data.merge(licensee: {}) }
9898

9999
it { is_expected.to be false }
100100
end
101101

102102
context "when missing start date" do
103-
let(:license_data) { default_license_data.except("start_date") }
103+
let(:license_data) { default_license_data.except(:start_date) }
104104

105105
it { is_expected.to be false }
106106
end
107107

108108
context "when missing end date" do
109-
let(:license_data) { default_license_data.except("end_date") }
109+
let(:license_data) { default_license_data.except(:end_date) }
110110

111111
it { is_expected.to be false }
112112
end
113113

114114
context "when missing end date with missing end date allowed" do
115115
let(:license_data) do
116-
data = default_license_data.except("end_date")
117-
data["options"].merge!("allow_missing_end_date" => true)
116+
data = default_license_data.except(:end_date)
117+
data[:options].merge!(allow_missing_end_date: true)
118118
data
119119
end
120120

@@ -126,53 +126,63 @@
126126
subject { license.in_active_time? }
127127

128128
context "when start is after today" do
129-
let(:license_data) { default_license_data.merge("start_date" => Date.today + 1) }
129+
let(:license_data) { default_license_data.merge(start_date: Date.today + 1) }
130130

131131
it { is_expected.to be false }
132132
end
133133

134134
context "when start is today" do
135-
let(:license_data) { default_license_data.merge("start_date" => Date.today) }
135+
let(:license_data) { default_license_data.merge(start_date: Date.today) }
136136

137137
it { is_expected.to be true }
138138
end
139139

140140
context "when start is before today" do
141-
let(:license_data) { default_license_data.merge("start_date" => Date.today - 1) }
141+
let(:license_data) { default_license_data.merge(start_date: Date.today - 1) }
142142

143143
it { is_expected.to be true }
144144
end
145145

146146
context "when end is after today" do
147-
let(:license_data) { default_license_data.merge("end_date" => Date.today + 1) }
147+
let(:license_data) { default_license_data.merge(end_date: Date.today + 1) }
148148

149149
it { is_expected.to be true }
150150
end
151151

152152
context "when end is today" do
153-
let(:license_data) { default_license_data.merge("end_date" => Date.today) }
153+
let(:license_data) { default_license_data.merge(end_date: Date.today) }
154154

155155
it { is_expected.to be true }
156156
end
157157

158158
context "when end is before today" do
159-
let(:license_data) { default_license_data.merge("end_date" => Date.today - 1) }
159+
let(:license_data) { default_license_data.merge(end_date: Date.today - 1) }
160160

161161
it { is_expected.to be false }
162162
end
163163

164164
context "when end is not set" do
165-
let(:license_data) { default_license_data.merge("end_date" => nil) }
165+
let(:license_data) { default_license_data.merge(end_date: nil) }
166166

167167
it { is_expected.to be false }
168168
end
169169

170170
context "when end is not set and missing end allowed" do
171171
let(:license_data) do
172-
default_license_data.merge("end_date" => nil, "options" => { "allow_missing_end_date" => true })
172+
default_license_data.merge(end_date: nil, options: { allow_missing_end_date: true })
173173
end
174174

175175
it { is_expected.to be true }
176176
end
177177
end
178+
179+
describe "#restricted?" do
180+
it "returns true if restriction is set" do
181+
expect(license.restricted?(:users)).to be true
182+
end
183+
184+
it "returns fals if restriction is not set" do
185+
expect(license.restricted?(:user_count)).to be false
186+
end
187+
end
178188
end

0 commit comments

Comments
 (0)