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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac242785773ed45e2a702cc824fe9407b322eba723af008c531e5e4b79b3a30c
4
- data.tar.gz: 28ad3240e9d0cd86d1501ba998512d7e201f5bde405db5be6050c53ff4b56b56
3
+ metadata.gz: dcdbcbe63e6742e7fbb13e46d2ccf2246cf982f0c2629e5bcc92d55a589fa5b1
4
+ data.tar.gz: dcd215cb3d1f67905d4340e500beac73975a74e0dd704d02297517e23e2e048d
5
5
  SHA512:
6
- metadata.gz: 1fa366903b127fc04b610d065d1e8fb4d15047e7111e7fbf4ab2332c7a2bd82e2f064dd564088db38d9aa07b25bfadf918fa6f1b08cb2318d45d33a97c27d7ac
7
- data.tar.gz: b1bb528e37369f1df59f5d54d6209fcc7e1b50cf535e421eeeee41a601faddcc64166bc27f10623ac14ab007fd8ee2755383bddef5052c8753e020f1f6a633f6
6
+ metadata.gz: 851932550945bac2ee2af7f2a7f9c38a31a239ddac3a3c15dea14a3e4cc667c2eef9ba8d18676a05aa5ffddd2ef7f112fcdc09d0f6511d09cc04fdf7208d08ca
7
+ data.tar.gz: 34993c6e97685a403642476ae0b4065d931c186fa7aeaab16196351c95e4111286f49a08a8b94528bbf27fe227b55b63bc3db50b13fae801a059af5216e1ee27
data/.eksa.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "cms": 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
+ }
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,5 +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'
12
14
  gem 'kramdown'
13
- gem 'kramdown-parser-gfm'
15
+ gem 'kramdown-parser-gfm'
16
+ gem 'bcrypt', '~> 3.1'
17
+ gem 'rack-session', '~> 2.0'
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
  [![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,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 **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`.
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. 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
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. Konfigurasi Aplikasi (`config.ru`)
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 Blog
63
+ eksa g controller Berita
67
64
 
68
- # Membuat model dan schema database
69
- eksa g model Post
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 "Judul Artikel" --category "Kategori" --author "Nama Penulis" --image "url-gambar.jpg"
73
- ```
69
+ eksa g post "Panduan Eksa" --category "Tutorial" --author "Eksa Team" --image "url-gambar.jpg"
74
70
 
75
- ### 3. Markdown Blog Engine
76
- Eksa memiliki sistem blog bawaan yang cara kerjanya mirip Jekyll. Cukup buat file `.md` di folder `_posts/` dengan metadata YAML (Front Matter):
71
+ # Mengaktifkan/menonaktifkan fitur (auth / cms)
72
+ eksa feature enable auth
73
+ eksa feature enable cms
77
74
 
78
- ```markdown
79
- ---
80
- title: "Halo Eksa"
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
- Isi konten blog menggunakan **Markdown**.
79
+ # Reset Password Admin
80
+ eksa reset-password admin PasswordRahasia123
85
81
  ```
86
82
 
87
- Fitur Blog:
88
- * **Dynamic Slug**: Otomatis mengenali rute `/posts/:slug`.
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 Post < Eksa::Model
87
+ class Artikel < Eksa::Model
97
88
  def self.setup_schema
98
89
  db.execute <<~SQL
99
- CREATE TABLE IF NOT EXISTS posts (
90
+ CREATE TABLE IF NOT EXISTS artikels (
100
91
  id INTEGER PRIMARY KEY AUTOINCREMENT,
101
- title TEXT,
102
- content TEXT
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
- ### 4. Asset Helpers
110
- 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.
111
107
 
112
- ```erb
113
- <%= stylesheet_tag "style" %>
114
- <%= javascript_tag "app" %>
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
- Pastikan aplikasi Anda berjalan dengan benar menggunakan RSpec:
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
- title: "Welcome To Eksa Framework"
3
- date: 2026-03-15 14:09:58
4
- author: "IshikawaUta"
5
- category: "Framework"
6
- image: "https://res.cloudinary.com/dzsqaauqn/image/upload/v1773645204/logo_ne3hy4.png"
7
- ---
8
-
9
- # ✨ Eksa Framework
10
-
11
- **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*.
12
-
13
- ---
14
-
15
- ## 🚀 Fitur Unggulan
16
-
17
- * 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
18
- * **Rack 3 & Middleware Support**: Mendukung standar terbaru dan pembuatan pipeline middleware kustom.
19
- * 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, dan **auto-routing** otomatis.
20
- * 💾 **Dynamic Database Engine**: Database SQLite otomatis dengan schema yang ditentukan oleh model Anda sendiri.
21
- * 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan RSpec dan `rack-test`.
22
- * 🎨 **Asset Helpers**: Library bawaan untuk pengelolaan CSS dan JS yang lebih rapi.
23
- * 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt` dan `sitemap.xml`.
24
- * 👻 **Aesthetic Error Pages**: Halaman 404 dengan desain Glassmorphism yang elegan secara native.
25
-
26
- ---
27
-
28
- ## 🛠️ Instalasi Cepat
29
-
30
- ### 1. Install via Gem
31
- ```bash
32
- gem install eksa-framework
33
- ```
34
-
35
- ### 2. Inisialisasi Project Baru
36
- ```bash
37
- mkdir my-app && cd my-app
38
- eksa init
39
- ```
40
-
41
- ### 3. Jalankan Server
42
- ```bash
43
- bundle install
44
- eksa run
45
- ```
46
-
47
- ---
48
-
49
- ## 💻 Panduan Pengembangan
50
-
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
64
- Hemat waktu dengan menggunakan generator bawaan:
65
-
66
- ```bash
67
- # Membuat controller dan view template
68
- eksa g controller Blog
69
-
70
- # Membuat model dan schema database
71
- eksa g model Post
72
-
73
- # Membuat postingan blog baru
74
- eksa g post "Judul Artikel"
75
- ```
76
-
77
- ### 3. Markdown Blog Engine
78
- Eksa memiliki sistem blog bawaan yang cara kerjanya mirip Jekyll. Cukup buat file `.md` di folder `_posts/` dengan metadata YAML (Front Matter):
79
-
80
- ```markdown
81
- ---
82
- title: "Halo Eksa"
83
- date: 2026-03-15 14:00:00
84
- ---
85
-
86
- Isi konten blog menggunakan **Markdown**.
87
- ```
88
-
89
- Fitur Blog:
90
- * **Dynamic Slug**: Otomatis mengenali rute `/posts/:slug`.
91
- * **Syntax Highlighting**: Kode di dalam blog otomatis berwarna & punya tombol copy.
92
- * **Aesthetic UI**: Template blog bawaan dengan desain Glassmorphism.
93
-
94
- ### 4. Database & Model
95
- Definisikan schema tabel Anda langsung di dalam model:
96
-
97
- ```ruby
98
- class Post < Eksa::Model
99
- def self.setup_schema
100
- db.execute <<~SQL
101
- CREATE TABLE IF NOT EXISTS posts (
102
- id INTEGER PRIMARY KEY AUTOINCREMENT,
103
- title TEXT,
104
- content TEXT
105
- )
106
- SQL
107
- end
108
- end
109
- ```
110
-
111
- ### 4. Asset Helpers
112
- Gunakan helper di dalam view untuk menyisipkan asset:
113
-
114
- ```erb
115
- <%= stylesheet_tag "style" %>
116
- <%= javascript_tag "app" %>
117
- ```
118
-
119
- ### 5. Menjalankan Test
120
- Pastikan aplikasi Anda berjalan dengan benar menggunakan RSpec:
121
-
122
- ```bash
123
- bundle exec rspec
124
- ```
125
-
126
- ---
127
-
128
- ## 📜 Lisensi
129
- Proyek ini dilisensikan di bawah **MIT License**. Lihat file [LICENSE](https://github.com/IshikawaUta/eksa-framework/blob/8c8e9046cbce77bbeaeaf673b018eaf0c6db2bbc/LICENSE) untuk detail lebih lanjut.
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.
@@ -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 sebuah <strong>micro-framework</strong> Ruby yang dibangun dari nol untuk mendemonstrasikan kekuatan arsitektur MVC dan kesederhanaan Ruby.
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-4 mt-8">
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 menggunakan framework besar lainnya.</p>
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-indigo-300 mb-3"></i>
22
- <h3 class="font-bold text-white mb-2">SQLite Engine</h3>
23
- <p class="text-sm">Penyimpanan data yang ringan, cepat, dan handal.</p>
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>