/
benefitting_region.rb
64 lines (50 loc) · 1.27 KB
/
benefitting_region.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class BenefittingRegion
include ActiveModel::Model
attr_accessor :name, :code, :level
DEVELOPING_COUNTRIES_CODE = "998"
class << self
def all
@all ||= Codelist.new(type: "benefitting_regions", source: "beis").map { |region| new_from_hash(region) }
end
def all_for_level_code(level_code = 3)
level = BenefittingRegion::Level.find_by_code(level_code)
all.select { |region| region.level == level }
end
def find_by_code(code)
all.find { |region| region.code == code }
end
private
def new_from_hash(region)
new(
name: region["name"],
code: region["code"],
level: Level.find_by_code(region["level"])
)
end
end
def hash
code.hash
end
def eql?(other)
code == other.code
end
def ==(other)
code == other.code
end
class Level
include ActiveModel::Model
attr_accessor :name, :code
class << self
def all
@all ||= Codelist.new(type: "benefitting_region_levels", source: "beis").map { |level| new_from_hash(level) }
end
def find_by_code(code)
all.find { |level| level.code == code }
end
private
def new_from_hash(level)
new(name: level["name"], code: level["code"])
end
end
end
end