hanamismith 0.15.0 → 0.17.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
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +13 -13
- data/hanamismith.gemspec +2 -2
- data/lib/hanamismith/builders/bundler.rb +1 -1
- data/lib/hanamismith/builders/documentation/readme.rb +52 -0
- data/lib/hanamismith/builders/icon.rb +29 -0
- data/lib/hanamismith/builders/pwa.rb +29 -0
- data/lib/hanamismith/builders/rspec/helper.rb +26 -3
- data/lib/hanamismith/builders/slices/health.rb +1 -1
- data/lib/hanamismith/builders/slices/{main.rb → home.rb} +19 -10
- data/lib/hanamismith/builders/stylesheet.rb +1 -1
- data/lib/hanamismith/cli/commands/build.rb +3 -1
- data/lib/hanamismith/templates/%project_name%/config/app.rb.erb +10 -2
- data/lib/hanamismith/templates/%project_name%/config/providers/persistence.rb.erb +1 -0
- data/lib/hanamismith/templates/%project_name%/config/routes.rb.erb +1 -1
- data/lib/hanamismith/templates/%project_name%/public/icon.svg.erb +4 -0
- data/lib/hanamismith/templates/%project_name%/public/manifest.webmanifest.erb +15 -0
- data/lib/hanamismith/templates/%project_name%/public/stylesheets/home.css.erb +85 -0
- data/lib/hanamismith/templates/%project_name%/slices/{main → home}/action.rb.erb +2 -2
- data/lib/hanamismith/templates/%project_name%/slices/home/actions/show.rb.erb +8 -0
- data/lib/hanamismith/templates/%project_name%/slices/{main → home}/repository.rb.erb +2 -2
- data/lib/hanamismith/templates/%project_name%/slices/home/templates/layouts/app.html.erb.erb +28 -0
- data/lib/hanamismith/templates/%project_name%/slices/home/templates/show.html.erb.erb +41 -0
- data/lib/hanamismith/templates/%project_name%/slices/{main → home}/view.rb.erb +2 -3
- data/lib/hanamismith/templates/%project_name%/slices/home/views/show.rb.erb +9 -0
- data/lib/hanamismith.rb +5 -1
- data.tar.gz.sig +3 -3
- metadata +18 -14
- metadata.gz.sig +0 -0
- data/lib/hanamismith/templates/%project_name%/public/stylesheets/site.css.erb +0 -11
- data/lib/hanamismith/templates/%project_name%/slices/main/actions/home/show.rb.erb +0 -10
- data/lib/hanamismith/templates/%project_name%/slices/main/templates/home/show.html.erb.erb +0 -3
- data/lib/hanamismith/templates/%project_name%/slices/main/templates/layouts/app.html.erb.erb +0 -13
- data/lib/hanamismith/templates/%project_name%/slices/main/views/home/show.rb.erb +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7a2f9fdfaa67a10936995d911ad76db83f51fe1b37ef28fec90d0ddb806efa77
|
|
4
|
+
data.tar.gz: 03e473810747a25f2ef846c8f1f00aa93fe0c443065e34e037f529f57816381b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe4fb1bd2e08990b590163c4b711d2c5fc3da26b9194e987d8a4811ef471e1e82c1ac5de5c42d11b1fecb01a29c45f83f50d860bc90f48330f6847dcae023f6b
|
|
7
|
+
data.tar.gz: ac0e4e0f38801660aee10cd52e022b1fb935903ea098ac43ba2762675a733e9462ed5c5981df93099d9f35031b145e5e41beef1661ef4c64ccfaed3f4717978e
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/README.adoc
CHANGED
|
@@ -17,11 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
= Hanamismith
|
|
19
19
|
|
|
20
|
-
Hanamismith is a Command Line Interface (CLI) for smithing Hanami projects. Perfect
|
|
20
|
+
Hanamismith is a Command Line Interface (CLI) for smithing Hanami projects. Perfect when you need a professional and robust tool for building new project skeletons. To quote from the {dry_link} and {hanami_link} teams:
|
|
21
21
|
____
|
|
22
22
|
If you're looking for new ways to build maintainable, secure, faster and testable Ruby applications, you're in for a treat. *Hanami is built for people like you*.
|
|
23
|
-
|
|
24
|
-
Whether you're a total beginner or an experienced developer, *this learning process may still be hard*. Over time, we become used to certain things, and it can be painful to change. *But without change, there is no challenge* and without challenge, there is no growth.
|
|
25
23
|
____
|
|
26
24
|
|
|
27
25
|
Welcome to the modern age of web development. This gem will help you get up and running as quickly as possible. 🚀
|
|
@@ -33,7 +31,7 @@ toc::[]
|
|
|
33
31
|
* Built atop {rubysmith_link} for building project skeleton.
|
|
34
32
|
* Uses {dry_link} for functional programming.
|
|
35
33
|
* Uses {hanami_link} for web application development.
|
|
36
|
-
* Uses {htmx_link} for
|
|
34
|
+
* Uses {htmx_link} for Hypermedia REST APIs (i.e. HTML over the wire) so you can write less code and avoid bloated JavaScript stacks.
|
|
37
35
|
* Uses {pg_link} coupled with {rom_link} for database management.
|
|
38
36
|
* Uses {rack_link}, specifically: `Rack::Deflater`, `Rack::Static`, and link:https://github.com/rack/rack-attack[Rack::Attack].
|
|
39
37
|
* Uses {puma_link} as the default web server and fully configured for local and production environments.
|
|
@@ -43,6 +41,14 @@ toc::[]
|
|
|
43
41
|
* Provides the `/up` health check endpoint via the `Health` slice.
|
|
44
42
|
* Disables link:https://github.com/ruby/irb[IRB] console autocomplete when used in production-like environments. You can re-enable IRB autocomplete by setting `IRB_USE_AUTOCOMPLETE=true` before launching your console in non development or test environments.
|
|
45
43
|
|
|
44
|
+
== Screenshots/Screencasts
|
|
45
|
+
|
|
46
|
+
image:https://alchemists.io/images/projects/hanamismith/screenshots/home.png[Home,width=802,height=813,role=focal_point]
|
|
47
|
+
|
|
48
|
+
The above is a screenshot of a _Demo_ project that was generated and run locally. For a fully working demonstration application -- as built by this gem -- check out the link:https://github.com/bkuhlmann/hemo[Hemo] project. Here's a quick screencast overview of this demonstration application in action:
|
|
49
|
+
|
|
50
|
+
video::https://alchemists.io/videos/projects/hemo/demo.mp4[poster=https://alchemists.io/images/projects/hemo/demo.png,width=800,height=450,role=focal_point]
|
|
51
|
+
|
|
46
52
|
== Requirements
|
|
47
53
|
|
|
48
54
|
. link:https://www.ruby-lang.org[Ruby].
|
|
@@ -93,7 +99,7 @@ link:https://alchemists.io/projects/rubysmith/#_configuration[Rubysmith]. It is
|
|
|
93
99
|
----
|
|
94
100
|
:project:
|
|
95
101
|
:url:
|
|
96
|
-
# Add
|
|
102
|
+
# Add key/value pairs here.
|
|
97
103
|
----
|
|
98
104
|
|
|
99
105
|
When these values exist, you'll benefit from having this information added to your generated project documentation. Otherwise -- if these values are empty -- they are removed from new project generation entirely.
|
|
@@ -133,12 +139,12 @@ bin/hanami --help
|
|
|
133
139
|
|
|
134
140
|
Once the server is running you can visit (or ping) the following endpoints:
|
|
135
141
|
|
|
136
|
-
* `/`: The
|
|
142
|
+
* `/`: The home page.
|
|
137
143
|
* `/up`: The health status of the application. This will be _green_ (200 OK) when the server is up or _red_ (503 Service Unavailable) when the server is down.
|
|
138
144
|
|
|
139
145
|
=== Aliases
|
|
140
146
|
|
|
141
|
-
For link:https://www.gnu.org/software/bash[Bash] users -- or other shell users -- you might find
|
|
147
|
+
For link:https://www.gnu.org/software/bash[Bash] users -- or other shell users -- you might find these suggested aliases helpful in reducing keystrokes when using this gem:
|
|
142
148
|
|
|
143
149
|
[source,bash]
|
|
144
150
|
----
|
|
@@ -149,12 +155,6 @@ alias hsh="hanamismith --help"
|
|
|
149
155
|
|
|
150
156
|
The above is what I use via my {dotfiles_link} project.
|
|
151
157
|
|
|
152
|
-
=== Demonstrations
|
|
153
|
-
|
|
154
|
-
For a fully working demonstration application -- as built by this gem -- check out the link:https://github.com/bkuhlmann/hemo[Hemo] project. Here's a quick screencast overview of this demonstration application in action:
|
|
155
|
-
|
|
156
|
-
video::https://alchemists.io/videos/projects/hemo/demo.mp4[poster=https://alchemists.io/images/projects/hemo/demo.png,width=800,height=450,role=focal_point]
|
|
157
|
-
|
|
158
158
|
== Development
|
|
159
159
|
|
|
160
160
|
To contribute, run:
|
data/hanamismith.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = "hanamismith"
|
|
5
|
-
spec.version = "0.
|
|
5
|
+
spec.version = "0.17.0"
|
|
6
6
|
spec.authors = ["Brooke Kuhlmann"]
|
|
7
7
|
spec.email = ["brooke@alchemists.io"]
|
|
8
8
|
spec.homepage = "https://alchemists.io/projects/hanamismith"
|
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.add_dependency "dry-schema", "~> 1.13"
|
|
30
30
|
spec.add_dependency "etcher", "~> 0.2"
|
|
31
31
|
spec.add_dependency "hanami", "~> 2.0"
|
|
32
|
-
spec.add_dependency "htmx", "~> 0.
|
|
32
|
+
spec.add_dependency "htmx", "~> 0.3"
|
|
33
33
|
spec.add_dependency "infusible", "~> 2.0"
|
|
34
34
|
spec.add_dependency "refinements", "~> 11.0"
|
|
35
35
|
spec.add_dependency "rubysmith", "~> 5.5"
|
|
@@ -56,7 +56,7 @@ module Hanamismith
|
|
|
56
56
|
"source",
|
|
57
57
|
%(gem "hanami-view", github: "hanami/view", branch: "main"\n)
|
|
58
58
|
)
|
|
59
|
-
.insert_after("source", %(gem "htmx", "~> 0.
|
|
59
|
+
.insert_after("source", %(gem "htmx", "~> 0.3"\n))
|
|
60
60
|
.insert_after("source", %(gem "puma", "~> 6.3"\n))
|
|
61
61
|
.insert_after("source", %(gem "rack-attack", "~> 6.6"\n))
|
|
62
62
|
end
|
|
@@ -14,6 +14,7 @@ module Hanamismith
|
|
|
14
14
|
|
|
15
15
|
super
|
|
16
16
|
builder.call(configuration.merge(template_path: "%project_name%/README.#{kind}.erb"))
|
|
17
|
+
.replace(/Setup.+Usage/m, setup)
|
|
17
18
|
.replace("Rubysmith", "Hanamismith")
|
|
18
19
|
.replace("rubysmith", "hanamismith")
|
|
19
20
|
|
|
@@ -25,6 +26,57 @@ module Hanamismith
|
|
|
25
26
|
attr_reader :configuration, :builder
|
|
26
27
|
|
|
27
28
|
def kind = configuration.documentation_format
|
|
29
|
+
|
|
30
|
+
def setup = kind == "adoc" ? ascii_setup : markdown_setup
|
|
31
|
+
|
|
32
|
+
# rubocop:disable Metrics/MethodLength
|
|
33
|
+
def ascii_setup
|
|
34
|
+
<<~CONTENT.strip
|
|
35
|
+
Setup
|
|
36
|
+
|
|
37
|
+
To set up the project, run:
|
|
38
|
+
|
|
39
|
+
[source,bash]
|
|
40
|
+
----
|
|
41
|
+
git clone #{configuration.computed_project_url_source}
|
|
42
|
+
cd #{configuration.project_name}
|
|
43
|
+
bin/setup
|
|
44
|
+
|
|
45
|
+
bin/hanami db create
|
|
46
|
+
bin/hanami db migrate
|
|
47
|
+
bin/hanami db seed
|
|
48
|
+
|
|
49
|
+
HANAMI_ENV=test bin/hanami db create
|
|
50
|
+
HANAMI_ENV=test bin/hanami db migrate
|
|
51
|
+
----
|
|
52
|
+
|
|
53
|
+
== Usage
|
|
54
|
+
CONTENT
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def markdown_setup
|
|
58
|
+
<<~CONTENT.strip
|
|
59
|
+
Setup
|
|
60
|
+
|
|
61
|
+
To set up the project, run:
|
|
62
|
+
|
|
63
|
+
``` bash
|
|
64
|
+
git clone #{configuration.computed_project_url_source}
|
|
65
|
+
cd #{configuration.project_name}
|
|
66
|
+
bin/setup
|
|
67
|
+
|
|
68
|
+
bin/hanami db create
|
|
69
|
+
bin/hanami db migrate
|
|
70
|
+
bin/hanami db seed
|
|
71
|
+
|
|
72
|
+
HANAMI_ENV=test bin/hanami db create
|
|
73
|
+
HANAMI_ENV=test bin/hanami db migrate
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Usage
|
|
77
|
+
CONTENT
|
|
78
|
+
end
|
|
79
|
+
# rubocop:enable Metrics/MethodLength
|
|
28
80
|
end
|
|
29
81
|
end
|
|
30
82
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "refinements/structs"
|
|
4
|
+
|
|
5
|
+
module Hanamismith
|
|
6
|
+
module Builders
|
|
7
|
+
# Builds project skeleton SVG icon.
|
|
8
|
+
class Icon
|
|
9
|
+
using Refinements::Structs
|
|
10
|
+
|
|
11
|
+
def self.call(...) = new(...).call
|
|
12
|
+
|
|
13
|
+
def initialize configuration, builder: Rubysmith::Builder
|
|
14
|
+
@configuration = configuration
|
|
15
|
+
@builder = builder
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call
|
|
19
|
+
path = "%project_name%/public/icon.svg.erb"
|
|
20
|
+
builder.call(configuration.merge(template_path: path)).render
|
|
21
|
+
configuration
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "refinements/structs"
|
|
4
|
+
|
|
5
|
+
module Hanamismith
|
|
6
|
+
module Builders
|
|
7
|
+
# Builds project skeleton Progressive Web Application (PWA) manifest.
|
|
8
|
+
class PWA
|
|
9
|
+
using Refinements::Structs
|
|
10
|
+
|
|
11
|
+
def self.call(...) = new(...).call
|
|
12
|
+
|
|
13
|
+
def initialize configuration, builder: Rubysmith::Builder
|
|
14
|
+
@configuration = configuration
|
|
15
|
+
@builder = builder
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call
|
|
19
|
+
path = "%project_name%/public/manifest.webmanifest.erb"
|
|
20
|
+
builder.call(configuration.merge(template_path: path)).render
|
|
21
|
+
configuration
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :configuration, :builder
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -9,15 +9,38 @@ module Hanamismith
|
|
|
9
9
|
class Helper < Rubysmith::Builders::RSpec::Helper
|
|
10
10
|
using Refinements::Structs
|
|
11
11
|
|
|
12
|
+
def initialize(...)
|
|
13
|
+
super
|
|
14
|
+
@instance = builder.call configuration.merge(
|
|
15
|
+
template_path: "%project_name%/spec/spec_helper.rb.erb"
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
12
19
|
def call
|
|
13
20
|
return configuration unless configuration.build_rspec
|
|
14
21
|
|
|
15
22
|
super
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.replace(/require.+#{configuration.project_name}.+\n/, "")
|
|
23
|
+
remove_project_requirement
|
|
24
|
+
disable_simple_cov_eval
|
|
19
25
|
configuration
|
|
20
26
|
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
attr_reader :instance
|
|
31
|
+
|
|
32
|
+
def remove_project_requirement
|
|
33
|
+
instance.replace(/require.+#{configuration.project_name}.+\n/, "")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def disable_simple_cov_eval
|
|
37
|
+
instance.replace(
|
|
38
|
+
/enable_coverage_for_eval\n/,
|
|
39
|
+
"# TODO: Enable once this issue is fixed: " \
|
|
40
|
+
"https://bugs.ruby-lang.org/issues/19363.\n " \
|
|
41
|
+
"# enable_coverage_for_eval\n"
|
|
42
|
+
)
|
|
43
|
+
end
|
|
21
44
|
end
|
|
22
45
|
end
|
|
23
46
|
end
|
|
@@ -5,8 +5,8 @@ require "refinements/structs"
|
|
|
5
5
|
module Hanamismith
|
|
6
6
|
module Builders
|
|
7
7
|
module Slices
|
|
8
|
-
# Builds
|
|
9
|
-
class
|
|
8
|
+
# Builds home slice skeleton.
|
|
9
|
+
class Home
|
|
10
10
|
using Refinements::Structs
|
|
11
11
|
|
|
12
12
|
def self.call(...) = new(...).call
|
|
@@ -26,39 +26,48 @@ module Hanamismith
|
|
|
26
26
|
attr_reader :configuration, :builder
|
|
27
27
|
|
|
28
28
|
def add_action
|
|
29
|
-
path = "%project_name%/slices/
|
|
29
|
+
path = "%project_name%/slices/home/action.rb.erb"
|
|
30
30
|
builder.call(configuration.merge(template_path: path)).render
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def add_repository
|
|
34
|
-
path = "%project_name%/slices/
|
|
34
|
+
path = "%project_name%/slices/home/repository.rb.erb"
|
|
35
35
|
builder.call(configuration.merge(template_path: path)).render
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def add_view
|
|
39
|
-
path = "%project_name%/slices/
|
|
39
|
+
path = "%project_name%/slices/home/view.rb.erb"
|
|
40
40
|
builder.call(configuration.merge(template_path: path)).render
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def add_layout_template
|
|
44
|
-
path = "%project_name%/slices/
|
|
44
|
+
path = "%project_name%/slices/home/templates/layouts/app.html.erb.erb"
|
|
45
45
|
builder.call(configuration.merge(template_path: path))
|
|
46
46
|
.render
|
|
47
|
+
.replace("<!-- title -->", "<%= content_for :title %>")
|
|
47
48
|
.replace("<!-- yield -->", "<%= yield %>")
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def add_show_template
|
|
51
|
-
path = "%project_name%/slices/
|
|
52
|
-
|
|
52
|
+
path = "%project_name%/slices/home/templates/show.html.erb.erb"
|
|
53
|
+
|
|
54
|
+
builder.call(configuration.merge(template_path: path))
|
|
55
|
+
.render
|
|
56
|
+
.replace(
|
|
57
|
+
"<!-- title -->",
|
|
58
|
+
%(<% content_for :title, "#{configuration.project_label}" %>)
|
|
59
|
+
)
|
|
60
|
+
.replace("<!-- ruby_version -->", "<%= ruby_version %>")
|
|
61
|
+
.replace("<!-- hanami_version -->", "<%= hanami_version %>")
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
def add_show_view
|
|
56
|
-
path = "%project_name%/slices/
|
|
65
|
+
path = "%project_name%/slices/home/views/show.rb.erb"
|
|
57
66
|
builder.call(configuration.merge(template_path: path)).render
|
|
58
67
|
end
|
|
59
68
|
|
|
60
69
|
def add_show_action
|
|
61
|
-
path = "%project_name%/slices/
|
|
70
|
+
path = "%project_name%/slices/home/actions/show.rb.erb"
|
|
62
71
|
builder.call(configuration.merge(template_path: path)).render
|
|
63
72
|
end
|
|
64
73
|
end
|
|
@@ -15,9 +15,11 @@ module Hanamismith
|
|
|
15
15
|
Builders::Core,
|
|
16
16
|
Builders::Providers::Persistence,
|
|
17
17
|
Builders::Refinement,
|
|
18
|
+
Builders::Icon,
|
|
18
19
|
Builders::Stylesheet,
|
|
19
20
|
Builders::HTMX,
|
|
20
|
-
Builders::
|
|
21
|
+
Builders::PWA,
|
|
22
|
+
Builders::Slices::Home,
|
|
21
23
|
Builders::Slices::Health,
|
|
22
24
|
Rubysmith::Builders::Version,
|
|
23
25
|
Builders::Documentation::Readme,
|
|
@@ -7,16 +7,24 @@ require "rack/attack"
|
|
|
7
7
|
Dry::Schema.load_extensions :monads
|
|
8
8
|
Dry::Validation.load_extensions :monads
|
|
9
9
|
|
|
10
|
-
config.actions.content_security_policy
|
|
10
|
+
config.actions.content_security_policy.then do |csp|
|
|
11
|
+
csp[:manifest_src] = "'self'"
|
|
12
|
+
csp[:script_src] += " 'unsafe-eval'"
|
|
13
|
+
end
|
|
11
14
|
|
|
12
15
|
Rack::Attack.safelist("allow localhost") { |request| %w[127.0.0.1 ::1].include? request.ip }
|
|
13
16
|
Rack::Attack.throttle("requests by IP", limit: 100, period: 60, &:ip)
|
|
14
17
|
|
|
15
18
|
config.middleware.use Rack::Attack
|
|
16
19
|
config.middleware.use Rack::Deflater
|
|
17
|
-
config.middleware.use Rack::Static,
|
|
20
|
+
config.middleware.use Rack::Static,
|
|
21
|
+
{
|
|
22
|
+
urls: %w[/icon.svg /manifest.webmanifest /stylesheets /javascripts],
|
|
23
|
+
root: "public"
|
|
24
|
+
}
|
|
18
25
|
|
|
19
26
|
environment :development do
|
|
27
|
+
# :nocov:
|
|
20
28
|
config.logger.options[:colorize] = true
|
|
21
29
|
|
|
22
30
|
config.logger = config.logger.instance.add_backend(
|
|
@@ -26,6 +26,7 @@ Hanami.app.register_provider :persistence, namespace: true do
|
|
|
26
26
|
Sequel::Migrator.is_current? database, Hanami.app.root.join("db/migrate")
|
|
27
27
|
rescue NoMethodError, Sequel::Migrator::Error => error
|
|
28
28
|
message = error.message
|
|
29
|
+
# :nocov:
|
|
29
30
|
Hanami.logger.error message unless error.is_a?(NoMethodError) && message.include?("migration")
|
|
30
31
|
end
|
|
31
32
|
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="1600px" height="1600px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
2
|
+
<g style=""> <ellipse cx="800.000000" cy="800.000000" rx="757.000000" ry="754.000000" stroke-linejoin="round" style="fill: rgba(220, 54, 16, 1.000000); stroke-width: 75.000000px; stroke: rgba(200, 48, 33, 1.000000); " fill="#dc3610" stroke="#c83021" stroke-width="75.000000" />
|
|
3
|
+
</g><g style=""> <ellipse cx="799.500000" cy="800.500000" rx="362.500000" ry="362.500000" stroke-linejoin="round" style="fill: none; stroke-width: 75.000000px; stroke: rgba(255, 255, 255, 1.000000); " fill="none" stroke="#ffffff" stroke-width="75.000000" />
|
|
4
|
+
</g></svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "<%= configuration.project_label %>",
|
|
3
|
+
"icons": [
|
|
4
|
+
{
|
|
5
|
+
"src": "https://alchemists.io/images/projects/hanamismith/icons/small.png",
|
|
6
|
+
"type": "image/png",
|
|
7
|
+
"sizes": "192x192"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"src": "https://alchemists.io/images/projects/hanamismith/icons/large.png",
|
|
11
|
+
"type": "image/png",
|
|
12
|
+
"sizes": "512x512"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
html {
|
|
2
|
+
height: 100%;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.home-page {
|
|
6
|
+
--font-family: Verdana;
|
|
7
|
+
--color-white: hsl(0, 0%, 100%);
|
|
8
|
+
|
|
9
|
+
background-color: var(--color-white);
|
|
10
|
+
background-image:
|
|
11
|
+
radial-gradient(at 17% 25%, hsla(337,26%,88%,1) 0px, transparent 50%),
|
|
12
|
+
radial-gradient(at 17% 68%, hsla(337,26%,88%,1) 0px, transparent 50%),
|
|
13
|
+
radial-gradient(at 50% 45%, hsla(306,81%,77%,1) 0px, transparent 50%),
|
|
14
|
+
radial-gradient(at 81% 25%, hsla(337,26%,88%,1) 0px, transparent 50%),
|
|
15
|
+
radial-gradient(at 81% 68%, hsla(337,26%,88%,1) 0px, transparent 50%),
|
|
16
|
+
radial-gradient(at 9% 7%, hsla(11,86%,46%,1) 0px, transparent 50%),
|
|
17
|
+
radial-gradient(at 9% 93%, hsla(11,86%,46%,1) 0px, transparent 50%),
|
|
18
|
+
radial-gradient(at 91% 7%, hsla(11,86%,46%,1) 0px, transparent 50%),
|
|
19
|
+
radial-gradient(at 91% 93%, hsla(11,86%,46%,1) 0px, transparent 50%);
|
|
20
|
+
background-repeat: no-repeat;
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
font-family: var(--font-family);
|
|
24
|
+
justify-content: space-between;
|
|
25
|
+
min-height: 97vh;
|
|
26
|
+
|
|
27
|
+
.navigation {
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-wrap: wrap;
|
|
30
|
+
align-items: center;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
gap: 1rem;
|
|
34
|
+
list-style: none;
|
|
35
|
+
padding: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media only screen and (min-width: 350px) {
|
|
39
|
+
.navigation {
|
|
40
|
+
flex-direction: row;
|
|
41
|
+
justify-content: normal;
|
|
42
|
+
margin: 1rem 2rem;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.label {
|
|
47
|
+
font-size: clamp(1.5rem, 2vw + 1rem, 2.25rem);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.link {
|
|
51
|
+
color: var(--color-white);
|
|
52
|
+
font-weight: 600;
|
|
53
|
+
font-size: 1.5rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.body {
|
|
57
|
+
align-items: center;
|
|
58
|
+
display: flex;
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.logo {
|
|
63
|
+
max-width: 100%;
|
|
64
|
+
height: auto;
|
|
65
|
+
object-fit: cover;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.footer {
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
gap: 1rem;
|
|
72
|
+
align-items: center;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.group {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-wrap: wrap;
|
|
78
|
+
gap: 1rem;
|
|
79
|
+
justify-content: center;
|
|
80
|
+
list-style: none;
|
|
81
|
+
margin: 0;
|
|
82
|
+
padding: 0;
|
|
83
|
+
text-align: center;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<title><!-- title --></title>
|
|
6
|
+
|
|
7
|
+
<meta charset="utf-8">
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
9
|
+
<meta name="description" content="A Hanamismith skeleton application.">
|
|
10
|
+
<meta name="author" content="Hanamismith">
|
|
11
|
+
|
|
12
|
+
<link title="<%= configuration.project_label %>: Favorite Icon"
|
|
13
|
+
rel="icon"
|
|
14
|
+
href="https://alchemists.io/images/projects/hanamismith/icons/favicon.ico"
|
|
15
|
+
sizes="32x32">
|
|
16
|
+
<link title="<%= configuration.project_label %>: Icon" rel="icon" href="/icon.svg" type="image/svg+xml">
|
|
17
|
+
<link title="<%= configuration.project_label %>: Apple Icon"
|
|
18
|
+
rel="apple-touch-icon"
|
|
19
|
+
href="https://alchemists.io/images/projects/hanamismith/icons/apple.png"
|
|
20
|
+
type="image/png">
|
|
21
|
+
<link title="<%= configuration.project_label %>: Manifest" rel="manifest" href="/manifest.webmanifest">
|
|
22
|
+
<link title="<%= configuration.project_label %>: Stylesheet" rel="stylesheet" href="/stylesheets/home.css" type="text/css">
|
|
23
|
+
</head>
|
|
24
|
+
|
|
25
|
+
<body class="home-page">
|
|
26
|
+
<!-- yield -->
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- title -->
|
|
2
|
+
|
|
3
|
+
<header class="header">
|
|
4
|
+
<nav>
|
|
5
|
+
<ul class="navigation">
|
|
6
|
+
<li><a href="/" class="link">Home</a></li>
|
|
7
|
+
</ul>
|
|
8
|
+
</nav>
|
|
9
|
+
</header>
|
|
10
|
+
|
|
11
|
+
<main class="body">
|
|
12
|
+
<img src="https://alchemists.io/images/projects/hanamismith/icons/small.png"
|
|
13
|
+
alt="Icon"
|
|
14
|
+
class="logo"
|
|
15
|
+
width="192"
|
|
16
|
+
height="192">
|
|
17
|
+
|
|
18
|
+
<h1 class="label"><%= configuration.project_label %></h1>
|
|
19
|
+
</main>
|
|
20
|
+
|
|
21
|
+
<footer class="footer">
|
|
22
|
+
<ul class="group">
|
|
23
|
+
<li><a href="https://hanamirb.org">Hanami</a></li>
|
|
24
|
+
<li><a href="https://guides.hanamirb.org/v2.0/introduction/getting-started">Guides</a></li>
|
|
25
|
+
<li><a href="https://discourse.hanamirb.org">Forum</a></li>
|
|
26
|
+
<li><a href="https://github.com/hanami/hanami/issues">Issues</a></li>
|
|
27
|
+
<li><a href="https://hanamirb.org/status/">Status</a></li>
|
|
28
|
+
<li><a href="https://github.com/hanami/hanami">Source</a></li>
|
|
29
|
+
</ul>
|
|
30
|
+
|
|
31
|
+
<ul class="group">
|
|
32
|
+
<li><a href="https://alchemists.io/projects/hanamismith">Hanamismith</a></li>
|
|
33
|
+
<li><a href="https://github.com/bkuhlmann/hanamismith/issues">Issues</a></li>
|
|
34
|
+
<li><a href="https://github.com/bkuhlmann/hanamismith">Source</a></li>
|
|
35
|
+
</ul>
|
|
36
|
+
|
|
37
|
+
<ul class="group">
|
|
38
|
+
<li>Ruby <!-- ruby_version --></li>
|
|
39
|
+
<li>Hanami <!-- hanami_version --></li>
|
|
40
|
+
</ul>
|
|
41
|
+
</footer>
|
data/lib/hanamismith.rb
CHANGED
|
@@ -4,7 +4,11 @@ require "rubysmith"
|
|
|
4
4
|
require "zeitwerk"
|
|
5
5
|
|
|
6
6
|
Zeitwerk::Loader.for_gem.then do |loader|
|
|
7
|
-
loader.inflector.inflect "cli" => "CLI",
|
|
7
|
+
loader.inflector.inflect "cli" => "CLI",
|
|
8
|
+
"ci" => "CI",
|
|
9
|
+
"htmx" => "HTMX",
|
|
10
|
+
"pwa" => "PWA",
|
|
11
|
+
"rspec" => "RSpec"
|
|
8
12
|
loader.setup
|
|
9
13
|
end
|
|
10
14
|
|
data.tar.gz.sig
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
��
|
|
3
|
-
|
|
1
|
+
Q�U��捤
|
|
2
|
+
��(������/��Ǒ�F�x&��<�y���h�?jN�,g_����q�����d4�S��2�FѼ�I�����q�ո���Va3���l[�I��a@CJr�N��/�9��/r���
|
|
3
|
+
u�~^�g���
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hanamismith
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.17.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brooke Kuhlmann
|
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
|
35
35
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
|
36
36
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
|
37
37
|
-----END CERTIFICATE-----
|
|
38
|
-
date: 2023-
|
|
38
|
+
date: 2023-08-13 00:00:00.000000000 Z
|
|
39
39
|
dependencies:
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: cogger
|
|
@@ -127,14 +127,14 @@ dependencies:
|
|
|
127
127
|
requirements:
|
|
128
128
|
- - "~>"
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: '0.
|
|
130
|
+
version: '0.3'
|
|
131
131
|
type: :runtime
|
|
132
132
|
prerelease: false
|
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
135
|
- - "~>"
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '0.
|
|
137
|
+
version: '0.3'
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
139
139
|
name: infusible
|
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -261,9 +261,11 @@ files:
|
|
|
261
261
|
- lib/hanamismith/builders/git/commit.rb
|
|
262
262
|
- lib/hanamismith/builders/guard.rb
|
|
263
263
|
- lib/hanamismith/builders/htmx.rb
|
|
264
|
+
- lib/hanamismith/builders/icon.rb
|
|
264
265
|
- lib/hanamismith/builders/providers/persistence.rb
|
|
265
266
|
- lib/hanamismith/builders/puma/configuration.rb
|
|
266
267
|
- lib/hanamismith/builders/puma/procfile.rb
|
|
268
|
+
- lib/hanamismith/builders/pwa.rb
|
|
267
269
|
- lib/hanamismith/builders/rack.rb
|
|
268
270
|
- lib/hanamismith/builders/rake.rb
|
|
269
271
|
- lib/hanamismith/builders/refinement.rb
|
|
@@ -273,7 +275,7 @@ files:
|
|
|
273
275
|
- lib/hanamismith/builders/rspec/hanami.rb
|
|
274
276
|
- lib/hanamismith/builders/rspec/helper.rb
|
|
275
277
|
- lib/hanamismith/builders/slices/health.rb
|
|
276
|
-
- lib/hanamismith/builders/slices/
|
|
278
|
+
- lib/hanamismith/builders/slices/home.rb
|
|
277
279
|
- lib/hanamismith/builders/stylesheet.rb
|
|
278
280
|
- lib/hanamismith/cli/commands/build.rb
|
|
279
281
|
- lib/hanamismith/cli/shell.rb
|
|
@@ -298,16 +300,18 @@ files:
|
|
|
298
300
|
- lib/hanamismith/templates/%project_name%/env.test.erb
|
|
299
301
|
- lib/hanamismith/templates/%project_name%/lib/%project_path%/refines/actions/response.rb.erb
|
|
300
302
|
- lib/hanamismith/templates/%project_name%/lib/%project_path%/types.rb.erb
|
|
303
|
+
- lib/hanamismith/templates/%project_name%/public/icon.svg.erb
|
|
301
304
|
- lib/hanamismith/templates/%project_name%/public/javascripts/htmx.js.erb
|
|
302
|
-
- lib/hanamismith/templates/%project_name%/public/
|
|
305
|
+
- lib/hanamismith/templates/%project_name%/public/manifest.webmanifest.erb
|
|
306
|
+
- lib/hanamismith/templates/%project_name%/public/stylesheets/home.css.erb
|
|
303
307
|
- lib/hanamismith/templates/%project_name%/slices/health/actions/show.rb.erb
|
|
304
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
305
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
306
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
307
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
308
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
309
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
310
|
-
- lib/hanamismith/templates/%project_name%/slices/
|
|
308
|
+
- lib/hanamismith/templates/%project_name%/slices/home/action.rb.erb
|
|
309
|
+
- lib/hanamismith/templates/%project_name%/slices/home/actions/show.rb.erb
|
|
310
|
+
- lib/hanamismith/templates/%project_name%/slices/home/repository.rb.erb
|
|
311
|
+
- lib/hanamismith/templates/%project_name%/slices/home/templates/layouts/app.html.erb.erb
|
|
312
|
+
- lib/hanamismith/templates/%project_name%/slices/home/templates/show.html.erb.erb
|
|
313
|
+
- lib/hanamismith/templates/%project_name%/slices/home/view.rb.erb
|
|
314
|
+
- lib/hanamismith/templates/%project_name%/slices/home/views/show.rb.erb
|
|
311
315
|
- lib/hanamismith/templates/%project_name%/spec/hanami_helper.rb.erb
|
|
312
316
|
- lib/hanamismith/templates/%project_name%/spec/lib/%project_path%/refines/actions/response_spec.rb.erb
|
|
313
317
|
- lib/hanamismith/templates/%project_name%/spec/slices/health/actions/show_spec.rb.erb
|
|
@@ -340,7 +344,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
340
344
|
- !ruby/object:Gem::Version
|
|
341
345
|
version: '0'
|
|
342
346
|
requirements: []
|
|
343
|
-
rubygems_version: 3.4.
|
|
347
|
+
rubygems_version: 3.4.18
|
|
344
348
|
signing_key:
|
|
345
349
|
specification_version: 4
|
|
346
350
|
summary: A command line interface for smithing Hanami projects.
|
metadata.gz.sig
CHANGED
|
Binary file
|
data/lib/hanamismith/templates/%project_name%/slices/main/templates/layouts/app.html.erb.erb
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<title><%= configuration.project_label %></title>
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<link title="<%= configuration.project_label %> - Stylesheet" rel="stylesheet" href="/stylesheets/site.css" type="text/css">
|
|
7
|
-
<script src="/javascripts/htmx.js"></script>
|
|
8
|
-
</head>
|
|
9
|
-
|
|
10
|
-
<body class="page">
|
|
11
|
-
<!-- yield -->
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|