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 +4 -4
- data/.eksa.json +10 -1
- data/.env.example +8 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +13 -0
- data/README.md +48 -64
- data/_posts/2026-03-15-welcome-to-eksa-framework.md +57 -73
- data/app/views/about.html.erb +3 -3
- data/app/views/docs.html.erb +51 -92
- data/app/views/edit.html.erb +1 -1
- data/app/views/index.html.erb +2 -2
- data/db/eksa_app.db +0 -0
- data/db/setup.rb +4 -4
- data/exe/eksa +135 -12
- data/lib/eksa/database/mongo_adapter.rb +154 -0
- data/lib/eksa/database/sqlite_adapter.rb +26 -0
- data/lib/eksa/database.rb +47 -0
- data/lib/eksa/model.rb +2 -16
- data/lib/eksa/version.rb +1 -1
- data/lib/eksa.rb +1 -2
- metadata +50 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f57d87052543adcdf399ee64e7d544c31ff386d8aa248eb4436edfc4a234fb39
|
|
4
|
+
data.tar.gz: ee730c8fa72e650afb53042818b432097a1d81922f3a4c7b406f3b10d73b6bc7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 75f1ce079637bd91c2d06d3f38bfbe617ae0b878c72c0d801ec0dab200ee006608f9d3b47cb1c328939cf23eb553fecfa5f6cb97864c1900a4bc5c7e2bc3dc3c
|
|
7
|
+
data.tar.gz: 466ab56d0ef22b2ea3062808f88f2bb5d4416ced8109fcd96cb03449344099922421ba32160fbf4a99f64d4a0995321f6eac56e0ddfaf59d43783dd85d775f09
|
data/.eksa.json
CHANGED
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
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
|
[](https://www.ruby-lang.org/)
|
|
4
4
|
[](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 **
|
|
17
|
-
* 💾 **
|
|
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.
|
|
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.
|
|
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
|
|
63
|
+
eksa g controller Berita
|
|
69
64
|
|
|
70
|
-
# Membuat model
|
|
71
|
-
eksa g model
|
|
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 "
|
|
69
|
+
eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
|
|
75
70
|
|
|
76
|
-
# Mengaktifkan/menonaktifkan fitur
|
|
71
|
+
# Mengaktifkan/menonaktifkan fitur (auth / cms)
|
|
77
72
|
eksa feature enable auth
|
|
78
73
|
eksa feature enable cms
|
|
79
74
|
|
|
80
|
-
#
|
|
81
|
-
eksa
|
|
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
|
-
|
|
88
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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
|
|
87
|
+
class Artikel < Eksa::Model
|
|
114
88
|
def self.setup_schema
|
|
115
89
|
db.execute <<~SQL
|
|
116
|
-
CREATE TABLE IF NOT EXISTS
|
|
90
|
+
CREATE TABLE IF NOT EXISTS artikels (
|
|
117
91
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
###
|
|
127
|
-
|
|
105
|
+
### 3. CMS Dashboard & Blog Engine
|
|
106
|
+
Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
|
|
128
107
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
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 **
|
|
21
|
-
* 💾 **
|
|
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.
|
|
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.
|
|
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
|
|
67
|
+
eksa g controller Berita
|
|
73
68
|
|
|
74
|
-
# Membuat model
|
|
75
|
-
eksa g model
|
|
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 "
|
|
73
|
+
eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
|
|
79
74
|
|
|
80
|
-
# Mengaktifkan/menonaktifkan fitur
|
|
75
|
+
# Mengaktifkan/menonaktifkan fitur (auth / cms)
|
|
81
76
|
eksa feature enable auth
|
|
82
77
|
eksa feature enable cms
|
|
83
78
|
|
|
84
|
-
#
|
|
85
|
-
eksa
|
|
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
|
-
|
|
83
|
+
# Reset Password Admin
|
|
84
|
+
eksa reset-password admin PasswordRahasia123
|
|
106
85
|
```
|
|
107
86
|
|
|
108
|
-
|
|
109
|
-
|
|
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
|
|
91
|
+
class Artikel < Eksa::Model
|
|
118
92
|
def self.setup_schema
|
|
119
93
|
db.execute <<~SQL
|
|
120
|
-
CREATE TABLE IF NOT EXISTS
|
|
94
|
+
CREATE TABLE IF NOT EXISTS artikels (
|
|
121
95
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
###
|
|
131
|
-
|
|
109
|
+
### 3. CMS Dashboard & Blog Engine
|
|
110
|
+
Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
|
|
132
111
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
123
|
+
Gunakan RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
|
|
140
124
|
|
|
141
125
|
```bash
|
|
142
126
|
bundle exec rspec
|
data/app/views/about.html.erb
CHANGED
|
@@ -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.
|
|
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">
|
|
23
|
-
<p class="text-sm">
|
|
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>
|