endleaf 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b87bcf46951a064d0f7096c84934fa9b5a59b7a3027c97b68e4ae24b7262ede
4
- data.tar.gz: ba5ed3ff9cff7c16113e91ce28f0e7c5daf222f24b90307a79d8fe805a84ef6e
3
+ metadata.gz: 90f0e34500f5b54264548be3dcc719321a373698836ab9e4947895f76525ec7e
4
+ data.tar.gz: 786a0759dc2c2dc0d685bfb94e9adc560476a86aeb25240b9d5add113b64a3f6
5
5
  SHA512:
6
- metadata.gz: 80bd03da2778c6aa1f3506c806974ba0c055185deea8fee2c16763b1c0d034b88d367d5f1aa7ccee109f7f9470525a07a0b966c270bbf4815ebe07524c1e4544
7
- data.tar.gz: 231eab7930780dcf295dbcb531f05ce2486e41ba6cfbefa9ae0b9ba25845c9c3023db47b6b4d8667f7497b6d40037f9a3e21c3e5d4548b67c856e6ce9436c657
6
+ metadata.gz: 4304bce0e6ccd3d3e56f272b948d2dbf8ef7de06c016f25452ee9994ad494450222be0214dae79e9000bec431737dc7a08af753e60a9f3d52dfc785a2c8f87fd
7
+ data.tar.gz: 3353e33205c82259354930e068d08d6c54e7f9e3baee42860151e2980393b19ec4497e35c6d0a185be323362fab01ea29522337befa0834d6c1b54ed1f6945bd
data/README.md CHANGED
@@ -10,14 +10,27 @@ gem "endleaf"
10
10
 
11
11
  ## Usage
12
12
  - Use with Ruby on Rails only.
13
+ - Create pages in `app/views/pages` with filenames corresponding to their routes.
13
14
  - Add routes to `config/routes.rb`
14
15
 
15
16
  ```ruby
17
+ # Simple usage
16
18
  scope module: 'endleaf' do
17
19
  get '/pages/:page', to: 'pages#show', as: :page
18
20
  end
21
+
22
+ # Use scope and constraints to achieve routes into sub directories
23
+ scope "/pages", constraints: { path: /pages\/.*/ } do
24
+ get "*page", to: "endleaf/pages#show"
25
+ end
26
+
27
+ # With custom path and layout
28
+ # path: app/views/posts
29
+ # layout: app/views/layouts/posts.html.erb
30
+ scope "/posts", constraints: { path: /posts\/.*/ } do
31
+ get "*page", to: "endleaf/pages#show", as: :endleaf_posts_post, defaults: { path: "posts", layout: "posts" }
32
+ end
19
33
  ```
20
- - Create pages in `app/views/pages` with filenames corresponding to their routes.
21
34
 
22
35
  ```ruby
23
36
  # can be used in specific routes e.g. homepage
@@ -32,6 +45,14 @@ get 'endleaf/pages#show' , page: 'about'
32
45
 
33
46
  ```shell
34
47
  bundle exec rake endleaf:render:generate_html
48
+
49
+ # custom path, layout, output with variables [path,layout,output]
50
+ # Example:
51
+ # path: app/views/posts
52
+ # layout: app/views/layouts/posts.html.erb
53
+ # output: public/static/posts
54
+ bundle exec rake endleaf:render:generate_html\[posts,posts,static\/posts\]
55
+
35
56
  ```
36
57
 
37
58
 
@@ -3,13 +3,32 @@ module Endleaf
3
3
  before_action :set_layout
4
4
 
5
5
  def show
6
- render template: "pages/#{params[:page]}"
6
+ path_segments = params[:page].split('/')
7
+ view_path = path_segments.join('/')
8
+
9
+ render template: "#{path}/#{view_path}"
7
10
  end
8
11
 
9
12
  private
10
13
 
11
14
  def set_layout
12
- self.class.layout('endleaf')
15
+ self.class.layout(page_layout)
16
+ end
17
+
18
+ def page_layout
19
+ unless params[:layout].blank?
20
+ params[:layout]
21
+ else
22
+ Endleaf::Config::DEFAULT_LAYOUT
23
+ end
24
+ end
25
+
26
+ def path
27
+ unless params[:path].blank?
28
+ params[:path]
29
+ else
30
+ Endleaf::Config::DEFAULT_PATH
31
+ end
13
32
  end
14
33
  end
15
34
  end
@@ -0,0 +1,6 @@
1
+ module Endleaf
2
+ module Config
3
+ DEFAULT_LAYOUT = "endleaf".freeze # Default layout
4
+ DEFAULT_PATH = "pages".freeze # Default path
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module Endleaf
2
- VERSION = "0.1.1"
2
+ VERSION = "0.3.0".freeze
3
3
  end
data/lib/endleaf.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "endleaf/version"
2
2
  require "endleaf/engine"
3
+ require "endleaf/config"
3
4
 
4
5
  module Endleaf
5
6
  # Your code goes here...
@@ -1,13 +1,17 @@
1
1
  namespace :endleaf do
2
2
  namespace :render do
3
- desc 'Render and save static pages as HTML'
3
+ desc "Render and save static pages as HTML"
4
4
 
5
- task :generate_html => :environment do
6
- # Include the necessary modules to access render_to_string
7
- controller_path = 'endleaf/pages'
8
- action_name = 'show'
5
+ task :generate_html, [:path, :layout, :output] => :environment do |t, args|
6
+ # Manually set the controller path and action name
7
+ controller_path = "endleaf/pages"
8
+ action_name = "show"
9
+
10
+ # Set static pages directory and layout
11
+ page_path = args[:path] || Endleaf::Config::DEFAULT_PATH
12
+ layout = args[:layout] || Endleaf::Config::DEFAULT_LAYOUT
13
+ output = args[:output].to_s
9
14
 
10
- # Create a controller instance
11
15
  controller = ActionController::Base.new
12
16
  controller.request = ActionDispatch::Request.new({})
13
17
 
@@ -15,23 +19,42 @@ namespace :endleaf do
15
19
  controller.params = { controller: controller_path, action: action_name }
16
20
 
17
21
  # Define the directory containing your static pages within the engine
18
- pages_directory = Rails.root.join('app', 'views', 'pages')
22
+ pages_directory = Rails.root.join("app", "views", page_path)
23
+
24
+ # Supported template extensions
25
+ template_extensions = %w[html.erb erb html.haml haml html.slim slim]
26
+
27
+ puts "#{pages_directory}/**/*.{#{template_extensions.join(',')}}"
19
28
 
20
- # Loop through each file in the pages directory
21
- Dir.glob("#{pages_directory}/*.html.erb") do |file|
22
- # Extract the filename without the directory and extension
23
- filename = File.basename(file, '.html.erb')
29
+ # Loop through each file in the pages directory and subdirectories
30
+ Dir.glob("#{pages_directory}/**/*.{#{template_extensions.join(',')}}") do |file|
31
+ # Extract the relative path from the pages directory
32
+ relative_path = Pathname.new(file).relative_path_from(pages_directory).to_s
24
33
 
25
- # Render the page
26
- html_content = controller.render_to_string(template: "pages/#{filename}", layout: 'endleaf')
34
+ # Extract the filename without the extension
35
+ filename = File.basename(file, '.*')
36
+
37
+ # Construct the absolute path to the template file
38
+ template_path = "#{page_path}/#{relative_path.sub(/\.(#{template_extensions.join('|')})$/, '')}"
39
+ puts "template: #{template_path}"
40
+
41
+ # Render the page using the controller's render_to_string method
42
+ html_content = controller.render_to_string(
43
+ template: template_path,
44
+ layout: layout
45
+ )
27
46
 
28
47
  # Define the path to save the HTML file in the public directory
29
- save_path = Rails.root.join('public', "#{filename}.html")
48
+ # Modify save_path logic to generate 'example/index.html' format
49
+ save_path = Rails.root.join('public', output, "#{relative_path.sub(/\.html\.erb$/, '')}/index.html")
50
+
51
+ # Create directories if they don't exist
52
+ FileUtils.mkdir_p(File.dirname(save_path))
30
53
 
31
54
  # Save the rendered HTML to the file
32
55
  File.write(save_path, html_content)
33
56
 
34
- puts "Rendered and saved #{filename}.html"
57
+ puts "Rendered and saved #{save_path}"
35
58
  end
36
59
  end
37
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: endleaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wittawas W
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-28 00:00:00.000000000 Z
11
+ date: 2023-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -37,6 +37,7 @@ files:
37
37
  - app/controllers/endleaf/pages_controller.rb
38
38
  - app/views/layouts/endleaf.html.erb
39
39
  - lib/endleaf.rb
40
+ - lib/endleaf/config.rb
40
41
  - lib/endleaf/engine.rb
41
42
  - lib/endleaf/railtie.rb
42
43
  - lib/endleaf/version.rb
@@ -47,7 +48,7 @@ licenses:
47
48
  metadata:
48
49
  homepage_uri: https://github.com/wittawasw/endleaf
49
50
  source_code_uri: https://github.com/wittawasw/endleaf
50
- changelog_uri: https://github.com/wittawasw/endleaf
51
+ changelog_uri: https://github.com/wittawasw/endleaf/blob/main/changelog.md
51
52
  post_install_message:
52
53
  rdoc_options: []
53
54
  require_paths:
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubygems_version: 3.4.19
67
+ rubygems_version: 3.4.20
67
68
  signing_key:
68
69
  specification_version: 4
69
70
  summary: Routing and utilities for static pages creation in Rails.