fedux_org-stdlib 0.0.14 → 0.0.16
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.
- data/lib/fedux_org/stdlib/models/class_based_model.rb +24 -5
- data/lib/fedux_org/stdlib/version.rb +1 -1
- data/spec/examples/models/class_based/ignore/ignored.rb +0 -0
- data/spec/examples/models/class_based/ignore/valid_1.rb +8 -0
- data/spec/examples/models/class_based/invalid_3.rb +8 -0
- data/spec/examples/models/class_based/valid_2.rb +10 -0
- data/spec/models/class_based_model_spec.rb +141 -25
- metadata +10 -2
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'active_support/core_ext/string/inflections'
|
2
2
|
require 'active_support/core_ext/object/blank'
|
3
3
|
require 'fedux_org/stdlib/models/filesystem_based_model'
|
4
|
+
require 'find'
|
4
5
|
|
5
6
|
module FeduxOrg
|
6
7
|
module Stdlib
|
@@ -28,15 +29,13 @@ module FeduxOrg
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def check_klass( klass , *methods)
|
31
|
-
methods.flatten.
|
32
|
-
raise exception_for_model, "A valid \"#{model_name}\"-class needs to respond to \"#{ m }\"." unless klass.new.respond_to? m
|
33
|
-
end
|
32
|
+
raise exception_for_model, "A valid \"#{model_name}\"-class needs to respond to \"#{ methods.flatten.join(", ") }\"." unless methods.flatten.all? { |m| klass.new.respond_to? m }
|
34
33
|
end
|
35
34
|
|
36
35
|
def build_class_constant(name)
|
37
36
|
"#{library_name}::#{model_name.pluralize}::#{name.to_s.camelcase}".constantize
|
38
37
|
rescue
|
39
|
-
raise exception_for_model , "
|
38
|
+
raise exception_for_model , "Class \"#{library_name}::#{model_name.pluralize}::#{name.to_s.camelcase}\" cannot be found in file \"#{require_path(name)}\"."
|
40
39
|
end
|
41
40
|
|
42
41
|
def check_method
|
@@ -47,8 +46,28 @@ module FeduxOrg
|
|
47
46
|
'.rb'
|
48
47
|
end
|
49
48
|
|
49
|
+
def ignore
|
50
|
+
'BORING_STRING_WHICH_SHOULD_NEVER_MATCH'
|
51
|
+
end
|
52
|
+
|
53
|
+
def find_files
|
54
|
+
files = []
|
55
|
+
Find.find(path_to_instances) do |path|
|
56
|
+
next unless File.file? path
|
57
|
+
next if path =~ /^\.\.?/
|
58
|
+
next if path =~ %r{#{ignore}}
|
59
|
+
|
60
|
+
files << path
|
61
|
+
end
|
62
|
+
|
63
|
+
files
|
64
|
+
rescue
|
65
|
+
raise FeduxOrg::Stdlib::Models::Exceptions::NoImplementationsForModelFound, "You might need to create the directory\"#{File.dirname(path_to_instances)}\"."
|
66
|
+
end
|
67
|
+
|
50
68
|
def load_from_filesystem
|
51
|
-
files =
|
69
|
+
files = find_files
|
70
|
+
|
52
71
|
FeduxOrg::Stdlib.logger.debug(self) { "Files found at path \"#{path_to_instances}\": #{ files.join(", ") }" }
|
53
72
|
|
54
73
|
raise FeduxOrg::Stdlib::Models::Exceptions::NoImplementationsForModelFound, "You might need to store files at \"#{File.dirname(path_to_instances)}\" to make the library work." if files.blank?
|
File without changes
|
@@ -98,7 +98,6 @@ describe Models::ClassBasedModel do
|
|
98
98
|
expect(test_class.all.first.name).to eq(:valid_1)
|
99
99
|
end
|
100
100
|
|
101
|
-
|
102
101
|
it "raises an error if an instance is invalid: name error" do
|
103
102
|
test_class = Class.new(Models::BaseModel) do
|
104
103
|
include Models::FilesystemBasedModel
|
@@ -173,41 +172,117 @@ describe Models::ClassBasedModel do
|
|
173
172
|
}.to raise_error FeduxOrg::Stdlib::Models::Exceptions::UnauthorizedUseOfKeyword
|
174
173
|
end
|
175
174
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
175
|
+
context "#check_method" do
|
176
|
+
it "raises an error if an import filter is invalid: missing method" do
|
177
|
+
test_class = Class.new(Models::BaseModel) do
|
178
|
+
include Models::FilesystemBasedModel
|
179
|
+
include Models::ClassBasedModel
|
180
180
|
|
181
|
-
|
182
|
-
|
181
|
+
def initialize(name, klass)
|
182
|
+
super(name)
|
183
183
|
|
184
|
-
|
185
|
-
|
184
|
+
@klass = klass
|
185
|
+
end
|
186
186
|
|
187
|
-
|
188
|
-
|
189
|
-
|
187
|
+
def self.model_name
|
188
|
+
"TestClass"
|
189
|
+
end
|
190
190
|
|
191
|
-
|
192
|
-
|
193
|
-
|
191
|
+
def self.library_name
|
192
|
+
'TestIt'
|
193
|
+
end
|
194
194
|
|
195
|
-
|
196
|
-
|
197
|
-
|
195
|
+
def self.path_to_instances
|
196
|
+
File.join( examples_dir, 'models', 'class_based', 'invalid_2.rb' )
|
197
|
+
end
|
198
198
|
|
199
|
-
|
200
|
-
|
199
|
+
def self.require_path(name)
|
200
|
+
File.join( examples_dir, 'models', 'class_based', 'invalid_2' )
|
201
|
+
end
|
202
|
+
|
203
|
+
def self.check_method
|
204
|
+
:req_method
|
205
|
+
end
|
201
206
|
end
|
202
207
|
|
203
|
-
|
204
|
-
|
208
|
+
expect {
|
209
|
+
test_class.init
|
210
|
+
}.to raise_error TestIt::Exceptions::InvalidTestClass
|
211
|
+
end
|
212
|
+
|
213
|
+
it "supports multiple methods to check for invalid instance and succeeds if both are avaiable." do
|
214
|
+
test_class = Class.new(Models::BaseModel) do
|
215
|
+
include Models::FilesystemBasedModel
|
216
|
+
include Models::ClassBasedModel
|
217
|
+
|
218
|
+
def initialize(name, klass)
|
219
|
+
super(name)
|
220
|
+
|
221
|
+
@klass = klass
|
222
|
+
end
|
223
|
+
|
224
|
+
def self.model_name
|
225
|
+
"TestClass"
|
226
|
+
end
|
227
|
+
|
228
|
+
def self.library_name
|
229
|
+
'TestIt'
|
230
|
+
end
|
231
|
+
|
232
|
+
def self.path_to_instances
|
233
|
+
File.join( examples_dir, 'models', 'class_based', 'valid_2.rb' )
|
234
|
+
end
|
235
|
+
|
236
|
+
def self.require_path(name)
|
237
|
+
File.join( examples_dir, 'models', 'class_based', 'valid_2' )
|
238
|
+
end
|
239
|
+
|
240
|
+
def self.check_method
|
241
|
+
[ :req_method1, :req_method2 ]
|
242
|
+
end
|
205
243
|
end
|
244
|
+
|
245
|
+
expect {
|
246
|
+
test_class.init
|
247
|
+
}.to_not raise_error TestIt::Exceptions::InvalidTestClass
|
206
248
|
end
|
207
249
|
|
208
|
-
|
209
|
-
test_class.
|
210
|
-
|
250
|
+
it "supports multiple methods to check for invalid instance and fails if one is missing." do
|
251
|
+
test_class = Class.new(Models::BaseModel) do
|
252
|
+
include Models::FilesystemBasedModel
|
253
|
+
include Models::ClassBasedModel
|
254
|
+
|
255
|
+
def initialize(name, klass)
|
256
|
+
super(name)
|
257
|
+
|
258
|
+
@klass = klass
|
259
|
+
end
|
260
|
+
|
261
|
+
def self.model_name
|
262
|
+
"TestClass"
|
263
|
+
end
|
264
|
+
|
265
|
+
def self.library_name
|
266
|
+
'TestIt'
|
267
|
+
end
|
268
|
+
|
269
|
+
def self.path_to_instances
|
270
|
+
File.join( examples_dir, 'models', 'class_based', 'invalid_3.rb' )
|
271
|
+
end
|
272
|
+
|
273
|
+
def self.require_path(name)
|
274
|
+
File.join( examples_dir, 'models', 'class_based', 'invalid_3' )
|
275
|
+
end
|
276
|
+
|
277
|
+
def self.check_method
|
278
|
+
[ :req_method1, :req_method2 ]
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
expect {
|
283
|
+
test_class.init
|
284
|
+
}.to raise_error TestIt::Exceptions::InvalidTestClass
|
285
|
+
end
|
211
286
|
end
|
212
287
|
|
213
288
|
it "returns the require path" do
|
@@ -262,4 +337,45 @@ describe Models::ClassBasedModel do
|
|
262
337
|
}.to raise_error FeduxOrg::Stdlib::Models::Exceptions::NoImplementationsForModelFound
|
263
338
|
end
|
264
339
|
|
340
|
+
it "#ignore" do
|
341
|
+
test_class = Class.new(Models::BaseModel) do
|
342
|
+
include Models::FilesystemBasedModel
|
343
|
+
include Models::ClassBasedModel
|
344
|
+
|
345
|
+
def initialize(name, klass)
|
346
|
+
super(name)
|
347
|
+
|
348
|
+
@klass = klass
|
349
|
+
end
|
350
|
+
|
351
|
+
def self.model_name
|
352
|
+
"TestClass"
|
353
|
+
end
|
354
|
+
|
355
|
+
def self.library_name
|
356
|
+
'TestIt'
|
357
|
+
end
|
358
|
+
|
359
|
+
def self.path_to_instances
|
360
|
+
File.join( examples_dir, 'models', 'class_based', 'ignore' )
|
361
|
+
end
|
362
|
+
|
363
|
+
def self.require_path(name)
|
364
|
+
File.join( examples_dir, 'models', 'class_based', 'ignore', 'valid_1.rb' )
|
365
|
+
end
|
366
|
+
|
367
|
+
def self.check_method
|
368
|
+
:req_method
|
369
|
+
end
|
370
|
+
|
371
|
+
def self.ignore
|
372
|
+
'ignored'
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
test_class.init
|
377
|
+
expect(test_class.all.count).to eq(1)
|
378
|
+
|
379
|
+
end
|
380
|
+
|
265
381
|
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.0.
|
4
|
+
version: 0.0.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -115,9 +115,13 @@ files:
|
|
115
115
|
- script/console
|
116
116
|
- script/terminal
|
117
117
|
- spec/examples/models/class_based/forbidden_keyword.rb
|
118
|
+
- spec/examples/models/class_based/ignore/ignored.rb
|
119
|
+
- spec/examples/models/class_based/ignore/valid_1.rb
|
118
120
|
- spec/examples/models/class_based/invalid_1.rb
|
119
121
|
- spec/examples/models/class_based/invalid_2.rb
|
122
|
+
- spec/examples/models/class_based/invalid_3.rb
|
120
123
|
- spec/examples/models/class_based/valid_1.rb
|
124
|
+
- spec/examples/models/class_based/valid_2.rb
|
121
125
|
- spec/models/base_model_spec.rb
|
122
126
|
- spec/models/class_based_model_spec.rb
|
123
127
|
- spec/models/filesystem_based_model_spec.rb
|
@@ -149,9 +153,13 @@ specification_version: 3
|
|
149
153
|
summary: collection of use full libraries
|
150
154
|
test_files:
|
151
155
|
- spec/examples/models/class_based/forbidden_keyword.rb
|
156
|
+
- spec/examples/models/class_based/ignore/ignored.rb
|
157
|
+
- spec/examples/models/class_based/ignore/valid_1.rb
|
152
158
|
- spec/examples/models/class_based/invalid_1.rb
|
153
159
|
- spec/examples/models/class_based/invalid_2.rb
|
160
|
+
- spec/examples/models/class_based/invalid_3.rb
|
154
161
|
- spec/examples/models/class_based/valid_1.rb
|
162
|
+
- spec/examples/models/class_based/valid_2.rb
|
155
163
|
- spec/models/base_model_spec.rb
|
156
164
|
- spec/models/class_based_model_spec.rb
|
157
165
|
- spec/models/filesystem_based_model_spec.rb
|