snowpacker 0.0.4.alpha1

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.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +3 -0
  3. data/.dockerignore +22 -0
  4. data/.github/workflows/build.yml +20 -0
  5. data/.gitignore +65 -0
  6. data/CHANGELOG.md +28 -0
  7. data/Dockerfile +38 -0
  8. data/Gemfile +8 -0
  9. data/Gemfile.lock +199 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +156 -0
  12. data/Rakefile +32 -0
  13. data/bin/console +15 -0
  14. data/bin/setup +8 -0
  15. data/docker-compose.yml +17 -0
  16. data/docker.env +8 -0
  17. data/examples/rails-without-webpack/.gitignore +34 -0
  18. data/examples/rails-without-webpack/.ruby-version +1 -0
  19. data/examples/rails-without-webpack/Gemfile +33 -0
  20. data/examples/rails-without-webpack/Gemfile.lock +225 -0
  21. data/examples/rails-without-webpack/README.md +24 -0
  22. data/examples/rails-without-webpack/Rakefile +6 -0
  23. data/examples/rails-without-webpack/app/assets/config/manifest.js +2 -0
  24. data/examples/rails-without-webpack/app/assets/images/.keep +0 -0
  25. data/examples/rails-without-webpack/app/assets/stylesheets/application.css +15 -0
  26. data/examples/rails-without-webpack/app/assets/stylesheets/static_pages.scss +3 -0
  27. data/examples/rails-without-webpack/app/channels/application_cable/channel.rb +4 -0
  28. data/examples/rails-without-webpack/app/channels/application_cable/connection.rb +4 -0
  29. data/examples/rails-without-webpack/app/controllers/application_controller.rb +2 -0
  30. data/examples/rails-without-webpack/app/controllers/concerns/.keep +0 -0
  31. data/examples/rails-without-webpack/app/controllers/static_pages_controller.rb +4 -0
  32. data/examples/rails-without-webpack/app/helpers/application_helper.rb +2 -0
  33. data/examples/rails-without-webpack/app/helpers/static_pages_helper.rb +2 -0
  34. data/examples/rails-without-webpack/app/javascript/channels/consumer.js +6 -0
  35. data/examples/rails-without-webpack/app/javascript/channels/index.js +6 -0
  36. data/examples/rails-without-webpack/app/javascript/packs/application.js +17 -0
  37. data/examples/rails-without-webpack/app/javascript/stylesheets/index.css +3 -0
  38. data/examples/rails-without-webpack/app/jobs/application_job.rb +7 -0
  39. data/examples/rails-without-webpack/app/mailers/application_mailer.rb +4 -0
  40. data/examples/rails-without-webpack/app/models/application_record.rb +3 -0
  41. data/examples/rails-without-webpack/app/models/concerns/.keep +0 -0
  42. data/examples/rails-without-webpack/app/views/layouts/application.html.erb +16 -0
  43. data/examples/rails-without-webpack/app/views/layouts/mailer.html.erb +13 -0
  44. data/examples/rails-without-webpack/app/views/layouts/mailer.text.erb +1 -0
  45. data/examples/rails-without-webpack/app/views/static_pages/index.html.erb +2 -0
  46. data/examples/rails-without-webpack/bin/bundle +114 -0
  47. data/examples/rails-without-webpack/bin/rails +9 -0
  48. data/examples/rails-without-webpack/bin/rake +9 -0
  49. data/examples/rails-without-webpack/bin/setup +36 -0
  50. data/examples/rails-without-webpack/bin/spring +17 -0
  51. data/examples/rails-without-webpack/bin/yarn +9 -0
  52. data/examples/rails-without-webpack/config.ru +5 -0
  53. data/examples/rails-without-webpack/config/application.rb +20 -0
  54. data/examples/rails-without-webpack/config/boot.rb +4 -0
  55. data/examples/rails-without-webpack/config/cable.yml +10 -0
  56. data/examples/rails-without-webpack/config/credentials.yml.enc +1 -0
  57. data/examples/rails-without-webpack/config/database.yml +25 -0
  58. data/examples/rails-without-webpack/config/environment.rb +5 -0
  59. data/examples/rails-without-webpack/config/environments/development.rb +62 -0
  60. data/examples/rails-without-webpack/config/environments/production.rb +112 -0
  61. data/examples/rails-without-webpack/config/environments/test.rb +49 -0
  62. data/examples/rails-without-webpack/config/initializers/application_controller_renderer.rb +8 -0
  63. data/examples/rails-without-webpack/config/initializers/assets.rb +14 -0
  64. data/examples/rails-without-webpack/config/initializers/backtrace_silencers.rb +7 -0
  65. data/examples/rails-without-webpack/config/initializers/content_security_policy.rb +31 -0
  66. data/examples/rails-without-webpack/config/initializers/cookies_serializer.rb +5 -0
  67. data/examples/rails-without-webpack/config/initializers/filter_parameter_logging.rb +4 -0
  68. data/examples/rails-without-webpack/config/initializers/inflections.rb +16 -0
  69. data/examples/rails-without-webpack/config/initializers/mime_types.rb +4 -0
  70. data/examples/rails-without-webpack/config/initializers/snowpacker.rb +19 -0
  71. data/examples/rails-without-webpack/config/initializers/wrap_parameters.rb +14 -0
  72. data/examples/rails-without-webpack/config/locales/en.yml +33 -0
  73. data/examples/rails-without-webpack/config/puma.rb +38 -0
  74. data/examples/rails-without-webpack/config/routes.rb +4 -0
  75. data/examples/rails-without-webpack/config/snowpacker/.browserslistrc +1 -0
  76. data/examples/rails-without-webpack/config/snowpacker/babel.config.js +76 -0
  77. data/examples/rails-without-webpack/config/snowpacker/postcss.config.js +12 -0
  78. data/examples/rails-without-webpack/config/snowpacker/snowpack.config.js +42 -0
  79. data/examples/rails-without-webpack/config/spring.rb +6 -0
  80. data/examples/rails-without-webpack/config/storage.yml +34 -0
  81. data/examples/rails-without-webpack/db/seeds.rb +7 -0
  82. data/examples/rails-without-webpack/lib/assets/.keep +0 -0
  83. data/examples/rails-without-webpack/lib/tasks/.keep +0 -0
  84. data/examples/rails-without-webpack/package.json +33 -0
  85. data/examples/rails-without-webpack/storage/.keep +0 -0
  86. data/examples/rails-without-webpack/test/application_system_test_case.rb +5 -0
  87. data/examples/rails-without-webpack/test/channels/application_cable/connection_test.rb +11 -0
  88. data/examples/rails-without-webpack/test/controllers/.keep +0 -0
  89. data/examples/rails-without-webpack/test/controllers/static_pages_controller_test.rb +8 -0
  90. data/examples/rails-without-webpack/test/fixtures/.keep +0 -0
  91. data/examples/rails-without-webpack/test/fixtures/files/.keep +0 -0
  92. data/examples/rails-without-webpack/test/helpers/.keep +0 -0
  93. data/examples/rails-without-webpack/test/integration/.keep +0 -0
  94. data/examples/rails-without-webpack/test/mailers/.keep +0 -0
  95. data/examples/rails-without-webpack/test/models/.keep +0 -0
  96. data/examples/rails-without-webpack/test/system/.keep +0 -0
  97. data/examples/rails-without-webpack/test/test_helper.rb +13 -0
  98. data/examples/rails-without-webpack/tmp/.keep +0 -0
  99. data/examples/rails-without-webpack/tmp/pids/.keep +0 -0
  100. data/examples/rails-without-webpack/vendor/.keep +0 -0
  101. data/examples/rails-without-webpack/yarn.lock +4254 -0
  102. data/lib/snowpacker.rb +24 -0
  103. data/lib/snowpacker/configuration.rb +19 -0
  104. data/lib/snowpacker/engine.rb +9 -0
  105. data/lib/snowpacker/env.rb +23 -0
  106. data/lib/snowpacker/runner.rb +51 -0
  107. data/lib/snowpacker/snowpacker_generator.rb +58 -0
  108. data/lib/snowpacker/snowpacker_proxy.rb +48 -0
  109. data/lib/snowpacker/templates/babel.config.js +76 -0
  110. data/lib/snowpacker/templates/postcss.config.js +12 -0
  111. data/lib/snowpacker/templates/snowpack.config.js +42 -0
  112. data/lib/snowpacker/templates/snowpacker.rb +19 -0
  113. data/lib/snowpacker/version.rb +5 -0
  114. data/lib/tasks/snowpacker_tasks.rake +30 -0
  115. data/snowpacker.gemspec +45 -0
  116. data/yarn.lock +6211 -0
  117. metadata +299 -0
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "snowpacker/configuration"
4
+ require "snowpacker/snowpacker_proxy"
5
+
6
+ module Snowpacker
7
+ class << self
8
+ attr_accessor :config
9
+ end
10
+
11
+ def self.config_location
12
+ Rails.root.join("config", "snowpack.config.json")
13
+ end
14
+
15
+ def self.configure
16
+ self.config ||= Configuration.new
17
+ yield(config)
18
+ end
19
+ end
20
+
21
+ require "snowpacker/version"
22
+ require "snowpacker/snowpacker_generator" if defined?(Rails)
23
+ require "snowpacker/runner" if defined?(Rails)
24
+ require "snowpacker/engine" if defined?(Rails)
@@ -0,0 +1,19 @@
1
+ module Snowpacker
2
+ class Configuration
3
+ attr_accessor :config_dir
4
+ attr_accessor :config_file
5
+ attr_accessor :babel_config_file
6
+ attr_accessor :postcss_config_file
7
+ attr_accessor :build_dir
8
+ attr_accessor :mount_dir
9
+ attr_accessor :output_path
10
+ attr_accessor :port, :hostname
11
+
12
+ def initialize
13
+ @output_path = "snowpacks"
14
+ @mount_dir = File.join("app", "javascript")
15
+ @port = "4035"
16
+ @hostname = "localhost"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ require "rails/railtie"
2
+
3
+ module Snowpacker
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Snowpacker
6
+
7
+ config.snowpacker = Snowpacker::Configuration.new
8
+ end
9
+ end
@@ -0,0 +1,23 @@
1
+ module Snowpacker
2
+ class Env
3
+ ENV_PREFIX = "SNOWPACKER".freeze
4
+
5
+ class << self
6
+ def set_env_variables
7
+ set_env("OUTPUT_PATH", Snowpacker.config.output_path)
8
+ set_env("HOSTNAME", Snowpacker.config.hostname)
9
+ set_env("PORT", Snowpacker.config.port)
10
+ set_env("BUILD_DIR", Snowpacker.config.build_dir)
11
+ set_env("MOUNT_DIR", Snowpacker.config.mount_dir)
12
+ set_env("BABEL_CONFIG_FILE", Snowpacker.config.babel_config_file)
13
+ set_env("POSTCSS_CONFIG_FILE", Snowpacker.config.postcss_config_file)
14
+ end
15
+
16
+ private
17
+
18
+ def set_env(env_var, value)
19
+ ENV["#{ENV_PREFIX}_#{env_var}"] ||= value.to_s
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "socket"
4
+ require "snowpacker/env"
5
+
6
+ module Snowpacker
7
+ module Rails
8
+ class Runner
9
+ attr_reader :config_file
10
+
11
+ def initialize
12
+ @config_file = Snowpacker.config.config_file
13
+ Env.set_env_variables
14
+ rescue Errno::ENOENT, NoMethodError
15
+ $stdout.puts "Snowpacker configuration not found in #{Snowpacker.config_location}"
16
+ $stdout.puts "Please run bundle exec rails generate snowpacker to install Snowpacker"
17
+ exit!
18
+ end
19
+
20
+ # Build for production
21
+ def build
22
+ snowpacker_command(env: :production, cmd: :build)
23
+ end
24
+
25
+ # Serve for development
26
+ def dev
27
+ detect_port!
28
+ snowpacker_command(env: :development, cmd: :dev)
29
+ end
30
+
31
+ private
32
+
33
+ def snowpacker_command(env: "", cmd: "")
34
+ env = ENV["NODE_ENV"] || env
35
+ command = "NODE_ENV=#{env} yarn run snowpack #{cmd} --config #{@config_file}"
36
+ exec(command)
37
+ end
38
+
39
+ def detect_port!
40
+ hostname = Snowpacker.config.hostname
41
+ port = Snowpacker.config.port
42
+ server = TCPServer.new(hostname, port)
43
+ server.close
44
+ rescue Errno::EADDRINUSE
45
+ $stdout.puts "Another program is running on port #{port}.\n
46
+ Set a new port in #{Snowpacker.config_path} for devOptions: { port: \"#{port}\" }"
47
+ exit!
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/generators"
4
+
5
+ class SnowpackerGenerator < ::Rails::Generators::Base
6
+ TEMPLATES = File.join(File.expand_path(__dir__), "templates")
7
+
8
+ desc "Generate Snowpacker initializer"
9
+ def create_initializer_file
10
+ initializer "snowpacker.rb" do
11
+ File.read(File.join(TEMPLATES, "snowpacker.rb"))
12
+ end
13
+ end
14
+
15
+ desc "Add snowpack, babel, and postcss to your package.json dependencies"
16
+ def add_snowpack
17
+ %x(yarn add -D snowpack \
18
+ @snowpack/babel-plugin-package-import \
19
+ core-js@3 \
20
+ postcss \
21
+ postcss-cli \
22
+ postcss-import \
23
+ postcss-flexbugs-fixes \
24
+ postcss-preset-env \
25
+ @babel/core \
26
+ @babel/cli \
27
+ @babel/preset-env \
28
+ @babel/plugin-transform-runtime \
29
+ babel-plugin-macros \
30
+ @snowpack/plugin-babel \
31
+ @babel/preset-env \
32
+ babel-plugin-macros \
33
+ @babel/plugin-syntax-dynamic-import \
34
+ babel-plugin-dynamic-import-node \
35
+ @babel/plugin-transform-destructuring \
36
+ @babel/plugin-proposal-class-properties \
37
+ @babel/plugin-proposal-object-rest-spread \
38
+ @babel/plugin-transform-runtime \
39
+ @babel/plugin-transform-regenerator
40
+ )
41
+ end
42
+
43
+ desc "Create config files IE: babel.config snowpack.config"
44
+ def create_config_files
45
+ config_files = %w[
46
+ snowpack.config.js
47
+ postcss.config.js
48
+ babel.config.js
49
+ .browserslistrc
50
+ ]
51
+
52
+ config_files.each do |filename|
53
+ create_file Rails.root.join("config", "snowpacker", filename) do
54
+ File.read(File.join(TEMPLATES, filename))
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rack/proxy"
4
+ require "socket"
5
+
6
+ module Snowpacker
7
+ # Proxy server for snowpacker
8
+ class SnowpackerProxy < Rack::Proxy
9
+ def perform_request(env)
10
+ if env["PATH_INFO"].start_with?(%r{/#{Snowpacker.config.output_path}}) && dev_server_running?
11
+ env["HTTP_HOST"] = env["HTTP_X_FORWARDED_HOST"] = Snowpacker.config.hostname
12
+ env["HTTP_X_FORWARDED_SERVER"] = host_with_port
13
+ env["HTTP_PORT"] = env["HTTP_X_FORWARDED_PORT"] = Snowpacker.config.port
14
+ env["HTTP_X_FORWARDED_PROTO"] = env["HTTP_X_FORWARDED_SCHEME"] = "http"
15
+
16
+ # unless dev_server.https?
17
+ env["HTTPS"] = env["HTTP_X_FORWARDED_SSL"] = "off"
18
+ # end
19
+
20
+ env["SCRIPT_NAME"] = ""
21
+
22
+ super(env)
23
+ else
24
+ @app.call(env)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def dev_server_running?
31
+ host = Snowpacker.config.hostname
32
+ port = Snowpacker.config.port
33
+ connect_timeout = 0.01
34
+
35
+ Socket.tcp(host, port, connect_timeout: connect_timeout).close
36
+ true
37
+ rescue Errno::ECONNREFUSED
38
+ puts "Snowpacker is not currently running on #{host_with_port}"
39
+ false
40
+ end
41
+
42
+ def host_with_port
43
+ hostname = Snowpacker.config.hostname
44
+ port = Snowpacker.config.port
45
+ "#{hostname}:#{port}"
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,76 @@
1
+ module.exports = function(api) {
2
+ const validEnv = ['development', 'test', 'production']
3
+ const currentEnv = process.env.NODE_ENV
4
+ const isDevelopmentEnv = (currentEnv === "development")
5
+ const isProductionEnv = (currentEnv === 'production')
6
+ const isTestEnv = (currentEnv === 'test')
7
+
8
+ if (!validEnv.includes(currentEnv)) {
9
+ throw new Error(
10
+ 'Please specify a valid `NODE_ENV` or ' +
11
+ '`BABEL_ENV` environment variables. Valid values are "development", ' +
12
+ '"test", and "production". Instead, received: ' +
13
+ JSON.stringify(currentEnv) +
14
+ '.'
15
+ )
16
+ }
17
+
18
+ // Cached based on the value of some function. If this function returns a value different from
19
+ // a previously-encountered value, the plugins will re-evaluate.
20
+ api.cache(() => currentEnv);
21
+
22
+ return {
23
+ presets: [
24
+ isTestEnv && [
25
+ '@babel/preset-env',
26
+ {
27
+ targets: {
28
+ node: 'current'
29
+ }
30
+ }
31
+ ],
32
+ (isProductionEnv || isDevelopmentEnv) && [
33
+ '@babel/preset-env',
34
+ {
35
+ forceAllTransforms: true,
36
+ useBuiltIns: 'entry',
37
+ corejs: 3,
38
+ modules: false,
39
+ exclude: ['transform-typeof-symbol']
40
+ }
41
+ ]
42
+ ].filter(Boolean),
43
+ plugins: [
44
+ 'babel-plugin-macros',
45
+ '@babel/plugin-syntax-dynamic-import',
46
+ isTestEnv && 'babel-plugin-dynamic-import-node',
47
+ '@babel/plugin-transform-destructuring',
48
+ [
49
+ '@babel/plugin-proposal-class-properties',
50
+ {
51
+ loose: true
52
+ }
53
+ ],
54
+ [
55
+ '@babel/plugin-proposal-object-rest-spread',
56
+ {
57
+ useBuiltIns: true
58
+ }
59
+ ],
60
+ [
61
+ '@babel/plugin-transform-runtime',
62
+ {
63
+ helpers: false,
64
+ regenerator: true,
65
+ corejs: false
66
+ }
67
+ ],
68
+ [
69
+ '@babel/plugin-transform-regenerator',
70
+ {
71
+ async: false
72
+ }
73
+ ]
74
+ ].filter(Boolean)
75
+ }
76
+ }
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ plugins: [
3
+ require('postcss-import'),
4
+ require('postcss-flexbugs-fixes'),
5
+ require('postcss-preset-env')({
6
+ autoprefixer: {
7
+ flexbox: 'no-2009'
8
+ },
9
+ stage: 3
10
+ })
11
+ ]
12
+ }
@@ -0,0 +1,42 @@
1
+ const output_path = process.env["SNOWPACKER_OUTPUT_PATH"]
2
+ const port = process.env["SNOWPACKER_PORT"]
3
+ const build_dir = process.env["SNOWPACKER_BUILD_DIR"]
4
+ const mount_dir = process.env["SNOWPACKER_MOUNT_DIR"]
5
+ const babel_config = process.env["SNOWPACKER_BABEL_CONFIG_FILE"]
6
+ const postcss_config = process.env["SNOWPACKER_POSTCSS_CONFIG_FILE"]
7
+
8
+ // not currently supported
9
+ // const hostname = process.env["SNOWPACKER_HOSTNAME"]
10
+
11
+ const scripts = {
12
+ "mount:web_modules": `mount $WEB_MODULES --to /${output_path}/web_modules`,
13
+ "mount:snowpacks": `mount ${mount_dir} --to /${output_path}`,
14
+ "build:css": `postcss --config ${postcss_config}`,
15
+ "build:js,jsx,ts,tsx": `babel --config-file ${babel_config} \
16
+ ${mount_dir}`
17
+ }
18
+
19
+ const installOptions = {
20
+ NODE_ENV: true
21
+ }
22
+
23
+ const devOptions = {
24
+ port: parseInt(port, 10),
25
+ open: "none",
26
+ out: build_dir
27
+ }
28
+
29
+ const buildOptions = {
30
+ clean: true,
31
+ baseUrl: "/",
32
+ metaDir: `${output_path}/__snowpack__`
33
+ }
34
+
35
+ module.exports = {
36
+ scripts,
37
+ plugins: [],
38
+ installOptions,
39
+ devOptions,
40
+ buildOptions
41
+ }
42
+
@@ -0,0 +1,19 @@
1
+ Rails.application.config.middleware.use Snowpacker::SnowpackerProxy, {ssl_verify_none: true}
2
+
3
+ Snowpacker.configure do |snowpacker|
4
+ # Where to find the config file
5
+ snowpacker.config_dir = Rails.root.join("config", "snowpacker")
6
+ snowpacker.config_file = File.join(snowpacker.config_dir, "snowpack.config.js")
7
+
8
+ snowpacker.babel_config_file = File.join(snowpacker.config_dir, "babel.config.js")
9
+ snowpacker.postcss_config_file = File.join(snowpacker.config_dir, "postcss.config.js")
10
+
11
+ snowpacker.mount_dir = File.join("app", "javascript")
12
+ snowpacker.build_dir = "public"
13
+ snowpacker.output_path = "snowpacks" # => /public/snowpacks
14
+ snowpacker.port = "4035"
15
+
16
+ # Currently, snowpack does not support the hostname option as of version 2.6.4
17
+ # Support should be coming in 2.6.5, so until then, this is just a placeholder.
18
+ snowpacker.hostname = "localhost"
19
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Snowpacker
4
+ VERSION = "0.0.4.alpha1"
5
+ end
@@ -0,0 +1,30 @@
1
+ namespace :snowpacker do
2
+ desc "Compiles assets using snowpack bundler"
3
+ task build: :environment do
4
+ Snowpacker::Rails::Runner.new.build
5
+ end
6
+
7
+ desc "Compiles assets using snowpack bundler"
8
+ task compile: :build
9
+
10
+ desc "Run a snowpack dev server"
11
+ task dev: :environment do
12
+ Snowpacker::Rails::Runner.new.dev
13
+ end
14
+
15
+ desc "Removes compiled assets"
16
+ task clobber: :environment do
17
+ command = "rm -rf #{::Rails.application.config.snowpacker.destination}"
18
+ logger = Logger.new(STDOUT)
19
+ logger.info(command)
20
+ exec(command)
21
+ end
22
+ end
23
+
24
+ Rake::Task["assets:precompile"].enhance do
25
+ Rake::Task["snowpacker:build"].invoke
26
+ end
27
+
28
+ Rake::Task["assets:clobber"].enhance do
29
+ Rake::Task["snowpacker:clobber"].invoke
30
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ $:.push File.expand_path("lib", __dir__)
4
+
5
+ # Maintain your gem's version:
6
+ require "snowpacker/version"
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "snowpacker"
10
+ spec.version = Snowpacker::VERSION
11
+ spec.authors = ["Konnor Rogers"]
12
+ spec.email = ["konnor7414@gmail.com"]
13
+
14
+ spec.summary = "Rails integration of Snowpack"
15
+ spec.description = "Rails integration of Snowpack"
16
+ spec.homepage = "http://github.com/paramagicdev/snowpacker"
17
+ spec.license = "MIT"
18
+
19
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
20
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
21
+ if spec.respond_to?(:metadata)
22
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
23
+ else
24
+ raise "RubyGems 2.0 or newer is required to protect against " \
25
+ "public gem pushes."
26
+ end
27
+
28
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
29
+ f.match(%r{^(test|spec|features)/})
30
+ end
31
+ spec.bindir = "exe"
32
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
33
+ spec.require_paths = ["lib"]
34
+
35
+ spec.add_runtime_dependency "rack-proxy", "~> 0.6.4"
36
+ spec.add_development_dependency "bundler", "~> 2"
37
+ spec.add_development_dependency "conventional-changelog", "~> 1.2"
38
+ spec.add_development_dependency "minitest", "~> 5.14"
39
+ spec.add_development_dependency "pry", "~> 0.12"
40
+ spec.add_development_dependency "rails", "~> 6"
41
+ spec.add_development_dependency "rake", "~> 13.0"
42
+ spec.add_development_dependency "rspec", "~> 3.0"
43
+ spec.add_development_dependency "standardrb"
44
+ spec.add_development_dependency "yard"
45
+ end