sunrise-cms 1.1.1 → 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/.rubocop.yml +3 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.rdoc +5 -0
- data/Gemfile +9 -17
- data/Gemfile.lock +332 -207
- data/README.md +42 -34
- data/app/assets/config/manifest.js +1 -0
- data/app/assets/javascripts/sunrise/application.js +2 -4
- data/app/controllers/sunrise/manager_controller.rb +4 -6
- 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 +2 -0
- 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/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/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/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 +10 -0
- data/lib/sunrise/carrierwave/glue.rb +1 -7
- data/lib/sunrise/config.rb +0 -5
- data/lib/sunrise/core_ext/string.rb +0 -5
- data/lib/sunrise/engine.rb +5 -5
- data/lib/sunrise/models/ability.rb +1 -1
- 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 -11
- metadata +22 -38
- data/.rspec +0 -2
- data/lib/sunrise/carrierwave/file_size_validator.rb +0 -75
- data/lib/sunrise/utils/transliteration.rb +0 -73
@@ -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)
|
@@ -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.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,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'rails'
|
4
4
|
require 'sunrise'
|
5
|
-
require 'select2-rails'
|
6
5
|
require 'jquery-ui-rails'
|
7
6
|
|
8
7
|
module Sunrise
|
@@ -12,9 +11,10 @@ module Sunrise
|
|
12
11
|
|
13
12
|
config.i18n.load_path += Dir[Sunrise.root_path.join('config/locales/**', '*.{rb,yml}')]
|
14
13
|
|
15
|
-
config.assets.precompile += %w[
|
16
|
-
|
17
|
-
|
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
18
|
|
19
19
|
initializer 'sunrise.setup' do
|
20
20
|
I18n::Backend::Simple.include I18n::Backend::Pluralization
|
@@ -34,7 +34,7 @@ module Sunrise
|
|
34
34
|
initializer 'sunrise.csv_renderer' do
|
35
35
|
::ActionController::Renderers.add :csv do |collection, options|
|
36
36
|
doc = Sunrise::Utils::CsvDocument.new(collection, options)
|
37
|
-
send_data(doc.render, filename: doc.filename,
|
37
|
+
send_data(doc.render, filename: doc.filename, disposition: 'attachment')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
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
@@ -25,26 +25,23 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
26
|
s.require_paths = ['lib']
|
27
27
|
|
28
|
-
s.add_dependency('kaminari')
|
29
28
|
s.add_dependency('rails', '>= 4.0.0')
|
29
|
+
s.add_dependency('kaminari')
|
30
30
|
s.add_dependency('simple_form')
|
31
|
-
|
32
|
-
s.add_dependency('babosa')
|
33
|
-
s.add_dependency('cancan')
|
34
|
-
|
31
|
+
s.add_dependency('cancancan')
|
35
32
|
s.add_dependency('carrierwave')
|
36
33
|
s.add_dependency('galetahub-enum_field')
|
37
|
-
s.add_dependency('jquery-ui-rails'
|
38
|
-
s.add_dependency('meta_manager'
|
34
|
+
s.add_dependency('jquery-ui-rails')
|
35
|
+
s.add_dependency('meta_manager')
|
39
36
|
s.add_dependency('mime-types')
|
40
37
|
s.add_dependency('mini_magick')
|
41
|
-
s.add_dependency('page_parts'
|
42
|
-
s.add_dependency('public_activity'
|
43
|
-
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')
|
44
41
|
s.add_dependency('rails-uploader')
|
45
42
|
|
46
43
|
s.add_development_dependency('capybara')
|
47
44
|
s.add_development_dependency('database_cleaner')
|
48
|
-
s.add_development_dependency('
|
45
|
+
s.add_development_dependency('factory_bot_rails')
|
49
46
|
s.add_development_dependency('rspec-rails')
|
50
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,7 +26,7 @@ dependencies:
|
|
40
26
|
- !ruby/object:Gem::Version
|
41
27
|
version: 4.0.0
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
29
|
+
name: kaminari
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
45
31
|
requirements:
|
46
32
|
- - ">="
|
@@ -54,7 +40,7 @@ dependencies:
|
|
54
40
|
- !ruby/object:Gem::Version
|
55
41
|
version: '0'
|
56
42
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
43
|
+
name: simple_form
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
59
45
|
requirements:
|
60
46
|
- - ">="
|
@@ -68,7 +54,7 @@ dependencies:
|
|
68
54
|
- !ruby/object:Gem::Version
|
69
55
|
version: '0'
|
70
56
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
57
|
+
name: cancancan
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|
73
59
|
requirements:
|
74
60
|
- - ">="
|
@@ -115,28 +101,28 @@ dependencies:
|
|
115
101
|
requirements:
|
116
102
|
- - ">="
|
117
103
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
104
|
+
version: '0'
|
119
105
|
type: :runtime
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
108
|
requirements:
|
123
109
|
- - ">="
|
124
110
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
111
|
+
version: '0'
|
126
112
|
- !ruby/object:Gem::Dependency
|
127
113
|
name: meta_manager
|
128
114
|
requirement: !ruby/object:Gem::Requirement
|
129
115
|
requirements:
|
130
116
|
- - ">="
|
131
117
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0
|
118
|
+
version: '0'
|
133
119
|
type: :runtime
|
134
120
|
prerelease: false
|
135
121
|
version_requirements: !ruby/object:Gem::Requirement
|
136
122
|
requirements:
|
137
123
|
- - ">="
|
138
124
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0
|
125
|
+
version: '0'
|
140
126
|
- !ruby/object:Gem::Dependency
|
141
127
|
name: mime-types
|
142
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,42 +157,42 @@ dependencies:
|
|
171
157
|
requirements:
|
172
158
|
- - ">="
|
173
159
|
- !ruby/object:Gem::Version
|
174
|
-
version: 0
|
160
|
+
version: '0'
|
175
161
|
type: :runtime
|
176
162
|
prerelease: false
|
177
163
|
version_requirements: !ruby/object:Gem::Requirement
|
178
164
|
requirements:
|
179
165
|
- - ">="
|
180
166
|
- !ruby/object:Gem::Version
|
181
|
-
version: 0
|
167
|
+
version: '0'
|
182
168
|
- !ruby/object:Gem::Dependency
|
183
169
|
name: public_activity
|
184
170
|
requirement: !ruby/object:Gem::Requirement
|
185
171
|
requirements:
|
186
172
|
- - ">="
|
187
173
|
- !ruby/object:Gem::Version
|
188
|
-
version:
|
174
|
+
version: '0'
|
189
175
|
type: :runtime
|
190
176
|
prerelease: false
|
191
177
|
version_requirements: !ruby/object:Gem::Requirement
|
192
178
|
requirements:
|
193
179
|
- - ">="
|
194
180
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
181
|
+
version: '0'
|
196
182
|
- !ruby/object:Gem::Dependency
|
197
183
|
name: rails-settings-cached
|
198
184
|
requirement: !ruby/object:Gem::Requirement
|
199
185
|
requirements:
|
200
186
|
- - ">="
|
201
187
|
- !ruby/object:Gem::Version
|
202
|
-
version: 0
|
188
|
+
version: '0'
|
203
189
|
type: :runtime
|
204
190
|
prerelease: false
|
205
191
|
version_requirements: !ruby/object:Gem::Requirement
|
206
192
|
requirements:
|
207
193
|
- - ">="
|
208
194
|
- !ruby/object:Gem::Version
|
209
|
-
version: 0
|
195
|
+
version: '0'
|
210
196
|
- !ruby/object:Gem::Dependency
|
211
197
|
name: rails-uploader
|
212
198
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,7 +236,7 @@ dependencies:
|
|
250
236
|
- !ruby/object:Gem::Version
|
251
237
|
version: '0'
|
252
238
|
- !ruby/object:Gem::Dependency
|
253
|
-
name:
|
239
|
+
name: factory_bot_rails
|
254
240
|
requirement: !ruby/object:Gem::Requirement
|
255
241
|
requirements:
|
256
242
|
- - ">="
|
@@ -283,8 +269,8 @@ executables: []
|
|
283
269
|
extensions: []
|
284
270
|
extra_rdoc_files: []
|
285
271
|
files:
|
272
|
+
- ".github/workflows/tests.yml"
|
286
273
|
- ".gitignore"
|
287
|
-
- ".rspec"
|
288
274
|
- ".rubocop.yml"
|
289
275
|
- ".ruby-version"
|
290
276
|
- CHANGELOG.rdoc
|
@@ -293,6 +279,7 @@ files:
|
|
293
279
|
- MIT-LICENSE
|
294
280
|
- README.md
|
295
281
|
- Rakefile
|
282
|
+
- app/assets/config/manifest.js
|
296
283
|
- app/assets/images/alert.png
|
297
284
|
- app/assets/images/cross_ico.png
|
298
285
|
- app/assets/images/gravatar-140.png
|
@@ -518,7 +505,6 @@ files:
|
|
518
505
|
- lib/sunrise.rb
|
519
506
|
- lib/sunrise/abstract_model.rb
|
520
507
|
- lib/sunrise/carrierwave/base_uploader.rb
|
521
|
-
- lib/sunrise/carrierwave/file_size_validator.rb
|
522
508
|
- lib/sunrise/carrierwave/glue.rb
|
523
509
|
- lib/sunrise/config.rb
|
524
510
|
- lib/sunrise/config/association.rb
|
@@ -553,7 +539,6 @@ files:
|
|
553
539
|
- lib/sunrise/utils/csv_document.rb
|
554
540
|
- lib/sunrise/utils/eval_helpers.rb
|
555
541
|
- lib/sunrise/utils/search_wrapper.rb
|
556
|
-
- lib/sunrise/utils/transliteration.rb
|
557
542
|
- lib/sunrise/version.rb
|
558
543
|
- lib/sunrise/views/date_time_input.rb
|
559
544
|
- lib/sunrise/views/form_builder.rb
|
@@ -568,7 +553,7 @@ homepage: https://github.com/galetahub/sunrise
|
|
568
553
|
licenses:
|
569
554
|
- MIT
|
570
555
|
metadata: {}
|
571
|
-
post_install_message:
|
556
|
+
post_install_message:
|
572
557
|
rdoc_options: []
|
573
558
|
require_paths:
|
574
559
|
- lib
|
@@ -583,9 +568,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
583
568
|
- !ruby/object:Gem::Version
|
584
569
|
version: '0'
|
585
570
|
requirements: []
|
586
|
-
|
587
|
-
|
588
|
-
signing_key:
|
571
|
+
rubygems_version: 3.5.23
|
572
|
+
signing_key:
|
589
573
|
specification_version: 4
|
590
574
|
summary: Rails CMS
|
591
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
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sunrise
|
4
|
-
module Utils
|
5
|
-
# Russian transliteration
|
6
|
-
#
|
7
|
-
module Transliteration
|
8
|
-
extend self
|
9
|
-
|
10
|
-
# Transliteration heavily based on rutils gem by Julian "julik" Tarkhanov and Co.
|
11
|
-
# <http://rutils.rubyforge.org/>
|
12
|
-
# Cleaned up and optimized.
|
13
|
-
|
14
|
-
LOWER_SINGLE = {
|
15
|
-
'і' => 'i', 'ґ' => 'g', 'ё' => 'yo', '№' => '#', 'є' => 'e',
|
16
|
-
'ї' => 'yi', 'а' => 'a', 'б' => 'b',
|
17
|
-
'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ж' => 'zh',
|
18
|
-
'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l',
|
19
|
-
'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
|
20
|
-
'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h',
|
21
|
-
'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => "'",
|
22
|
-
'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya'
|
23
|
-
}.freeze
|
24
|
-
LOWER_MULTI = {
|
25
|
-
'ье' => 'ie',
|
26
|
-
'ьё' => 'ie'
|
27
|
-
}.freeze
|
28
|
-
|
29
|
-
UPPER_SINGLE = {
|
30
|
-
'Ґ' => 'G', 'Ё' => 'YO', 'Є' => 'E', 'Ї' => 'YI', 'І' => 'I',
|
31
|
-
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G',
|
32
|
-
'Д' => 'D', 'Е' => 'E', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I',
|
33
|
-
'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
|
34
|
-
'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
|
35
|
-
'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'TS', 'Ч' => 'CH',
|
36
|
-
'Ш' => 'SH', 'Щ' => 'SCH', 'Ъ' => "'", 'Ы' => 'Y', 'Ь' => '',
|
37
|
-
'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA'
|
38
|
-
}.freeze
|
39
|
-
UPPER_MULTI = {
|
40
|
-
'ЬЕ' => 'IE',
|
41
|
-
'ЬЁ' => 'IE'
|
42
|
-
}.freeze
|
43
|
-
|
44
|
-
LOWER = LOWER_SINGLE.merge(LOWER_MULTI).freeze
|
45
|
-
UPPER = UPPER_SINGLE.merge(UPPER_MULTI).freeze
|
46
|
-
MULTI_KEYS = LOWER_MULTI.merge(UPPER_MULTI).keys.sort_by { |s| s.length }.reverse.freeze
|
47
|
-
|
48
|
-
# Transliterate a string with russian characters
|
49
|
-
#
|
50
|
-
# Возвращает строку, в которой все буквы русского алфавита заменены на похожую по звучанию латиницу
|
51
|
-
def transliterate(str)
|
52
|
-
chars = str.scan(/#{MULTI_KEYS.join '|'}|\w|./)
|
53
|
-
|
54
|
-
result = ''
|
55
|
-
|
56
|
-
chars.each_with_index do |char, index|
|
57
|
-
result << if UPPER.key?(char) && LOWER.key?(chars[index + 1])
|
58
|
-
# combined case
|
59
|
-
UPPER[char].downcase.capitalize
|
60
|
-
elsif UPPER.key?(char)
|
61
|
-
UPPER[char]
|
62
|
-
elsif LOWER.key?(char)
|
63
|
-
LOWER[char]
|
64
|
-
else
|
65
|
-
char
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
result
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|