eksa-framework 3.3.3 → 3.5.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
- data/.eksa.json +13 -0
- data/.env.example +8 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +20 -0
- data/README.md +52 -51
- data/_posts/2026-03-15-welcome-to-eksa-framework.md +132 -129
- data/app/views/about.html.erb +30 -10
- data/app/views/docs.html.erb +58 -80
- 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 +204 -1
- data/lib/eksa/auth_controller.rb +50 -0
- data/lib/eksa/cms_controller.rb +110 -0
- data/lib/eksa/controller.rb +32 -6
- 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/markdown_post.rb +11 -4
- data/lib/eksa/model.rb +2 -16
- data/lib/eksa/user.rb +47 -0
- data/lib/eksa/version.rb +1 -1
- data/lib/eksa/views/auth/login.html.erb +44 -0
- data/lib/eksa/views/auth/register.html.erb +53 -0
- data/lib/eksa/views/cms/edit.html.erb +63 -0
- data/lib/eksa/views/cms/index.html.erb +83 -0
- data/lib/eksa.rb +48 -4
- metadata +72 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dcdbcbe63e6742e7fbb13e46d2ccf2246cf982f0c2629e5bcc92d55a589fa5b1
|
|
4
|
+
data.tar.gz: dcd215cb3d1f67905d4340e500beac73975a74e0dd704d02297517e23e2e048d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 851932550945bac2ee2af7f2a7f9c38a31a239ddac3a3c15dea14a3e4cc667c2eef9ba8d18676a05aa5ffddd2ef7f112fcdc09d0f6511d09cc04fdf7208d08ca
|
|
7
|
+
data.tar.gz: 34993c6e97685a403642476ae0b4065d931c186fa7aeaab16196351c95e4111286f49a08a8b94528bbf27fe227b55b63bc3db50b13fae801a059af5216e1ee27
|
data/.eksa.json
ADDED
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
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: https://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
+
base64 (0.3.0)
|
|
5
|
+
bcrypt (3.1.21)
|
|
6
|
+
bson (5.2.0)
|
|
4
7
|
diff-lcs (1.6.2)
|
|
8
|
+
dotenv (2.8.1)
|
|
5
9
|
kramdown (2.5.2)
|
|
6
10
|
rexml (>= 3.4.4)
|
|
7
11
|
kramdown-parser-gfm (1.1.0)
|
|
8
12
|
kramdown (~> 2.0)
|
|
13
|
+
mongo (2.23.0)
|
|
14
|
+
base64
|
|
15
|
+
bson (>= 4.14.1, < 6.0.0)
|
|
9
16
|
nio4r (2.7.5)
|
|
10
17
|
puma (7.2.0)
|
|
11
18
|
nio4r (~> 2.0)
|
|
12
19
|
rack (3.2.5)
|
|
20
|
+
rack-session (2.1.1)
|
|
21
|
+
base64 (>= 0.1.0)
|
|
22
|
+
rack (>= 3.0.0)
|
|
13
23
|
rack-test (2.2.0)
|
|
14
24
|
rack (>= 1.3)
|
|
15
25
|
rackup (2.3.1)
|
|
@@ -34,22 +44,32 @@ PLATFORMS
|
|
|
34
44
|
x86_64-linux-gnu
|
|
35
45
|
|
|
36
46
|
DEPENDENCIES
|
|
47
|
+
bcrypt (~> 3.1)
|
|
48
|
+
dotenv (~> 2.8)
|
|
37
49
|
kramdown
|
|
38
50
|
kramdown-parser-gfm
|
|
51
|
+
mongo (~> 2.19)
|
|
39
52
|
puma
|
|
40
53
|
rack
|
|
54
|
+
rack-session (~> 2.0)
|
|
41
55
|
rack-test (~> 2.1)
|
|
42
56
|
rackup
|
|
43
57
|
rspec (~> 3.12)
|
|
44
58
|
sqlite3
|
|
45
59
|
|
|
46
60
|
CHECKSUMS
|
|
61
|
+
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
|
|
62
|
+
bcrypt (3.1.21) sha256=5964613d750a42c7ee5dc61f7b9336fb6caca429ba4ac9f2011609946e4a2dcf
|
|
63
|
+
bson (5.2.0) sha256=c468c1e8a3cfa1e80531cc519a890f85586986721d8e305f83465cc36bb82608
|
|
47
64
|
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
|
|
65
|
+
dotenv (2.8.1) sha256=c5944793349ae03c432e1780a2ca929d60b88c7d14d52d630db0508c3a8a17d8
|
|
48
66
|
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
|
|
49
67
|
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
|
|
68
|
+
mongo (2.23.0) sha256=be2fe4cc6f7119fa6b79e82a1963b2406856b4dc92d0ccfb74db543897be3109
|
|
50
69
|
nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
|
|
51
70
|
puma (7.2.0) sha256=bf8ef4ab514a4e6d4554cb4326b2004eba5036ae05cf765cfe51aba9706a72a8
|
|
52
71
|
rack (3.2.5) sha256=4cbd0974c0b79f7a139b4812004a62e4c60b145cba76422e288ee670601ed6d3
|
|
72
|
+
rack-session (2.1.1) sha256=0b6dc07dea7e4b583f58a48e8b806d4c9f1c6c9214ebc202ec94562cbea2e4e9
|
|
53
73
|
rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
|
|
54
74
|
rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
|
|
55
75
|
rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
|
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,16 +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`.
|
|
21
|
+
* 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
|
|
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).
|
|
19
24
|
* 🎨 **Asset Helpers**: Library bawaan untuk pengelolaan CSS dan JS yang lebih rapi.
|
|
20
|
-
* 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt` dan `sitemap.xml`.
|
|
21
|
-
* 💎 **JSON-LD Support**: Dukungan data terstruktur (Structured Data) otomatis untuk SEO yang lebih optimal.
|
|
22
25
|
* 👻 **Aesthetic Error Pages**: Halaman 404 dengan desain Glassmorphism yang elegan secara native.
|
|
23
26
|
|
|
24
27
|
---
|
|
@@ -36,7 +39,13 @@ mkdir my-app && cd my-app
|
|
|
36
39
|
eksa init
|
|
37
40
|
```
|
|
38
41
|
|
|
39
|
-
### 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
|
|
40
49
|
```bash
|
|
41
50
|
bundle install
|
|
42
51
|
eksa run
|
|
@@ -46,76 +55,68 @@ eksa run
|
|
|
46
55
|
|
|
47
56
|
## 💻 Panduan Pengembangan
|
|
48
57
|
|
|
49
|
-
### 1.
|
|
50
|
-
Eksa kini menggunakan blok inisialisasi untuk konfigurasi yang lebih fleksibel:
|
|
51
|
-
|
|
52
|
-
```ruby
|
|
53
|
-
app = Eksa::Application.new do |config|
|
|
54
|
-
config.config[:db_path] = "./db/production.db"
|
|
55
|
-
|
|
56
|
-
config.use Rack::Static, urls: ["/css", "/img"], root: "public"
|
|
57
|
-
config.use Rack::ShowExceptions
|
|
58
|
-
end
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 2. CLI Generator
|
|
58
|
+
### 1. CLI Generator & Utility
|
|
62
59
|
Hemat waktu dengan menggunakan generator bawaan:
|
|
63
60
|
|
|
64
61
|
```bash
|
|
65
62
|
# Membuat controller dan view template
|
|
66
|
-
eksa g controller
|
|
63
|
+
eksa g controller Berita
|
|
67
64
|
|
|
68
|
-
# Membuat model
|
|
69
|
-
eksa g model
|
|
65
|
+
# Membuat model (Schema akan dibuat otomatis saat diakses)
|
|
66
|
+
eksa g model Artikel
|
|
70
67
|
|
|
71
68
|
# Membuat postingan blog baru dengan meta tambahan
|
|
72
|
-
eksa g post "
|
|
73
|
-
```
|
|
69
|
+
eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
|
|
74
70
|
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
# Mengaktifkan/menonaktifkan fitur (auth / cms)
|
|
72
|
+
eksa feature enable auth
|
|
73
|
+
eksa feature enable cms
|
|
77
74
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
date: 2026-03-15 14:00:00
|
|
82
|
-
---
|
|
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
|
|
83
78
|
|
|
84
|
-
|
|
79
|
+
# Reset Password Admin
|
|
80
|
+
eksa reset-password admin PasswordRahasia123
|
|
85
81
|
```
|
|
86
82
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
* **Syntax Highlighting**: Kode di dalam blog otomatis berwarna & punya tombol copy.
|
|
90
|
-
* **Aesthetic UI**: Template blog bawaan dengan desain Glassmorphism.
|
|
91
|
-
|
|
92
|
-
### 4. Database & Model
|
|
93
|
-
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:
|
|
94
85
|
|
|
95
86
|
```ruby
|
|
96
|
-
class
|
|
87
|
+
class Artikel < Eksa::Model
|
|
97
88
|
def self.setup_schema
|
|
98
89
|
db.execute <<~SQL
|
|
99
|
-
CREATE TABLE IF NOT EXISTS
|
|
90
|
+
CREATE TABLE IF NOT EXISTS artikels (
|
|
100
91
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
judul TEXT,
|
|
93
|
+
konten TEXT,
|
|
94
|
+
penulis TEXT
|
|
103
95
|
)
|
|
104
96
|
SQL
|
|
105
97
|
end
|
|
98
|
+
|
|
99
|
+
def self.semua
|
|
100
|
+
db.execute("SELECT * FROM artikels ORDER BY id DESC")
|
|
101
|
+
end
|
|
106
102
|
end
|
|
107
103
|
```
|
|
108
104
|
|
|
109
|
-
###
|
|
110
|
-
|
|
105
|
+
### 3. CMS Dashboard & Blog Engine
|
|
106
|
+
Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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.
|
|
116
117
|
|
|
117
118
|
### 5. Menjalankan Test
|
|
118
|
-
|
|
119
|
+
Gunakan RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
|
|
119
120
|
|
|
120
121
|
```bash
|
|
121
122
|
bundle exec rspec
|
|
@@ -1,129 +1,132 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
###
|
|
36
|
-
```bash
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
+
|
|
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
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 🚀 Fitur Unggulan v3.5.0
|
|
17
|
+
|
|
18
|
+
* 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
|
|
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, 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.
|
|
24
|
+
* 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan RSpec dan `rack-test`.
|
|
25
|
+
* 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
|
|
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).
|
|
28
|
+
* 🎨 **Asset Helpers**: Library bawaan untuk pengelolaan CSS dan JS yang lebih rapi.
|
|
29
|
+
* 👻 **Aesthetic Error Pages**: Halaman 404 dengan desain Glassmorphism yang elegan secara native.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 🛠️ Instalasi Cepat
|
|
34
|
+
|
|
35
|
+
### 1. Install via Gem
|
|
36
|
+
```bash
|
|
37
|
+
gem install eksa-framework
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. Inisialisasi Project Baru
|
|
41
|
+
```bash
|
|
42
|
+
mkdir my-app && cd my-app
|
|
43
|
+
eksa init
|
|
44
|
+
```
|
|
45
|
+
|
|
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
|
|
53
|
+
```bash
|
|
54
|
+
bundle install
|
|
55
|
+
eksa run
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 💻 Panduan Pengembangan
|
|
61
|
+
|
|
62
|
+
### 1. CLI Generator & Utility
|
|
63
|
+
Hemat waktu dengan menggunakan generator bawaan:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Membuat controller dan view template
|
|
67
|
+
eksa g controller Berita
|
|
68
|
+
|
|
69
|
+
# Membuat model (Schema akan dibuat otomatis saat diakses)
|
|
70
|
+
eksa g model Artikel
|
|
71
|
+
|
|
72
|
+
# Membuat postingan blog baru dengan meta tambahan
|
|
73
|
+
eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
|
|
74
|
+
|
|
75
|
+
# Mengaktifkan/menonaktifkan fitur (auth / cms)
|
|
76
|
+
eksa feature enable auth
|
|
77
|
+
eksa feature enable cms
|
|
78
|
+
|
|
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
|
|
82
|
+
|
|
83
|
+
# Reset Password Admin
|
|
84
|
+
eksa reset-password admin PasswordRahasia123
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 2. Database & Model (Agnostic)
|
|
88
|
+
Definisikan schema tabel Anda di dalam model. Eksa akan menanganinya secara cerdas baik di SQLite maupun MongoDB:
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
class Artikel < Eksa::Model
|
|
92
|
+
def self.setup_schema
|
|
93
|
+
db.execute <<~SQL
|
|
94
|
+
CREATE TABLE IF NOT EXISTS artikels (
|
|
95
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
96
|
+
judul TEXT,
|
|
97
|
+
konten TEXT,
|
|
98
|
+
penulis TEXT
|
|
99
|
+
)
|
|
100
|
+
SQL
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def self.semua
|
|
104
|
+
db.execute("SELECT * FROM artikels ORDER BY id DESC")
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 3. CMS Dashboard & Blog Engine
|
|
110
|
+
Eksa memiliki sistem blog bawaan yang cara kerjaja mirip Jekyll namun dengan kemudahan CMS.
|
|
111
|
+
|
|
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.
|
|
121
|
+
|
|
122
|
+
### 5. Menjalankan Test
|
|
123
|
+
Gunakan RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
bundle exec rspec
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 📜 Lisensi
|
|
132
|
+
Proyek ini dilisensikan di bawah **MIT License**. Lihat file [LICENSE](https://github.com/IshikawaUta/eksa-framework/blob/main/LICENSE) untuk detail lebih lanjut.
|
data/app/views/about.html.erb
CHANGED
|
@@ -7,20 +7,40 @@
|
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<div class="space-y-6 text-white/80 leading-relaxed">
|
|
10
|
-
<p class="text-lg">
|
|
11
|
-
<strong>Eksa Framework</strong> adalah
|
|
10
|
+
<p class="text-lg text-center mx-auto max-w-2xl mb-10">
|
|
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
|
-
<div class="grid grid-cols-1 md:grid-cols-2 gap-
|
|
15
|
-
<div class="bg-white/5 p-6 rounded-2xl border border-white/10">
|
|
14
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mt-8">
|
|
15
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
16
16
|
<i data-lucide="cpu" class="w-6 h-6 text-indigo-300 mb-3"></i>
|
|
17
|
-
<h3 class="font-bold text-white mb-2">Core Ruby</h3>
|
|
18
|
-
<p class="text-sm">Dibangun di atas Rack tanpa
|
|
17
|
+
<h3 class="font-bold text-white mb-2">Core Ruby & Rack 3</h3>
|
|
18
|
+
<p class="text-sm">Dibangun di atas standar industri Rack tanpa bloatware framework berlapis.</p>
|
|
19
19
|
</div>
|
|
20
|
-
<div class="bg-white/5 p-6 rounded-2xl border border-white/10">
|
|
21
|
-
<i data-lucide="database" class="w-6 h-6 text-
|
|
22
|
-
<h3 class="font-bold text-white mb-2">
|
|
23
|
-
<p class="text-sm">
|
|
20
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
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">Multi-DB Engine</h3>
|
|
23
|
+
<p class="text-sm">Mendukung peralihan dinamis & migrasi data antara SQLite dan MongoDB Atlas.</p>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
26
|
+
<i data-lucide="layout-template" class="w-6 h-6 text-cyan-300 mb-3"></i>
|
|
27
|
+
<h3 class="font-bold text-white mb-2">Glassmorphism UI</h3>
|
|
28
|
+
<p class="text-sm">Komponen estetis bergaya efek kaca bawaan <strong>frosted-glass</strong>.</p>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
31
|
+
<i data-lucide="pen-tool" class="w-6 h-6 text-yellow-300 mb-3"></i>
|
|
32
|
+
<h3 class="font-bold text-white mb-2">Markdown Blog</h3>
|
|
33
|
+
<p class="text-sm">Sistem artikel statis lengkap Front Matter YAML & Auto-Routing layaknya Jekyll.</p>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
36
|
+
<i data-lucide="shield-check" class="w-6 h-6 text-rose-300 mb-3"></i>
|
|
37
|
+
<h3 class="font-bold text-white mb-2">Secure Auth</h3>
|
|
38
|
+
<p class="text-sm">Otentikasi basis sessi pintar BCrypt untuk proteksi admin panel berlapis.</p>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="bg-white/5 p-6 rounded-2xl border border-white/10 hover:bg-white/10 transition">
|
|
41
|
+
<i data-lucide="layout-dashboard" class="w-6 h-6 text-fuchsia-300 mb-3"></i>
|
|
42
|
+
<h3 class="font-bold text-white mb-2">CMS Dashboard</h3>
|
|
43
|
+
<p class="text-sm">Pusat kendali admin internal untuk edit Markdown via <strong>web page</strong> langsung.</p>
|
|
24
44
|
</div>
|
|
25
45
|
</div>
|
|
26
46
|
</div>
|