maglevcms-shrine 1.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 +7 -0
- data/README.md +40 -0
- data/db/migrate/20231003115104_add_file_data_to_maglev_assets.rb +9 -0
- data/lib/generators/maglev/shrine/install_generator.rb +29 -0
- data/lib/generators/maglev/shrine/templates/install/config/initializers/maglev_shrine.rb +17 -0
- data/lib/maglev/shrine/asset_file_uploader.rb +23 -0
- data/lib/maglev/shrine/config.rb +8 -0
- data/lib/maglev/shrine/engine.rb +11 -0
- data/lib/maglev/shrine/uploader.rb +40 -0
- data/lib/maglev/shrine/version.rb +7 -0
- data/lib/maglevcms-shrine.rb +48 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3658da12d4c22331a5ef2fc56973d3acfd58c9c7b7f83157d6f5bf785d013029
|
4
|
+
data.tar.gz: e2beeefd16aa6534f93ab155f37af56ee8fe71767eda96e1cd2bbb81db031b5b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: df9cc9c64dfe5efdabd79092a2fa1157e8d2573d4e646fd22d560c3d595763ebf1a0b6d375d008cd9e955c320599f0c7ae9c0c685debb28105c9f7648ff9eaa1
|
7
|
+
data.tar.gz: 445844f4cfd8256f54ef75f84251a3f34a8c66069f990f0ff25fb8409c301e510457cb79c4ca37b6fb6583b7a09efe2e9d66f68c3e14b57602aa49117c634ec9
|
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Maglev Shrine
|
2
|
+
|
3
|
+
Change [Maglev CMS](https://github.com/maglevhq/maglev-core) uploader (asset management) to use
|
4
|
+
Shrine instead of Active Storage.
|
5
|
+
|
6
|
+
## Requirements
|
7
|
+
|
8
|
+
* Maglev 1.2+ (might work with earlier versions, but it's untested)
|
9
|
+
* Shrine 3.5+ (might work with earlier versions, but it's untested)
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add the gem to your Gemfile and run `bundle install`:
|
14
|
+
|
15
|
+
```
|
16
|
+
gem 'maglevcms-shrine'
|
17
|
+
```
|
18
|
+
|
19
|
+
Generate migration, run migrations and add a new initializer to configure the gem:
|
20
|
+
|
21
|
+
```
|
22
|
+
bundle exec rails g maglev:shrine:instal
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
No changes are required from the application side. The gem takes care of doing all the necessary
|
28
|
+
changes so Maglev starts using Shrine.
|
29
|
+
|
30
|
+
**NOTE**: Active Storage needs to still be loaded in the application because `app/controllers/maglev/api/assets_controller.rb` in the maglev-core gem uses it.
|
31
|
+
|
32
|
+
## Development
|
33
|
+
|
34
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
35
|
+
|
36
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
37
|
+
|
38
|
+
## TODO
|
39
|
+
|
40
|
+
* Add specs.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Maglev
|
4
|
+
module Shrine
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
|
7
|
+
desc 'Install Maglev Shrine integration'
|
8
|
+
source_root File.expand_path('templates/install', __dir__)
|
9
|
+
|
10
|
+
def migrations
|
11
|
+
rake 'maglev_shrine:install:migrations'
|
12
|
+
rake 'db:migrate'
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_initializer
|
16
|
+
directory 'config'
|
17
|
+
end
|
18
|
+
|
19
|
+
def instructions
|
20
|
+
$stdout.puts <<~INFO
|
21
|
+
Done! 🎉
|
22
|
+
|
23
|
+
You can now tweak config/initializers/maglev_shrine.rb
|
24
|
+
INFO
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Maglev::Shrine.configure do |config|
|
4
|
+
# Change accepted file formats when uploading assets.
|
5
|
+
# Used by the Shrine validation plugin.
|
6
|
+
# config.accepted_mime_types = %w[image/jpeg image/png image/webp image/gif image/heic]
|
7
|
+
|
8
|
+
# Change maximum allowed file size.
|
9
|
+
# Used by the Shrine validation plugin.
|
10
|
+
# config.max_file_size = 20.megabytes
|
11
|
+
|
12
|
+
# Change analyzer used to extract image dimensions.
|
13
|
+
# This value is used by the Shrine store_dimensions plugin. Refer to the plugin
|
14
|
+
# documentation for a list of supported values.
|
15
|
+
# https://shrinerb.com/docs/plugins/store_dimensions
|
16
|
+
# config.store_dimensions_plugin_analyzer = :ruby_vips
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Maglev
|
4
|
+
module Shrine
|
5
|
+
class AssetFileUploader < ::Shrine
|
6
|
+
|
7
|
+
plugin :determine_mime_type,
|
8
|
+
analyzer: :marcel,
|
9
|
+
analyzer_options: { filename_fallback: true }
|
10
|
+
|
11
|
+
plugin :store_dimensions,
|
12
|
+
analyzer: Maglev::Shrine.config.store_dimensions_plugin_analyzer
|
13
|
+
|
14
|
+
plugin :validation_helpers
|
15
|
+
|
16
|
+
Attacher.validate do
|
17
|
+
validate_max_size Maglev::Shrine.config.max_file_size
|
18
|
+
validate_mime_type Maglev::Shrine.config.accepted_mime_types
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Maglev
|
4
|
+
module Shrine
|
5
|
+
module Uploader
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
before_save :set_metadata
|
10
|
+
|
11
|
+
include AssetFileUploader::Attachment(:file)
|
12
|
+
|
13
|
+
delegate :url, to: :file
|
14
|
+
end
|
15
|
+
|
16
|
+
def download
|
17
|
+
file.download.read
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def set_metadata
|
23
|
+
metadata = file.metadata
|
24
|
+
assign_attributes(
|
25
|
+
filename: metadata['filename'],
|
26
|
+
content_type: metadata['mime_type'],
|
27
|
+
byte_size: metadata['size'],
|
28
|
+
height: metadata['height'],
|
29
|
+
width: metadata['width']
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
def optimized
|
35
|
+
all
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'maglev/shrine/engine'
|
4
|
+
require 'maglev/shrine/config'
|
5
|
+
|
6
|
+
module Maglev
|
7
|
+
module Shrine
|
8
|
+
# We use autoload instead of require to load these classes after Rails
|
9
|
+
# initializers have loaded. Shrine uploaders inherit from the Shrine class
|
10
|
+
# At the time of loading the class, it copies all configuration from the
|
11
|
+
# Shrine class. This includes configuration done on the Shrine initializer
|
12
|
+
# by using Shrine.plugin or other method calls.
|
13
|
+
# If we require the AssetFileUploder class when requiring the gem, then it
|
14
|
+
# will not copy any configuration, because the Shrine initializer has not
|
15
|
+
# been run yet.
|
16
|
+
# By delaying requiring until the classes is requested, we make sure the
|
17
|
+
# Shrine base class already has all necessary configuration set up.
|
18
|
+
autoload :AssetFileUploader, 'maglev/shrine/asset_file_uploader'
|
19
|
+
autoload :Uploader, 'maglev/shrine/uploader'
|
20
|
+
|
21
|
+
class << self
|
22
|
+
|
23
|
+
def config
|
24
|
+
@config ||= Config.new.tap do |c|
|
25
|
+
c.accepted_mime_types = %w[image/jpeg image/png image/webp image/gif image/heic]
|
26
|
+
c.max_file_size = 20.megabytes
|
27
|
+
c.store_dimensions_plugin_analyzer = :ruby_vips
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def configure
|
32
|
+
yield config
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Maglev allows to change the uploader by changing `config.uploader`.
|
39
|
+
# However it searches the uploader only inside the maglevcms gem, so it's not possible
|
40
|
+
# to specify a custom uploader. We override the `uploader` method to fix.
|
41
|
+
class << self
|
42
|
+
|
43
|
+
def uploader
|
44
|
+
Maglev::Shrine::Uploader
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: maglevcms-shrine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- MarsBased
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: maglevcms
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: shrine
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
description: Changes assets management in Maglev CMS to use Shrine.
|
42
|
+
email:
|
43
|
+
- dev@marsbased.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- README.md
|
49
|
+
- db/migrate/20231003115104_add_file_data_to_maglev_assets.rb
|
50
|
+
- lib/generators/maglev/shrine/install_generator.rb
|
51
|
+
- lib/generators/maglev/shrine/templates/install/config/initializers/maglev_shrine.rb
|
52
|
+
- lib/maglev/shrine/asset_file_uploader.rb
|
53
|
+
- lib/maglev/shrine/config.rb
|
54
|
+
- lib/maglev/shrine/engine.rb
|
55
|
+
- lib/maglev/shrine/uploader.rb
|
56
|
+
- lib/maglev/shrine/version.rb
|
57
|
+
- lib/maglevcms-shrine.rb
|
58
|
+
homepage: https://github.com/MarsBased/maglevcms-shrine
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata:
|
62
|
+
homepage_uri: https://github.com/MarsBased/maglevcms-shrine
|
63
|
+
source_code_uri: https://github.com/MarsBased/maglevcms-shrine
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 2.7.0
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubygems_version: 3.4.20
|
80
|
+
signing_key:
|
81
|
+
specification_version: 4
|
82
|
+
summary: Integrates Maglev CMS with Shrine.
|
83
|
+
test_files: []
|