admin_it 1.0.11 → 1.1.0
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +8 -1
- data/README.md +4 -2
- data/admin_it.gemspec +1 -0
- data/lib/admin_it.rb +7 -5
- data/lib/admin_it/actions/action.rb +5 -2
- data/lib/admin_it/config.rb +1 -0
- data/lib/admin_it/context/collection_context.rb +10 -4
- data/lib/admin_it/context/context.rb +12 -13
- data/lib/admin_it/context/show_context.rb +6 -5
- data/lib/admin_it/context/single_context.rb +19 -8
- data/lib/admin_it/context/table_context.rb +9 -7
- data/lib/admin_it/context/tiles_context.rb +1 -0
- data/lib/admin_it/controller.rb +3 -1
- data/lib/admin_it/data.rb +4 -2
- data/lib/admin_it/data/active_record.rb +10 -301
- data/lib/admin_it/data/active_record/collection_context.rb +47 -0
- data/lib/admin_it/data/active_record/field.rb +64 -0
- data/lib/admin_it/data/active_record/filter.rb +36 -0
- data/lib/admin_it/data/active_record/resource.rb +66 -0
- data/lib/admin_it/data/active_record/single_context.rb +102 -0
- data/lib/admin_it/data/data_behavior.rb +2 -0
- data/lib/admin_it/data/hash.rb +3 -0
- data/lib/admin_it/data/mongoid.rb +14 -0
- data/lib/admin_it/data/mongoid/field.rb +58 -0
- data/lib/admin_it/data/mongoid/resource.rb +67 -0
- data/lib/admin_it/data/object.rb +3 -0
- data/lib/admin_it/engine.rb +4 -1
- data/lib/admin_it/env.rb +21 -2
- data/lib/admin_it/field/field.rb +15 -26
- data/lib/admin_it/filters/field_filter.rb +1 -0
- data/lib/admin_it/filters/filter.rb +8 -13
- data/lib/admin_it/filters/value_filter.rb +1 -0
- data/lib/admin_it/helpers.rb +2 -0
- data/lib/admin_it/helpers/field.rb +3 -3
- data/lib/admin_it/helpers/input.rb +1 -0
- data/lib/admin_it/helpers/page.rb +2 -0
- data/lib/admin_it/helpers/table.rb +12 -8
- data/lib/admin_it/helpers/tiles.rb +2 -0
- data/lib/admin_it/helpers/toolbar.rb +4 -0
- data/lib/admin_it/helpers/top_menu.rb +3 -0
- data/lib/admin_it/resource.rb +16 -21
- data/lib/admin_it/version.rb +1 -1
- data/lib/extend_it.rb +8 -4
- data/lib/extend_it/array_of.rb +12 -10
- data/lib/extend_it/base.rb +9 -8
- data/lib/extend_it/callbacks.rb +11 -12
- data/lib/extend_it/dsl.rb +33 -44
- data/spec/extend_it/dsl_spec.rb +21 -32
- data/spec/lib/data/mongoid/field_spec.rb +28 -0
- data/spec/lib/data/mongoid/resource_spec.rb +50 -0
- data/spec/spec_helper.rb +8 -3
- data/spec/support/module_helpers.rb +20 -0
- metadata +30 -13
- data/.ruby-version +0 -1
- data/lib/admin_it/definitions.rb +0 -89
- data/lib/admin_it/utils.rb +0 -21
- data/lib/extend_it/asserts.rb +0 -40
- data/lib/extend_it/caller.rb +0 -35
- data/lib/extend_it/config.rb +0 -30
- data/lib/extend_it/ensures.rb +0 -193
- data/spec/extend_it/config_spec.rb +0 -52
- data/spec/extend_it/ensures_spec.rb +0 -39
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if ENV['USE_MONGOID']
|
4
|
+
describe AdminIt::MongoidData::Field do
|
5
|
+
before do
|
6
|
+
#
|
7
|
+
class MongoTestEmbed
|
8
|
+
include Mongoid::Document
|
9
|
+
field :name, type: String
|
10
|
+
embedded_in :mongo_test_parent
|
11
|
+
end
|
12
|
+
#
|
13
|
+
class MongoTestParent
|
14
|
+
include Mongoid::Document
|
15
|
+
field :name, type: String
|
16
|
+
embeds_many :mongo_test_embeds
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
if Object.const_defined?(:MongoTestParent)
|
22
|
+
Object.send(:remove_const, :MongoTestParent)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:resource) { AdminIt::Resource.new(:mongo_test, MongoTestParent) }
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if ENV['USE_MONGOID']
|
4
|
+
describe AdminIt::MongoidData::Resource do
|
5
|
+
before do
|
6
|
+
#
|
7
|
+
class MongoTestEmbed
|
8
|
+
include Mongoid::Document
|
9
|
+
field :name, type: String
|
10
|
+
embedded_in :mongo_test_parent
|
11
|
+
end
|
12
|
+
#
|
13
|
+
class MongoTestParent
|
14
|
+
include Mongoid::Document
|
15
|
+
field :name, type: String
|
16
|
+
embeds_many :mongo_test_embeds
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
if Object.const_defined?(:MongoTestParent)
|
22
|
+
Object.send(:remove_const, :MongoTestParent)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:resource) { AdminIt::Resource.new(:mongo_test, MongoTestParent) }
|
27
|
+
|
28
|
+
it 'provides default fields' do
|
29
|
+
expect(
|
30
|
+
resource.fields(scope: :all).map(&:field_name)
|
31
|
+
).to match_array %i(id name mongo_test_embeds)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'hides id field' do
|
35
|
+
expect(resource.field(:id).visible?).to be_false
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'gives right field types' do
|
39
|
+
expect(resource.field(:id).type).to eq :integer
|
40
|
+
expect(resource.field(:name).type).to eq :string
|
41
|
+
expect(resource.field(:mongo_test_embeds).type).to eq :relation
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'provides default filters' do
|
45
|
+
expect(
|
46
|
+
resource.filters.map(&:filter_name)
|
47
|
+
).to match_array %i(name_value)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
3
|
|
4
|
-
# ---
|
5
|
-
require 'extend_it'
|
4
|
+
# --- EnsureIt
|
6
5
|
if ENV['USE_REFINES']
|
7
|
-
|
6
|
+
require 'ensure_it_refined'
|
7
|
+
else
|
8
|
+
require 'ensure_it'
|
8
9
|
end
|
10
|
+
# --- EOF EnsureIt
|
11
|
+
|
12
|
+
# --- ExtendIt
|
13
|
+
require 'extend_it'
|
9
14
|
# --- EOF ExtendIt
|
10
15
|
|
11
16
|
require 'combustion'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
module ModuleHelpers
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
let :includer_class do
|
6
|
+
mod = described_class
|
7
|
+
Class.new { include mod }
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:includer_obj) { includer_class.new }
|
11
|
+
|
12
|
+
let :extender_class do
|
13
|
+
mod = described_class
|
14
|
+
Class.new { extend mod }
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:extender_obj) { extender_class.new }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admin_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Ovchinnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ensure_it
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,7 +202,6 @@ files:
|
|
188
202
|
- ".gitignore"
|
189
203
|
- ".rspec"
|
190
204
|
- ".rubocop.yml"
|
191
|
-
- ".ruby-version"
|
192
205
|
- ".yardopts"
|
193
206
|
- Gemfile
|
194
207
|
- README.md
|
@@ -242,10 +255,17 @@ files:
|
|
242
255
|
- lib/admin_it/controller.rb
|
243
256
|
- lib/admin_it/data.rb
|
244
257
|
- lib/admin_it/data/active_record.rb
|
258
|
+
- lib/admin_it/data/active_record/collection_context.rb
|
259
|
+
- lib/admin_it/data/active_record/field.rb
|
260
|
+
- lib/admin_it/data/active_record/filter.rb
|
261
|
+
- lib/admin_it/data/active_record/resource.rb
|
262
|
+
- lib/admin_it/data/active_record/single_context.rb
|
245
263
|
- lib/admin_it/data/data_behavior.rb
|
246
264
|
- lib/admin_it/data/hash.rb
|
265
|
+
- lib/admin_it/data/mongoid.rb
|
266
|
+
- lib/admin_it/data/mongoid/field.rb
|
267
|
+
- lib/admin_it/data/mongoid/resource.rb
|
247
268
|
- lib/admin_it/data/object.rb
|
248
|
-
- lib/admin_it/definitions.rb
|
249
269
|
- lib/admin_it/engine.rb
|
250
270
|
- lib/admin_it/env.rb
|
251
271
|
- lib/admin_it/errors.rb
|
@@ -268,20 +288,13 @@ files:
|
|
268
288
|
- lib/admin_it/locales/ru.yml
|
269
289
|
- lib/admin_it/resource.rb
|
270
290
|
- lib/admin_it/shared.rb
|
271
|
-
- lib/admin_it/utils.rb
|
272
291
|
- lib/admin_it/version.rb
|
273
292
|
- lib/extend_it.rb
|
274
293
|
- lib/extend_it/array_of.rb
|
275
|
-
- lib/extend_it/asserts.rb
|
276
294
|
- lib/extend_it/base.rb
|
277
295
|
- lib/extend_it/callbacks.rb
|
278
|
-
- lib/extend_it/caller.rb
|
279
|
-
- lib/extend_it/config.rb
|
280
296
|
- lib/extend_it/dsl.rb
|
281
|
-
- lib/extend_it/ensures.rb
|
282
|
-
- spec/extend_it/config_spec.rb
|
283
297
|
- spec/extend_it/dsl_spec.rb
|
284
|
-
- spec/extend_it/ensures_spec.rb
|
285
298
|
- spec/internal/config/database.yml
|
286
299
|
- spec/internal/config/routes.rb
|
287
300
|
- spec/internal/db/combustion_test.sqlite
|
@@ -291,11 +304,14 @@ files:
|
|
291
304
|
- spec/lib/context/collection_context_spec.rb
|
292
305
|
- spec/lib/context/context_spec.rb
|
293
306
|
- spec/lib/context/single_context_spec.rb
|
307
|
+
- spec/lib/data/mongoid/field_spec.rb
|
308
|
+
- spec/lib/data/mongoid/resource_spec.rb
|
294
309
|
- spec/lib/data/object_spec.rb
|
295
310
|
- spec/lib/field_spec.rb
|
296
311
|
- spec/lib/resource_spec.rb
|
297
312
|
- spec/spec_helper.rb
|
298
313
|
- spec/support/example_groups/context_example_group.rb
|
314
|
+
- spec/support/module_helpers.rb
|
299
315
|
- spec/support/shared_examples/context.rb
|
300
316
|
homepage: https://github.com/cybernetlab/admin_it
|
301
317
|
licenses:
|
@@ -323,9 +339,7 @@ signing_key:
|
|
323
339
|
specification_version: 4
|
324
340
|
summary: Admin interface
|
325
341
|
test_files:
|
326
|
-
- spec/extend_it/config_spec.rb
|
327
342
|
- spec/extend_it/dsl_spec.rb
|
328
|
-
- spec/extend_it/ensures_spec.rb
|
329
343
|
- spec/internal/config/database.yml
|
330
344
|
- spec/internal/config/routes.rb
|
331
345
|
- spec/internal/db/combustion_test.sqlite
|
@@ -335,10 +349,13 @@ test_files:
|
|
335
349
|
- spec/lib/context/collection_context_spec.rb
|
336
350
|
- spec/lib/context/context_spec.rb
|
337
351
|
- spec/lib/context/single_context_spec.rb
|
352
|
+
- spec/lib/data/mongoid/field_spec.rb
|
353
|
+
- spec/lib/data/mongoid/resource_spec.rb
|
338
354
|
- spec/lib/data/object_spec.rb
|
339
355
|
- spec/lib/field_spec.rb
|
340
356
|
- spec/lib/resource_spec.rb
|
341
357
|
- spec/spec_helper.rb
|
342
358
|
- spec/support/example_groups/context_example_group.rb
|
359
|
+
- spec/support/module_helpers.rb
|
343
360
|
- spec/support/shared_examples/context.rb
|
344
361
|
has_rdoc:
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.1
|
data/lib/admin_it/definitions.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
#require 'delegate'
|
2
|
-
|
3
|
-
module AdminIt
|
4
|
-
class ResourceDefinition # < SimpleDelegator
|
5
|
-
COLLECTIONS = %i(table tiles list)
|
6
|
-
SINGLE = %i(show new edit)
|
7
|
-
CONTEXTS = COLLECTIONS + SINGLE
|
8
|
-
|
9
|
-
# extend ExtendIt::ArrayOf
|
10
|
-
|
11
|
-
# array_of Context do
|
12
|
-
# scope(:all) { |_| true }
|
13
|
-
# find_by :name
|
14
|
-
# end
|
15
|
-
|
16
|
-
# dsl_array :context, ArrayOfContext, create_entity: :create_context
|
17
|
-
|
18
|
-
def initialize(resource)
|
19
|
-
@resource = resource
|
20
|
-
@resource.contexts.replace(CONTEXTS.map do |name|
|
21
|
-
Object.const_get("AdminIt::#{name.capitalize}Context")
|
22
|
-
.create_class(name, @resource)
|
23
|
-
end)
|
24
|
-
end
|
25
|
-
|
26
|
-
def exclude_context(*args)
|
27
|
-
args.flatten.each do |arg|
|
28
|
-
arg = Utils.assert_symbol_arg(arg) { next }
|
29
|
-
@resource.contexts.reject! { |c| c.context_name == arg }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def exclude_collection
|
34
|
-
@resource.contexts.reject! { |c| c.collection? }
|
35
|
-
end
|
36
|
-
|
37
|
-
def exclude_single
|
38
|
-
@resource.contexts.reject! { |c| c.single? }
|
39
|
-
end
|
40
|
-
|
41
|
-
def contexts(*names, &block)
|
42
|
-
unless names.empty?
|
43
|
-
@resource.contexts.replace(
|
44
|
-
names.flatten.uniq.map { |name| context(name) }
|
45
|
-
)
|
46
|
-
end
|
47
|
-
if block_given?
|
48
|
-
@resource.contexts.each { |context| context.instance_eval(&block) }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def context(name, context_class: nil, &block)
|
53
|
-
Utils.assert_symbol_arg!(name, 'name')
|
54
|
-
context = @resource[name]
|
55
|
-
if context.nil?
|
56
|
-
unless context_class <= Context
|
57
|
-
context_class =
|
58
|
-
Object.const_get("AdminIt::#{name.capitalize}Context")
|
59
|
-
end
|
60
|
-
context = context_class.create_class(name, @resource)
|
61
|
-
@resource.contexts << context
|
62
|
-
end
|
63
|
-
context.instance_eval(&block) if block_given?
|
64
|
-
context
|
65
|
-
end
|
66
|
-
|
67
|
-
def all(&block)
|
68
|
-
@resource.contexts.each { |c| c.instance_eval(&block) } if block_given?
|
69
|
-
end
|
70
|
-
|
71
|
-
def single(&block)
|
72
|
-
@resource.singles.each { |c| c.instance_eval(&block) } if block_given?
|
73
|
-
end
|
74
|
-
|
75
|
-
def collection(&block)
|
76
|
-
return unless block_given?
|
77
|
-
@resource.collections.each { |c| c.instance_eval(&block) }
|
78
|
-
end
|
79
|
-
|
80
|
-
def default_context(value)
|
81
|
-
return if @resource[value].nil?
|
82
|
-
@resource.instance_variable_set(:@default_context, value)
|
83
|
-
end
|
84
|
-
|
85
|
-
def icon(value = nil)
|
86
|
-
@resource.instance_variable_set(:@icon, value.to_s)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
data/lib/admin_it/utils.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module AdminIt
|
2
|
-
module Utils
|
3
|
-
def self.assert_symbol_arg!(arg, name = nil)
|
4
|
-
assert_symbol_arg(arg) do
|
5
|
-
_caller = caller_locations(3, 1).first
|
6
|
-
name = "#{name} " unless name.nil?
|
7
|
-
fail(
|
8
|
-
ArgumentError,
|
9
|
-
"Argument #{name}for #{_caller.label} should be a String or Symbol",
|
10
|
-
caller[3..-1]
|
11
|
-
)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.assert_symbol_arg(arg)
|
16
|
-
return arg if arg.is_a?(Symbol)
|
17
|
-
return arg.to_sym if arg.is_a?(String)
|
18
|
-
yield arg if block_given?
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/extend_it/asserts.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require File.join %w(extend_it caller)
|
2
|
-
require File.join %w(extend_it ensures)
|
3
|
-
|
4
|
-
if ExtendIt.config.use_refines?
|
5
|
-
using ExtendIt::Caller
|
6
|
-
using ExtendIt::Ensures
|
7
|
-
end
|
8
|
-
|
9
|
-
module ExtendIt
|
10
|
-
module Asserts
|
11
|
-
private
|
12
|
-
|
13
|
-
if RUBY_VERSION >= '2.1.0'
|
14
|
-
def assert_symbol(*names, binding: nil)
|
15
|
-
return unless binding ||= caller_binding
|
16
|
-
names.each do |name|
|
17
|
-
name = name.ensure_symbol || next
|
18
|
-
var = binding.local_variable_get(name)
|
19
|
-
var = var.ensure_symbol || fail(
|
20
|
-
ArgumentError,
|
21
|
-
"Argument `#{name}` should be a Symbol or String",
|
22
|
-
caller[1..-1]
|
23
|
-
)
|
24
|
-
binding.local_variable_set(name, var)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
else
|
28
|
-
def assert_symbol(*names, binding: nil)
|
29
|
-
return unless binding ||= caller_binding
|
30
|
-
names.each do |name|
|
31
|
-
name = name.ensure_symbol || next
|
32
|
-
binding.eval(
|
33
|
-
"#{name} = #{name}.ensure_symbol || fail(ArgumentError," \
|
34
|
-
" 'Argument `#{name}` should be a Symbol or String')"
|
35
|
-
)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/extend_it/caller.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'continuation' if RUBY_VERSION >= '1.9.0'
|
2
|
-
|
3
|
-
module ExtendIt
|
4
|
-
module Caller
|
5
|
-
# http://rubychallenger.blogspot.ru/2011/07/caller-binding.html
|
6
|
-
refine Object do
|
7
|
-
def caller_binding
|
8
|
-
cc, count = nil, 0
|
9
|
-
set_trace_func(lambda { |event, file, lineno, id, binding, klass|
|
10
|
-
if count == 2
|
11
|
-
set_trace_func nil
|
12
|
-
cc.call(binding)
|
13
|
-
elsif event == 'return'
|
14
|
-
count += 1
|
15
|
-
end
|
16
|
-
})
|
17
|
-
return callcc { |cont| cc = cont }
|
18
|
-
end
|
19
|
-
|
20
|
-
def caller_eval(str)
|
21
|
-
cc, ok = nil, false
|
22
|
-
set_trace_func(lambda { |event, file, lineno, id, binding, klass|
|
23
|
-
if ok
|
24
|
-
set_trace_func nil
|
25
|
-
cc.call(binding)
|
26
|
-
else
|
27
|
-
ok = event == "return"
|
28
|
-
end
|
29
|
-
})
|
30
|
-
return unless bb = callcc { |c| cc = c; nil }
|
31
|
-
eval(str, bb)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/extend_it/config.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
module ExtendIt
|
2
|
-
module Config
|
3
|
-
def self.use_refines(value = nil)
|
4
|
-
if value.nil?
|
5
|
-
@use_refines.nil? ? @use_refines = false : @use_refines
|
6
|
-
else
|
7
|
-
self.use_refines = value
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.use_refines=(value)
|
12
|
-
unless RUBY_VERSION >= '2.1.0'
|
13
|
-
fail(
|
14
|
-
RuntimeError,
|
15
|
-
'Refinements can be used only with ruby versions >= 2.1.0'
|
16
|
-
)
|
17
|
-
end
|
18
|
-
@use_refines = value == true
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.use_refines?
|
22
|
-
@use_refines
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.config
|
27
|
-
yield Config if block_given?
|
28
|
-
Config
|
29
|
-
end
|
30
|
-
end
|