admin_it 1.0.7 → 1.0.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 +4 -4
- data/.ruby-version +1 -0
- data/README.md +6 -0
- data/lib/admin_it/context/collection_context.rb +5 -22
- data/lib/admin_it/context/context.rb +13 -34
- data/lib/admin_it/context/show_context.rb +8 -7
- data/lib/admin_it/context/single_context.rb +35 -33
- data/lib/admin_it/context/table_context.rb +18 -11
- data/lib/admin_it/context/tiles_context.rb +14 -14
- data/lib/admin_it/data/active_record.rb +0 -2
- data/lib/admin_it/field/field.rb +95 -23
- data/lib/admin_it/filters/field_filter.rb +4 -0
- data/lib/admin_it/filters/filter.rb +37 -14
- data/lib/admin_it/helpers/table.rb +13 -17
- data/lib/admin_it/resource.rb +58 -115
- data/lib/admin_it/shared.rb +64 -0
- data/lib/admin_it/version.rb +1 -1
- data/lib/admin_it.rb +7 -5
- data/lib/extend_it/array_of.rb +3 -3
- data/lib/extend_it/asserts.rb +5 -3
- data/lib/extend_it/{class.rb → base.rb} +29 -10
- data/lib/extend_it/callbacks.rb +7 -7
- data/lib/extend_it/config.rb +30 -0
- data/lib/extend_it/dsl.rb +223 -64
- data/lib/extend_it/ensures.rb +193 -0
- data/lib/extend_it.rb +1 -1
- data/spec/extend_it/config_spec.rb +52 -0
- data/spec/extend_it/dsl_spec.rb +149 -0
- data/spec/extend_it/ensures_spec.rb +39 -0
- data/spec/lib/context/collection_context_spec.rb +4 -2
- data/spec/lib/context/context_spec.rb +3 -1
- data/spec/lib/context/single_context_spec.rb +3 -2
- data/spec/lib/data/object_spec.rb +2 -2
- data/spec/lib/field_spec.rb +1 -56
- data/spec/lib/resource_spec.rb +1 -13
- data/spec/spec_helper.rb +7 -0
- data/spec/support/example_groups/context_example_group.rb +3 -3
- metadata +14 -11
- data/lib/admin_it/renderable.rb +0 -18
- data/lib/extend_it/refines.rb +0 -6
- data/lib/extend_it/symbolize.rb +0 -39
- data/spec/lib/definitions_spec.rb +0 -171
- data/spec/lib/utils_spec.rb +0 -39
data/lib/admin_it/resource.rb
CHANGED
@@ -1,62 +1,52 @@
|
|
1
|
-
require File.join %w(extend_it
|
2
|
-
require File.join %w(extend_it asserts)
|
1
|
+
require File.join %w(extend_it base)
|
3
2
|
require File.join %w(extend_it callbacks)
|
4
|
-
require File.join %w(extend_it class)
|
5
3
|
|
6
|
-
using ExtendIt::
|
4
|
+
using ExtendIt::Ensures
|
7
5
|
|
8
6
|
module AdminIt
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
7
|
+
class Resource
|
8
|
+
extend ExtendIt::Base
|
9
|
+
include ExtendIt::Callbacks
|
10
|
+
include ExtendIt::Dsl
|
11
|
+
include Iconed
|
12
|
+
include FieldsHolder
|
13
|
+
include FiltersHolder
|
14
|
+
|
15
|
+
dsl do
|
16
|
+
dsl_hash_of_objects :contexts, single: :context do |name, **opts|
|
17
|
+
context_class = opts[:class] || opts[:context_class] || Context
|
18
|
+
unless context_class.is_a?(Class) && context_class <= Context
|
19
|
+
fail(
|
20
|
+
ArgumentError,
|
21
|
+
'context class should be AdminIt::Context descendant'
|
22
|
+
)
|
23
|
+
end
|
24
|
+
@contexts[name] = context_class.create(name, entity_class)
|
20
25
|
end
|
21
|
-
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
dsl_boolean :confirm_destroy
|
28
|
+
dsl_accessor :display_name
|
29
|
+
|
30
|
+
def collection(&block)
|
31
|
+
return unless block_given?
|
32
|
+
hash = dsl_get(:contexts, {})
|
33
|
+
hash.select { |_, c| c.collection? }.each { |_, c| c.dsl_eval(&block) }
|
26
34
|
end
|
27
|
-
end
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
|
36
|
+
def single(&block)
|
37
|
+
return unless block_given?
|
38
|
+
hash = dsl_get(:contexts, {})
|
39
|
+
hash.select { |_, c| c.single? }.each { |_, c| c.dsl_eval(&block) }
|
32
40
|
end
|
33
|
-
end
|
34
|
-
end
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
case scope
|
40
|
-
when nil, :all then @filters.values
|
41
|
-
else @filters.values
|
42
|
+
dsl_accessor :default_context do |value|
|
43
|
+
value = value.ensure_symbol
|
44
|
+
@contexts.key?(value) ? value : nil
|
42
45
|
end
|
43
46
|
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class Resource
|
47
|
-
extend ExtendIt::Class
|
48
|
-
extend ExtendIt::Dsl
|
49
|
-
include ExtendIt::Asserts
|
50
|
-
include ExtendIt::Callbacks
|
51
|
-
include FieldsHolder
|
52
|
-
include FiltersHolder
|
53
47
|
|
54
48
|
attr_reader :name, :plural, :entity_class, :menu
|
55
49
|
|
56
|
-
dsl_accessor :icon
|
57
|
-
dsl_use_hash :fields
|
58
|
-
dsl_boolean :confirm_destroy
|
59
|
-
|
60
50
|
define_callbacks :initialize
|
61
51
|
|
62
52
|
def initialize(
|
@@ -66,7 +56,11 @@ module AdminIt
|
|
66
56
|
destroyable: true,
|
67
57
|
auto_filters: true
|
68
58
|
)
|
69
|
-
|
59
|
+
name = name.ensure_symbol || fail(
|
60
|
+
ArgumentError,
|
61
|
+
'`name` argument for resource constructor should be a Symbol ' \
|
62
|
+
'or a String'
|
63
|
+
)
|
70
64
|
|
71
65
|
@name, @entity_class = name, entity_class
|
72
66
|
if @entity_class.nil?
|
@@ -98,79 +92,32 @@ module AdminIt
|
|
98
92
|
end
|
99
93
|
end
|
100
94
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
field = @fields[name] = field_class.create(name, entity_class)
|
108
|
-
end
|
109
|
-
field.instance_eval(&block) if block_given?
|
110
|
-
end
|
95
|
+
def confirm_destroy?
|
96
|
+
@confirm_destroy.nil? ? @confirm_destroy = true : @confirm_destroy == true
|
97
|
+
end
|
98
|
+
|
99
|
+
def destroyable?
|
100
|
+
@destroyable.nil? ? @destroyable = true : @destroyable == true
|
111
101
|
end
|
112
102
|
|
113
103
|
def [](name)
|
114
|
-
|
115
|
-
@contexts[name]
|
104
|
+
context(name)
|
116
105
|
end
|
117
106
|
|
118
|
-
def context(
|
119
|
-
|
120
|
-
if @contexts.key?(name)
|
121
|
-
context = @contexts[name]
|
122
|
-
else
|
123
|
-
if context_class.nil? || !context_class <= Context
|
124
|
-
context_class = Context
|
125
|
-
end
|
126
|
-
context = @contexts[name] = context_class.create(name, entity_class)
|
127
|
-
end
|
128
|
-
context.instance_eval(&block) if block_given?
|
129
|
-
end
|
107
|
+
def context(name)
|
108
|
+
@contexts[name.ensure_symbol]
|
130
109
|
end
|
131
110
|
|
132
111
|
def contexts
|
133
112
|
@contexts.values
|
134
113
|
end
|
135
114
|
|
136
|
-
dsl_use_hash :contexts
|
137
|
-
|
138
|
-
def filter(name, filter_class: nil, &block)
|
139
|
-
assert_symbol(:name)
|
140
|
-
filter = @filters[name]
|
141
|
-
if filter.nil?
|
142
|
-
filter_class = Filter if filter_class.nil? || !filter_class <= Filter
|
143
|
-
filter = @filters[name] = filter_class.create(name, self)
|
144
|
-
end
|
145
|
-
filter.instance_eval(&block) if block_given?
|
146
|
-
end
|
147
|
-
|
148
|
-
dsl_use_hash :filters
|
149
|
-
|
150
|
-
def collection(&block)
|
151
|
-
return unless block_given?
|
152
|
-
contexts.select { |c| c.collection? }.each do |c|
|
153
|
-
c.instance_eval(&block)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def single(&block)
|
158
|
-
return unless block_given?
|
159
|
-
contexts.select { |c| c.single? }.each do |c|
|
160
|
-
c.instance_eval(&block)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
115
|
def default_context(value = nil)
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
@default_context = singles.first.context_name
|
171
|
-
end
|
172
|
-
else
|
173
|
-
@default_context = @contexts.keys.include?(value) ? value : default_context
|
116
|
+
return @default_context unless @default_context.nil?
|
117
|
+
if collections.size > 0
|
118
|
+
@default_context = collections.first.context_name
|
119
|
+
elsif singles.size > 0
|
120
|
+
@default_context = singles.first.context_name
|
174
121
|
end
|
175
122
|
end
|
176
123
|
|
@@ -179,11 +126,7 @@ module AdminIt
|
|
179
126
|
end
|
180
127
|
|
181
128
|
def display_name
|
182
|
-
plural.split('_').map { |s| s.capitalize }.join(' ')
|
183
|
-
end
|
184
|
-
|
185
|
-
def destroyable?
|
186
|
-
@destroyable
|
129
|
+
@display_name ||= plural.split('_').map { |s| s.capitalize }.join(' ')
|
187
130
|
end
|
188
131
|
|
189
132
|
def collection_path
|
@@ -280,11 +223,11 @@ module AdminIt
|
|
280
223
|
end
|
281
224
|
|
282
225
|
def self.resource(name, entity_class = nil, **opts, &block)
|
283
|
-
|
284
|
-
|
285
|
-
|
226
|
+
resource = Resource.new(name, entity_class, **opts)
|
227
|
+
resource.dsl_eval(&block) if block_given?
|
228
|
+
resource.define_controller
|
286
229
|
@resources ||= {}
|
287
|
-
@resources[
|
230
|
+
@resources[resource.name] = resource
|
288
231
|
end
|
289
232
|
|
290
233
|
def self.resources
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.join %w(extend_it dsl)
|
2
|
+
|
3
|
+
module AdminIt
|
4
|
+
module Renderable
|
5
|
+
extend ExtendIt::DslModule
|
6
|
+
|
7
|
+
dsl { dsl_block :render }
|
8
|
+
|
9
|
+
def render(entity, instance = nil, &block)
|
10
|
+
return if @render.nil?
|
11
|
+
# method used as event emmiter, call block in instance or caller
|
12
|
+
# context if it present
|
13
|
+
if instance.nil?
|
14
|
+
@render.call(entity)
|
15
|
+
else
|
16
|
+
instance.instance_exec(entity, &@render)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Iconed
|
22
|
+
extend ExtendIt::DslModule
|
23
|
+
|
24
|
+
dsl do
|
25
|
+
dsl_accessor :icon
|
26
|
+
end
|
27
|
+
|
28
|
+
def icon=(value)
|
29
|
+
@icon = value.nil? ? default_icon : value.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
def icon
|
33
|
+
@icon ||= default_icon
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
def default_icon
|
39
|
+
''
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module DisplayableName
|
44
|
+
extend ExtendIt::DslModule
|
45
|
+
|
46
|
+
dsl do
|
47
|
+
dsl_accessor :display_name
|
48
|
+
end
|
49
|
+
|
50
|
+
def display_name=(value)
|
51
|
+
@display_name = value.nil? ? default_display_name : value.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def display_name
|
55
|
+
@display_name ||= default_display_name
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
def default_display_name
|
61
|
+
''
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/admin_it/version.rb
CHANGED
data/lib/admin_it.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'extend_it'
|
2
|
+
require File.join %w(extend_it ensures)
|
3
|
+
|
4
|
+
module AdminIt
|
5
|
+
using ExtendIt::Ensures if ExtendIt.config.use_refines?
|
6
|
+
end
|
5
7
|
|
6
8
|
require File.join %w(admin_it env)
|
7
9
|
require File.join %w(admin_it errors)
|
8
10
|
require File.join %w(admin_it utils)
|
9
11
|
require File.join %w(admin_it config)
|
10
|
-
require File.join %w(admin_it
|
12
|
+
require File.join %w(admin_it shared)
|
11
13
|
require File.join %w(admin_it data)
|
12
14
|
require File.join %w(admin_it field)
|
13
15
|
require File.join %w(admin_it filters)
|
data/lib/extend_it/array_of.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'forwardable'
|
2
|
-
require File.join %w(extend_it
|
2
|
+
require File.join %w(extend_it ensures)
|
3
3
|
require File.join %w(extend_it asserts)
|
4
4
|
|
5
|
-
using ExtendIt::
|
5
|
+
using ExtendIt::Ensures if ExtendIt.config.use_refines?
|
6
6
|
|
7
7
|
module ExtendIt
|
8
8
|
module ArrayOf
|
@@ -38,7 +38,7 @@ module ExtendIt
|
|
38
38
|
|
39
39
|
def scope(*names, &block)
|
40
40
|
names.flatten.uniq.each do |name|
|
41
|
-
name = name.
|
41
|
+
name = name.ensure_symbol || next
|
42
42
|
@scopes[name] = block.nil? ? proc { |e| e.send(name) } : block
|
43
43
|
str = name.to_s
|
44
44
|
if str[-1] == '?'
|
data/lib/extend_it/asserts.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require File.join %w(extend_it caller)
|
2
|
-
require File.join %w(extend_it
|
2
|
+
require File.join %w(extend_it ensures)
|
3
3
|
|
4
|
-
|
5
|
-
using ExtendIt::
|
4
|
+
if ExtendIt.config.use_refines?
|
5
|
+
using ExtendIt::Caller
|
6
|
+
using ExtendIt::Ensures
|
7
|
+
end
|
6
8
|
|
7
9
|
module ExtendIt
|
8
10
|
module Asserts
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require File.join %w(extend_it
|
2
|
-
|
3
|
-
using ExtendIt::Symbolize
|
1
|
+
require File.join %w(extend_it ensures)
|
4
2
|
|
5
3
|
module ExtendIt
|
6
|
-
module
|
4
|
+
module Base
|
5
|
+
using ExtendIt::Ensures if ExtendIt.config.use_refines?
|
6
|
+
|
7
7
|
def self.extended(base)
|
8
8
|
base.instance_eval do
|
9
9
|
define_singleton_method :parents do
|
@@ -12,6 +12,23 @@ module ExtendIt
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
def metaclass(&block)
|
16
|
+
if @metaclass.nil?
|
17
|
+
@metaclass = (class << self; self end)
|
18
|
+
@metaclass.extend(Base)
|
19
|
+
end
|
20
|
+
@metaclass.class_eval(&block) if block_given?
|
21
|
+
@metaclass
|
22
|
+
end
|
23
|
+
|
24
|
+
def attr_checker(*names)
|
25
|
+
names.ensure_symbols.each do |name|
|
26
|
+
define_method "#{name}?" do
|
27
|
+
instance_variable_get("@#{name}") == true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
15
32
|
def call_inherited(method_name, *args, base_first: false, &block)
|
16
33
|
arr = parents.select { |parent| parent.methods.include?(method_name) }
|
17
34
|
arr.reverse! if base_first == true
|
@@ -29,16 +46,18 @@ module ExtendIt
|
|
29
46
|
end
|
30
47
|
|
31
48
|
def class_attr_reader(*attrs)
|
32
|
-
attrs.
|
33
|
-
attr_name
|
34
|
-
next unless attr_name.is_a?(Symbol)
|
49
|
+
attrs.ensure_symbols.each do |attr_name|
|
50
|
+
attr_name.ensure_local_name || next
|
35
51
|
next if instance_methods.include?(attr_name)
|
36
|
-
var_name =
|
52
|
+
var_name = attr_name.ensure_instance_variable_name
|
37
53
|
if methods.include?(attr_name)
|
38
54
|
define_method(attr_name) { self.class.send(attr_name) }
|
39
|
-
|
55
|
+
else
|
40
56
|
define_method attr_name do
|
41
|
-
self.class.
|
57
|
+
p = self.class.parents.find do |parent|
|
58
|
+
parent.instance_variable_defined?(var_name)
|
59
|
+
end
|
60
|
+
p.nil? ? nil : p.instance_variable_get(var_name)
|
42
61
|
end
|
43
62
|
end
|
44
63
|
end
|
data/lib/extend_it/callbacks.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
require File.join %w(extend_it
|
2
|
-
require File.join %w(extend_it
|
3
|
-
|
4
|
-
using ExtendIt::Symbolize
|
1
|
+
require File.join %w(extend_it ensures)
|
2
|
+
require File.join %w(extend_it base)
|
5
3
|
|
6
4
|
module ExtendIt
|
7
5
|
module Callbacks
|
6
|
+
using ExtendIt::Ensures if ExtendIt.config.use_refines?
|
7
|
+
|
8
8
|
CALLBACKS = %i(before after around)
|
9
9
|
|
10
10
|
def self.included(base)
|
11
11
|
unless base.is_a?(Class)
|
12
12
|
fail RuntimeError, 'Can be included in classes only'
|
13
13
|
end
|
14
|
-
unless (class << base; self end).included_modules.include?(
|
15
|
-
fail RuntimeError, "#{base.name} should extend ExtendIt::
|
14
|
+
unless (class << base; self end).included_modules.include?(Base)
|
15
|
+
fail RuntimeError, "#{base.name} should extend ExtendIt::Base"
|
16
16
|
end
|
17
17
|
base.extend(ClassMethods)
|
18
18
|
end
|
@@ -83,7 +83,7 @@ module ExtendIt
|
|
83
83
|
callbacks = [:before, :after] unless callbacks.is_a?(Array)
|
84
84
|
callbacks.select! { |cb| CALLBACKS.include?(cb) }
|
85
85
|
names.each do |name|
|
86
|
-
name = name.
|
86
|
+
name = name.ensure_symbol || next
|
87
87
|
callbacks.each do |cb|
|
88
88
|
cb_name = "#{cb}_#{name}".to_sym
|
89
89
|
var_name = "@#{cb_name}".to_sym
|
@@ -0,0 +1,30 @@
|
|
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
|