sunrise-cms 1.1.0 → 2.0.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/.github/workflows/tests.yml +49 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +3 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.rdoc +13 -3
- data/Gemfile +11 -22
- data/Gemfile.lock +344 -214
- data/README.md +47 -33
- data/Rakefile +1 -0
- data/app/assets/config/manifest.js +1 -0
- data/app/assets/images/sunrise/icons/export.svg +4 -0
- data/app/assets/images/sunrise/icons/import.svg +5 -0
- data/app/assets/javascripts/sunrise/application.js +2 -5
- data/app/assets/javascripts/sunrise/jquery.dialog.js.coffee +113 -40
- data/app/assets/javascripts/sunrise/jquery.editable.js.coffee +21 -21
- data/app/assets/javascripts/sunrise/manage.js.coffee +29 -28
- data/app/assets/stylesheets/sunrise/application.css +0 -1
- data/app/assets/stylesheets/sunrise/customize.css +7 -4
- data/app/assets/stylesheets/sunrise/main.css +883 -606
- data/app/controllers/sunrise/manager_controller.rb +44 -7
- data/app/controllers/sunrise/settings_controller.rb +2 -3
- data/app/helpers/sunrise/structure_helper.rb +2 -2
- data/app/views/layouts/sunrise/application.html.erb +9 -6
- data/app/views/sunrise/manager/_field.html.erb +5 -5
- data/app/views/sunrise/manager/_form.html.erb +15 -15
- data/app/views/sunrise/manager/_header_edit.html.erb +3 -4
- data/app/views/sunrise/manager/_header_new.html.erb +3 -3
- data/app/views/sunrise/manager/_header_show.html.erb +9 -13
- data/app/views/sunrise/manager/_nested_field.html.erb +6 -6
- data/app/views/sunrise/manager/buttons/_export.html.erb +9 -2
- data/app/views/sunrise/manager/buttons/_import.html.erb +25 -0
- data/app/views/sunrise/manager/buttons/_sort.html.erb +3 -3
- data/app/views/sunrise/manager/edit.html.erb +1 -1
- data/app/views/sunrise/manager/new.html.erb +1 -1
- data/app/views/sunrise/manager/structures/thumbs/_record.html.erb +19 -16
- data/app/views/sunrise/manager/thumbs/_record.html.erb +26 -22
- data/app/views/sunrise/manager/tree/index.html.erb +1 -1
- data/app/views/sunrise/settings/_form.html.erb +5 -5
- data/app/views/sunrise/settings/_header_edit.html.erb +3 -4
- data/config/locales/sunrise/en.yml +35 -35
- data/config/locales/sunrise/ru.yml +35 -35
- data/config/locales/sunrise/uk.yml +35 -35
- data/config/routes.rb +1 -0
- data/db/migrate/20111216144515_create_assets.rb +1 -1
- data/db/migrate/20111216144915_create_structures.rb +1 -1
- data/db/migrate/20111216145015_create_users.rb +1 -1
- data/db/migrate/20120611095315_create_settings.rb +1 -1
- data/lib/generators/sunrise/templates/config/active_record/sunrise.rb +0 -4
- data/lib/generators/sunrise/templates/config/mongoid/sunrise.rb +0 -4
- data/lib/generators/sunrise/templates/models/active_record/attachment_file.rb +0 -2
- data/lib/generators/sunrise/templates/models/active_record/avatar.rb +0 -2
- data/lib/generators/sunrise/templates/models/active_record/picture.rb +0 -2
- data/lib/generators/sunrise/templates/models/active_record/position_type.rb +4 -4
- data/lib/generators/sunrise/templates/models/active_record/role_type.rb +5 -5
- data/lib/generators/sunrise/templates/models/active_record/settings.rb +14 -2
- data/lib/generators/sunrise/templates/models/active_record/structure_type.rb +6 -6
- data/lib/generators/sunrise/templates/models/mongoid/attachment_file.rb +0 -2
- data/lib/generators/sunrise/templates/models/mongoid/avatar.rb +0 -2
- data/lib/generators/sunrise/templates/models/mongoid/picture.rb +0 -2
- data/lib/generators/sunrise/templates/models/mongoid/position_type.rb +4 -4
- data/lib/generators/sunrise/templates/models/mongoid/role_type.rb +5 -5
- data/lib/generators/sunrise/templates/models/mongoid/structure_type.rb +6 -6
- data/lib/generators/sunrise/templates/models/sunrise/sunrise_structure.rb +2 -2
- data/lib/generators/sunrise/templates/spec/controllers/pages_controller_spec.rb +2 -2
- data/lib/generators/sunrise/templates/spec/controllers/welcome_controller_spec.rb +1 -1
- data/lib/generators/sunrise/templates/spec/factories/structure_factory.rb +2 -2
- data/lib/generators/sunrise/templates/spec/factories/user_factory.rb +6 -6
- data/lib/generators/sunrise/templates/spec/spec_helper.rb +1 -1
- data/lib/generators/sunrise/templates/spec/support/helpers/controller_macros.rb +4 -4
- data/lib/generators/sunrise/templates/uploaders/attachment_file_uploader.rb +4 -0
- data/lib/generators/sunrise/templates/uploaders/avatar_uploader.rb +4 -0
- data/lib/generators/sunrise/templates/uploaders/picture_uploader.rb +4 -0
- data/lib/sunrise/abstract_model.rb +13 -3
- data/lib/sunrise/carrierwave/glue.rb +1 -7
- data/lib/sunrise/config/model.rb +4 -0
- data/lib/sunrise/config.rb +0 -5
- data/lib/sunrise/core_ext/string.rb +0 -5
- data/lib/sunrise/engine.rb +7 -1
- data/lib/sunrise/models/ability.rb +8 -8
- data/lib/sunrise/models/position_type.rb +1 -7
- data/lib/sunrise/models/role_type.rb +4 -6
- data/lib/sunrise/models/structure.rb +3 -3
- data/lib/sunrise/models/structure_type.rb +1 -7
- data/lib/sunrise/models/user.rb +4 -4
- data/lib/sunrise/utils.rb +1 -2
- data/lib/sunrise/version.rb +1 -1
- data/lib/sunrise/views/search_wrapper.rb +1 -1
- data/sunrise-cms.gemspec +8 -13
- metadata +24 -65
- data/.rspec +0 -2
- data/lib/sunrise/carrierwave/file_size_validator.rb +0 -75
- data/lib/sunrise/utils/transliteration.rb +0 -73
@@ -50,14 +50,14 @@ module Sunrise
|
|
50
50
|
delegate :label, to: 'self.class.config'
|
51
51
|
delegate :param_key, :singular, :plural, :route_key, to: :model_name
|
52
52
|
|
53
|
-
define_model_callbacks :sort, :mass_destroy, only: [
|
53
|
+
define_model_callbacks :sort, :mass_destroy, only: %i[before after]
|
54
54
|
|
55
55
|
def initialize(params = {})
|
56
56
|
@model_name = model.model_name
|
57
57
|
@current_list = config.default_index_view
|
58
58
|
@available_index_views = config.available_index_views
|
59
59
|
@sort_column = config.sort_column
|
60
|
-
@request_params = params.symbolize_keys
|
60
|
+
@request_params = params.try(:symbolize_keys) || params
|
61
61
|
self.current_list = params[:view]
|
62
62
|
end
|
63
63
|
|
@@ -65,6 +65,16 @@ module Sunrise
|
|
65
65
|
@request_params[param_key.to_sym] || {}
|
66
66
|
end
|
67
67
|
|
68
|
+
def permit_model_params(*filters)
|
69
|
+
params = @request_params[param_key.to_sym]
|
70
|
+
|
71
|
+
if params
|
72
|
+
filters.empty? ? params.permit! : params.permit(*filters)
|
73
|
+
else
|
74
|
+
{}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
68
78
|
# Save current list view
|
69
79
|
def current_list=(value)
|
70
80
|
@current_list = value.to_sym if value && @available_index_views.include?(value.to_sym)
|
@@ -183,7 +193,7 @@ module Sunrise
|
|
183
193
|
if model.respond_to?(:sunrise_search) && params[:search].present?
|
184
194
|
scope = model.sunrise_search(params[:search])
|
185
195
|
end
|
186
|
-
scope ||= model.
|
196
|
+
scope ||= model.all
|
187
197
|
|
188
198
|
scope = scope.merge(association_scope) unless parent_record.nil?
|
189
199
|
scope = scope.merge(sort_scope(params[:sort])) if params[:sort].present?
|
@@ -10,15 +10,9 @@ module Sunrise
|
|
10
10
|
|
11
11
|
module ClassMethods
|
12
12
|
def sunrise_uploader(uploader = nil, options = {}, &block)
|
13
|
-
options = { mount_on: :data_file_name }.merge(options)
|
13
|
+
options = { mount_on: :data_file_name }.merge!(options)
|
14
14
|
|
15
15
|
mount_uploader(:data, uploader, options, &block)
|
16
|
-
|
17
|
-
validates_processing_of :data
|
18
|
-
end
|
19
|
-
|
20
|
-
def validates_filesize_of(*attr_names)
|
21
|
-
validates_with FileSizeValidator, _merge_attributes(attr_names)
|
22
16
|
end
|
23
17
|
end
|
24
18
|
|
data/lib/sunrise/config/model.rb
CHANGED
data/lib/sunrise/config.rb
CHANGED
@@ -40,11 +40,6 @@ module Sunrise
|
|
40
40
|
mattr_accessor :available_locales
|
41
41
|
@@available_locales = []
|
42
42
|
|
43
|
-
# Set transliteration for babosa gem
|
44
|
-
# more info here: https://github.com/norman/babosa
|
45
|
-
mattr_accessor :transliteration
|
46
|
-
@@transliteration = :russian
|
47
|
-
|
48
43
|
# Set index toolbar buttons
|
49
44
|
mattr_accessor :default_toolbar_buttons
|
50
45
|
@@default_toolbar_buttons = [:delete, :edit, :new, :sort, :export]
|
@@ -3,11 +3,6 @@
|
|
3
3
|
require 'active_support/inflector/inflections'
|
4
4
|
|
5
5
|
class String
|
6
|
-
def parameterize(sep = '-')
|
7
|
-
value = Sunrise::Utils::Transliteration.transliterate(self)
|
8
|
-
ActiveSupport::Inflector.parameterize(value, sep)
|
9
|
-
end
|
10
|
-
|
11
6
|
def self.randomize(length = 8)
|
12
7
|
Array.new(length) { (rand(122 - 97) + 97).chr }.join
|
13
8
|
end
|
data/lib/sunrise/engine.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rails'
|
4
4
|
require 'sunrise'
|
5
|
+
require 'jquery-ui-rails'
|
5
6
|
|
6
7
|
module Sunrise
|
7
8
|
class Engine < ::Rails::Engine
|
@@ -10,6 +11,11 @@ module Sunrise
|
|
10
11
|
|
11
12
|
config.i18n.load_path += Dir[Sunrise.root_path.join('config/locales/**', '*.{rb,yml}')]
|
12
13
|
|
14
|
+
config.assets.precompile += %w[sunrise/application.css sunrise/application.js]
|
15
|
+
config.assets.precompile += Dir[Sunrise.root_path.join('app/assets/images/sunrise/**/*')].map do |file|
|
16
|
+
Pathname.new(file).relative_path_from(Sunrise.root_path.join('app/assets/images')).to_s
|
17
|
+
end
|
18
|
+
|
13
19
|
initializer 'sunrise.setup' do
|
14
20
|
I18n::Backend::Simple.include I18n::Backend::Pluralization
|
15
21
|
I18n::Backend::Simple.include I18n::Backend::Transliterator
|
@@ -28,7 +34,7 @@ module Sunrise
|
|
28
34
|
initializer 'sunrise.csv_renderer' do
|
29
35
|
::ActionController::Renderers.add :csv do |collection, options|
|
30
36
|
doc = Sunrise::Utils::CsvDocument.new(collection, options)
|
31
|
-
send_data(doc.render, filename: doc.filename,
|
37
|
+
send_data(doc.render, filename: doc.filename, disposition: 'attachment')
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
@@ -1,22 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'cancan_namespace'
|
4
|
-
|
5
3
|
module Sunrise
|
6
4
|
module Models
|
7
5
|
class Ability
|
8
|
-
include
|
6
|
+
include CanCan::Ability
|
9
7
|
|
10
8
|
attr_accessor :context, :user
|
11
9
|
|
12
10
|
def initialize(user, context = nil)
|
13
|
-
alias_action :delete, to: :destroy
|
11
|
+
# alias_action :delete, to: :destroy
|
14
12
|
|
15
13
|
@user = (user || ::User.new) # guest user (not logged in)
|
16
14
|
@context = context
|
17
15
|
|
18
16
|
if @user.persisted? && @user.role_type
|
19
|
-
send @user.role_type.
|
17
|
+
send @user.role_type.name
|
20
18
|
else
|
21
19
|
guest
|
22
20
|
end
|
@@ -24,13 +22,15 @@ module Sunrise
|
|
24
22
|
|
25
23
|
def admin
|
26
24
|
can :manage, :all
|
27
|
-
can :manage, :all, context: :sunrise
|
25
|
+
# can :manage, :all, context: :sunrise
|
28
26
|
|
29
27
|
# User cannot destroy self account
|
30
|
-
cannot :destroy, ::User, id: @user.id, context: :sunrise
|
28
|
+
# cannot :destroy, ::User, id: @user.id, context: :sunrise
|
29
|
+
cannot :destroy, ::User, id: @user.id
|
31
30
|
|
32
31
|
# User cannot destroy root structure
|
33
|
-
cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id, context: :sunrise
|
32
|
+
# cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id, context: :sunrise
|
33
|
+
cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -5,14 +5,8 @@ module Sunrise
|
|
5
5
|
class PositionType
|
6
6
|
include EnumField::DefineEnum
|
7
7
|
|
8
|
-
attr_reader :code
|
9
|
-
|
10
|
-
def initialize(code)
|
11
|
-
@code = code.to_sym
|
12
|
-
end
|
13
|
-
|
14
8
|
def title
|
15
|
-
I18n.t(
|
9
|
+
I18n.t(name, scope: 'manage.structure.position')
|
16
10
|
end
|
17
11
|
end
|
18
12
|
end
|
@@ -5,14 +5,12 @@ module Sunrise
|
|
5
5
|
class RoleType
|
6
6
|
include EnumField::DefineEnum
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
def initialize(code)
|
11
|
-
@code = code.to_sym
|
8
|
+
def title
|
9
|
+
I18n.t(name, scope: 'manage.role.name')
|
12
10
|
end
|
13
11
|
|
14
|
-
def
|
15
|
-
|
12
|
+
def code
|
13
|
+
name
|
16
14
|
end
|
17
15
|
|
18
16
|
def self.legal?(value)
|
@@ -13,9 +13,9 @@ module Sunrise
|
|
13
13
|
enumerated_attribute :structure_type
|
14
14
|
enumerated_attribute :position_type
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
validates :title, presence: true
|
17
|
+
validates :position_type_id, numericality: { only_integer: true }
|
18
|
+
validates :structure_type_id, numericality: { only_integer: true }
|
19
19
|
|
20
20
|
acts_as_nested_set
|
21
21
|
|
@@ -5,14 +5,8 @@ module Sunrise
|
|
5
5
|
class StructureType
|
6
6
|
include EnumField::DefineEnum
|
7
7
|
|
8
|
-
attr_reader :kind
|
9
|
-
|
10
|
-
def initialize(value)
|
11
|
-
@kind = value.to_sym
|
12
|
-
end
|
13
|
-
|
14
8
|
def title
|
15
|
-
I18n.t(
|
9
|
+
I18n.t(name, scope: 'manage.structure.name')
|
16
10
|
end
|
17
11
|
end
|
18
12
|
end
|
data/lib/sunrise/models/user.rb
CHANGED
@@ -15,10 +15,10 @@ module Sunrise
|
|
15
15
|
|
16
16
|
has_one :avatar, as: :assetable, dependent: :destroy, autosave: true
|
17
17
|
|
18
|
-
|
18
|
+
before_create :set_default_role
|
19
19
|
|
20
20
|
validates :name, presence: true
|
21
|
-
validate :
|
21
|
+
validate :ensure_role_is_allowed
|
22
22
|
|
23
23
|
scope :with_email, ->(email) { where(email: email) }
|
24
24
|
scope :with_name, ->(name) { where(name: name) }
|
@@ -84,10 +84,10 @@ module Sunrise
|
|
84
84
|
protected
|
85
85
|
|
86
86
|
def set_default_role
|
87
|
-
self.
|
87
|
+
self.role_type_id ||= ::RoleType.default.id
|
88
88
|
end
|
89
89
|
|
90
|
-
def
|
90
|
+
def ensure_role_is_allowed
|
91
91
|
errors.add(:role_type_id, :invalid) unless ::RoleType.legal?(role_type_id)
|
92
92
|
end
|
93
93
|
end
|
data/lib/sunrise/utils.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
module Sunrise
|
4
4
|
module Utils
|
5
|
-
autoload :Transliteration, 'sunrise/utils/transliteration'
|
6
5
|
autoload :EvalHelpers, 'sunrise/utils/eval_helpers'
|
7
6
|
autoload :CsvDocument, 'sunrise/utils/csv_document'
|
8
7
|
autoload :SearchWrapper, 'sunrise/utils/search_wrapper'
|
@@ -48,7 +47,7 @@ module Sunrise
|
|
48
47
|
# Convert input to friendly slug using babosa gem
|
49
48
|
#
|
50
49
|
def self.normalize_friendly_id(input)
|
51
|
-
input.to_s.
|
50
|
+
input.to_s.parameterize
|
52
51
|
end
|
53
52
|
end
|
54
53
|
end
|
data/lib/sunrise/version.rb
CHANGED
@@ -9,7 +9,7 @@ module Sunrise
|
|
9
9
|
|
10
10
|
def self.model_name
|
11
11
|
@_model_name ||= begin
|
12
|
-
namespace =
|
12
|
+
namespace = module_parents.detect { |n| n.respond_to?(:_railtie) }
|
13
13
|
ActiveModel::Name.new(self, namespace, 'search')
|
14
14
|
end
|
15
15
|
end
|
data/sunrise-cms.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = 'Sunrise is a Open Source CMS'
|
14
14
|
s.authors = ['Igor Galeta', 'Pavlo Galeta']
|
15
15
|
s.email = 'galeta.igor@gmail.com'
|
16
|
-
s.rubyforge_project = 'sunrise-cms'
|
17
16
|
s.homepage = 'https://github.com/galetahub/sunrise'
|
18
17
|
s.license = 'MIT'
|
19
18
|
|
@@ -26,27 +25,23 @@ Gem::Specification.new do |s|
|
|
26
25
|
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
26
|
s.require_paths = ['lib']
|
28
27
|
|
29
|
-
s.add_dependency('kaminari')
|
30
28
|
s.add_dependency('rails', '>= 4.0.0')
|
29
|
+
s.add_dependency('kaminari')
|
31
30
|
s.add_dependency('simple_form')
|
32
|
-
|
33
|
-
s.add_dependency('babosa')
|
34
|
-
s.add_dependency('cancan')
|
35
|
-
s.add_dependency('cancan_namespace')
|
31
|
+
s.add_dependency('cancancan')
|
36
32
|
s.add_dependency('carrierwave')
|
37
33
|
s.add_dependency('galetahub-enum_field')
|
38
|
-
s.add_dependency('jquery-ui-rails'
|
39
|
-
s.add_dependency('meta_manager'
|
34
|
+
s.add_dependency('jquery-ui-rails')
|
35
|
+
s.add_dependency('meta_manager')
|
40
36
|
s.add_dependency('mime-types')
|
41
37
|
s.add_dependency('mini_magick')
|
42
|
-
s.add_dependency('page_parts'
|
43
|
-
s.add_dependency('public_activity'
|
44
|
-
s.add_dependency('rails-settings-cached'
|
38
|
+
s.add_dependency('page_parts')
|
39
|
+
s.add_dependency('public_activity')
|
40
|
+
s.add_dependency('rails-settings-cached')
|
45
41
|
s.add_dependency('rails-uploader')
|
46
|
-
s.add_dependency('select2-rails')
|
47
42
|
|
48
43
|
s.add_development_dependency('capybara')
|
49
44
|
s.add_development_dependency('database_cleaner')
|
50
|
-
s.add_development_dependency('
|
45
|
+
s.add_development_dependency('factory_bot_rails')
|
51
46
|
s.add_development_dependency('rspec-rails')
|
52
47
|
end
|
metadata
CHANGED
@@ -1,30 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunrise-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Galeta
|
8
8
|
- Pavlo Galeta
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2025-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: kaminari
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: rails
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,21 +26,7 @@ dependencies:
|
|
40
26
|
- !ruby/object:Gem::Version
|
41
27
|
version: 4.0.0
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: babosa
|
29
|
+
name: kaminari
|
58
30
|
requirement: !ruby/object:Gem::Requirement
|
59
31
|
requirements:
|
60
32
|
- - ">="
|
@@ -68,7 +40,7 @@ dependencies:
|
|
68
40
|
- !ruby/object:Gem::Version
|
69
41
|
version: '0'
|
70
42
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
43
|
+
name: simple_form
|
72
44
|
requirement: !ruby/object:Gem::Requirement
|
73
45
|
requirements:
|
74
46
|
- - ">="
|
@@ -82,7 +54,7 @@ dependencies:
|
|
82
54
|
- !ruby/object:Gem::Version
|
83
55
|
version: '0'
|
84
56
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
57
|
+
name: cancancan
|
86
58
|
requirement: !ruby/object:Gem::Requirement
|
87
59
|
requirements:
|
88
60
|
- - ">="
|
@@ -129,28 +101,28 @@ dependencies:
|
|
129
101
|
requirements:
|
130
102
|
- - ">="
|
131
103
|
- !ruby/object:Gem::Version
|
132
|
-
version:
|
104
|
+
version: '0'
|
133
105
|
type: :runtime
|
134
106
|
prerelease: false
|
135
107
|
version_requirements: !ruby/object:Gem::Requirement
|
136
108
|
requirements:
|
137
109
|
- - ">="
|
138
110
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
111
|
+
version: '0'
|
140
112
|
- !ruby/object:Gem::Dependency
|
141
113
|
name: meta_manager
|
142
114
|
requirement: !ruby/object:Gem::Requirement
|
143
115
|
requirements:
|
144
116
|
- - ">="
|
145
117
|
- !ruby/object:Gem::Version
|
146
|
-
version: 0
|
118
|
+
version: '0'
|
147
119
|
type: :runtime
|
148
120
|
prerelease: false
|
149
121
|
version_requirements: !ruby/object:Gem::Requirement
|
150
122
|
requirements:
|
151
123
|
- - ">="
|
152
124
|
- !ruby/object:Gem::Version
|
153
|
-
version: 0
|
125
|
+
version: '0'
|
154
126
|
- !ruby/object:Gem::Dependency
|
155
127
|
name: mime-types
|
156
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,44 +157,30 @@ dependencies:
|
|
185
157
|
requirements:
|
186
158
|
- - ">="
|
187
159
|
- !ruby/object:Gem::Version
|
188
|
-
version: 0
|
160
|
+
version: '0'
|
189
161
|
type: :runtime
|
190
162
|
prerelease: false
|
191
163
|
version_requirements: !ruby/object:Gem::Requirement
|
192
164
|
requirements:
|
193
165
|
- - ">="
|
194
166
|
- !ruby/object:Gem::Version
|
195
|
-
version: 0
|
167
|
+
version: '0'
|
196
168
|
- !ruby/object:Gem::Dependency
|
197
169
|
name: public_activity
|
198
170
|
requirement: !ruby/object:Gem::Requirement
|
199
171
|
requirements:
|
200
172
|
- - ">="
|
201
173
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
174
|
+
version: '0'
|
203
175
|
type: :runtime
|
204
176
|
prerelease: false
|
205
177
|
version_requirements: !ruby/object:Gem::Requirement
|
206
178
|
requirements:
|
207
179
|
- - ">="
|
208
180
|
- !ruby/object:Gem::Version
|
209
|
-
version:
|
181
|
+
version: '0'
|
210
182
|
- !ruby/object:Gem::Dependency
|
211
183
|
name: rails-settings-cached
|
212
|
-
requirement: !ruby/object:Gem::Requirement
|
213
|
-
requirements:
|
214
|
-
- - ">="
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
version: 0.4.0
|
217
|
-
type: :runtime
|
218
|
-
prerelease: false
|
219
|
-
version_requirements: !ruby/object:Gem::Requirement
|
220
|
-
requirements:
|
221
|
-
- - ">="
|
222
|
-
- !ruby/object:Gem::Version
|
223
|
-
version: 0.4.0
|
224
|
-
- !ruby/object:Gem::Dependency
|
225
|
-
name: rails-uploader
|
226
184
|
requirement: !ruby/object:Gem::Requirement
|
227
185
|
requirements:
|
228
186
|
- - ">="
|
@@ -236,7 +194,7 @@ dependencies:
|
|
236
194
|
- !ruby/object:Gem::Version
|
237
195
|
version: '0'
|
238
196
|
- !ruby/object:Gem::Dependency
|
239
|
-
name:
|
197
|
+
name: rails-uploader
|
240
198
|
requirement: !ruby/object:Gem::Requirement
|
241
199
|
requirements:
|
242
200
|
- - ">="
|
@@ -278,7 +236,7 @@ dependencies:
|
|
278
236
|
- !ruby/object:Gem::Version
|
279
237
|
version: '0'
|
280
238
|
- !ruby/object:Gem::Dependency
|
281
|
-
name:
|
239
|
+
name: factory_bot_rails
|
282
240
|
requirement: !ruby/object:Gem::Requirement
|
283
241
|
requirements:
|
284
242
|
- - ">="
|
@@ -311,8 +269,8 @@ executables: []
|
|
311
269
|
extensions: []
|
312
270
|
extra_rdoc_files: []
|
313
271
|
files:
|
272
|
+
- ".github/workflows/tests.yml"
|
314
273
|
- ".gitignore"
|
315
|
-
- ".rspec"
|
316
274
|
- ".rubocop.yml"
|
317
275
|
- ".ruby-version"
|
318
276
|
- CHANGELOG.rdoc
|
@@ -321,6 +279,7 @@ files:
|
|
321
279
|
- MIT-LICENSE
|
322
280
|
- README.md
|
323
281
|
- Rakefile
|
282
|
+
- app/assets/config/manifest.js
|
324
283
|
- app/assets/images/alert.png
|
325
284
|
- app/assets/images/cross_ico.png
|
326
285
|
- app/assets/images/gravatar-140.png
|
@@ -362,6 +321,8 @@ files:
|
|
362
321
|
- app/assets/images/sunrise/icons/commented.svg
|
363
322
|
- app/assets/images/sunrise/icons/create.svg
|
364
323
|
- app/assets/images/sunrise/icons/destroy.svg
|
324
|
+
- app/assets/images/sunrise/icons/export.svg
|
325
|
+
- app/assets/images/sunrise/icons/import.svg
|
365
326
|
- app/assets/images/sunrise/icons/update.svg
|
366
327
|
- app/assets/images/sunrise/note_pointer.png
|
367
328
|
- app/assets/images/sunrise/page_arr_hover.png
|
@@ -446,6 +407,7 @@ files:
|
|
446
407
|
- app/views/sunrise/manager/buttons/_delete.html.erb
|
447
408
|
- app/views/sunrise/manager/buttons/_edit.html.erb
|
448
409
|
- app/views/sunrise/manager/buttons/_export.html.erb
|
410
|
+
- app/views/sunrise/manager/buttons/_import.html.erb
|
449
411
|
- app/views/sunrise/manager/buttons/_new.html.erb
|
450
412
|
- app/views/sunrise/manager/buttons/_sort.html.erb
|
451
413
|
- app/views/sunrise/manager/edit.html.erb
|
@@ -543,7 +505,6 @@ files:
|
|
543
505
|
- lib/sunrise.rb
|
544
506
|
- lib/sunrise/abstract_model.rb
|
545
507
|
- lib/sunrise/carrierwave/base_uploader.rb
|
546
|
-
- lib/sunrise/carrierwave/file_size_validator.rb
|
547
508
|
- lib/sunrise/carrierwave/glue.rb
|
548
509
|
- lib/sunrise/config.rb
|
549
510
|
- lib/sunrise/config/association.rb
|
@@ -578,7 +539,6 @@ files:
|
|
578
539
|
- lib/sunrise/utils/csv_document.rb
|
579
540
|
- lib/sunrise/utils/eval_helpers.rb
|
580
541
|
- lib/sunrise/utils/search_wrapper.rb
|
581
|
-
- lib/sunrise/utils/transliteration.rb
|
582
542
|
- lib/sunrise/version.rb
|
583
543
|
- lib/sunrise/views/date_time_input.rb
|
584
544
|
- lib/sunrise/views/form_builder.rb
|
@@ -593,7 +553,7 @@ homepage: https://github.com/galetahub/sunrise
|
|
593
553
|
licenses:
|
594
554
|
- MIT
|
595
555
|
metadata: {}
|
596
|
-
post_install_message:
|
556
|
+
post_install_message:
|
597
557
|
rdoc_options: []
|
598
558
|
require_paths:
|
599
559
|
- lib
|
@@ -608,9 +568,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
608
568
|
- !ruby/object:Gem::Version
|
609
569
|
version: '0'
|
610
570
|
requirements: []
|
611
|
-
|
612
|
-
|
613
|
-
signing_key:
|
571
|
+
rubygems_version: 3.5.23
|
572
|
+
signing_key:
|
614
573
|
specification_version: 4
|
615
574
|
summary: Rails CMS
|
616
575
|
test_files: []
|
data/.rspec
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sunrise
|
4
|
-
module CarrierWave
|
5
|
-
class FileSizeValidator < ActiveModel::EachValidator
|
6
|
-
MESSAGES = { is: :wrong_size, minimum: :size_too_small, maximum: :size_too_big }.freeze
|
7
|
-
CHECKS = { is: :==, minimum: :>=, maximum: :<= }.freeze
|
8
|
-
|
9
|
-
DEFAULT_TOKENIZER = ->(value) { value.split(//) }
|
10
|
-
RESERVED_OPTIONS = [:minimum, :maximum, :within, :is, :tokenizer, :too_short, :too_long].freeze
|
11
|
-
|
12
|
-
def initialize(options)
|
13
|
-
if range = (options.delete(:in) || options.delete(:within))
|
14
|
-
raise ArgumentError, ':in and :within must be a Range' unless range.is_a?(Range)
|
15
|
-
|
16
|
-
options[:minimum] = range.begin
|
17
|
-
options[:maximum] = range.end
|
18
|
-
options[:maximum] -= 1 if range.exclude_end?
|
19
|
-
end
|
20
|
-
|
21
|
-
super
|
22
|
-
end
|
23
|
-
|
24
|
-
def check_validity!
|
25
|
-
keys = CHECKS.keys & options.keys
|
26
|
-
|
27
|
-
if keys.empty?
|
28
|
-
raise ArgumentError, 'Range unspecified. Specify the :within, :maximum, :minimum, or :is option.'
|
29
|
-
end
|
30
|
-
|
31
|
-
keys.each do |key|
|
32
|
-
value = options[key]
|
33
|
-
|
34
|
-
unless value.is_a?(Integer) && value >= 0
|
35
|
-
raise ArgumentError, ":#{key} must be a nonnegative Integer"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def validate_each(record, attribute, value)
|
41
|
-
unless value.is_a? ::CarrierWave::Uploader::Base
|
42
|
-
raise(ArgumentError, 'A CarrierWave::Uploader::Base object was expected')
|
43
|
-
end
|
44
|
-
|
45
|
-
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.is_a?(String)
|
46
|
-
|
47
|
-
CHECKS.each do |key, validity_check|
|
48
|
-
next unless check_value = options[key]
|
49
|
-
|
50
|
-
value ||= [] if key == :maximum
|
51
|
-
|
52
|
-
value_size = value.size
|
53
|
-
next if value_size.send(validity_check, check_value)
|
54
|
-
|
55
|
-
errors_options = options.except(*RESERVED_OPTIONS)
|
56
|
-
errors_options[:file_size] = help.number_to_human_size check_value
|
57
|
-
|
58
|
-
default_message = options[MESSAGES[key]]
|
59
|
-
errors_options[:message] ||= default_message if default_message
|
60
|
-
|
61
|
-
record.errors.add(attribute, MESSAGES[key], errors_options)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def help
|
66
|
-
Helper.instance
|
67
|
-
end
|
68
|
-
|
69
|
-
class Helper
|
70
|
-
include Singleton
|
71
|
-
include ActionView::Helpers::NumberHelper
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|