parklife-rails 0.1.0 → 0.3.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/Appraisals +1 -0
- data/CHANGELOG.md +14 -0
- data/README.md +51 -0
- data/Rakefile +4 -0
- data/app/controllers/parklife/rails/active_storage/blobs_controller.rb +27 -0
- data/config/routes.rb +48 -0
- data/gemfiles/rails_7.0.gemfile +12 -1
- data/gemfiles/rails_7.1.gemfile +12 -1
- data/gemfiles/rails_7.2.gemfile +12 -1
- data/gemfiles/rails_8.0.gemfile +12 -1
- data/lib/active_storage/service/parklife_service.rb +19 -0
- data/lib/parklife/rails/activestorage.rb +30 -0
- data/lib/parklife/rails/build_integration.rb +73 -0
- data/lib/parklife/rails/config_refinements.rb +20 -0
- data/lib/parklife/rails/route_set_refinements.rb +10 -0
- data/lib/parklife/rails/version.rb +1 -1
- data/lib/parklife/rails.rb +6 -67
- data/lib/parklife-rails/activestorage.rb +2 -0
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57ab04a4d96ded8bcb081c1d3c6e7236e03d163052f409b4d281d4dffbcce966
|
4
|
+
data.tar.gz: 663b999db226fa73460e8c2ce526e987a2502e8d6f70d78782a75eadf367fc48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8f33fe1826e01f722dafc0ef3a0513f6a72eb66e35bf1978c3529c3e33da6bbb474795efbe6bf3a59cc99f946f11761f5d1d264b995a21019bd401c464c1f07
|
7
|
+
data.tar.gz: f0f1a2181451e3e563033fffcd3ecf9393f7c6bfda165cce5bb20a26c8e20e038c522eba6f170b335395c8d1372209dce80d9e50db9a17db5891c5e0fb6ca230
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## 0.3.0 - 2025-09-05
|
4
|
+
|
5
|
+
- Allow passing an ActiveStorage blob/attachment/preview/variant to the usual tag helpers:
|
6
|
+
|
7
|
+
```
|
8
|
+
image_tag(blog_post.hero_image.variant(:medium))
|
9
|
+
|
10
|
+
video_tag(product.intro_video)
|
11
|
+
```
|
12
|
+
|
13
|
+
## 0.2.0 - 2025-08-21
|
14
|
+
|
15
|
+
- ActiveStorage integration.
|
16
|
+
|
3
17
|
## 0.1.0 - 2025-08-10
|
4
18
|
|
5
19
|
- Initial release extracted from Parklife 0.7.0.
|
data/README.md
CHANGED
@@ -8,6 +8,57 @@ Add the gem to your application's `Gemfile`:
|
|
8
8
|
gem 'parklife-rails'
|
9
9
|
```
|
10
10
|
|
11
|
+
## ActiveStorage integration
|
12
|
+
|
13
|
+
Parklife's ActiveStorage integration allows you to use ActiveStorage as normal in development, then during a Parklife build any encountered attachments are collected and copied to the build directory so they can be served alongside the rest of your static files. This is achieved via a Rails Engine and custom ActiveStorage DiskService which work together to tweak ActiveStorage URLs so they're suitable for a static web server.
|
14
|
+
|
15
|
+
Enable the engine in `config/application.rb`:
|
16
|
+
|
17
|
+
> [!NOTE]
|
18
|
+
> This must be done before the app boots so can't be in an initializer.
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
require 'parklife-rails/activestorage'
|
22
|
+
```
|
23
|
+
|
24
|
+
Then switch to Parklife's ActiveStorage service in `config/storage.yml`:
|
25
|
+
|
26
|
+
```yml
|
27
|
+
local:
|
28
|
+
service: Parklife
|
29
|
+
root: <%= Rails.root.join("storage") %>
|
30
|
+
```
|
31
|
+
|
32
|
+
Finally, use ActiveStorage (almost entirely) as usual:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
# Pass a blob/attachment/preview/variant directly to helpers as usual:
|
36
|
+
image_tag(blog_post.hero_image.variant(:medium))
|
37
|
+
# => <img src="/parklife/blobs/6adews39uehd44spynetigykwssh/cute-cat.jpg" />
|
38
|
+
video_tag(product.intro_video)
|
39
|
+
# => <video src="/parklife/blobs/x74tu8izjv141l8503gwkkruokca/cat-mug.mp4"></video>
|
40
|
+
|
41
|
+
# Ask a variant for its path:
|
42
|
+
blog_post.hero_image.variant(:medium).processed.url
|
43
|
+
# => "/parklife/blobs/6adews39uehd44spynetigykwssh/cute-cat.jpg"
|
44
|
+
|
45
|
+
# Use the route helper:
|
46
|
+
Rails.application.routes.url_helpers.parklife_blob_path(
|
47
|
+
blog_post.hero_image.variant(:medium)
|
48
|
+
)
|
49
|
+
# => "/parklife/blobs/6adews39uehd44spynetigykwssh/cute-cat.jpg"
|
50
|
+
```
|
51
|
+
|
52
|
+
The only quirk is if you want to generate the full URL (including hostname etc), in that case `parklife_blob_url` doesn't behave as you'd expect and you must also pass `only_path: false`:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Rails.application.routes.url_helpers.parklife_blob_url(
|
56
|
+
blog_post.hero_image.variant(:medium),
|
57
|
+
only_path: false,
|
58
|
+
)
|
59
|
+
# => "http://example.com/parklife/blobs/6adews39uehd44spynetigykwssh/cute-cat.jpg"
|
60
|
+
```
|
61
|
+
|
11
62
|
## Contributing
|
12
63
|
|
13
64
|
Bug reports and pull requests are welcome on GitHub at <https://github.com/benpickles/parklife-rails>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/benpickles/parklife-rails/blob/main/CODE_OF_CONDUCT.md).
|
data/Rakefile
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Parklife
|
3
|
+
module Rails
|
4
|
+
module ActiveStorage
|
5
|
+
class BlobsController < ActionController::Base
|
6
|
+
include ::ActiveStorage::FileServer
|
7
|
+
|
8
|
+
def show
|
9
|
+
blob = ::ActiveStorage::Blob.find_by!(key: params[:key])
|
10
|
+
|
11
|
+
serve_file(
|
12
|
+
named_disk_service(blob.service_name).path_for(blob.key),
|
13
|
+
content_type: blob.content_type,
|
14
|
+
disposition: :inline,
|
15
|
+
)
|
16
|
+
rescue Errno::ENOENT
|
17
|
+
head :not_found
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def named_disk_service(name)
|
22
|
+
::ActiveStorage::Blob.services.fetch(name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Rails.application.routes.draw do
|
3
|
+
scope Parklife::Rails::ActiveStorage.routes_prefix do
|
4
|
+
get 'blobs/:key/*filename',
|
5
|
+
to: 'parklife/rails/active_storage/blobs#show',
|
6
|
+
as: :parklife_blob_service
|
7
|
+
end
|
8
|
+
|
9
|
+
direct :parklife_blob do |obj, options|
|
10
|
+
blob = case obj
|
11
|
+
when ActiveStorage::Attachment
|
12
|
+
obj.blob
|
13
|
+
when ActiveStorage::Preview, ActiveStorage::VariantWithRecord
|
14
|
+
obj.processed.image.blob
|
15
|
+
else
|
16
|
+
obj
|
17
|
+
end
|
18
|
+
|
19
|
+
options = { only_path: true }.merge(options)
|
20
|
+
url = route_for(:parklife_blob_service, blob.key, blob.filename, options)
|
21
|
+
|
22
|
+
if Parklife::Rails::ActiveStorage.collect_assets
|
23
|
+
service = ActiveStorage::Blob.services.fetch(blob.service_name)
|
24
|
+
|
25
|
+
# When collecting ActiveStorage Blobs we only ever want the path and never
|
26
|
+
# its full URL.
|
27
|
+
path = if options[:only_path]
|
28
|
+
url
|
29
|
+
else
|
30
|
+
route_for(
|
31
|
+
:parklife_blob_service,
|
32
|
+
blob.key,
|
33
|
+
blob.filename,
|
34
|
+
options.merge(only_path: true),
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
Parklife::Rails::ActiveStorage.collect_asset(service, blob.key, path)
|
39
|
+
end
|
40
|
+
|
41
|
+
url
|
42
|
+
end
|
43
|
+
|
44
|
+
resolve('ActiveStorage::Attachment') { |attachment, options| route_for(:parklife_blob, attachment, options) }
|
45
|
+
resolve('ActiveStorage::Blob') { |blob, options| route_for(:parklife_blob, blob, options) }
|
46
|
+
resolve('ActiveStorage::Preview') { |preview, options| route_for(:parklife_blob, preview, options) }
|
47
|
+
resolve('ActiveStorage::VariantWithRecord') { |variant, options| route_for(:parklife_blob, variant, options) }
|
48
|
+
end
|
data/gemfiles/rails_7.0.gemfile
CHANGED
@@ -4,9 +4,20 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "rake"
|
7
|
-
gem "rspec"
|
8
7
|
gem "rubocop"
|
8
|
+
gem "image_processing"
|
9
|
+
gem "sprockets-rails"
|
10
|
+
gem "sqlite3", "<2"
|
9
11
|
gem "concurrent-ruby", "< 1.3.5"
|
10
12
|
gem "rails", "~> 7.0.0"
|
11
13
|
|
14
|
+
group :development, :test do
|
15
|
+
gem "rspec-rails"
|
16
|
+
end
|
17
|
+
|
18
|
+
group :test do
|
19
|
+
gem "capybara"
|
20
|
+
gem "factory_bot_rails"
|
21
|
+
end
|
22
|
+
|
12
23
|
gemspec path: "../"
|
data/gemfiles/rails_7.1.gemfile
CHANGED
@@ -4,8 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "rake"
|
7
|
-
gem "rspec"
|
8
7
|
gem "rubocop"
|
8
|
+
gem "image_processing"
|
9
|
+
gem "sprockets-rails"
|
10
|
+
gem "sqlite3"
|
9
11
|
gem "rails", "~> 7.1.0"
|
10
12
|
|
13
|
+
group :development, :test do
|
14
|
+
gem "rspec-rails"
|
15
|
+
end
|
16
|
+
|
17
|
+
group :test do
|
18
|
+
gem "capybara"
|
19
|
+
gem "factory_bot_rails"
|
20
|
+
end
|
21
|
+
|
11
22
|
gemspec path: "../"
|
data/gemfiles/rails_7.2.gemfile
CHANGED
@@ -4,8 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "rake"
|
7
|
-
gem "rspec"
|
8
7
|
gem "rubocop"
|
8
|
+
gem "image_processing"
|
9
|
+
gem "sprockets-rails"
|
10
|
+
gem "sqlite3"
|
9
11
|
gem "rails", "~> 7.2.0"
|
10
12
|
|
13
|
+
group :development, :test do
|
14
|
+
gem "rspec-rails"
|
15
|
+
end
|
16
|
+
|
17
|
+
group :test do
|
18
|
+
gem "capybara"
|
19
|
+
gem "factory_bot_rails"
|
20
|
+
end
|
21
|
+
|
11
22
|
gemspec path: "../"
|
data/gemfiles/rails_8.0.gemfile
CHANGED
@@ -4,8 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "rake"
|
7
|
-
gem "rspec"
|
8
7
|
gem "rubocop"
|
8
|
+
gem "image_processing"
|
9
|
+
gem "sprockets-rails"
|
10
|
+
gem "sqlite3"
|
9
11
|
gem "rails", "~> 8.0.0"
|
10
12
|
|
13
|
+
group :development, :test do
|
14
|
+
gem "rspec-rails"
|
15
|
+
end
|
16
|
+
|
17
|
+
group :test do
|
18
|
+
gem "capybara"
|
19
|
+
gem "factory_bot_rails"
|
20
|
+
end
|
21
|
+
|
11
22
|
gemspec path: "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'active_storage/service/disk_service'
|
3
|
+
|
4
|
+
module ActiveStorage
|
5
|
+
class Service::ParklifeService < Service::DiskService
|
6
|
+
def url(key, **options)
|
7
|
+
super.tap do |path|
|
8
|
+
if Parklife::Rails::ActiveStorage.collect_assets
|
9
|
+
Parklife::Rails::ActiveStorage.collect_asset(self, key, path)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def generate_url(key, expires_in:, filename:, content_type:, disposition:) # rubocop:disable Lint/UnusedMethodArgument
|
16
|
+
url_helpers.parklife_blob_service_path(key: key, filename: filename)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Parklife
|
3
|
+
module Rails
|
4
|
+
module ActiveStorage
|
5
|
+
Asset = Struct.new(:service, :key, :path) do
|
6
|
+
def blob_path
|
7
|
+
service.path_for(key)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Engine < ::Rails::Engine
|
12
|
+
isolate_namespace Parklife::Rails::ActiveStorage
|
13
|
+
|
14
|
+
initializer 'parklife.app_integration' do |app|
|
15
|
+
# Disable the standard ActiveStorage routes that will otherwise
|
16
|
+
# prevent a blob being served by Parklife's controller.
|
17
|
+
app.config.active_storage.draw_routes = false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
mattr_accessor :collect_assets, default: false
|
22
|
+
mattr_accessor :collected_assets, default: {}
|
23
|
+
mattr_accessor :routes_prefix, default: 'parklife'
|
24
|
+
|
25
|
+
def self.collect_asset(service, key, path)
|
26
|
+
collected_assets[key] ||= Asset.new(service, key, path)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'fileutils'
|
3
|
+
require 'parklife'
|
4
|
+
require 'rails'
|
5
|
+
require_relative 'config_refinements'
|
6
|
+
require_relative 'route_set_refinements'
|
7
|
+
|
8
|
+
module Parklife
|
9
|
+
module Rails
|
10
|
+
class BuildIntegration < ::Rails::Railtie
|
11
|
+
initializer 'parklife.build_integration' do |app|
|
12
|
+
# The offending middleware is included in Rails (6+) development mode and
|
13
|
+
# rejects a request with a 403 response if its host isn't present in the
|
14
|
+
# allowlist (a security feature). This prevents Parklife from working in
|
15
|
+
# a Rails app out of the box unless you manually add the expected
|
16
|
+
# Parklife base to the hosts allowlist or set it to nil to disable it -
|
17
|
+
# both of which aren't great because they disable the security feature
|
18
|
+
# whenever the development server is booted.
|
19
|
+
#
|
20
|
+
# https://guides.rubyonrails.org/configuring.html#actiondispatch-hostauthorization
|
21
|
+
#
|
22
|
+
# However it's safe to remove the middleware at this point because it
|
23
|
+
# won't be executed in the normal Rails development flow, only via a
|
24
|
+
# Parkfile when parklife/rails is required.
|
25
|
+
if defined?(ActionDispatch::HostAuthorization)
|
26
|
+
app.middleware.delete(ActionDispatch::HostAuthorization)
|
27
|
+
end
|
28
|
+
|
29
|
+
Parklife.application.config.app = app
|
30
|
+
|
31
|
+
# This ensures next tweak is compatibile with Rails 8+ lazy routes.
|
32
|
+
Parklife.application.routes.extend(RouteSetRefinements)
|
33
|
+
|
34
|
+
# Allow use of the Rails application's route helpers when defining
|
35
|
+
# Parklife routes in the block form.
|
36
|
+
Parklife.application.routes.singleton_class.include(app.routes.url_helpers)
|
37
|
+
|
38
|
+
Parklife.application.config.extend(ConfigRefinements)
|
39
|
+
end
|
40
|
+
|
41
|
+
config.after_initialize do |app|
|
42
|
+
# Read the Rails app's URL config and apply it to Parklife's so that the
|
43
|
+
# Rails config can be used as the single source of truth.
|
44
|
+
host, port, protocol = app.default_url_options.values_at(:host, :port, :protocol)
|
45
|
+
protocol = 'https' if app.config.force_ssl
|
46
|
+
path = ActionController::Base.relative_url_root
|
47
|
+
|
48
|
+
Parklife.application.config.base.scheme = protocol if protocol
|
49
|
+
Parklife.application.config.base.host = host if host
|
50
|
+
Parklife.application.config.base.port = port if port
|
51
|
+
Parklife.application.config.base.path = path if path
|
52
|
+
|
53
|
+
# If the host Rails app includes Parklife's ActiveStorage integration
|
54
|
+
# then automatically collect attachments encountered during a build and
|
55
|
+
# copy them to the build directory.
|
56
|
+
if defined?(Parklife::Rails::ActiveStorage)
|
57
|
+
Parklife.application.before_build do
|
58
|
+
ActiveStorage.collected_assets.clear
|
59
|
+
ActiveStorage.collect_assets = true
|
60
|
+
end
|
61
|
+
|
62
|
+
Parklife.application.after_build do
|
63
|
+
ActiveStorage.collected_assets.each_value do |asset|
|
64
|
+
build_path = File.join(Parklife.application.config.build_dir, asset.path)
|
65
|
+
FileUtils.mkdir_p(File.dirname(build_path))
|
66
|
+
FileUtils.cp(asset.blob_path, build_path)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Parklife
|
3
|
+
module Rails
|
4
|
+
module ConfigRefinements
|
5
|
+
# When setting Parklife's base also configure the Rails app's
|
6
|
+
# default_url_options and relative_url_root to match.
|
7
|
+
def base=(value)
|
8
|
+
super.tap { |uri|
|
9
|
+
app.default_url_options = {
|
10
|
+
host: Utils.host_with_port(uri),
|
11
|
+
protocol: uri.scheme,
|
12
|
+
}
|
13
|
+
|
14
|
+
base_path = !uri.path.empty? && uri.path != '/' ? uri.path : nil
|
15
|
+
ActionController::Base.relative_url_root = base_path
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/parklife/rails.rb
CHANGED
@@ -1,70 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'parklife'
|
3
|
-
require 'rails'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
app.default_url_options = {
|
12
|
-
host: Utils.host_with_port(uri),
|
13
|
-
protocol: uri.scheme,
|
14
|
-
}
|
15
|
-
|
16
|
-
base_path = !uri.path.empty? && uri.path != '/' ? uri.path : nil
|
17
|
-
ActionController::Base.relative_url_root = base_path
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
module RailsRouteSetRefinements
|
23
|
-
def default_url_options
|
24
|
-
::Rails.application.default_url_options
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Railtie < ::Rails::Railtie
|
29
|
-
initializer 'parklife.disable_host_authorization' do |app|
|
30
|
-
# The offending middleware is included in Rails (6+) development mode and
|
31
|
-
# rejects a request with a 403 response if its host isn't present in the
|
32
|
-
# allowlist (a security feature). This prevents Parklife from working in
|
33
|
-
# a Rails app out of the box unless you manually add the expected
|
34
|
-
# Parklife base to the hosts allowlist or set it to nil to disable it -
|
35
|
-
# both of which aren't great because they disable the security feature
|
36
|
-
# whenever the development server is booted.
|
37
|
-
#
|
38
|
-
# https://guides.rubyonrails.org/configuring.html#actiondispatch-hostauthorization
|
39
|
-
#
|
40
|
-
# However it's safe to remove the middleware at this point because it
|
41
|
-
# won't be executed in the normal Rails development flow, only via a
|
42
|
-
# Parkfile when parklife/rails is required.
|
43
|
-
if defined?(ActionDispatch::HostAuthorization)
|
44
|
-
app.middleware.delete(ActionDispatch::HostAuthorization)
|
45
|
-
end
|
46
|
-
|
47
|
-
Parklife.application.config.app = app
|
48
|
-
|
49
|
-
# Allow use of the Rails application's route helpers when defining
|
50
|
-
# Parklife routes in the block form.
|
51
|
-
Parklife.application.routes.singleton_class.include(RailsRouteSetRefinements)
|
52
|
-
Parklife.application.routes.singleton_class.include(app.routes.url_helpers)
|
53
|
-
|
54
|
-
Parklife.application.config.extend(RailsConfigRefinements)
|
55
|
-
end
|
56
|
-
|
57
|
-
config.after_initialize do |app|
|
58
|
-
# Read the Rails app's URL config and apply it to Parklife's so that the
|
59
|
-
# Rails config can be used as the single source of truth.
|
60
|
-
host, port, protocol = app.default_url_options.values_at(:host, :port, :protocol)
|
61
|
-
protocol = 'https' if app.config.force_ssl
|
62
|
-
path = ActionController::Base.relative_url_root
|
63
|
-
|
64
|
-
Parklife.application.config.base.scheme = protocol if protocol
|
65
|
-
Parklife.application.config.base.host = host if host
|
66
|
-
Parklife.application.config.base.port = port if port
|
67
|
-
Parklife.application.config.base.path = path if path
|
68
|
-
end
|
69
|
-
end
|
3
|
+
# Only require the build integration when running from a Parklife CLI command.
|
4
|
+
#
|
5
|
+
# This means that the gem can safely be included in the app's Gemfile without
|
6
|
+
# applying any of its build-time tweaks.
|
7
|
+
if defined?(Parklife::CLI)
|
8
|
+
require_relative 'rails/build_integration'
|
70
9
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parklife-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Pickles
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: parklife
|
@@ -38,7 +37,6 @@ dependencies:
|
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: '0'
|
41
|
-
description:
|
42
40
|
email:
|
43
41
|
- spideryoung@gmail.com
|
44
42
|
executables: []
|
@@ -51,12 +49,20 @@ files:
|
|
51
49
|
- LICENSE.txt
|
52
50
|
- README.md
|
53
51
|
- Rakefile
|
52
|
+
- app/controllers/parklife/rails/active_storage/blobs_controller.rb
|
53
|
+
- config/routes.rb
|
54
54
|
- gemfiles/rails_7.0.gemfile
|
55
55
|
- gemfiles/rails_7.1.gemfile
|
56
56
|
- gemfiles/rails_7.2.gemfile
|
57
57
|
- gemfiles/rails_8.0.gemfile
|
58
|
+
- lib/active_storage/service/parklife_service.rb
|
58
59
|
- lib/parklife-rails.rb
|
60
|
+
- lib/parklife-rails/activestorage.rb
|
59
61
|
- lib/parklife/rails.rb
|
62
|
+
- lib/parklife/rails/activestorage.rb
|
63
|
+
- lib/parklife/rails/build_integration.rb
|
64
|
+
- lib/parklife/rails/config_refinements.rb
|
65
|
+
- lib/parklife/rails/route_set_refinements.rb
|
60
66
|
- lib/parklife/rails/version.rb
|
61
67
|
homepage: https://parklife.dev/rails
|
62
68
|
licenses:
|
@@ -66,7 +72,6 @@ metadata:
|
|
66
72
|
homepage_uri: https://parklife.dev/rails
|
67
73
|
rubygems_mfa_required: 'true'
|
68
74
|
source_code_uri: https://github.com/benpickles/parklife-rails
|
69
|
-
post_install_message:
|
70
75
|
rdoc_options: []
|
71
76
|
require_paths:
|
72
77
|
- lib
|
@@ -81,8 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
86
|
- !ruby/object:Gem::Version
|
82
87
|
version: '0'
|
83
88
|
requirements: []
|
84
|
-
rubygems_version: 3.1
|
85
|
-
signing_key:
|
89
|
+
rubygems_version: 3.7.1
|
86
90
|
specification_version: 4
|
87
91
|
summary: Rails integration for Parklife
|
88
92
|
test_files: []
|