@@ -12,7 +12,6 @@ module Cask
12
12
#
13
13
# @api internal
14
14
class Config
15
- ConfigHash = T . type_alias { T ::Hash [ Symbol , T . any ( LazyObject , String , Pathname , T ::Array [ String ] ) ] }
16
15
DEFAULT_DIRS = T . let (
17
16
{
18
17
appdir : "/Applications" ,
@@ -34,8 +33,7 @@ class Config
34
33
T ::Hash [ Symbol , String ] ,
35
34
)
36
35
37
- # runtime recursive evaluation forces the LazyObject to be evaluated
38
- T ::Sig ::WithoutRuntime . sig { returns ( T ::Hash [ Symbol , T . any ( LazyObject , String ) ] ) }
36
+ sig { returns ( T ::Hash [ Symbol , String ] ) }
39
37
def self . defaults
40
38
{
41
39
languages : LazyObject . new { ::OS ::Mac . languages } ,
@@ -69,59 +67,69 @@ def self.from_args(args)
69
67
70
68
sig { params ( json : String , ignore_invalid_keys : T ::Boolean ) . returns ( T . attached_class ) }
71
69
def self . from_json ( json , ignore_invalid_keys : false )
72
- config = JSON . parse ( json , symbolize_names : true )
70
+ config = JSON . parse ( json )
73
71
74
72
new (
75
- default : config . fetch ( : default, { } ) ,
76
- env : config . fetch ( : env, { } ) ,
77
- explicit : config . fetch ( : explicit, { } ) ,
73
+ default : config . fetch ( " default" , { } ) ,
74
+ env : config . fetch ( " env" , { } ) ,
75
+ explicit : config . fetch ( " explicit" , { } ) ,
78
76
ignore_invalid_keys :,
79
77
)
80
78
end
81
79
82
- sig { params ( config : ConfigHash ) . returns ( ConfigHash ) }
80
+ sig {
81
+ params (
82
+ config : T ::Enumerable [
83
+ [ T . any ( String , Symbol ) , T . any ( String , Pathname , T ::Array [ String ] ) ] ,
84
+ ] ,
85
+ ) . returns (
86
+ T ::Hash [ Symbol , T . any ( String , Pathname , T ::Array [ String ] ) ] ,
87
+ )
88
+ }
83
89
def self . canonicalize ( config )
84
90
config . to_h do |k , v |
85
- if DEFAULT_DIRS . key? ( k )
91
+ key = k . to_sym
92
+
93
+ if DEFAULT_DIRS . key? ( key )
86
94
raise TypeError , "Invalid path for default dir #{ k } : #{ v . inspect } " if v . is_a? ( Array )
87
95
88
- [ k , Pathname ( v . to_s ) . expand_path ]
96
+ [ key , Pathname ( v ) . expand_path ]
89
97
else
90
- [ k , v ]
98
+ [ key , v ]
91
99
end
92
100
end
93
101
end
94
102
95
103
# Get the explicit configuration.
96
104
#
97
105
# @api internal
98
- sig { returns ( ConfigHash ) }
106
+ sig { returns ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) }
99
107
attr_accessor :explicit
100
108
101
109
sig {
102
110
params (
103
- default : T . nilable ( ConfigHash ) ,
104
- env : T . nilable ( ConfigHash ) ,
105
- explicit : ConfigHash ,
111
+ default : T . nilable ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) ,
112
+ env : T . nilable ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) ,
113
+ explicit : T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ,
106
114
ignore_invalid_keys : T ::Boolean ,
107
115
) . void
108
116
}
109
117
def initialize ( default : nil , env : nil , explicit : { } , ignore_invalid_keys : false )
110
118
if default
111
119
@default = T . let (
112
120
self . class . canonicalize ( self . class . defaults . merge ( default ) ) ,
113
- T . nilable ( ConfigHash ) ,
121
+ T . nilable ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) ,
114
122
)
115
123
end
116
124
if env
117
125
@env = T . let (
118
126
self . class . canonicalize ( env ) ,
119
- T . nilable ( ConfigHash ) ,
127
+ T . nilable ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) ,
120
128
)
121
129
end
122
130
@explicit = T . let (
123
131
self . class . canonicalize ( explicit ) ,
124
- ConfigHash ,
132
+ T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ,
125
133
)
126
134
127
135
if ignore_invalid_keys
@@ -134,26 +142,26 @@ def initialize(default: nil, env: nil, explicit: {}, ignore_invalid_keys: false)
134
142
@explicit . assert_valid_keys ( *self . class . defaults . keys )
135
143
end
136
144
137
- sig { returns ( ConfigHash ) }
145
+ sig { returns ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) }
138
146
def default
139
147
@default ||= self . class . canonicalize ( self . class . defaults )
140
148
end
141
149
142
- sig { returns ( ConfigHash ) }
150
+ sig { returns ( T :: Hash [ Symbol , T . any ( String , Pathname , T :: Array [ String ] ) ] ) }
143
151
def env
144
152
@env ||= self . class . canonicalize (
145
153
Homebrew ::EnvConfig . cask_opts
146
154
. select { |arg | arg . include? ( "=" ) }
147
155
. map { |arg | T . cast ( arg . split ( "=" , 2 ) , [ String , String ] ) }
148
- . to_h do |( flag , value ) |
156
+ . map do |( flag , value ) |
149
157
key = flag . sub ( /^--/ , "" )
150
158
# converts --language flag to :languages config key
151
159
if key == "language"
152
160
key = "languages"
153
161
value = value . split ( "," )
154
162
end
155
163
156
- [ key . to_sym , value ]
164
+ [ key , value ]
157
165
end ,
158
166
)
159
167
end
0 commit comments