fedux_org-stdlib 0.6.7 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3f80fa1083cd772f019321591b3d271f2d01b2b
4
- data.tar.gz: 2974ed01ed39c5d2813c08e709a1ff45718654f4
3
+ metadata.gz: d9e703de0319a8f92f9c1e72fc69158c014aa21f
4
+ data.tar.gz: a34707ffed29a092d49b31855d885ead61c8a3b9
5
5
  SHA512:
6
- metadata.gz: fa6da85ec9aa70cb9d4ebf189d88afdf95437ebb663a672547e3764cf0a1c9d62c6119f55b105476dd7660e2686a0a8e243734b281c83aded4bb894e77ceae78
7
- data.tar.gz: cba56858043efd2bd845aa5554c74e375badb0a7ad6e48ed0172814894574486a1ac98c4a18e9feb141c14ecd49482d1e9cf2a1cc60da587f7e330a1dd86dc6a
6
+ metadata.gz: 6c571e1a5eb285d3645b1678955a07029c52d80ad108c510d4ba12f8d77e67d9cad7c83beae9779a9c1bc3acf6e420f9e6220d242bca9c6ff42325b7c17aaef0
7
+ data.tar.gz: 68d5bf20b8b276d4eb31e5aa4ae02cdd4fe27cd29adc72aa131dd60c21df397be728abf16f565766ddb34850ade47c75b8179b7b00c67fd5faaa429fda15e707
@@ -16,6 +16,9 @@ module FeduxOrgStdlib
16
16
 
17
17
  # If no class name is present
18
18
  class ClassNameIsMissing < StandardError; end
19
+
20
+ # If one tries to define an option name which is forbbiden
21
+ class OptionNameForbidden < StandardError; end
19
22
  end
20
23
  end
21
24
  end
@@ -70,12 +70,12 @@ module FeduxOrgStdlib
70
70
  class << self
71
71
 
72
72
  # @api private
73
- def options
73
+ def _options
74
74
  @options ||= Set.new
75
75
  end
76
76
 
77
77
  # @api private
78
- def process_environment
78
+ def _process_environment
79
79
  @process_environment ||= ProcessEnvironment.new
80
80
  end
81
81
 
@@ -87,11 +87,15 @@ module FeduxOrgStdlib
87
87
  # @param [Object] default_value
88
88
  # The default value of this option
89
89
  def option_reader(option, default_value)
90
- define_method option.to_sym do
91
- instance_variable_get(:'@config').fetch(option.to_sym, default_value)
90
+ option = option.to_sym
91
+
92
+ fail Exceptions::OptionNameForbidden, JSON.dump(option: option) if _reserved_key_words.include? option
93
+
94
+ define_method option do
95
+ _config.fetch(option, default_value)
92
96
  end
93
97
 
94
- self.options << option
98
+ self._options << option
95
99
  end
96
100
 
97
101
  # Define a writer for option
@@ -108,15 +112,17 @@ module FeduxOrgStdlib
108
112
  # @raise [Exceptions::ConfigLocked]
109
113
  # If one tries to modified a locked config
110
114
  def option_writer(option)
115
+ fail Exceptions::OptionNameForbidden, JSON.dump(option: option) if _reserved_key_words.include? "#{option}=".to_sym
116
+
111
117
  define_method "#{option}=".to_sym do |value|
112
118
  begin
113
- instance_variable_get(:'@config')[option.to_sym] = value
119
+ _config[option.to_sym] = value
114
120
  rescue RuntimeError
115
121
  raise Exceptions::ConfigLocked
116
122
  end
117
123
  end
118
124
 
119
- self.options << option
125
+ self._options << option
120
126
  end
121
127
 
122
128
  # Define a writer and a reader for option
@@ -136,7 +142,7 @@ module FeduxOrgStdlib
136
142
 
137
143
  # @!attribute [r] config
138
144
  # Holds the config
139
- attr_reader :config
145
+ attr_reader :_config
140
146
 
141
147
  public
142
148
 
@@ -163,15 +169,15 @@ module FeduxOrgStdlib
163
169
  # config_engine does not respond to `:[]` an empty config object will be
164
170
  # created.
165
171
  def initialize(
166
- file: available_config_file,
172
+ file: _available_config_file,
167
173
  config_engine: Psych,
168
174
  logger: FeduxOrgStdlib::Logging::Logger.new
169
175
  )
170
176
  @logger = logger
171
177
 
172
178
  unless file
173
- logger.debug "No configuration file found at #{allowed_config_file_paths.to_list}, using an empty config."
174
- @config = HashWithIndifferentAccess.new
179
+ logger.debug "No configuration file found at #{_allowed_config_file_paths.to_list}, using an empty config."
180
+ @_config = HashWithIndifferentAccess.new
175
181
 
176
182
  return
177
183
  end
@@ -183,15 +189,15 @@ module FeduxOrgStdlib
183
189
  end
184
190
 
185
191
  if yaml.respond_to? :[]
186
- @config = HashWithIndifferentAccess.new(yaml.symbolize_keys)
192
+ @_config = HashWithIndifferentAccess.new(yaml.symbolize_keys)
187
193
  else
188
- @config = HashWithIndifferentAccess.new
194
+ @_config = HashWithIndifferentAccess.new
189
195
  end
190
196
  end
191
197
 
192
198
  # Lock the configuration
193
199
  def lock
194
- config.freeze
200
+ _config.freeze
195
201
  end
196
202
 
197
203
  # Output a string presentation of the configuration
@@ -203,7 +209,7 @@ module FeduxOrgStdlib
203
209
  result << sprintf("%20s | %s", 'option', 'value')
204
210
  result << sprintf("%s + %s", '-' * 20, '-' * 80)
205
211
 
206
- self.class.options.each do |o|
212
+ self.class._options.each do |o|
207
213
  result << sprintf("%20s | %s", o, Array(public_send(o)).join(', '))
208
214
  end
209
215
 
@@ -218,15 +224,15 @@ module FeduxOrgStdlib
218
224
  # The name of the config file. It defaults to `<config_name>.yaml`. If
219
225
  # you want to use a different file name you need to overwrite this
220
226
  # method.
221
- def config_file
222
- "#{config_name}#{config_file_suffix}"
227
+ def _config_file
228
+ "#{_config_name}#{_config_file_suffix}"
223
229
  end
224
230
 
225
231
  # The suffix of the config file
226
232
  #
227
233
  # @return [String]
228
234
  # The suffix of the config file
229
- def config_file_suffix
235
+ def _config_file_suffix
230
236
  '.yaml'
231
237
  end
232
238
 
@@ -241,12 +247,12 @@ module FeduxOrgStdlib
241
247
  # class ClientConfig; end
242
248
  #
243
249
  # This will result in `client` as base name for the config file.
244
- def config_name
245
- unless (name = class_name.sub(/Config/, '').underscore.pluralize).blank?
250
+ def _config_name
251
+ unless (name = _class_name.sub(/Config/, '').underscore.pluralize).blank?
246
252
  return name
247
253
  end
248
254
 
249
- fail Exceptions::ClassNameIsMissing, JSON.dump(klass: class_name)
255
+ fail Exceptions::ClassNameIsMissing, JSON.dump(klass: _class_name)
250
256
  end
251
257
 
252
258
  # The name of your application
@@ -262,8 +268,8 @@ module FeduxOrgStdlib
262
268
  # This will be converted to
263
269
  #
264
270
  # my_application
265
- def application_name
266
- module_name.underscore
271
+ def _application_name
272
+ _module_name.underscore
267
273
  end
268
274
 
269
275
  # The paths where to look for the config file
@@ -271,27 +277,31 @@ module FeduxOrgStdlib
271
277
  # @return [Array]
272
278
  # A list of paths where the config object should look for its config
273
279
  # file.
274
- def allowed_config_file_paths
280
+ def _allowed_config_file_paths
275
281
  [
276
- ::File.expand_path(::File.join(self.class.process_environment.fetch('HOME'), '.config', application_name, config_file)),
277
- ::File.expand_path(::File.join(self.class.process_environment.fetch('HOME'), format('.%s', application_name), config_file)),
278
- ::File.expand_path(::File.join(self.class.process_environment.fetch('HOME'), format('.%s', config_file))),
279
- ::File.expand_path(::File.join(self.class.process_environment.fetch('HOME'), format('.%src', config_name))),
280
- ::File.expand_path(::File.join('/etc', application_name, config_file)),
282
+ ::File.expand_path(::File.join(self.class._process_environment.fetch('HOME'), '.config', _application_name, _config_file)),
283
+ ::File.expand_path(::File.join(self.class._process_environment.fetch('HOME'), format('.%s', _application_name), _config_file)),
284
+ ::File.expand_path(::File.join(self.class._process_environment.fetch('HOME'), format('.%s', _config_file))),
285
+ ::File.expand_path(::File.join(self.class._process_environment.fetch('HOME'), format('.%src', _config_name))),
286
+ ::File.expand_path(::File.join('/etc', _application_name, _config_file)),
281
287
  # ::File.expand_path("../../../../files/#{config_file}", __FILE__),
282
288
  ]
283
289
  end
284
290
 
285
- def class_name
291
+ def _class_name
286
292
  self.class.name.to_s.demodulize
287
293
  end
288
294
 
289
- def module_name
295
+ def _module_name
290
296
  self.class.to_s.deconstantize
291
297
  end
292
298
 
293
- def available_config_file
294
- allowed_config_file_paths.find { |f| ::File.exists? f }
299
+ def _available_config_file
300
+ _allowed_config_file_paths.find { |f| ::File.exists? f }
301
+ end
302
+
303
+ def self._reserved_key_words
304
+ (methods | instance_methods | private_methods | private_instance_methods ) - (Class.methods | Class.private_methods ) | [:to_s]
295
305
  end
296
306
  end
297
307
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  # FeduxOrgStdlib
3
3
  module FeduxOrgStdlib
4
- VERSION = '0.6.7'
4
+ VERSION = '0.6.8'
5
5
  end
@@ -10,11 +10,11 @@ RSpec.describe AppConfig do
10
10
  config_klass = Class.new(AppConfig) do
11
11
  option :opt1, nil
12
12
 
13
- def class_name
13
+ def _class_name
14
14
  'TestConfig'
15
15
  end
16
16
 
17
- def module_name
17
+ def _module_name
18
18
  'MyApplication'
19
19
  end
20
20
  end
@@ -32,11 +32,11 @@ RSpec.describe AppConfig do
32
32
  config_klass = Class.new(AppConfig) do
33
33
  option_reader :opt1, nil
34
34
 
35
- def class_name
35
+ def _class_name
36
36
  'TestConfig'
37
37
  end
38
38
 
39
- def module_name
39
+ def _module_name
40
40
  'MyApplication'
41
41
  end
42
42
  end
@@ -50,6 +50,24 @@ RSpec.describe AppConfig do
50
50
  end
51
51
  end
52
52
 
53
+ it 'checks for reserved key words' do
54
+ with_environment 'HOME' => working_directory do
55
+ expect do
56
+ Class.new(AppConfig) do
57
+ option_reader :_config_file, nil
58
+
59
+ def _class_name
60
+ 'TestConfig'
61
+ end
62
+
63
+ def _module_name
64
+ 'MyApplication'
65
+ end
66
+ end
67
+ end.to raise_error FeduxOrgStdlib::AppConfig::Exceptions::OptionNameForbidden
68
+ end
69
+ end
70
+
53
71
  end
54
72
 
55
73
  context 'config files' do
@@ -63,11 +81,11 @@ RSpec.describe AppConfig do
63
81
  config_klass = Class.new(AppConfig) do
64
82
  option_reader :opt1, nil
65
83
 
66
- def class_name
84
+ def _class_name
67
85
  'TestConfig'
68
86
  end
69
87
 
70
- def module_name
88
+ def _module_name
71
89
  'MyApplication'
72
90
  end
73
91
  end
@@ -87,11 +105,11 @@ RSpec.describe AppConfig do
87
105
  config_klass = Class.new(AppConfig) do
88
106
  option_reader :opt1, nil
89
107
 
90
- def class_name
108
+ def _class_name
91
109
  'TestConfig'
92
110
  end
93
111
 
94
- def module_name
112
+ def _module_name
95
113
  'MyApplication'
96
114
  end
97
115
  end
@@ -111,11 +129,11 @@ RSpec.describe AppConfig do
111
129
  config_klass = Class.new(AppConfig) do
112
130
  option_reader :opt1, nil
113
131
 
114
- def class_name
132
+ def _class_name
115
133
  'TestConfig'
116
134
  end
117
135
 
118
- def module_name
136
+ def _module_name
119
137
  'MyApplication'
120
138
  end
121
139
  end
@@ -135,11 +153,11 @@ RSpec.describe AppConfig do
135
153
  config_klass = Class.new(AppConfig) do
136
154
  option_reader :opt1, nil
137
155
 
138
- def class_name
156
+ def _class_name
139
157
  'TestConfig'
140
158
  end
141
159
 
142
- def module_name
160
+ def _module_name
143
161
  'MyApplication'
144
162
  end
145
163
  end
@@ -159,11 +177,11 @@ RSpec.describe AppConfig do
159
177
  config_klass = Class.new(AppConfig) do
160
178
  option_reader :opt1, nil
161
179
 
162
- def class_name
180
+ def _class_name
163
181
  'TestConfig'
164
182
  end
165
183
 
166
- def module_name
184
+ def _module_name
167
185
  'MyApplication'
168
186
  end
169
187
  end
@@ -180,11 +198,11 @@ RSpec.describe AppConfig do
180
198
  option :opt1, 'test1'
181
199
  option :opt2, 'test2'
182
200
 
183
- def class_name
201
+ def _class_name
184
202
  'TestConfig'
185
203
  end
186
204
 
187
- def module_name
205
+ def _module_name
188
206
  'MyApplication'
189
207
  end
190
208
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fedux_org-stdlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Meyer