eksa-framework 3.4.3 → 3.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 240df13f36c40ffdbe4ca9da5ee387d88e72dcc7c9477978c55782959720badf
4
- data.tar.gz: 64bada9f45b072af04bb8a126266cc1804f00800cd7bda47313e2f3e047dfb3d
3
+ metadata.gz: f57d87052543adcdf399ee64e7d544c31ff386d8aa248eb4436edfc4a234fb39
4
+ data.tar.gz: ee730c8fa72e650afb53042818b432097a1d81922f3a4c7b406f3b10d73b6bc7
5
5
  SHA512:
6
- metadata.gz: 25b6d53915adb207cf3329e4c6cd865ff5d26612a6a28aebd02e6b9d6484fb74846fbd07e570a16a80bb0307d24c4361c1363a87e56cca45db6f7c2511a8148b
7
- data.tar.gz: df3e0ef70c040658e0be92110bff33a39ab55a1e30af989834dd1f19f9291b3d5bdbdc545b84718d9b4aeba27f2f2cb264e0678e78ed56dabbdea575e90afaed
6
+ metadata.gz: 75f1ce079637bd91c2d06d3f38bfbe617ae0b878c72c0d801ec0dab200ee006608f9d3b47cb1c328939cf23eb553fecfa5f6cb97864c1900a4bc5c7e2bc3dc3c
7
+ data.tar.gz: 466ab56d0ef22b2ea3062808f88f2bb5d4416ced8109fcd96cb03449344099922421ba32160fbf4a99f64d4a0995321f6eac56e0ddfaf59d43783dd85d775f09
data/.eksa.json CHANGED
@@ -1,4 +1,13 @@
1
1
  {
2
2
  "cms": true,
3
- "auth": true
3
+ "auth": true,
4
+ "database": {
5
+ "type": "mongodb",
6
+ "sqlite": {
7
+ "path": "./db/eksa_app.db"
8
+ },
9
+ "mongodb": {
10
+ "uri": "ENV_VAR"
11
+ }
12
+ }
4
13
  }
data/.env.example ADDED
@@ -0,0 +1,8 @@
1
+ # Eksa Framework Environment Variables
2
+ # Duplikat file ini menjadi .env dan isi dengan kredensial Anda.
3
+
4
+ # URI Koneksi MongoDB Atlas
5
+ # EKSA_MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/dbname"
6
+
7
+ # Secret untuk Session Cookie (Ganti dengan string acak yang panjang di production)
8
+ # SESSION_SECRET="pilih_string_acak_minimal_64_karakter"
data/Gemfile CHANGED
@@ -9,6 +9,9 @@ gem 'rack'
9
9
  gem 'puma'
10
10
  gem "rackup"
11
11
  gem 'sqlite3'
12
+ gem 'mongo', '~> 2.19'
13
+ gem 'dotenv', '~> 2.8'
14
+ gem 'bigdecimal', '~> 3.1'
12
15
  gem 'kramdown'
13
16
  gem 'kramdown-parser-gfm'
14
17
  gem 'bcrypt', '~> 3.1'
data/Gemfile.lock CHANGED
@@ -3,11 +3,17 @@ GEM
3
3
  specs:
4
4
  base64 (0.3.0)
5
5
  bcrypt (3.1.21)
6
+ bigdecimal (3.3.1)
7
+ bson (5.2.0)
6
8
  diff-lcs (1.6.2)
9
+ dotenv (2.8.1)
7
10
  kramdown (2.5.2)
8
11
  rexml (>= 3.4.4)
9
12
  kramdown-parser-gfm (1.1.0)
10
13
  kramdown (~> 2.0)
14
+ mongo (2.23.0)
15
+ base64
16
+ bson (>= 4.14.1, < 6.0.0)
11
17
  nio4r (2.7.5)
12
18
  puma (7.2.0)
13
19
  nio4r (~> 2.0)
@@ -40,8 +46,11 @@ PLATFORMS
40
46
 
41
47
  DEPENDENCIES
42
48
  bcrypt (~> 3.1)
49
+ bigdecimal (~> 3.1)
50
+ dotenv (~> 2.8)
43
51
  kramdown
44
52
  kramdown-parser-gfm
53
+ mongo (~> 2.19)
45
54
  puma
46
55
  rack
47
56
  rack-session (~> 2.0)
@@ -53,9 +62,13 @@ DEPENDENCIES
53
62
  CHECKSUMS
54
63
  base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
55
64
  bcrypt (3.1.21) sha256=5964613d750a42c7ee5dc61f7b9336fb6caca429ba4ac9f2011609946e4a2dcf
65
+ bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218
66
+ bson (5.2.0) sha256=c468c1e8a3cfa1e80531cc519a890f85586986721d8e305f83465cc36bb82608
56
67
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
68
+ dotenv (2.8.1) sha256=c5944793349ae03c432e1780a2ca929d60b88c7d14d52d630db0508c3a8a17d8
57
69
  kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
58
70
  kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
71
+ mongo (2.23.0) sha256=be2fe4cc6f7119fa6b79e82a1963b2406856b4dc92d0ccfb74db543897be3109
59
72
  nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
60
73
  puma (7.2.0) sha256=bf8ef4ab514a4e6d4554cb4326b2004eba5036ae05cf765cfe51aba9706a72a8
61
74
  rack (3.2.5) sha256=4cbd0974c0b79f7a139b4812004a62e4c60b145cba76422e288ee670601ed6d3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ✨ Eksa Framework
1
+ # ✨ Eksa Framework v3.5.0
2
2
 
3
3
  [![Ruby Version](https://img.shields.io/badge/ruby-3.0+-red.svg)](https://www.ruby-lang.org/)
4
4
  [![Rack Version](https://img.shields.io/badge/rack-3.0+-blue.svg)](https://rack.github.io/)
@@ -9,18 +9,19 @@
9
9
 
10
10
  ---
11
11
 
12
- ## 🚀 Fitur Unggulan
12
+ ## 🚀 Fitur Unggulan v3.5.0
13
13
 
14
14
  * 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
15
15
  * ⚡ **Rack 3 & Middleware Support**: Mendukung standar terbaru dan pembuatan pipeline middleware kustom.
16
- * 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, dan **auto-routing** otomatis.
17
- * 💾 **Dynamic Database Engine**: Database SQLite otomatis dengan schema yang ditentukan oleh model Anda sendiri.
16
+ * 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, ganti database, dan **migrasi data** otomatis.
17
+ * 💾 **Agnostic Database Engine**: Dukungan multi-database (**SQLite** & **MongoDB Atlas**) dengan sistem adapter yang otomatis dan transparan.
18
+ * 🛡️ **Secure Environment Variables**: Dukungan file `.env` untuk menyimpan kredensial database (MongoDB URI) secara aman.
19
+ * ⚙️ **JIT Schema Initialization**: Inisialisasi tabel/koleksi secara otomatis tepat saat model pertama kali diakses.
18
20
  * 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan RSpec dan `rack-test`.
19
21
  * 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
20
22
  * 📝 **Interactive CMS Dashboard**: Panel admin integratif untuk mengedit isi blog Markdown & transisi visibilitas via UI.
23
+ * 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt`, `sitemap.xml`, dan dukungan **JSON-LD** (Structured Data).
21
24
  * 🎨 **Asset Helpers**: Library bawaan untuk pengelolaan CSS dan JS yang lebih rapi.
22
- * 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt` dan `sitemap.xml`.
23
- * 💎 **JSON-LD Support**: Dukungan data terstruktur (Structured Data) otomatis untuk SEO yang lebih optimal.
24
25
  * 👻 **Aesthetic Error Pages**: Halaman 404 dengan desain Glassmorphism yang elegan secara native.
25
26
 
26
27
  ---
@@ -38,7 +39,13 @@ mkdir my-app && cd my-app
38
39
  eksa init
39
40
  ```
40
41
 
41
- ### 3. Jalankan Server
42
+ ### 3. Konfigurasi Keamanan (Opsi MongoDB)
43
+ Salin `.env.example` menjadi `.env` dan isi kredensial Anda:
44
+ ```bash
45
+ cp .env.example .env
46
+ ```
47
+
48
+ ### 4. Jalankan Server
42
49
  ```bash
43
50
  bundle install
44
51
  eksa run
@@ -48,91 +55,68 @@ eksa run
48
55
 
49
56
  ## 💻 Panduan Pengembangan
50
57
 
51
- ### 1. Konfigurasi Aplikasi (`config.ru`)
52
- Eksa kini menggunakan blok inisialisasi untuk konfigurasi yang lebih fleksibel:
53
-
54
- ```ruby
55
- app = Eksa::Application.new do |config|
56
- config.config[:db_path] = "./db/production.db"
57
-
58
- config.use Rack::Static, urls: ["/css", "/img"], root: "public"
59
- config.use Rack::ShowExceptions
60
- end
61
- ```
62
-
63
- ### 2. CLI Generator
58
+ ### 1. CLI Generator & Utility
64
59
  Hemat waktu dengan menggunakan generator bawaan:
65
60
 
66
61
  ```bash
67
62
  # Membuat controller dan view template
68
- eksa g controller Blog
63
+ eksa g controller Berita
69
64
 
70
- # Membuat model dan schema database
71
- eksa g model Post
65
+ # Membuat model (Schema akan dibuat otomatis saat diakses)
66
+ eksa g model Artikel
72
67
 
73
68
  # Membuat postingan blog baru dengan meta tambahan
74
- eksa g post "Judul Artikel" --category "Kategori" --author "Nama Penulis" --image "url-gambar.jpg"
69
+ eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
75
70
 
76
- # Mengaktifkan/menonaktifkan fitur bawaan Eksa (auth / cms)
71
+ # Mengaktifkan/menonaktifkan fitur (auth / cms)
77
72
  eksa feature enable auth
78
73
  eksa feature enable cms
79
74
 
80
- # Mengatur ulang sandi akun admin CMS langsung dari CLI
81
- eksa reset-password admin PasswordBaru123
82
- ```
83
-
84
- ### 3. CMS Dashboard & Authentication
85
- Eksa hadir dengan sistem manajemen konten internal bergaya Glassmorphism.
75
+ # Manajemen Database (Switch & Migrate)
76
+ eksa db switch mongo # Pindah ke MongoDB
77
+ eksa db migrate --from sqlite --to mongo # Pindah data ke Cloud
86
78
 
87
- * **Aktivasi**: Pertama, jalankan `eksa feature enable auth` dan `eksa feature enable cms` dari terminal Anda lalu *restart* server.
88
- * **Registrasi**: Akses `http://localhost:9292/auth/register` (Hanya akun pertama yang bisa mendaftar sebagai Administrator).
89
- * **Akses Dasbor**: Masuk ke rute `/cms` untuk melihat postingan, mengubah status publikasi (*Draft* / *Aktif*), menghapus postingan, hingga melakukan edit data via editor terintegrasi.
90
- * **Proteksi Taut**: Rute login dan CMS sepenuhnya difilter oleh perantara otentikasi sesi Rack. Admin yang berhasil masuk secara otomatis terlindungi dari paparan rute login berlebih.
91
-
92
- ### 4. Markdown Blog Engine
93
- Eksa memiliki sistem blog bawaan yang cara kerjanya mirip Jekyll. Cukup buat file `.md` di folder `_posts/` dengan metadata YAML (Front Matter):
94
-
95
- ```markdown
96
- ---
97
- title: "Halo Eksa"
98
- date: 2026-03-15 14:00:00
99
- ---
100
-
101
- Isi konten blog menggunakan **Markdown**.
79
+ # Reset Password Admin
80
+ eksa reset-password admin PasswordRahasia123
102
81
  ```
103
82
 
104
- Fitur Blog:
105
- * **Dynamic Slug**: Otomatis mengenali rute `/posts/:slug`.
106
- * **Syntax Highlighting**: Kode di dalam blog otomatis berwarna & punya tombol copy.
107
- * **Aesthetic UI**: Template blog bawaan dengan desain Glassmorphism.
108
-
109
- ### 4. Database & Model
110
- Definisikan schema tabel Anda langsung di dalam model:
83
+ ### 2. Database & Model (Agnostic)
84
+ Definisikan schema tabel Anda di dalam model. Eksa akan menanganinya secara cerdas baik di SQLite maupun MongoDB:
111
85
 
112
86
  ```ruby
113
- class Post < Eksa::Model
87
+ class Artikel < Eksa::Model
114
88
  def self.setup_schema
115
89
  db.execute <<~SQL
116
- CREATE TABLE IF NOT EXISTS posts (
90
+ CREATE TABLE IF NOT EXISTS artikels (
117
91
  id INTEGER PRIMARY KEY AUTOINCREMENT,
118
- title TEXT,
119
- content TEXT
92
+ judul TEXT,
93
+ konten TEXT,
94
+ penulis TEXT
120
95
  )
121
96
  SQL
122
97
  end
98
+
99
+ def self.semua
100
+ db.execute("SELECT * FROM artikels ORDER BY id DESC")
101
+ end
123
102
  end
124
103
  ```
125
104
 
126
- ### 4. Asset Helpers
127
- Gunakan helper di dalam view untuk menyisipkan asset:
105
+ ### 3. CMS Dashboard & Blog Engine
106
+ Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
128
107
 
129
- ```erb
130
- <%= stylesheet_tag "style" %>
131
- <%= javascript_tag "app" %>
132
- ```
108
+ - **Blog Markdown**: Simpan file `.md` di `_posts/` dengan Front Matter YAML.
109
+ - **Dynamic Routing**: Otomatis mengenali rute `/posts/:slug`.
110
+ - **Admin Panel**: Akses `/cms` untuk mengedit konten menggunakan editor terintegrasi, ganti status (*Draft/Published*), atau hapus postingan.
111
+
112
+ ### 4. SEO & Metadata
113
+ Eksa secara otomatis menghasilkan:
114
+ - `http://localhost:9292/sitemap.xml`
115
+ - `http://localhost:9292/robots.txt`
116
+ - **JSON-LD**: Skema `BlogPosting` dan `WebSite` disematkan otomatis pada layout untuk peringkat SEO yang lebih baik.
133
117
 
134
118
  ### 5. Menjalankan Test
135
- Pastikan aplikasi Anda berjalan dengan benar menggunakan RSpec:
119
+ Gunakan RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
136
120
 
137
121
  ```bash
138
122
  bundle exec rspec
@@ -1,30 +1,31 @@
1
- ---
2
- published: true
3
- title: Welcome To Eksa Framework
4
- date: 2026-03-15 21:09:58.000000000 +07:00
5
- author: IshikawaUta
6
- category: Framework
7
- image: https://res.cloudinary.com/dzsqaauqn/image/upload/v1773645204/logo_ne3hy4.png
8
- ---
9
-
10
- # ✨ Eksa Framework
1
+ ---
2
+ published: true
3
+ title: Welcome To Eksa Framework
4
+ date: 2026-03-15 21:09:58.000000000 +07:00
5
+ author: IshikawaUta
6
+ category: Framework
7
+ image: https://res.cloudinary.com/dzsqaauqn/image/upload/v1773645204/logo_ne3hy4.png
8
+ ---
9
+
10
+ # ✨ Eksa Framework v3.5.0
11
11
 
12
12
  **Eksa Framework** adalah *micro-framework* MVC (Model-View-Controller) modern yang dibangun di atas Ruby dan Rack. Didesain untuk pengembang yang menginginkan kecepatan, kode yang bersih, dan tampilan antarmuka **Glassmorphism** yang elegan secara *out-of-the-box*.
13
13
 
14
14
  ---
15
15
 
16
- ## 🚀 Fitur Unggulan
16
+ ## 🚀 Fitur Unggulan v3.5.0
17
17
 
18
18
  * 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
19
19
  * ⚡ **Rack 3 & Middleware Support**: Mendukung standar terbaru dan pembuatan pipeline middleware kustom.
20
- * 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, dan **auto-routing** otomatis.
21
- * 💾 **Dynamic Database Engine**: Database SQLite otomatis dengan schema yang ditentukan oleh model Anda sendiri.
20
+ * 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, ganti database, dan **migrasi data** otomatis.
21
+ * 💾 **Agnostic Database Engine**: Dukungan multi-database (**SQLite** & **MongoDB Atlas**) dengan sistem adapter yang otomatis dan transparan.
22
+ * 🛡️ **Secure Environment Variables**: Dukungan file `.env` untuk menyimpan kredensial database (MongoDB URI) secara aman.
23
+ * ⚙️ **JIT Schema Initialization**: Inisialisasi tabel/koleksi secara otomatis tepat saat model pertama kali diakses.
22
24
  * 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan RSpec dan `rack-test`.
23
25
  * 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
24
26
  * 📝 **Interactive CMS Dashboard**: Panel admin integratif untuk mengedit isi blog Markdown & transisi visibilitas via UI.
27
+ * 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt`, `sitemap.xml`, dan dukungan **JSON-LD** (Structured Data).
25
28
  * 🎨 **Asset Helpers**: Library bawaan untuk pengelolaan CSS dan JS yang lebih rapi.
26
- * 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt` dan `sitemap.xml`.
27
- * 💎 **JSON-LD Support**: Dukungan data terstruktur (Structured Data) otomatis untuk SEO yang lebih optimal.
28
29
  * 👻 **Aesthetic Error Pages**: Halaman 404 dengan desain Glassmorphism yang elegan secara native.
29
30
 
30
31
  ---
@@ -42,7 +43,13 @@ mkdir my-app && cd my-app
42
43
  eksa init
43
44
  ```
44
45
 
45
- ### 3. Jalankan Server
46
+ ### 3. Konfigurasi Keamanan (Opsi MongoDB)
47
+ Salin `.env.example` menjadi `.env` dan isi kredensial Anda:
48
+ ```bash
49
+ cp .env.example .env
50
+ ```
51
+
52
+ ### 4. Jalankan Server
46
53
  ```bash
47
54
  bundle install
48
55
  eksa run
@@ -52,91 +59,68 @@ eksa run
52
59
 
53
60
  ## 💻 Panduan Pengembangan
54
61
 
55
- ### 1. Konfigurasi Aplikasi (`config.ru`)
56
- Eksa kini menggunakan blok inisialisasi untuk konfigurasi yang lebih fleksibel:
57
-
58
- ```ruby
59
- app = Eksa::Application.new do |config|
60
- config.config[:db_path] = "./db/production.db"
61
-
62
- config.use Rack::Static, urls: ["/css", "/img"], root: "public"
63
- config.use Rack::ShowExceptions
64
- end
65
- ```
66
-
67
- ### 2. CLI Generator
62
+ ### 1. CLI Generator & Utility
68
63
  Hemat waktu dengan menggunakan generator bawaan:
69
64
 
70
65
  ```bash
71
66
  # Membuat controller dan view template
72
- eksa g controller Blog
67
+ eksa g controller Berita
73
68
 
74
- # Membuat model dan schema database
75
- eksa g model Post
69
+ # Membuat model (Schema akan dibuat otomatis saat diakses)
70
+ eksa g model Artikel
76
71
 
77
72
  # Membuat postingan blog baru dengan meta tambahan
78
- eksa g post "Judul Artikel" --category "Kategori" --author "Nama Penulis" --image "url-gambar.jpg"
73
+ eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
79
74
 
80
- # Mengaktifkan/menonaktifkan fitur bawaan Eksa (auth / cms)
75
+ # Mengaktifkan/menonaktifkan fitur (auth / cms)
81
76
  eksa feature enable auth
82
77
  eksa feature enable cms
83
78
 
84
- # Mengatur ulang sandi akun admin CMS langsung dari CLI
85
- eksa reset-password admin PasswordBaru123
86
- ```
87
-
88
- ### 3. CMS Dashboard & Authentication
89
- Eksa hadir dengan sistem manajemen konten internal bergaya Glassmorphism.
90
-
91
- * **Aktivasi**: Pertama, jalankan `eksa feature enable auth` dan `eksa feature enable cms` dari terminal Anda lalu *restart* server.
92
- * **Registrasi**: Akses `http://localhost:9292/auth/register` (Hanya akun pertama yang bisa mendaftar sebagai Administrator).
93
- * **Akses Dasbor**: Masuk ke rute `/cms` untuk melihat postingan, mengubah status publikasi (*Draft* / *Aktif*), menghapus postingan, hingga melakukan edit data via editor terintegrasi.
94
- * **Proteksi Taut**: Rute login dan CMS sepenuhnya difilter oleh perantara otentikasi sesi Rack. Admin yang berhasil masuk secara otomatis terlindungi dari paparan rute login berlebih.
95
-
96
- ### 4. Markdown Blog Engine
97
- Eksa memiliki sistem blog bawaan yang cara kerjanya mirip Jekyll. Cukup buat file `.md` di folder `_posts/` dengan metadata YAML (Front Matter):
98
-
99
- ```markdown
100
- ---
101
- title: "Halo Eksa"
102
- date: 2026-03-15 14:00:00
103
- ---
79
+ # Manajemen Database (Switch & Migrate)
80
+ eksa db switch mongo # Pindah ke MongoDB
81
+ eksa db migrate --from sqlite --to mongo # Pindah data ke Cloud
104
82
 
105
- Isi konten blog menggunakan **Markdown**.
83
+ # Reset Password Admin
84
+ eksa reset-password admin PasswordRahasia123
106
85
  ```
107
86
 
108
- Fitur Blog:
109
- * **Dynamic Slug**: Otomatis mengenali rute `/posts/:slug`.
110
- * **Syntax Highlighting**: Kode di dalam blog otomatis berwarna & punya tombol copy.
111
- * **Aesthetic UI**: Template blog bawaan dengan desain Glassmorphism.
112
-
113
- ### 4. Database & Model
114
- Definisikan schema tabel Anda langsung di dalam model:
87
+ ### 2. Database & Model (Agnostic)
88
+ Definisikan schema tabel Anda di dalam model. Eksa akan menanganinya secara cerdas baik di SQLite maupun MongoDB:
115
89
 
116
90
  ```ruby
117
- class Post < Eksa::Model
91
+ class Artikel < Eksa::Model
118
92
  def self.setup_schema
119
93
  db.execute <<~SQL
120
- CREATE TABLE IF NOT EXISTS posts (
94
+ CREATE TABLE IF NOT EXISTS artikels (
121
95
  id INTEGER PRIMARY KEY AUTOINCREMENT,
122
- title TEXT,
123
- content TEXT
96
+ judul TEXT,
97
+ konten TEXT,
98
+ penulis TEXT
124
99
  )
125
100
  SQL
126
101
  end
102
+
103
+ def self.semua
104
+ db.execute("SELECT * FROM artikels ORDER BY id DESC")
105
+ end
127
106
  end
128
107
  ```
129
108
 
130
- ### 4. Asset Helpers
131
- Gunakan helper di dalam view untuk menyisipkan asset:
109
+ ### 3. CMS Dashboard & Blog Engine
110
+ Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
132
111
 
133
- ```erb
134
- <%= stylesheet_tag "style" %>
135
- <%= javascript_tag "app" %>
136
- ```
112
+ - **Blog Markdown**: Simpan file `.md` di `_posts/` dengan Front Matter YAML.
113
+ - **Dynamic Routing**: Otomatis mengenali rute `/posts/:slug`.
114
+ - **Admin Panel**: Akses `/cms` untuk mengedit konten menggunakan editor terintegrasi, ganti status (*Draft/Published*), atau hapus postingan.
115
+
116
+ ### 4. SEO & Metadata
117
+ Eksa secara otomatis menghasilkan:
118
+ - `http://localhost:9292/sitemap.xml`
119
+ - `http://localhost:9292/robots.txt`
120
+ - **JSON-LD**: Skema `BlogPosting` dan `WebSite` disematkan otomatis pada layout untuk peringkat SEO yang lebih baik.
137
121
 
138
122
  ### 5. Menjalankan Test
139
- Pastikan aplikasi Anda berjalan dengan benar menggunakan RSpec:
123
+ Gunakan RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
140
124
 
141
125
  ```bash
142
126
  bundle exec rspec
@@ -8,7 +8,7 @@
8
8
 
9
9
  <div class="space-y-6 text-white/80 leading-relaxed">
10
10
  <p class="text-lg text-center mx-auto max-w-2xl mb-10">
11
- <strong>Eksa Framework v3.4.3</strong> adalah <strong>micro-framework</strong> Ruby yang dibangun dari nol untuk mendemonstrasikan kekuatan arsitektur MVC, kesederhanaan Ruby, dengan keindahan antarmuka-antarmuka UI masa kini.
11
+ <strong>Eksa Framework v3.5.0</strong> adalah <strong>micro-framework</strong> Ruby yang dibangun dari nol untuk mendemonstrasikan kekuatan arsitektur MVC, kesederhanaan Ruby, dengan keindahan antarmuka-antarmuka UI masa kini.
12
12
  </p>
13
13
 
14
14
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mt-8">
@@ -19,8 +19,8 @@
19
19
  </div>
20
20
  <div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
21
21
  <i data-lucide="database" class="w-6 h-6 text-emerald-300 mb-3"></i>
22
- <h3 class="font-bold text-white mb-2">Auto SQLite Engine</h3>
23
- <p class="text-sm">Penyimpanan otomatis via model ringan dengan performa memori memukau.</p>
22
+ <h3 class="font-bold text-white mb-2">Multi-DB Engine</h3>
23
+ <p class="text-sm">Mendukung peralihan dinamis & migrasi data antara SQLite dan MongoDB Atlas.</p>
24
24
  </div>
25
25
  <div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
26
26
  <i data-lucide="layout-template" class="w-6 h-6 text-cyan-300 mb-3"></i>