soy 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6bd54fbe6410b42d75c37e02b1b31650bb7fd14b41535425b08d9c745b35318
4
- data.tar.gz: 2108d0d1526adf9e96830f6ec4fb187653c896793f1ea5ac69ea4da85541d483
3
+ metadata.gz: 51bbd538a472a9b4acac80fdeeadd43397a36b152bcf6634e08e623afc11ff3d
4
+ data.tar.gz: 6e0828e7e44d5d462f5072d5851cd4251f59c2bc81627a0564760dbc9f948539
5
5
  SHA512:
6
- metadata.gz: 06bb73badd9937a74e7f452fe282c3497a1471bc144ec17106bd49d4f080746fa512ab59862e5504cbc7d650913fe87c5c54b27a6f0ed8e6495dfdbc04cce0d7
7
- data.tar.gz: e6ae9aad16345d5e04bc3bc6d2736e87633ae45bdbbb43ee6dae9c4c585eff987a71f0375e6230ec37e10fa06035aa3f6265b8e954abcb6d759dfb518ef94d51
6
+ metadata.gz: 826df4c995a9addc89897d214d6ff59af353112924383cbc483c34d2bb992848beeb068753d1641ef086383aeda7b491c673c524fca1a3a656333974226be1c9
7
+ data.tar.gz: 831cf3ef9042b417206985fe827a9cff379caef2e993c790d0ce68335ec28c9c4d4cfdad880074322936178dfa97d4e18bcc05bceb45bf4d7dafe6a5e853cc41
data/.rubocop.yml CHANGED
@@ -28,5 +28,18 @@ RSpec/MultipleExpectations:
28
28
  Enabled: false
29
29
 
30
30
  RSpec/ExampleLength:
31
+ Max: 20
31
32
  Exclude:
32
33
  - "spec/system/**/*_spec.rb"
34
+
35
+ RSpec/MessageSpies:
36
+ EnforcedStyle: receive
37
+
38
+ RSpec/NestedGroups:
39
+ Max: 5
40
+
41
+ RSpec/NotToNot:
42
+ EnforcedStyle: to_not
43
+
44
+ RSpec/ReturnFromStub:
45
+ EnforcedStyle: block
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.0] - 2022-03-06
4
+
5
+ - Adds support for ingesting Markdown and outputting HTML
6
+ - Adds support for `.erb`-less HTML and Markdown file names while still processing with ERB
7
+ - Adds support for extension-less path serving in `soy server`
8
+ - Changes default port from Puma's default 9292 to 4848
9
+ - Adds support for `--port` flag with `soy server`, example: `soy server --port 4200` to run local server on another port
10
+ - Adds ability to process content nested within folders
11
+
3
12
  ## [0.1.0] - 2022-03-03
4
13
 
5
14
  - Initial release
data/README.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ![Soy mascot Tofu](demo/content/tofu.png)
2
2
 
3
+ ```
4
+ oo_ .-. wWw wWw
5
+ / _)-< c(O_O)c (O) (O)
6
+ \__ `. ,'.---.`,( \ / )
7
+ `. |/ /|_|_|\ \\ \/ /
8
+ _| || \_____/ | \o /
9
+ ,-' |'. `---' .`_/ /
10
+ (_..--' `-...-' (_.'
11
+ ```
12
+
3
13
  # Soy
4
14
 
5
15
  **A static-site generator for Rubyists**
@@ -40,22 +50,24 @@ fermenting...
40
50
  ## Bugs / Features
41
51
 
42
52
  - Write templates in ERB and use the Ruby you know and love
53
+ - Author content in Markdown or HTML
43
54
  - Boot up a server and watch for changes
44
55
 
45
56
  ## Installation
46
57
 
47
58
  Soy requires a modern, stable Ruby, [see ruby-lang.org](https://www.ruby-lang.org/en/downloads/)
48
59
 
49
- - 3.1.1
50
- - 3.0.3
51
- - 2.7.5
60
+ Supported Rubies:
61
+ - 3.1
62
+ - 3.0
63
+ - 2.7
52
64
 
53
65
  1. Install Soy with `gem install soy`
54
66
  2. Create a new site with `soy new YOUR_SITE_NAME`
55
67
  3. Move into it the new site's directory
56
68
  4. Run `soy server` to get to building!
57
69
 
58
- Your site will then be accessible at [localhost:9292](http://localhost:9292)
70
+ Your site will then be accessible at [localhost:4848](http://localhost:4848)
59
71
 
60
72
  ## Usage
61
73
 
@@ -73,9 +85,63 @@ Browse `./demo/` to see a full site, but here's a breakdown of what goes into a
73
85
  - `build/` – where the HTML is output to & served from locally, don't check this in
74
86
  - `content/` – where pages, images, styles, etc. live
75
87
  - e.g. `index.html.erb`
88
+ - e.g. `about.md`
76
89
  - `views/` – where page layouts live (to be evaluated)
77
90
  - `layout.html.erb` — default HTML page layout
78
91
 
92
+ ## Content
93
+
94
+ Soy content lives in the `content/` directory. If the file name ends in `.erb`,
95
+ it'll get run through the Soy renderer for ERB.
96
+
97
+ ### Markdown
98
+
99
+ Content can be authored in Markdown, which outputs HTML. Soy uses
100
+ [Kramdown](https://rubygems.org/gems/kramdown) for Markdown parsing.
101
+
102
+ ### ERB
103
+
104
+ HTML and Markdown files don't need the `.erb` file extension, they'll always
105
+ get run through ERB. So that's optional and totally up to you. `.erb` can help
106
+ with syntax highlighting in your editor.
107
+
108
+ ERB content will be rendered inside the layout specified in
109
+ `views/layout.html.erb`.
110
+
111
+ ERB is neat because you can use whatever Ruby you want within it. Here's an
112
+ example with Markdown:
113
+
114
+ ``` markdown
115
+ <% @title = "Neat Products Made of Soy" %>
116
+
117
+ # <%= @title %>
118
+
119
+ <% ["tofu", "tempeh", "edamame"].each do |product| %>
120
+ - <%= product %>
121
+ <% end %>
122
+ ```
123
+
124
+ ### Links
125
+
126
+ Link to pages and content using the relative path. Markdown example:
127
+
128
+ ``` markdown
129
+ Check out [my super cool link](/cool-link).
130
+ ```
131
+
132
+ That would link to the `cool-link.html` page in the build dir.
133
+
134
+ The Soy development server (and many hosts) handle extension-less HTML
135
+ requests.
136
+
137
+ You can include the extension if you want to:
138
+
139
+ ``` markdown
140
+ Check out [my super cool link](/cool-link.html).
141
+ ```
142
+
143
+ It's really up to you and your preferences.
144
+
79
145
  ## Development
80
146
 
81
147
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -93,6 +159,8 @@ of the features as possible with the project.
93
159
  The `bin/soy` binstub can be used to run the local repo's code, so `bin/soy
94
160
  build demo` will build the demo site.
95
161
 
162
+ [View the demo site on Netlify.](https://soy-demo.netlify.app)
163
+
96
164
  ## Releasing New Versions
97
165
 
98
166
  To release a new version, update the version number in `version.rb`, and then run
data/exe/soy CHANGED
@@ -1,37 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "soy"
4
+ require "soy/cli"
5
5
 
6
- def elapsed
7
- starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
8
- yield
9
- ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
10
- (ending - starting).round(6)
11
- end
12
-
13
- first_arg = ARGV[0]
14
- case first_arg
15
- when "build", "b"
16
- puts "Building site..."
17
- time = elapsed do
18
- Soy.build(ARGV[1])
19
- end
20
- puts "Site successfully built in #{time} seconds"
21
- when "help", "h", "-h", "--help", nil
22
- puts "Soy v#{Soy::VERSION}\n\n"
23
- puts "Available commands:\n"
24
- puts "\tbuild (b) - generate site in the build directory"
25
- puts "\tnew (n) - create a new Soy site\n\t\tsoy new SITE_NAME"
26
- puts "\tserver (s) - rebuild site on changes and start HTTP server"
27
- puts "\tversion (v) - current version of the library"
28
- when "new", "n"
29
- Soy.new_site(ARGV[1])
30
- when "server", "serve", "s"
31
- Soy::Server.start(ARGV[1])
32
- when "version", "v", "-v", "--v"
33
- puts Soy::VERSION
34
- else
35
- puts "`#{first_arg}` is not a command"
36
- puts "Run `soy help` for list of commands"
37
- end
6
+ Soy::Cli.new(ARGV).run
data/lib/soy/builder.rb CHANGED
@@ -5,30 +5,45 @@ require "fileutils"
5
5
  module Soy
6
6
  # Builds the static site content
7
7
  class Builder
8
+ include Helpers
9
+
8
10
  def initialize(project_dir)
9
- @project_dir = project_dir
11
+ @project_dir = project_dir || Dir.pwd
10
12
  @build_dir = "#{@project_dir}/build/"
13
+ @content_dir = "#{@project_dir}/content/"
11
14
  end
12
15
 
13
16
  def call
14
- @layout = File.read("#{@project_dir}/views/layout.html.erb")
15
- FileUtils.mkdir_p(@build_dir)
16
- process_dir("#{@project_dir}/content")
17
+ puts "Building site..."
18
+ time = elapsed do
19
+ FileUtils.rm_rf(@build_dir)
20
+ FileUtils.mkdir_p(@build_dir)
21
+ process_content
22
+ end
23
+ puts "Site successfully built in #{time} seconds"
17
24
  end
18
25
 
19
26
  private
20
27
 
21
- def process_dir(dir)
22
- content = Dir.glob("#{dir}/*")
23
-
24
- content.each do |file|
25
- if file =~ /html.erb$/
26
- bare_name = file.split("/").last.split(".").first
27
- out = Soy::Renderer.new(File.read(file), @layout).render
28
- File.write("#{@build_dir}/#{bare_name}.html", out)
29
- else
30
- FileUtils.cp(file, @build_dir)
31
- end
28
+ def process_content
29
+ Dir.glob("#{@content_dir}**/*").each do |file|
30
+ process_file(file)
31
+ end
32
+ end
33
+
34
+ def process_file(file_path)
35
+ file = Soy::File.new(file_path)
36
+
37
+ dest = file_path.gsub(@content_dir, @build_dir).gsub(%r{/[\w-]+(\.\w+)+$}, "/")
38
+
39
+ if ::File.directory?(file_path)
40
+ FileUtils.mkdir_p(file_path.gsub(@content_dir, @build_dir))
41
+ elsif file.render_with_erb?
42
+ layout = Soy::File.new("#{@project_dir}/views/layout.html.erb")
43
+ out = Soy::Renderer.new(file, layout).render
44
+ ::File.write("#{dest}#{file.rendered_name}", out)
45
+ else
46
+ FileUtils.cp(file_path, dest)
32
47
  end
33
48
  end
34
49
  end
data/lib/soy/cli.rb ADDED
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "soy"
4
+
5
+ module Soy
6
+ # Command-Line Interface entrance for Soy
7
+ class Cli
8
+ include Helpers
9
+
10
+ # @param args - ARGV, array of arguments
11
+ def initialize(args)
12
+ @args = Array(args)
13
+ end
14
+
15
+ COMMANDS = {
16
+ build: {
17
+ aliases: ["b"],
18
+ description: "Generate the site, supports passing path to site directory",
19
+ examples: ["soy build", "soy build path/to/site"],
20
+ run: ->(args) { Soy::Builder.new(args[1]).call }
21
+ },
22
+ help: {
23
+ aliases: ["h", "-h", "--help"],
24
+ description: "Generate the site, supports passing path to site directory",
25
+ examples: ["soy build", "soy build path/to/site"],
26
+ run: lambda do |_args|
27
+ puts "Soy v#{Soy::VERSION}\n\n"
28
+ puts "Available commands:\n"
29
+ COMMANDS.each do |command, details|
30
+ puts "\t#{command} - #{details[:description]}"
31
+ puts "\t\taliases: #{details[:aliases].join(", ")}"
32
+ puts "\t\texamples:\n\t\t\t#{details[:examples].join("\n\t\t\t")}"
33
+ end
34
+ end
35
+ },
36
+ new: {
37
+ aliases: ["n"],
38
+ description: "Create a site from the basic Soy template",
39
+ examples: ["soy new site_name"],
40
+ run: ->(args) { Soy.new_site(args[1]) }
41
+ },
42
+ server: {
43
+ aliases: %w[s serve],
44
+ description: "Start development server & rebuild site on changes," \
45
+ "supports passing path to site directory and an optional --port arg",
46
+ examples: ["soy server", "soy server path/to/site", "soy server --port=4040"],
47
+ run: lambda do |args|
48
+ opts = {}
49
+ OptionParser.new do |parser|
50
+ parser.banner = "soy server option flags"
51
+ parser.on("-p", "--port [PORT]", Integer, "HTTP to run the server at")
52
+ end.parse!(args, into: opts)
53
+ Soy::Server.start(args[1], port: opts[:port])
54
+ end
55
+ },
56
+ version: {
57
+ aliases: ["v", "-v", "--version"],
58
+ description: "Output installed Soy version",
59
+ examples: ["soy version"],
60
+ run: ->(_args) { puts Soy::VERSION }
61
+ }
62
+ }.freeze
63
+
64
+ def run
65
+ first_arg = @args[0]
66
+
67
+ return COMMANDS[:help][:run].call(@args) if first_arg.nil?
68
+
69
+ command = COMMANDS.find do |key, details|
70
+ first_arg == key.to_s || details.fetch(:aliases, []).include?(first_arg)
71
+ end
72
+
73
+ if command
74
+ command[1].fetch(:run).call(@args)
75
+ else
76
+ puts "`#{first_arg}` is not a command"
77
+ puts "Run `soy help` for list of commands"
78
+ end
79
+ end
80
+ end
81
+ end
data/lib/soy/file.rb ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soy
4
+ # Utility class for taking a path to a file and determining what its
5
+ # capabilities are within Soy
6
+ class File
7
+ def initialize(file_path)
8
+ @file_path = file_path
9
+ end
10
+
11
+ def read
12
+ ::File.read(@file_path)
13
+ end
14
+
15
+ def rendered_name
16
+ bare_name = @file_path.split("/").last.split(".").first
17
+ "#{bare_name}.html"
18
+ end
19
+
20
+ def render_with_erb?
21
+ @file_path =~ /.erb$/ || markdown? || html?
22
+ end
23
+
24
+ def markdown?
25
+ @file_path =~ /.(md|markdown)/
26
+ end
27
+
28
+ def html?
29
+ @file_path =~ /.html/
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soy
4
+ # Utility methods to be used across classes
5
+ module Helpers
6
+ # Returns the time for executing the block, rounded to the sixth
7
+ # place.
8
+ def elapsed
9
+ starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
10
+ yield
11
+ ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
12
+ (ending - starting).round(6)
13
+ end
14
+ end
15
+ end
data/lib/soy/page.rb CHANGED
@@ -19,5 +19,13 @@ module Soy
19
19
  public_send("#{attr}=".to_sym, attr_val)
20
20
  end
21
21
  end
22
+
23
+ def method_missing(_)
24
+ nil
25
+ end
26
+
27
+ def respond_to_missing?
28
+ true
29
+ end
22
30
  end
23
31
  end
data/lib/soy/renderer.rb CHANGED
@@ -1,19 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "kramdown"
3
4
  require "soy/page"
4
5
 
5
6
  module Soy
6
- # Takes IO objects and runs them through ERB
7
+ # Runs the template through ERB and generates HTML from it, within optional
8
+ # layout.
7
9
  class Renderer
8
- def initialize(template, layout = nil)
10
+ # template, +Soy::File+ instance
11
+ # layout, +Soy::File+ instance
12
+ def initialize(template, layout)
9
13
  @template = template
10
14
  @layout = layout
15
+
11
16
  @page = Page.new
12
17
  end
13
18
 
14
19
  def render
15
- template = _render(@template)
16
- _render(@layout) { template }
20
+ out = _render(@template)
21
+ out = convert_template(out)
22
+ out = _render(@layout) { out }
23
+ out = out.gsub(/^\s+$/, "")
24
+ out.gsub(/\A\n/, "")
17
25
  end
18
26
 
19
27
  private
@@ -22,8 +30,14 @@ module Soy
22
30
  if template.nil?
23
31
  yield
24
32
  else
25
- ERB.new(template).result(binding)
33
+ ERB.new(template.read).result(binding)
26
34
  end
27
35
  end
36
+
37
+ def convert_template(text)
38
+ text = Kramdown::Document.new(text).to_html if @template.markdown?
39
+
40
+ text
41
+ end
28
42
  end
29
43
  end
data/lib/soy/server.rb CHANGED
@@ -10,12 +10,15 @@ require "rack/show_exceptions"
10
10
  module Soy
11
11
  # Container of data for a given page
12
12
  class Server
13
- def self.start(dir = Dir.pwd)
14
- new(dir).call
13
+ DEFAULT_PORT = 4848
14
+
15
+ def self.start(dir = Dir.pwd, port: DEFAULT_PORT)
16
+ new(dir, port).call
15
17
  end
16
18
 
17
- def initialize(dir)
19
+ def initialize(dir, port)
18
20
  @dir = dir || Dir.pwd
21
+ @port = port || DEFAULT_PORT
19
22
  @relative_output_dir = "build"
20
23
  @output_dir = "#{@dir}/#{@relative_output_dir}"
21
24
  @builder = Builder.new(@dir)
@@ -40,7 +43,7 @@ module Soy
40
43
 
41
44
  def start_server
42
45
  puts "Serving files from #{@output_dir}"
43
- Rack::Server.start(app: app, Port: 9292)
46
+ Rack::Server.start(app: app, Port: @port)
44
47
  end
45
48
 
46
49
  def app
@@ -48,14 +51,29 @@ module Soy
48
51
  Rack::ShowExceptions.new(
49
52
  Rack::Lint.new(
50
53
  Rack::Static.new(
51
- -> { [200, { "Content-Type" => "text/html" }, ["Hello from Soy!"]] },
54
+ bare_finder_with_404_fallback,
52
55
  urls: [""],
53
56
  root: @output_dir,
57
+ cascade: true,
54
58
  index: "index.html"
55
59
  )
56
60
  )
57
61
  )
58
62
  )
59
63
  end
64
+
65
+ def bare_finder_with_404_fallback
66
+ lambda do |env|
67
+ request_path = env["REQUEST_PATH"]
68
+ file_path = "#{@output_dir + request_path}.html"
69
+ [200, { "Content-Type" => "text/html;charset=utf8" }, [::File.read(file_path)]]
70
+ rescue Errno::ENOENT => e
71
+ [
72
+ 404,
73
+ { "Content-Type" => "text/plain;charset=utf8" },
74
+ ["File Not Found\n\n#{e.message}\n\nCreate content to match the path.\n\n༼☯﹏☯༽"]
75
+ ]
76
+ end
77
+ end
60
78
  end
61
79
  end
@@ -0,0 +1,5 @@
1
+ /* Add your styles below */
2
+
3
+ body {
4
+ font-family: Helvetica, Arial, sans-serif;
5
+ }
@@ -1,8 +1,12 @@
1
+ <!doctype html>
2
+
1
3
  <html>
2
- <head>
4
+ <head lang="en">
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
3
7
  <title><%= @page.title || "Your Site" %></title>
8
+ <link href="/styles.css" rel="stylesheet">
4
9
  </head>
5
-
6
10
  <body>
7
11
  <%= yield %>
8
12
  </body>
data/lib/soy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Soy
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/soy.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "soy/helpers"
4
+
3
5
  require_relative "soy/builder"
6
+ require_relative "soy/cli"
7
+ require_relative "soy/file"
4
8
  require_relative "soy/renderer"
5
9
  require_relative "soy/server"
6
10
  require_relative "soy/version"
@@ -11,11 +15,6 @@ require "erb"
11
15
  module Soy
12
16
  class Error < StandardError; end
13
17
 
14
- def self.build(dir)
15
- dir ||= Dir.pwd
16
- Builder.new(dir).call
17
- end
18
-
19
18
  def self.new_site(name)
20
19
  FileUtils.cp_r("#{__dir__}/soy/template/", name)
21
20
  puts "New Soy site created, view in: #{name}"
data/soy.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "Static site builder with support for data models, helpers, an admin, and more."
13
13
  spec.homepage = "https://github.com/brettchalupa/soy"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.7.5"
15
+ spec.required_ruby_version = ">= 2.7.0"
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
34
34
  spec.require_paths = ["lib"]
35
35
 
36
+ spec.add_dependency "kramdown", "~> 2.3"
36
37
  spec.add_dependency "listen", "~> 3.7"
37
38
  spec.add_dependency "puma", "~> 5.6.2"
38
39
  spec.add_dependency "rack", "~> 2.2"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Chalupa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-03 00:00:00.000000000 Z
11
+ date: 2022-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: kramdown
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: listen
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,11 +84,15 @@ files:
70
84
  - exe/soy
71
85
  - lib/soy.rb
72
86
  - lib/soy/builder.rb
87
+ - lib/soy/cli.rb
88
+ - lib/soy/file.rb
89
+ - lib/soy/helpers.rb
73
90
  - lib/soy/page.rb
74
91
  - lib/soy/renderer.rb
75
92
  - lib/soy/server.rb
76
93
  - lib/soy/template/.gitignore
77
94
  - lib/soy/template/content/index.html.erb
95
+ - lib/soy/template/content/styles.css
78
96
  - lib/soy/template/views/layout.html.erb
79
97
  - lib/soy/version.rb
80
98
  - sig/sito.rbs
@@ -95,14 +113,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
113
  requirements:
96
114
  - - ">="
97
115
  - !ruby/object:Gem::Version
98
- version: 2.7.5
116
+ version: 2.7.0
99
117
  required_rubygems_version: !ruby/object:Gem::Requirement
100
118
  requirements:
101
119
  - - ">="
102
120
  - !ruby/object:Gem::Version
103
121
  version: '0'
104
122
  requirements: []
105
- rubygems_version: 3.3.3
123
+ rubygems_version: 3.3.7
106
124
  signing_key:
107
125
  specification_version: 4
108
126
  summary: Data-backed static site generator