spree_surrogate_key 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2c6ea271b15b5ef40e6ee826a99984032a6b460b434280f31b52e8c32e3a06fe
4
+ data.tar.gz: e258ced84ba8a4dd2bbc4a061236e7757b2350736dd32d2c549e446cb691449e
5
+ SHA512:
6
+ metadata.gz: 4f06e4d128dcaf43527d45ed1aafbf7cf40ceddd000e34d70eec8ba70d96d59306caeb3220cdb5b519487e2a1f41e41b5e0eecf48d7d86198a0d1f487e4ee55d
7
+ data.tar.gz: 1b864aee685ff8bc44b09bff621dc9e46461b82500fc94d3e1fa051ea371daa72bcff17619ecb7c2bb9a496aa62b558eca6595eb08e9ac172d505216b147ebae
@@ -0,0 +1,49 @@
1
+ name: ci
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ ci:
7
+ runs-on: ubuntu-latest
8
+ timeout-minutes: 30
9
+ env:
10
+ DATABASE_HOST: 0.0.0.0
11
+ DATABASE_PASSWORD: mysql123
12
+ RAILS_ENV: test
13
+ REDIS_URL: redis://0.0.0.0:6379
14
+ TZ: Asia/Tokyo
15
+
16
+ services:
17
+ mysql:
18
+ image: mysql:8.0.23
19
+ options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10
20
+ env:
21
+ MYSQL_ROOT_PASSWORD: ${{ env.DATABASE_PASSWORD }}
22
+ ports:
23
+ - 3306:3306
24
+ redis:
25
+ image: redis:6.2-alpine
26
+ options: --health-cmd "redis-cli -h localhost ping" --health-interval 10s --health-timeout 5s --health-retries 15
27
+ ports:
28
+ - 6379:6379
29
+ webdriver_chrome:
30
+ image: selenium/standalone-chrome:95.0
31
+ ports:
32
+ - 4444:4444
33
+ options: "--shm-size 2g"
34
+
35
+ steps:
36
+ - uses: actions/checkout@v2
37
+ - uses: ruby/setup-ruby@v1
38
+ with:
39
+ bundler-cache: true
40
+ ruby-version: 3.0.3
41
+
42
+ - name: Exec tests 👚
43
+ env:
44
+ DB_HOST: 127.0.0.1
45
+ DB_PASSWORD: ${{ env.DATABASE_PASSWORD }}
46
+ DB_USERNAME: root
47
+ run: |
48
+ bundle exec rake test_app
49
+ bundle exec rake spec
data/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .localeapp/locales
7
+ .project
8
+ .vscode
9
+ coverage
10
+ default
11
+ Gemfile.lock
12
+ tmp
13
+ nbproject
14
+ pkg
15
+ *.sw?
16
+ spec/dummy
17
+ .rvmrc
18
+ .sass-cache
19
+ public/spree
20
+ .ruby-version
21
+ .ruby-gemset
22
+ *.gem
23
+ */*.gem
24
+ .bundle
25
+ vendor/bundle
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ -r spec_helper
3
+ -f documentation
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) do |repo_name|
4
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
5
+ "https://github.com/#{repo_name}.git"
6
+ end
7
+
8
+ gem 'spree'
9
+ # gem 'spree_backend', github: 'spree/spree', branch: 'main'
10
+ gem 'rails-controller-testing'
11
+
12
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2022 ROUTE06, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # SpreeSurrogateKey
2
+
3
+ A [Spree](https://github.com/spree/spree) extension that purge fastly surrogate key.
4
+
5
+ ## Installation
6
+
7
+ 1. Add this extension to your Gemfile with this line:
8
+
9
+ ```ruby
10
+ gem 'spree_surrogate_key'
11
+ ```
12
+
13
+ 2. Install the gem using Bundler
14
+
15
+ ```ruby
16
+ bundle install
17
+ ```
18
+
19
+ 3. Copy & run migrations
20
+
21
+ ```ruby
22
+ bundle exec rails g spree_surrogate_key:install
23
+ ```
24
+
25
+ 4. Restart your server
26
+
27
+ If your server was running, restart it so that it can find the assets properly.
28
+
29
+ ## Testing
30
+
31
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.
32
+
33
+ ```shell
34
+ bundle update
35
+ bundle exec rake
36
+ ```
37
+
38
+ When testing your applications integration with this extension you may use it's factories.
39
+ Simply add this require statement to your spec_helper:
40
+
41
+ ```ruby
42
+ require 'spree_surrogate_key/factories'
43
+ ```
44
+
45
+ ## Releasing
46
+
47
+ ```shell
48
+ bundle exec gem bump -p -t
49
+ bundle exec gem release
50
+ ```
51
+
52
+ For more options please see [gem-release REAMDE](https://github.com/svenfuchs/gem-release)
53
+
54
+ ## Contributing
55
+
56
+ Copyright (c) 2022 ROUTE06, Inc., released under the New BSD License
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/extension_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir['spec/dummy'].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir('../../')
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'spree_surrogate_key'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
data/app/.gitkeep ADDED
File without changes
File without changes
File without changes
@@ -0,0 +1,40 @@
1
+ module SpreeSurrogateKey
2
+ module CdnPurgeable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ after_update_commit :purge_cdn_cache
7
+ after_touch :purge_cdn_cache
8
+ end
9
+
10
+ def purge_cdn_cache
11
+ return if @already_purged
12
+ purge_cdn_cache!
13
+ rescue StandardError => e
14
+ logger.error(e.message)
15
+ end
16
+
17
+ def purge_cdn_cache!
18
+ if cdn_api_enabled?
19
+ cdn_api.purge_by_key(cdn_surrogate_key)
20
+ @already_purged = true
21
+ end
22
+ end
23
+
24
+ def cdn_api
25
+ @cdn_api ||=
26
+ begin
27
+ fastly = Fastly.new(api_key: Rails.configuration.x.fastly[:api_key])
28
+ Fastly::Service.new({ id: Rails.configuration.x.fastly[:service_id] }, fastly)
29
+ end
30
+ end
31
+
32
+ def cdn_api_enabled?
33
+ Rails.configuration.x.fastly[:enabled]
34
+ end
35
+
36
+ def cdn_surrogate_key
37
+ raise NotImplementedError
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,13 @@
1
+ module SpreeSurrogateKey
2
+ class Configuration < Spree::Preferences::Configuration
3
+
4
+ # Some example preferences are shown below, for more information visit:
5
+ # https://dev-docs.spreecommerce.org/internals/preferences
6
+
7
+ preference :enabled, :boolean, default: true
8
+ # preference :dark_chocolate, :boolean, default: true
9
+ # preference :color, :string, default: 'Red'
10
+ # preference :favorite_number, :integer
11
+ # preference :supported_locales, :array, default: [:en]
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module SpreeSurrogateKey::Spree::OptionTypeDecorator
2
+ def self.prepended(base)
3
+ base.include SpreeSurrogateKey::CdnPurgeable
4
+ base.before_destroy :purge_cdn_cache, prepend: true
5
+ end
6
+
7
+ private
8
+
9
+ def cdn_surrogate_key
10
+ products.map do |product|
11
+ "product-#{product.id}"
12
+ end.join(' ')
13
+ end
14
+ end
15
+
16
+ Spree::OptionType.prepend(SpreeSurrogateKey::Spree::OptionTypeDecorator) unless Spree::OptionType.included_modules.include?(SpreeSurrogateKey::Spree::OptionTypeDecorator)
@@ -0,0 +1,13 @@
1
+ module SpreeSurrogateKey::Spree::ProductDecorator
2
+ def self.prepended(base)
3
+ base.include SpreeSurrogateKey::CdnPurgeable
4
+ end
5
+
6
+ private
7
+
8
+ def cdn_surrogate_key
9
+ "product-#{id}"
10
+ end
11
+ end
12
+
13
+ Spree::Product.prepend(SpreeSurrogateKey::Spree::ProductDecorator) unless Spree::Product.included_modules.include?(SpreeSurrogateKey::Spree::ProductDecorator)
@@ -0,0 +1,16 @@
1
+ module SpreeSurrogateKey::Spree::TaxonDecorator
2
+ def self.prepended(base)
3
+ base.include SpreeSurrogateKey::CdnPurgeable
4
+ base.before_destroy :purge_cdn_cache, prepend: true
5
+ end
6
+
7
+ private
8
+
9
+ def cdn_surrogate_key
10
+ products.map do |product|
11
+ "product-#{product.id}"
12
+ end.join(' ')
13
+ end
14
+ end
15
+
16
+ Spree::Taxon.prepend(SpreeSurrogateKey::Spree::TaxonDecorator) unless Spree::Taxon.included_modules.include?(SpreeSurrogateKey::Spree::TaxonDecorator)
File without changes
File without changes
data/bin/rails ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" from the root of your extension
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/spree_surrogate_key/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
data/config/fastly.yml ADDED
@@ -0,0 +1,13 @@
1
+ default: &default
2
+ api_key: "dummy"
3
+ enabled: false
4
+ service_id: "dummy"
5
+
6
+ test:
7
+ <<: *default
8
+
9
+ development:
10
+ <<: *default
11
+
12
+ production:
13
+ <<: *default
@@ -0,0 +1,3 @@
1
+ if Rails.root.join("config/fastly.yml").exist?
2
+ Rails.application.config.x.fastly = Rails.application.config_for(:fastly).deep_symbolize_keys
3
+ end
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Spree::Core::Engine.add_routes do
2
+ # Add your extension routes here
3
+ end
@@ -0,0 +1,25 @@
1
+ module SpreeSurrogateKey
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../../../", __dir__)
5
+ class_option :migrate, type: :boolean, default: true
6
+
7
+ def copy_default_configuration_file
8
+ copy_file "config/fastly.yml"
9
+ end
10
+
11
+ def add_migrations
12
+ run 'bundle exec rake railties:install:migrations FROM=spree_surrogate_key'
13
+ end
14
+
15
+ def run_migrations
16
+ run_migrations = options[:migrate] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
17
+ if run_migrations
18
+ run 'bundle exec rails db:migrate'
19
+ else
20
+ puts 'Skipping rails db:migrate, don\'t forget to run it!'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module SpreeSurrogateKey
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_surrogate_key'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ initializer 'spree_surrogate_key.environment', before: :load_config_initializers do |_app|
13
+ SpreeSurrogateKey::Config = SpreeSurrogateKey::Configuration.new
14
+ end
15
+
16
+ def self.activate
17
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
18
+ Rails.configuration.cache_classes ? require(c) : load(c)
19
+ end
20
+ end
21
+
22
+ config.to_prepare(&method(:activate).to_proc)
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them.
3
+ #
4
+ # Example adding this to your spec_helper will load these Factories for use:
5
+ # require 'spree_surrogate_key/factories'
6
+ end
@@ -0,0 +1,11 @@
1
+ module SpreeSurrogateKey
2
+ VERSION = '0.0.1'.freeze
3
+
4
+ module_function
5
+
6
+ # Returns the version of the currently loaded SpreeSurrogateKey as a
7
+ # <tt>Gem::Version</tt>.
8
+ def version
9
+ Gem::Version.new VERSION
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ require 'fastly'
2
+ require 'spree_core'
3
+ require 'spree_extension'
4
+ require 'spree_surrogate_key/engine'
5
+ require 'spree_surrogate_key/version'
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'spree_surrogate_key/version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.platform = Gem::Platform::RUBY
9
+ s.name = 'spree_surrogate_key'
10
+ s.version = SpreeSurrogateKey.version
11
+ s.summary = 'Add extension summary here'
12
+ s.description = 'Add (optional) extension description here'
13
+ s.required_ruby_version = '>= 2.5'
14
+
15
+ s.author = 'ROUTE06'
16
+ s.email = 'development+rubygems@route06.co.jp'
17
+ s.homepage = 'https://github.com/route06/spree_surrogate_key'
18
+ s.license = 'BSD-3-Clause'
19
+
20
+ s.files = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(/^spec\/fixtures/) }
21
+ s.require_path = 'lib'
22
+ s.requirements << 'none'
23
+
24
+ s.add_dependency 'spree', '~> 4.3.1'
25
+ s.add_dependency 'rails', '~> 6.1.0'
26
+ # s.add_dependency 'spree_backend' # uncomment to include Admin Panel changes
27
+ s.add_dependency 'spree_extension'
28
+ s.add_dependency 'fastly'
29
+
30
+ s.add_development_dependency 'spree_dev_tools', '~> 0.1.12'
31
+ # net-smtp, net-imap and net-pop were removed from default gems in Ruby 3.1, but is used by the `mail` gem.
32
+ s.add_development_dependency 'net-smtp'
33
+ s.add_development_dependency 'mysql2'
34
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_surrogate_key
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ROUTE06
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spree
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.3.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 6.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 6.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: spree_extension
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fastly
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: spree_dev_tools
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.12
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.12
83
+ - !ruby/object:Gem::Dependency
84
+ name: net-smtp
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mysql2
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Add (optional) extension description here
112
+ email: development+rubygems@route06.co.jp
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - ".github/workflows/ci.yml"
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - Gemfile
121
+ - LICENSE
122
+ - README.md
123
+ - Rakefile
124
+ - app/.gitkeep
125
+ - app/controllers/.gitkeep
126
+ - app/models/.gitkeep
127
+ - app/models/concerns/spree_surrogate_key/cdn_purgeable.rb
128
+ - app/models/spree_surrogate_key/configuration.rb
129
+ - app/models/spree_surrogate_key/spree/option_type_decorator.rb
130
+ - app/models/spree_surrogate_key/spree/product_decorator.rb
131
+ - app/models/spree_surrogate_key/spree/taxon_decorator.rb
132
+ - app/serializers/.gitkeep
133
+ - app/services/.gitkeep
134
+ - bin/rails
135
+ - config/fastly.yml
136
+ - config/initializers/spree_surrogate_key.rb
137
+ - config/locales/en.yml
138
+ - config/routes.rb
139
+ - lib/generators/spree_surrogate_key/install/install_generator.rb
140
+ - lib/spree_surrogate_key.rb
141
+ - lib/spree_surrogate_key/engine.rb
142
+ - lib/spree_surrogate_key/factories.rb
143
+ - lib/spree_surrogate_key/version.rb
144
+ - spree_surrogate_key.gemspec
145
+ homepage: https://github.com/route06/spree_surrogate_key
146
+ licenses:
147
+ - BSD-3-Clause
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '2.5'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements:
164
+ - none
165
+ rubygems_version: 3.1.2
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: Add extension summary here
169
+ test_files: []