redde 0.3.39 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +4 -1
- data/README.md +2 -2
- data/app/assets/javascripts/redde/index.js.coffee +14 -13
- data/app/assets/javascripts/redde/sortTree/index.js.coffee +1 -1
- data/app/assets/javascripts/redde/sortable.coffee +1 -1
- data/app/controllers/admin/base_controller.rb +18 -0
- data/app/helpers/redde/index_helper.rb +105 -103
- data/app/models/redde/photo.rb +1 -1
- data/app/models/redde/presence/view.rb +28 -0
- data/app/models/redde/presence.rb +5 -0
- data/app/views/admin/base/edit.html.haml +1 -1
- data/app/views/admin/redde_photos/_photo.haml +1 -1
- data/db/migrate/20160121152706_create_redde_photos.rb +1 -1
- data/lib/redde/engine.rb +4 -1
- data/lib/redde/version.rb +1 -1
- data/lib/redde.rb +1 -0
- data/redde.gemspec +4 -2
- metadata +39 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b5e0be1b746e4912e3b8956e5b8425449cc99cd59a7898cd344298c2981f6534
|
4
|
+
data.tar.gz: c7fc72bd1781b24ad1d20e09eb6fa99fa70927154d4814d704f17de7f9fe7185
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfc5dc125bacb07fb1eec37085685e253d8ed2637f764aa5bc6417597c29f1adb29c95fc40c665284154a5178bd3760aa495627a310279c369bc6ad621ee7230
|
7
|
+
data.tar.gz: 1a1b284210da57a843253d91537fd1d229cade37b37d082122888957f96dfbeeeab8166335b809f956ca65917da2428f6a079c8c2036b085e5428b477b992c2f
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Redde
|
2
|
-
[![Build Status](https://
|
3
|
-
[![Code Climate](https://codeclimate.com/github/redde/redde.
|
2
|
+
[![Build Status](https://travis-ci.org/redde/redde.svg?branch=master)](https://travis-ci.org/redde/redde)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/redde/redde/badges/gpa.svg)](https://codeclimate.com/github/redde/redde)
|
4
4
|
|
5
5
|
Admin generator for redde projects
|
6
6
|
|
@@ -1,13 +1,14 @@
|
|
1
|
-
#= require jquery
|
2
|
-
#= require jquery_ujs
|
3
|
-
|
4
|
-
# Пока подключаем все подряд, потом сделать кастомизацию
|
5
|
-
#= require ./sortable
|
6
|
-
#= require ./sortTree
|
7
|
-
#= require ./fileapi
|
8
|
-
#= require ./redactor
|
9
|
-
#= require ./file
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
#= require jquery
|
2
|
+
#= require jquery_ujs
|
3
|
+
|
4
|
+
# Пока подключаем все подряд, потом сделать кастомизацию
|
5
|
+
#= require ./sortable
|
6
|
+
#= require ./sortTree
|
7
|
+
#= require ./fileapi
|
8
|
+
#= require ./redactor
|
9
|
+
#= require ./file
|
10
|
+
#= require message-bus
|
11
|
+
|
12
|
+
$ ->
|
13
|
+
$(document).on 'click', '[data-href]', (e)->
|
14
|
+
location.href = $(e.currentTarget).data('href')
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class Admin::BaseController < ActionController::Base
|
2
2
|
layout 'redde'
|
3
3
|
before_action :authenticate_manager!
|
4
|
+
after_action :track_viewer, only: [:edit, :update]
|
4
5
|
protect_from_forgery with: :exception
|
5
6
|
include Redde::AdminHelper
|
6
7
|
include Redde::IndexHelper
|
@@ -71,6 +72,23 @@ class Admin::BaseController < ActionController::Base
|
|
71
72
|
'сохранена'
|
72
73
|
end
|
73
74
|
|
75
|
+
def use_presence?
|
76
|
+
defined?(Redis)
|
77
|
+
end
|
78
|
+
|
79
|
+
def item
|
80
|
+
instance_variable_get("@#{record}")
|
81
|
+
end
|
82
|
+
|
83
|
+
def track_viewer
|
84
|
+
Redde::Presence::View.new(item, current_manager.id).view if item.present?
|
85
|
+
end
|
86
|
+
|
87
|
+
def viewers
|
88
|
+
@viewers ||= Manager.where(Redde::Presence::View.viewers_of(item)) if item
|
89
|
+
end
|
90
|
+
helper_method :viewers
|
91
|
+
|
74
92
|
def url_for_obj(obj, custom_url = nil)
|
75
93
|
return custom_url if custom_url.present?
|
76
94
|
return [:edit, :admin, obj] if params[:commit] == 'Применить'
|
@@ -11,108 +11,6 @@ module Redde::IndexHelper
|
|
11
11
|
model_name.columns.select { |i| i.type == :string }.first
|
12
12
|
end
|
13
13
|
|
14
|
-
class IndexBuilder
|
15
|
-
include ActionView::Helpers::TagHelper
|
16
|
-
include ActionView::Context
|
17
|
-
|
18
|
-
attr_accessor :list, :params
|
19
|
-
|
20
|
-
def initialize(list, params)
|
21
|
-
@list = list
|
22
|
-
@params = params
|
23
|
-
end
|
24
|
-
|
25
|
-
def empty( options = {} )
|
26
|
-
content_tag(:th, "", class: ['list__head', options[:class]])
|
27
|
-
end
|
28
|
-
|
29
|
-
def thead insert
|
30
|
-
content_tag :thead do
|
31
|
-
content_tag(:tr, empty + visible + insert + empty(class: 'list__head_del') + empty)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def visible
|
36
|
-
empty(class: '_eye') if list.column_names.include?('visible')
|
37
|
-
end
|
38
|
-
|
39
|
-
class IndexHeadCellBuilder
|
40
|
-
include ActionView::Helpers::TagHelper
|
41
|
-
include ActionView::Context
|
42
|
-
|
43
|
-
attr_accessor :list
|
44
|
-
|
45
|
-
def initialize(list)
|
46
|
-
@list = list
|
47
|
-
end
|
48
|
-
|
49
|
-
def cell field = nil, options = {}, &block
|
50
|
-
if field.is_a?(Symbol) || field.is_a?(String)
|
51
|
-
content_tag :th, list.human_attribute_name(field), class: ['list__head', options[:class]]
|
52
|
-
elsif field.is_a?(Hash)
|
53
|
-
content_tag :th, "", class: ['list__head', field[:class]]
|
54
|
-
elsif field.nil?
|
55
|
-
content_tag :th, "", class: 'list__head'
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class IndexCellBuilder
|
61
|
-
include ActionView::Helpers
|
62
|
-
include ActionView::Context
|
63
|
-
include ActionView::Helpers::UrlHelper
|
64
|
-
include Rails.application.routes.url_helpers
|
65
|
-
include Haml::Helpers
|
66
|
-
|
67
|
-
attr_accessor :item, :builder
|
68
|
-
|
69
|
-
def initialize(item, builder)
|
70
|
-
@item = item
|
71
|
-
@builder = builder
|
72
|
-
init_haml_helpers
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.content value
|
76
|
-
case value.class.name
|
77
|
-
when 'Time' then I18n.l(value, format: '%d %b %Y, %H:%M')
|
78
|
-
when 'Date' then I18n.l(value, format: '%d %b %Y')
|
79
|
-
else
|
80
|
-
value
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def cell(field, options = {}, &block)
|
85
|
-
# через content_tag ... do не работает
|
86
|
-
if field.is_a?(Hash)
|
87
|
-
content_tag :td, capture(&block), class: ['list__cell', field[:class]]
|
88
|
-
else
|
89
|
-
content_tag :td, if block_given? then capture(&block) else IndexCellBuilder.content(item.send(field)) end, class: ['list__cell', options[:class]]
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def empty(options = {})
|
94
|
-
content_tag(:td, "", class: ['list__cell', options[:class]])
|
95
|
-
end
|
96
|
-
|
97
|
-
def handle
|
98
|
-
return content_tag(:td, "", class: ['list__cell', '_handle'], 'data-sortable-handle' => "") if item.class.column_names.include?('position')
|
99
|
-
empty
|
100
|
-
end
|
101
|
-
|
102
|
-
def visible
|
103
|
-
content_tag :td, class: 'list__cell _eye' do
|
104
|
-
link_to('', url_for(id: item, controller: builder.params[:controller], action: :update, item.class.model_name.param_key => { visible: !item.visible} ), class: ['list__eye', ('_disactive' if !item.visible)], data: { method: 'put' })
|
105
|
-
end if item.class.column_names.include?('visible')
|
106
|
-
end
|
107
|
-
|
108
|
-
def del
|
109
|
-
content_tag :td, class: 'list__cell list__cell_del' do
|
110
|
-
link_to('', url_for(id: item, action: :destroy, controller: builder.params[:controller]), method: :delete, data: { confirm: 'Точно удалить?' }, class: 'list__del')
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
14
|
def list_table(list, options = {}, &block)
|
117
15
|
raise ArgumentError, "Missing block" unless block_given?
|
118
16
|
builder = IndexBuilder.new(list, params)
|
@@ -233,7 +131,111 @@ module Redde::IndexHelper
|
|
233
131
|
end
|
234
132
|
|
235
133
|
def index_value_for(item, column)
|
236
|
-
|
134
|
+
"#{item.model_name}::INDEX_COLUMNS".constantize[column.to_sym].call(item)
|
135
|
+
rescue
|
237
136
|
item.send(column)
|
238
137
|
end
|
138
|
+
|
139
|
+
class IndexBuilder
|
140
|
+
include ActionView::Helpers::TagHelper
|
141
|
+
include ActionView::Context
|
142
|
+
|
143
|
+
attr_accessor :list, :params
|
144
|
+
|
145
|
+
def initialize(list, params)
|
146
|
+
@list = list
|
147
|
+
@params = params
|
148
|
+
end
|
149
|
+
|
150
|
+
def empty( options = {} )
|
151
|
+
content_tag(:th, "", class: ['list__head', options[:class]])
|
152
|
+
end
|
153
|
+
|
154
|
+
def thead insert
|
155
|
+
content_tag :thead do
|
156
|
+
content_tag(:tr, empty + visible + insert + empty(class: 'list__head_del') + empty)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def visible
|
161
|
+
empty(class: '_eye') if list.column_names.include?('visible')
|
162
|
+
end
|
163
|
+
|
164
|
+
class IndexHeadCellBuilder
|
165
|
+
include ActionView::Helpers::TagHelper
|
166
|
+
include ActionView::Context
|
167
|
+
|
168
|
+
attr_accessor :list
|
169
|
+
|
170
|
+
def initialize(list)
|
171
|
+
@list = list
|
172
|
+
end
|
173
|
+
|
174
|
+
def cell field = nil, options = {}, &block
|
175
|
+
if field.is_a?(Symbol) || field.is_a?(String)
|
176
|
+
content_tag :th, list.human_attribute_name(field), class: ['list__head', options[:class]]
|
177
|
+
elsif field.is_a?(Hash)
|
178
|
+
content_tag :th, "", class: ['list__head', field[:class]]
|
179
|
+
elsif field.nil?
|
180
|
+
content_tag :th, "", class: 'list__head'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
class IndexCellBuilder
|
186
|
+
include ActionView::Helpers
|
187
|
+
include ActionView::Context
|
188
|
+
include ActionView::Helpers::UrlHelper
|
189
|
+
include Redde::IndexHelper
|
190
|
+
include Rails.application.routes.url_helpers
|
191
|
+
include Haml::Helpers
|
192
|
+
|
193
|
+
attr_accessor :item, :builder
|
194
|
+
|
195
|
+
def initialize(item, builder)
|
196
|
+
@item = item
|
197
|
+
@builder = builder
|
198
|
+
init_haml_helpers
|
199
|
+
end
|
200
|
+
|
201
|
+
def self.content(value)
|
202
|
+
case value.class.name
|
203
|
+
when 'Time' then I18n.l(value, format: '%d %b %Y, %H:%M')
|
204
|
+
when 'Date' then I18n.l(value, format: '%d %b %Y')
|
205
|
+
else
|
206
|
+
value
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def cell(field, options = {}, &block)
|
211
|
+
# через content_tag ... do не работает
|
212
|
+
if field.is_a?(Hash)
|
213
|
+
content_tag :td, capture(&block), class: ['list__cell', field[:class]]
|
214
|
+
else
|
215
|
+
content_tag :td, if block_given? then capture(&block) else raw(IndexCellBuilder.content(index_value_for(item, field))) end, class: ['list__cell', options[:class]]
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def empty(options = {})
|
220
|
+
content_tag(:td, "", class: ['list__cell', options[:class]])
|
221
|
+
end
|
222
|
+
|
223
|
+
def handle
|
224
|
+
return content_tag(:td, "", class: ['list__cell', '_handle'], 'data-sortable-handle' => "") if item.class.column_names.include?('position')
|
225
|
+
empty
|
226
|
+
end
|
227
|
+
|
228
|
+
def visible
|
229
|
+
content_tag :td, class: 'list__cell _eye' do
|
230
|
+
link_to('', url_for(id: item, controller: builder.params[:controller], action: :update, item.class.model_name.param_key => { visible: !item.visible} ), class: ['list__eye', ('_disactive' if !item.visible)], data: { method: 'put' })
|
231
|
+
end if item.class.column_names.include?('visible')
|
232
|
+
end
|
233
|
+
|
234
|
+
def del
|
235
|
+
content_tag :td, class: 'list__cell list__cell_del' do
|
236
|
+
link_to('', url_for(id: item, action: :destroy, controller: builder.params[:controller]), method: :delete, data: { confirm: 'Точно удалить?' }, class: 'list__del')
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
239
241
|
end
|
data/app/models/redde/photo.rb
CHANGED
@@ -2,7 +2,7 @@ class Redde::Photo < ActiveRecord::Base
|
|
2
2
|
mount_uploader :src, PhotoUploader
|
3
3
|
self.table_name = 'redde_photos'
|
4
4
|
|
5
|
-
belongs_to :imageable, polymorphic: true
|
5
|
+
belongs_to :imageable, polymorphic: true, optional: true
|
6
6
|
default_scope { order(:position) }
|
7
7
|
before_save :set_token, unless: :persisted_link?
|
8
8
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Redde
|
2
|
+
module Presence
|
3
|
+
class View
|
4
|
+
attr_reader :obj, :user_id
|
5
|
+
TTL = 15
|
6
|
+
|
7
|
+
def initialize(obj, user_id)
|
8
|
+
@obj = obj
|
9
|
+
@user_id = user_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.viewers_of(obj)
|
13
|
+
Redis.current.keys("#{obj.class.name}:#{obj.id}:*").map do |key|
|
14
|
+
key.split(':').last.to_i
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def view
|
19
|
+
Redis.current.set(key, 1)
|
20
|
+
Redis.current.expire(key, TTL)
|
21
|
+
end
|
22
|
+
|
23
|
+
def key
|
24
|
+
"#{obj.class.name}:#{obj.id}:#{user_id}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
%li.photos__item{ :id => "photo_#{photo.id}" }
|
2
2
|
= link_to photo.src_url, class: 'photos__link' do
|
3
|
-
= image_tag photo.
|
3
|
+
= image_tag photo.src_url(:admin), class: 'photos__img'
|
4
4
|
%span.photos__title= photo.src.file.filename
|
5
5
|
= link_to("",
|
6
6
|
url_for([:admin, photo]),
|
data/lib/redde/engine.rb
CHANGED
@@ -2,7 +2,7 @@ module Redde
|
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
config.generators do |g|
|
4
4
|
g.test_framework :rspec, fixture: false
|
5
|
-
g.fixture_replacement :
|
5
|
+
g.fixture_replacement :factory_bot, dir: 'spec/factories'
|
6
6
|
g.assets false
|
7
7
|
g.helper false
|
8
8
|
end
|
@@ -11,5 +11,8 @@ module Redde
|
|
11
11
|
redde/favicon.png
|
12
12
|
)
|
13
13
|
end
|
14
|
+
initializer 'ReddeEngine.add_message_bus' do |app|
|
15
|
+
app.middleware.use MessageBus::Rack::Middleware
|
16
|
+
end
|
14
17
|
end
|
15
18
|
end
|
data/lib/redde/version.rb
CHANGED
data/lib/redde.rb
CHANGED
data/redde.gemspec
CHANGED
@@ -29,22 +29,24 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_runtime_dependency 'mini_magick'
|
30
30
|
spec.add_runtime_dependency 'kaminari'
|
31
31
|
spec.add_runtime_dependency 'ancestry'
|
32
|
+
spec.add_runtime_dependency 'message_bus'
|
33
|
+
spec.add_runtime_dependency 'redis'
|
32
34
|
spec.add_dependency 'rails', '>= 3.1'
|
33
35
|
spec.add_dependency 'sass-rails'
|
34
36
|
|
35
37
|
spec.add_development_dependency 'bundler'
|
36
38
|
spec.add_development_dependency 'rake'
|
37
39
|
spec.add_development_dependency 'rspec-rails', '>= 2.7'
|
38
|
-
spec.add_development_dependency '
|
40
|
+
spec.add_development_dependency 'factory_bot_rails', '>= 2.7'
|
39
41
|
spec.add_development_dependency 'guard-rspec'
|
40
42
|
spec.add_development_dependency 'sqlite3'
|
41
43
|
spec.add_development_dependency 'generator_spec'
|
42
44
|
spec.add_development_dependency 'devise'
|
43
45
|
spec.add_development_dependency 'coffee-rails'
|
44
46
|
spec.add_development_dependency 'sprockets-rails'
|
45
|
-
spec.add_development_dependency 'quiet_assets'
|
46
47
|
spec.add_development_dependency 'capybara'
|
47
48
|
spec.add_development_dependency 'ffaker'
|
48
49
|
spec.add_development_dependency 'rubocop'
|
49
50
|
spec.add_development_dependency 'launchy'
|
51
|
+
spec.add_development_dependency 'puma'
|
50
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redde
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Bovykin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-07-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jquery-rails
|
@@ -151,6 +151,34 @@ dependencies:
|
|
151
151
|
- - ">="
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: message_bus
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :runtime
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: redis
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :runtime
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
154
182
|
- !ruby/object:Gem::Dependency
|
155
183
|
name: rails
|
156
184
|
requirement: !ruby/object:Gem::Requirement
|
@@ -222,7 +250,7 @@ dependencies:
|
|
222
250
|
- !ruby/object:Gem::Version
|
223
251
|
version: '2.7'
|
224
252
|
- !ruby/object:Gem::Dependency
|
225
|
-
name:
|
253
|
+
name: factory_bot_rails
|
226
254
|
requirement: !ruby/object:Gem::Requirement
|
227
255
|
requirements:
|
228
256
|
- - ">="
|
@@ -320,7 +348,7 @@ dependencies:
|
|
320
348
|
- !ruby/object:Gem::Version
|
321
349
|
version: '0'
|
322
350
|
- !ruby/object:Gem::Dependency
|
323
|
-
name:
|
351
|
+
name: capybara
|
324
352
|
requirement: !ruby/object:Gem::Requirement
|
325
353
|
requirements:
|
326
354
|
- - ">="
|
@@ -334,7 +362,7 @@ dependencies:
|
|
334
362
|
- !ruby/object:Gem::Version
|
335
363
|
version: '0'
|
336
364
|
- !ruby/object:Gem::Dependency
|
337
|
-
name:
|
365
|
+
name: ffaker
|
338
366
|
requirement: !ruby/object:Gem::Requirement
|
339
367
|
requirements:
|
340
368
|
- - ">="
|
@@ -348,7 +376,7 @@ dependencies:
|
|
348
376
|
- !ruby/object:Gem::Version
|
349
377
|
version: '0'
|
350
378
|
- !ruby/object:Gem::Dependency
|
351
|
-
name:
|
379
|
+
name: rubocop
|
352
380
|
requirement: !ruby/object:Gem::Requirement
|
353
381
|
requirements:
|
354
382
|
- - ">="
|
@@ -362,7 +390,7 @@ dependencies:
|
|
362
390
|
- !ruby/object:Gem::Version
|
363
391
|
version: '0'
|
364
392
|
- !ruby/object:Gem::Dependency
|
365
|
-
name:
|
393
|
+
name: launchy
|
366
394
|
requirement: !ruby/object:Gem::Requirement
|
367
395
|
requirements:
|
368
396
|
- - ">="
|
@@ -376,7 +404,7 @@ dependencies:
|
|
376
404
|
- !ruby/object:Gem::Version
|
377
405
|
version: '0'
|
378
406
|
- !ruby/object:Gem::Dependency
|
379
|
-
name:
|
407
|
+
name: puma
|
380
408
|
requirement: !ruby/object:Gem::Requirement
|
381
409
|
requirements:
|
382
410
|
- - ">="
|
@@ -518,6 +546,8 @@ files:
|
|
518
546
|
- app/models/concerns/redde/tree_sortable.rb
|
519
547
|
- app/models/concerns/redde/with_photo.rb
|
520
548
|
- app/models/redde/photo.rb
|
549
|
+
- app/models/redde/presence.rb
|
550
|
+
- app/models/redde/presence/view.rb
|
521
551
|
- app/models/redde/system_command.rb
|
522
552
|
- app/models/redde/url_generator.rb
|
523
553
|
- app/uploaders/photo_uploader.rb
|
@@ -585,8 +615,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
585
615
|
- !ruby/object:Gem::Version
|
586
616
|
version: '0'
|
587
617
|
requirements: []
|
588
|
-
|
589
|
-
rubygems_version: 2.4.5.1
|
618
|
+
rubygems_version: 3.0.4
|
590
619
|
signing_key:
|
591
620
|
specification_version: 4
|
592
621
|
summary: Admin scaffold generator for redde projects
|