admin_it 1.1.0 → 1.2.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/README.md +4 -0
- data/admin_it.gemspec +1 -0
- data/app/assets/fonts/admin_it/FontAwesome.otf +0 -0
- data/app/assets/fonts/admin_it/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/admin_it/fontawesome-webfont.svg +469 -379
- data/app/assets/fonts/admin_it/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/admin_it/fontawesome-webfont.woff +0 -0
- data/app/assets/javascript/admin_it/admin_it.js +64 -7
- data/app/assets/stylesheets/admin_it/font-awesome-old.min.css.erb +4 -0
- data/app/assets/stylesheets/admin_it/font-awesome.min.css.erb +2 -2
- data/app/controllers/admin_it/signed_url_controller.rb +43 -0
- data/app/views/admin_it/context/_show.html.slim +17 -11
- data/app/views/admin_it/context/_table.html.slim +14 -16
- data/app/views/admin_it/context/_tiles.html.slim +42 -21
- data/app/views/admin_it/editors/_hidden.html.slim +6 -0
- data/app/views/admin_it/editors/_image.html.slim +50 -0
- data/app/views/admin_it/editors/_text.html.slim +6 -0
- data/app/views/admin_it/shared/_child.html.slim +21 -14
- data/app/views/admin_it/shared/_fields.html.slim +36 -15
- data/app/views/admin_it/shared/_filters.html.slim +11 -12
- data/app/views/admin_it/shared/_form.html.slim +40 -24
- data/app/views/admin_it/shared/_pagination.html.slim +10 -18
- data/app/views/admin_it/shared/_toolbar.html.slim +19 -11
- data/app/views/layouts/admin_it.html.slim +24 -16
- data/app/views/layouts/admin_it_dialog.html.slim +4 -4
- data/config/routes.rb +3 -0
- data/lib/admin_it.rb +1 -0
- data/lib/admin_it/config.rb +9 -0
- data/lib/admin_it/context/context.rb +65 -19
- data/lib/admin_it/context/single_context.rb +19 -9
- data/lib/admin_it/controller.rb +6 -1
- data/lib/admin_it/data/active_record/field.rb +7 -0
- data/lib/admin_it/data/active_record/single_context.rb +0 -1
- data/lib/admin_it/engine.rb +2 -0
- data/lib/admin_it/field/field.rb +51 -16
- data/lib/admin_it/helpers/toolbar.rb +8 -2
- data/lib/admin_it/locales/en.yml +4 -0
- data/lib/admin_it/locales/ru.yml +4 -0
- data/lib/admin_it/middleware.rb +54 -0
- data/lib/admin_it/shared.rb +8 -0
- data/lib/admin_it/version.rb +1 -1
- data/lib/extend_it/dsl.rb +1 -1
- metadata +22 -2
|
@@ -7,6 +7,7 @@ module AdminIt
|
|
|
7
7
|
extend ExtendIt::Base
|
|
8
8
|
include ExtendIt::Dsl
|
|
9
9
|
include Renderable
|
|
10
|
+
include Iconed
|
|
10
11
|
|
|
11
12
|
attr_reader :name, :display_name, :fields
|
|
12
13
|
|
|
@@ -53,12 +54,12 @@ module AdminIt
|
|
|
53
54
|
|
|
54
55
|
def identity; end
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def context_param
|
|
57
|
+
def to_link
|
|
59
58
|
identity.nil? ? super : "#{super}(#{identity})"
|
|
60
59
|
end
|
|
61
60
|
|
|
61
|
+
protected
|
|
62
|
+
|
|
62
63
|
#
|
|
63
64
|
module ClassMethods
|
|
64
65
|
end
|
|
@@ -127,12 +128,17 @@ module AdminIt
|
|
|
127
128
|
|
|
128
129
|
def section=(value)
|
|
129
130
|
value = value.ensure_symbol(downcase: true) || return
|
|
130
|
-
if
|
|
131
|
-
return if section != :none
|
|
132
|
-
else
|
|
133
|
-
return unless
|
|
134
|
-
end
|
|
135
|
-
@section =
|
|
131
|
+
# if s.empty?
|
|
132
|
+
# return if section != :none
|
|
133
|
+
# else
|
|
134
|
+
# return unless s.map(&:name).include?(value.to_s)
|
|
135
|
+
# end
|
|
136
|
+
@section = value
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def url_params(**params)
|
|
140
|
+
params[:section] = section unless params.key?(:section)
|
|
141
|
+
super(**params)
|
|
136
142
|
end
|
|
137
143
|
|
|
138
144
|
protected
|
|
@@ -219,6 +225,10 @@ module AdminIt
|
|
|
219
225
|
AdminIt::Engine.routes.url_helpers.send("new_#{resource.name}_path")
|
|
220
226
|
end
|
|
221
227
|
|
|
228
|
+
def path(_entity: nil)
|
|
229
|
+
self.class.path
|
|
230
|
+
end
|
|
231
|
+
|
|
222
232
|
def self.save_action
|
|
223
233
|
:create
|
|
224
234
|
end
|
data/lib/admin_it/controller.rb
CHANGED
|
@@ -24,7 +24,11 @@ module AdminIt
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def redirect_to_default
|
|
27
|
-
|
|
27
|
+
if context.child?
|
|
28
|
+
redirect_to(context.parent.class.url(context.parent, section: context.section))
|
|
29
|
+
else
|
|
30
|
+
redirect_to(resource[resource.default_context].url)
|
|
31
|
+
end
|
|
28
32
|
end
|
|
29
33
|
|
|
30
34
|
private
|
|
@@ -37,6 +41,7 @@ module AdminIt
|
|
|
37
41
|
if layout == 'admin_it' && !request.query_parameters.empty?
|
|
38
42
|
redirect_to request.path
|
|
39
43
|
else
|
|
44
|
+
Request.get(request).process!
|
|
40
45
|
render template: "admin_it/#{context.name}", layout: layout
|
|
41
46
|
end
|
|
42
47
|
end
|
|
@@ -57,6 +57,13 @@ module AdminIt
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def write_value(entity, value)
|
|
60
|
+
if type == :relation
|
|
61
|
+
if assoc.collection?
|
|
62
|
+
value.map! { |x| assoc.klass.find(x) }
|
|
63
|
+
else
|
|
64
|
+
value = assoc.klass.find(value)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
60
67
|
entity.send("#{name}=", value)
|
|
61
68
|
end
|
|
62
69
|
end
|
|
@@ -36,7 +36,6 @@ module AdminIt
|
|
|
36
36
|
fields(scope: :writable).each do |field|
|
|
37
37
|
next unless params.key?(field.name)
|
|
38
38
|
next unless field.writable?
|
|
39
|
-
next if field.type == :relation
|
|
40
39
|
field.write(entity, params[field.name])
|
|
41
40
|
end
|
|
42
41
|
controller.redirect_to_default if entity.save
|
data/lib/admin_it/engine.rb
CHANGED
data/lib/admin_it/field/field.rb
CHANGED
|
@@ -19,17 +19,17 @@ module AdminIt
|
|
|
19
19
|
include ExtendIt::Callbacks
|
|
20
20
|
|
|
21
21
|
TYPES = %i(unknown integer float string date datetime time relation enum
|
|
22
|
-
array hash range regexp symbol binary)
|
|
22
|
+
array hash range regexp symbol binary image)
|
|
23
|
+
EDITORS = %i(text combo radio image hidden)
|
|
23
24
|
|
|
24
25
|
define_callbacks :initialize
|
|
25
26
|
|
|
26
27
|
dsl do
|
|
27
28
|
dsl_accessor :type, default: TYPES[0]
|
|
28
|
-
|
|
29
29
|
dsl_accessor :placeholder
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
dsl_accessor :partial
|
|
31
|
+
dsl_accessor :editor, default: EDITORS[0]
|
|
32
|
+
dsl_boolean :readable, :writable, :visible, :sortable, :show_label
|
|
33
33
|
dsl_block :read, :write, :render, :display
|
|
34
34
|
|
|
35
35
|
def hide
|
|
@@ -42,7 +42,7 @@ module AdminIt
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
class << self
|
|
45
|
-
attr_reader :read, :write, :render, :display, :type
|
|
45
|
+
attr_reader :read, :write, :render, :display, :type, :partial
|
|
46
46
|
|
|
47
47
|
protected
|
|
48
48
|
|
|
@@ -67,6 +67,10 @@ module AdminIt
|
|
|
67
67
|
@sortable.nil? ? @sortable = true : @sortable == true
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
def self.show_label?
|
|
71
|
+
@show_label.nil? ? @show_label = true : @show_label == true
|
|
72
|
+
end
|
|
73
|
+
|
|
70
74
|
inherited_class_reader :field_name, :entity_class
|
|
71
75
|
|
|
72
76
|
def self.create(name, _entity_class, **opts)
|
|
@@ -78,7 +82,9 @@ module AdminIt
|
|
|
78
82
|
@writable = opts[:writable].nil? ? true : opts[:writable] == true
|
|
79
83
|
@visible = opts[:visible].nil? ? true : opts[:visible] == true
|
|
80
84
|
@sortable = opts[:sortable].nil? ? true : opts[:sortable] == true
|
|
85
|
+
@show_label = opts[:show_label].nil? ? true : opts[:show_label] == true
|
|
81
86
|
self.type = opts[:type]
|
|
87
|
+
self.editor = opts[:editor] unless opts[:editor].nil?
|
|
82
88
|
end
|
|
83
89
|
end
|
|
84
90
|
|
|
@@ -86,10 +92,18 @@ module AdminIt
|
|
|
86
92
|
@type = value.ensure_symbol(values: TYPES, default: TYPES[0])
|
|
87
93
|
end
|
|
88
94
|
|
|
95
|
+
def self.editor=(value)
|
|
96
|
+
@editor = value.ensure_symbol(values: EDITORS, default: EDITORS[0])
|
|
97
|
+
end
|
|
98
|
+
|
|
89
99
|
def self.placeholder
|
|
90
100
|
@placeholder ||= display_name
|
|
91
101
|
end
|
|
92
102
|
|
|
103
|
+
def self.partial
|
|
104
|
+
@partial ||= nil
|
|
105
|
+
end
|
|
106
|
+
|
|
93
107
|
def self.hide
|
|
94
108
|
@visible = false
|
|
95
109
|
end
|
|
@@ -98,15 +112,20 @@ module AdminIt
|
|
|
98
112
|
@visible = true
|
|
99
113
|
end
|
|
100
114
|
|
|
101
|
-
|
|
115
|
+
def self.editor
|
|
116
|
+
@editor ||= EDITORS[0]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
class_attr_reader :entity_class, :display_name, :type, :partial, :editor
|
|
102
120
|
attr_writer :visible, :readable, :writable
|
|
103
121
|
|
|
104
|
-
def initialize(readable: nil, writable: nil, visible: nil, sortable: nil)
|
|
122
|
+
def initialize(readable: nil, writable: nil, visible: nil, sortable: nil, show_label: nil)
|
|
105
123
|
run_callbacks :initialize do
|
|
106
124
|
@readable = readable.nil? ? self.class.readable? : readable == true
|
|
107
125
|
@writable = writable.nil? ? self.class.writable? : writable == true
|
|
108
126
|
@visible = visible.nil? ? self.class.visible? : visible == true
|
|
109
127
|
@sortable = sortable.nil? ? self.class.sortable? : sortable == true
|
|
128
|
+
@show_label = show_label.nil? ? self.class.show_label? : show_label == true
|
|
110
129
|
end
|
|
111
130
|
end
|
|
112
131
|
|
|
@@ -126,10 +145,18 @@ module AdminIt
|
|
|
126
145
|
@visible == true
|
|
127
146
|
end
|
|
128
147
|
|
|
148
|
+
def hidden?
|
|
149
|
+
@visible != true
|
|
150
|
+
end
|
|
151
|
+
|
|
129
152
|
def sortable?
|
|
130
153
|
@sortable == true
|
|
131
154
|
end
|
|
132
155
|
|
|
156
|
+
def show_label?
|
|
157
|
+
@show_label == true
|
|
158
|
+
end
|
|
159
|
+
|
|
133
160
|
def read(entity)
|
|
134
161
|
unless readable?
|
|
135
162
|
fail FieldReadError, "Attempt to read write-only field #{name}"
|
|
@@ -219,15 +246,23 @@ module AdminIt
|
|
|
219
246
|
end
|
|
220
247
|
|
|
221
248
|
def fields(scope: :visible)
|
|
249
|
+
values = @fields.values
|
|
250
|
+
if scope.is_a?(Hash)
|
|
251
|
+
if scope.key?(:editor)
|
|
252
|
+
return values.select { |f| f.editor == scope[:editor] }
|
|
253
|
+
end
|
|
254
|
+
end
|
|
222
255
|
case scope
|
|
223
|
-
when nil, :all then
|
|
224
|
-
when :visible then
|
|
225
|
-
when :hidden then
|
|
226
|
-
when :readable then
|
|
227
|
-
when :writable then
|
|
228
|
-
when :sortable then
|
|
229
|
-
when
|
|
230
|
-
|
|
256
|
+
when nil, :all then values
|
|
257
|
+
when :visible then values.select { |f| f.visible? }
|
|
258
|
+
when :hidden then values.select { |f| !f.visible? }
|
|
259
|
+
when :readable then values.select { |f| f.readable? }
|
|
260
|
+
when :writable then values.select { |f| f.writable? }
|
|
261
|
+
when :sortable then values.select { |f| f.sortable? }
|
|
262
|
+
when :with_labels then values.select { |f| f.show_label? }
|
|
263
|
+
when :without_labels then values.select { |f| !f.show_label? }
|
|
264
|
+
when Field::TYPES then values.select { |f| f.type == scope }
|
|
265
|
+
else values
|
|
231
266
|
end
|
|
232
267
|
end
|
|
233
268
|
|
|
@@ -3,10 +3,11 @@ module AdminIt
|
|
|
3
3
|
module Helpers
|
|
4
4
|
#
|
|
5
5
|
class ToolbarItem < WrapIt::Link
|
|
6
|
-
attr_accessor :icon, :add_class, :add_data
|
|
6
|
+
attr_accessor :icon, :dialog, :add_class, :add_data
|
|
7
7
|
option :icon
|
|
8
8
|
option :add_class
|
|
9
9
|
option :add_data
|
|
10
|
+
option :dialog
|
|
10
11
|
section :icon
|
|
11
12
|
place :icon, before: :body
|
|
12
13
|
|
|
@@ -15,7 +16,12 @@ module AdminIt
|
|
|
15
16
|
self[:icon] << html_safe("<i class=\"fa fa-#{icon}\"></i> ")
|
|
16
17
|
end
|
|
17
18
|
html_class << add_class
|
|
18
|
-
|
|
19
|
+
data = add_data.is_a?(Hash) ? add_data : {}
|
|
20
|
+
unless dialog.nil? || dialog.empty?
|
|
21
|
+
data[:toggle] = 'modal'
|
|
22
|
+
data[:target] = dialog
|
|
23
|
+
end
|
|
24
|
+
html_data.merge!(data)
|
|
19
25
|
# options = { tag: 'li' }
|
|
20
26
|
# options[:class] = 'active' if resource == @template.resource
|
|
21
27
|
# wrap(options)
|
data/lib/admin_it/locales/en.yml
CHANGED
data/lib/admin_it/locales/ru.yml
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module AdminIt
|
|
2
|
+
# Middleware request
|
|
3
|
+
class Request < DelegateClass(Hash)
|
|
4
|
+
ENV_KEY = 'admin_it.request'
|
|
5
|
+
|
|
6
|
+
attr_reader :templates
|
|
7
|
+
|
|
8
|
+
def initialize(env)
|
|
9
|
+
@templates = {}
|
|
10
|
+
@collections = {}
|
|
11
|
+
@models = {}
|
|
12
|
+
@env = env
|
|
13
|
+
@process = false
|
|
14
|
+
super({})
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def process?
|
|
18
|
+
@process == true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def process!
|
|
22
|
+
@process = true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.get(request)
|
|
26
|
+
return request if request.is_a?(self)
|
|
27
|
+
fail 'Wrong request' unless request.is_a?(Rack::Request)
|
|
28
|
+
request = request.env[ENV_KEY]
|
|
29
|
+
fail 'rails_script middleware is not mounted' if request.nil?
|
|
30
|
+
request
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# AdminIt middleware
|
|
35
|
+
class Middleware
|
|
36
|
+
SUBST_REGEXP = /<!--\s*([a-zA-Z0-9_]+)\s*-->/
|
|
37
|
+
|
|
38
|
+
def initialize(app)
|
|
39
|
+
@app = app
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def call(env)
|
|
43
|
+
request = env[Request::ENV_KEY] = Request.new(env)
|
|
44
|
+
status, headers, body = @app.call(env)
|
|
45
|
+
if request.process?
|
|
46
|
+
body.each do |str|
|
|
47
|
+
# $1 not working here ???
|
|
48
|
+
str.gsub!(SUBST_REGEXP) { |s| request[SUBST_REGEXP.match(s)[1]] }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
[status, headers, body]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/admin_it/shared.rb
CHANGED
|
@@ -6,6 +6,10 @@ module AdminIt
|
|
|
6
6
|
|
|
7
7
|
dsl { dsl_block :render }
|
|
8
8
|
|
|
9
|
+
def renderable?
|
|
10
|
+
!@render.nil?
|
|
11
|
+
end
|
|
12
|
+
|
|
9
13
|
def render(entity, instance = nil, &block)
|
|
10
14
|
return if @render.nil?
|
|
11
15
|
# method used as event emmiter, call block in instance or caller
|
|
@@ -33,6 +37,10 @@ module AdminIt
|
|
|
33
37
|
@icon ||= default_icon
|
|
34
38
|
end
|
|
35
39
|
|
|
40
|
+
def icon?
|
|
41
|
+
!@icon.nil? && !icon.empty?
|
|
42
|
+
end
|
|
43
|
+
|
|
36
44
|
protected
|
|
37
45
|
|
|
38
46
|
def default_icon
|
data/lib/admin_it/version.rb
CHANGED
data/lib/extend_it/dsl.rb
CHANGED
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.
|
|
4
|
+
version: 1.2.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-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -66,6 +66,20 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: aws-sdk
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: bundler
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -222,11 +236,16 @@ files:
|
|
|
222
236
|
- app/assets/stylesheets/admin_it/admin_it.css
|
|
223
237
|
- app/assets/stylesheets/admin_it/bootstrap-theme.min.css
|
|
224
238
|
- app/assets/stylesheets/admin_it/bootstrap.min.css
|
|
239
|
+
- app/assets/stylesheets/admin_it/font-awesome-old.min.css.erb
|
|
225
240
|
- app/assets/stylesheets/admin_it/font-awesome.min.css.erb
|
|
241
|
+
- app/controllers/admin_it/signed_url_controller.rb
|
|
226
242
|
- app/views/admin_it/context/_show.html.slim
|
|
227
243
|
- app/views/admin_it/context/_table.html.slim
|
|
228
244
|
- app/views/admin_it/context/_tiles.html.slim
|
|
229
245
|
- app/views/admin_it/edit.html.slim
|
|
246
|
+
- app/views/admin_it/editors/_hidden.html.slim
|
|
247
|
+
- app/views/admin_it/editors/_image.html.slim
|
|
248
|
+
- app/views/admin_it/editors/_text.html.slim
|
|
230
249
|
- app/views/admin_it/new.html.slim
|
|
231
250
|
- app/views/admin_it/shared/_child.html.slim
|
|
232
251
|
- app/views/admin_it/shared/_fields.html.slim
|
|
@@ -286,6 +305,7 @@ files:
|
|
|
286
305
|
- lib/admin_it/helpers/top_menu.rb
|
|
287
306
|
- lib/admin_it/locales/en.yml
|
|
288
307
|
- lib/admin_it/locales/ru.yml
|
|
308
|
+
- lib/admin_it/middleware.rb
|
|
289
309
|
- lib/admin_it/resource.rb
|
|
290
310
|
- lib/admin_it/shared.rb
|
|
291
311
|
- lib/admin_it/version.rb
|