eksa-framework 3.5.2 → 3.5.3
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/Gemfile +2 -1
- data/Gemfile.lock +3 -0
- data/README.md +6 -5
- data/_posts/2026-03-15-welcome-to-eksa-framework.md +18 -6
- data/app/views/about.html.erb +1 -1
- data/app/views/docs.html.erb +3 -3
- data/app/views/index.html.erb +1 -1
- data/db/eksa_app.db +0 -0
- data/exe/eksa +15 -0
- data/lib/eksa/version.rb +1 -1
- data/spec/application_spec.rb +1 -1
- data/spec/markdown_post_spec.rb +3 -3
- data/spec/model_spec.rb +1 -1
- data/spec/spec_helper.rb +26 -8
- metadata +15 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5e2b3aa79e4c4bd4ffa4b7c2cc55903fb1795d6867181af0f4482d8f81755054
|
|
4
|
+
data.tar.gz: 2192158838c5691c2205bd4fc35d5600afab029c5658c2e138d74f88b09ca505
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a46b901cfc580f3a568f24211a031e595c8c8590dc7bbe7546baa59cf45271771e1e11e2e25ee75b34e53f25d4a420823bcc9c313f30c876bdc12f7c44bbba6d
|
|
7
|
+
data.tar.gz: 76e273fd74a3043f095f8a12ce47c753d994166ac7bde13c55ca95a2dc2982f6b0f76ca88c2b8b2f68f47ee9e7895d905773dbec783d95af834093875b0d32a0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -7,6 +7,7 @@ GEM
|
|
|
7
7
|
bson (5.2.0)
|
|
8
8
|
diff-lcs (1.6.2)
|
|
9
9
|
dotenv (2.8.1)
|
|
10
|
+
eksa-mination (2.0.0)
|
|
10
11
|
kramdown (2.5.2)
|
|
11
12
|
rexml (>= 3.4.4)
|
|
12
13
|
kramdown-parser-gfm (1.1.0)
|
|
@@ -48,6 +49,7 @@ DEPENDENCIES
|
|
|
48
49
|
bcrypt (~> 3.1)
|
|
49
50
|
bigdecimal (~> 3.1)
|
|
50
51
|
dotenv (~> 2.8)
|
|
52
|
+
eksa-mination
|
|
51
53
|
kramdown
|
|
52
54
|
kramdown-parser-gfm
|
|
53
55
|
mongo (~> 2.19)
|
|
@@ -66,6 +68,7 @@ CHECKSUMS
|
|
|
66
68
|
bson (5.2.0) sha256=c468c1e8a3cfa1e80531cc519a890f85586986721d8e305f83465cc36bb82608
|
|
67
69
|
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
|
|
68
70
|
dotenv (2.8.1) sha256=c5944793349ae03c432e1780a2ca929d60b88c7d14d52d630db0508c3a8a17d8
|
|
71
|
+
eksa-mination (2.0.0) sha256=9d2717d24e8b19c7f7a1e2fdbf98d258cda6281309e3dacaac9bb4b0a9e7f750
|
|
69
72
|
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
|
|
70
73
|
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
|
|
71
74
|
mongo (2.23.0) sha256=be2fe4cc6f7119fa6b79e82a1963b2406856b4dc92d0ccfb74db543897be3109
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ✨ Eksa Framework v3.5.
|
|
1
|
+
# ✨ Eksa Framework v3.5.3
|
|
2
2
|
|
|
3
3
|
[](https://www.ruby-lang.org/)
|
|
4
4
|
[](https://rack.github.io/)
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## 🚀 Fitur Unggulan v3.5.
|
|
12
|
+
## 🚀 Fitur Unggulan v3.5.3
|
|
13
13
|
|
|
14
14
|
* 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
|
|
15
15
|
* 📱 **Mobile Responsive Navigation**: Sistem navigasi adaptif dengan mobile drawer yang elegan.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* 💾 **Agnostic Database Engine**: Dukungan multi-database (**SQLite** & **MongoDB Atlas**) dengan sistem adapter yang otomatis dan transparan.
|
|
19
19
|
* 🛡️ **Secure Environment Variables**: Dukungan file `.env` untuk menyimpan kredensial database (MongoDB URI) secara aman.
|
|
20
20
|
* ⚙️ **JIT Schema Initialization**: Inisialisasi tabel/koleksi secara otomatis tepat saat model pertama kali diakses.
|
|
21
|
-
* 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan
|
|
21
|
+
* 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan **EksaMination** dan `rack-test`.
|
|
22
22
|
* 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
|
|
23
23
|
* 📝 **Interactive CMS Dashboard**: Panel admin integratif untuk mengedit isi blog Markdown & transisi visibilitas via UI.
|
|
24
24
|
* 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt`, `sitemap.xml`, dan dukungan **JSON-LD** (Structured Data).
|
|
@@ -117,10 +117,11 @@ Eksa secara otomatis menghasilkan:
|
|
|
117
117
|
- **JSON-LD**: Skema `BlogPosting` dan `WebSite` disematkan otomatis pada layout untuk peringkat SEO yang lebih baik.
|
|
118
118
|
|
|
119
119
|
### 5. Menjalankan Test
|
|
120
|
-
Gunakan
|
|
120
|
+
Gunakan **EksaMination** (pendekatan pengujian yang lebih ringan dan terintegrasi) untuk memastikan aplikasi stabil:
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
|
-
|
|
123
|
+
# Menjalankan semua test dengan format dokumentasi
|
|
124
|
+
bundle exec eksa-mination -f documentation
|
|
124
125
|
```
|
|
125
126
|
|
|
126
127
|
---
|
|
@@ -7,21 +7,22 @@ category: Framework
|
|
|
7
7
|
image: https://res.cloudinary.com/dzsqaauqn/image/upload/v1773645204/logo_ne3hy4.png
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# ✨ Eksa Framework v3.5.
|
|
10
|
+
# ✨ Eksa Framework v3.5.3
|
|
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 v3.5.
|
|
16
|
+
## 🚀 Fitur Unggulan v3.5.3
|
|
17
17
|
|
|
18
18
|
* 💎 **Modern Glassmorphism UI**: Tampilan transparan yang indah dengan Tailwind CSS & Lucide Icons.
|
|
19
|
+
* 📱 **Mobile Responsive Navigation**: Sistem navigasi adaptif dengan mobile drawer yang elegan.
|
|
19
20
|
* ⚡ **Rack 3 & Middleware Support**: Mendukung standar terbaru dan pembuatan pipeline middleware kustom.
|
|
20
21
|
* 🛠️ **Powerful CLI**: Inisialisasi project (`eksa init`), jalankan server (`eksa run`), generate komponen, ganti database, dan **migrasi data** otomatis.
|
|
21
22
|
* 💾 **Agnostic Database Engine**: Dukungan multi-database (**SQLite** & **MongoDB Atlas**) dengan sistem adapter yang otomatis dan transparan.
|
|
22
23
|
* 🛡️ **Secure Environment Variables**: Dukungan file `.env` untuk menyimpan kredensial database (MongoDB URI) secara aman.
|
|
23
24
|
* ⚙️ **JIT Schema Initialization**: Inisialisasi tabel/koleksi secara otomatis tepat saat model pertama kali diakses.
|
|
24
|
-
* 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan
|
|
25
|
+
* 🧪 **Built-in Testing**: Lingkungan pengujian otomatis siap pakai menggunakan **EksaMination** dan `rack-test`.
|
|
25
26
|
* 🛡️ **Built-in Authentication**: Sistem keamanan BCrypt dengan proteksi sesi Rack untuk registrasi log-in area Admin.
|
|
26
27
|
* 📝 **Interactive CMS Dashboard**: Panel admin integratif untuk mengedit isi blog Markdown & transisi visibilitas via UI.
|
|
27
28
|
* 🔍 **Dynamic SEO Engine**: Penanganan otomatis file `robots.txt`, `sitemap.xml`, dan dukungan **JSON-LD** (Structured Data).
|
|
@@ -120,13 +121,24 @@ Eksa secara otomatis menghasilkan:
|
|
|
120
121
|
- **JSON-LD**: Skema `BlogPosting` dan `WebSite` disematkan otomatis pada layout untuk peringkat SEO yang lebih baik.
|
|
121
122
|
|
|
122
123
|
### 5. Menjalankan Test
|
|
123
|
-
Gunakan
|
|
124
|
+
Gunakan **EksaMination** (pendekatan pengujian yang lebih ringan dan terintegrasi) untuk memastikan aplikasi stabil:
|
|
124
125
|
|
|
125
126
|
```bash
|
|
126
|
-
|
|
127
|
+
# Menjalankan semua test dengan format dokumentasi
|
|
128
|
+
bundle exec eksa-mination -f documentation
|
|
127
129
|
```
|
|
128
130
|
|
|
129
131
|
---
|
|
130
132
|
|
|
133
|
+
## 🤝 Kontribusi & Komunitas
|
|
134
|
+
|
|
135
|
+
Kami sangat terbuka untuk kontribusi dari siapa pun! Silakan baca panduan berikut sebelum memulai:
|
|
136
|
+
|
|
137
|
+
- **[Panduan Kontribusi](CONTRIBUTING.md)**: Langkah-langkah untuk berkontribusi kode.
|
|
138
|
+
- **[Kebijakan Keamanan](SECURITY.md)**: Cara melaporkan kerentanan secara privat.
|
|
139
|
+
- **[Kode Etik](CODE_OF_CONDUCT.md)**: Standar perilaku dalam komunitas kami.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
131
143
|
## 📜 Lisensi
|
|
132
|
-
Proyek ini dilisensikan di bawah **MIT License**. Lihat file [LICENSE](
|
|
144
|
+
Proyek ini dilisensikan di bawah **MIT License**. Lihat file [LICENSE](LICENSE) untuk detail lebih lanjut.
|
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.5.
|
|
11
|
+
<strong>Eksa Framework v3.5.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.
|
|
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">
|
data/app/views/docs.html.erb
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</div>
|
|
7
7
|
<h1 class="text-4xl font-extrabold tracking-tight">Dokumentasi <span class="text-indigo-300">Eksa</span></h1>
|
|
8
8
|
</div>
|
|
9
|
-
<p class="text-white/60 text-lg">Panduan profesional instalasi dan pengembangan aplikasi menggunakan Eksa Framework v3.5.
|
|
9
|
+
<p class="text-white/60 text-lg">Panduan profesional instalasi dan pengembangan aplikasi menggunakan Eksa Framework v3.5.3.</p>
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 mb-12">
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
<h2 class="text-2xl font-bold mb-4 flex items-center gap-2">
|
|
181
181
|
<i data-lucide="search" class="w-6 h-6 text-indigo-400"></i> SEO & JSON-LD
|
|
182
182
|
</h2>
|
|
183
|
-
<p class="text-white/60 mb-4 text-sm">Eksa v3.5.
|
|
183
|
+
<p class="text-white/60 mb-4 text-sm">Eksa v3.5.3 menyematkan data terstruktur secara otomatis untuk ranking pencarian yang lebih baik.</p>
|
|
184
184
|
<div class="bg-white/5 p-4 rounded-xl border border-white/10 flex items-center gap-3">
|
|
185
185
|
<i data-lucide="check-circle-2" class="w-5 h-5 text-emerald-400"></i>
|
|
186
186
|
<p class="text-xs text-white/70">Mendukung <code class="text-indigo-300">sitemap.xml</code>, <code class="text-indigo-300">robots.txt</code> secara dinamis.</p>
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
<span class="bg-indigo-500/20 text-indigo-300 text-[10px] px-3 py-1 rounded-full border border-indigo-500/30 uppercase tracking-tighter">Rack 3.0 Compatible</span>
|
|
193
193
|
<span class="bg-emerald-500/20 text-emerald-300 text-[10px] px-3 py-1 rounded-full border border-emerald-500/30 uppercase tracking-tighter">Production Ready</span>
|
|
194
194
|
</div>
|
|
195
|
-
<p class="text-white/40 text-sm italic">Eksa Framework v3.5.
|
|
195
|
+
<p class="text-white/40 text-sm italic">Eksa Framework v3.5.3 Professional Documentation</p>
|
|
196
196
|
<a href="/" class="inline-block mt-6 text-indigo-300 hover:text-white transition font-bold flex items-center justify-center gap-2">
|
|
197
197
|
<i data-lucide="arrow-left" class="w-4 h-4"></i> Kembali ke Beranda
|
|
198
198
|
</a>
|
data/app/views/index.html.erb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-8 gap-4">
|
|
3
3
|
<div>
|
|
4
4
|
<span class="inline-block bg-indigo-500/20 text-indigo-200 text-xs font-bold px-3 py-1 rounded-full mb-3 border border-indigo-500/30">
|
|
5
|
-
v3.5.
|
|
5
|
+
v3.5.3 Alpha
|
|
6
6
|
</span>
|
|
7
7
|
<h1 class="text-4xl font-extrabold tracking-tight">
|
|
8
8
|
Halo, <span class="text-indigo-300"><%= @nama %></span>!
|
data/db/eksa_app.db
CHANGED
|
Binary file
|
data/exe/eksa
CHANGED
|
@@ -302,7 +302,22 @@ end
|
|
|
302
302
|
|
|
303
303
|
def start_server
|
|
304
304
|
if File.exist?('config.ru')
|
|
305
|
+
puts "\e[1;34m"
|
|
306
|
+
puts " ______ _ __ _____ _____ "
|
|
307
|
+
puts "| ____| |/ // ____|/ ____|"
|
|
308
|
+
puts "| |__ | ' /| (___ | (___ "
|
|
309
|
+
puts "| __| | < \\___ \\ \\___ \\ "
|
|
310
|
+
puts "| |____| . \\ ____) |____) |"
|
|
311
|
+
puts "|______|_|\\_\\_____/|_____/ "
|
|
312
|
+
puts "\e[0m"
|
|
313
|
+
puts "✨ Eksa Framework ✨"
|
|
314
|
+
puts "-----------------------------"
|
|
305
315
|
puts "🚀 Memulai Eksa Framework Server..."
|
|
316
|
+
puts "📂 Project: #{Dir.pwd}"
|
|
317
|
+
puts "🌐 Listening on http://127.0.0.1:9292"
|
|
318
|
+
puts "📄 Environment: development"
|
|
319
|
+
puts "-----------------------------"
|
|
320
|
+
|
|
306
321
|
exec "rackup config.ru"
|
|
307
322
|
else
|
|
308
323
|
puts "❌ Error: config.ru tidak ditemukan. Pastikan Anda berada di root project Eksa."
|
data/lib/eksa/version.rb
CHANGED
data/spec/application_spec.rb
CHANGED
data/spec/markdown_post_spec.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative 'spec_helper'
|
|
2
2
|
require 'fileutils'
|
|
3
3
|
|
|
4
4
|
describe Eksa::MarkdownPost do
|
|
5
|
-
before
|
|
5
|
+
before do
|
|
6
6
|
FileUtils.mkdir_p("_posts")
|
|
7
7
|
File.write("_posts/2026-03-15-test-post.md", <<~MARKDOWN)
|
|
8
8
|
---
|
|
@@ -14,7 +14,7 @@ describe Eksa::MarkdownPost do
|
|
|
14
14
|
MARKDOWN
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
after
|
|
17
|
+
after do
|
|
18
18
|
File.delete("_posts/2026-03-15-test-post.md") if File.exist?("_posts/2026-03-15-test-post.md")
|
|
19
19
|
end
|
|
20
20
|
|
data/spec/model_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'rack/test'
|
|
2
|
-
require 'rspec'
|
|
3
2
|
|
|
4
3
|
# Load the framework
|
|
5
4
|
require_relative '../lib/eksa'
|
|
@@ -7,16 +6,35 @@ require_relative '../lib/eksa'
|
|
|
7
6
|
# Set environment to test
|
|
8
7
|
ENV['RACK_ENV'] = 'test'
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
# EksaMination uses Object.new for its example context.
|
|
10
|
+
# We include Rack::Test::Methods into Object so it's available in all tests.
|
|
11
|
+
Object.include Rack::Test::Methods
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
# Monkeypatch EksaMination to fix a TypeError in Formatters::Documentation
|
|
14
|
+
# It currently fails when a description is a Class/Module (not a String)
|
|
15
|
+
require 'eksa-mination'
|
|
16
|
+
module EksaMination
|
|
17
|
+
class ExampleGroup
|
|
18
|
+
alias_method :original_description, :description
|
|
19
|
+
def description
|
|
20
|
+
original_description.to_s
|
|
21
|
+
end
|
|
15
22
|
end
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
class Example
|
|
25
|
+
alias_method :original_description, :description
|
|
26
|
+
def description
|
|
27
|
+
original_description.to_s
|
|
28
|
+
end
|
|
19
29
|
end
|
|
20
30
|
|
|
21
|
-
|
|
31
|
+
module Formatters
|
|
32
|
+
class Documentation
|
|
33
|
+
def report_failure(example, error)
|
|
34
|
+
super
|
|
35
|
+
# Ensure failure message handles classes/modules too
|
|
36
|
+
puts " " * @level + colorize(example.description.to_s + " (FAILED)", :red)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
22
40
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eksa-framework
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.5.
|
|
4
|
+
version: 3.5.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- IshikawaUta
|
|
@@ -163,6 +163,20 @@ dependencies:
|
|
|
163
163
|
- - "~>"
|
|
164
164
|
- !ruby/object:Gem::Version
|
|
165
165
|
version: '3.1'
|
|
166
|
+
- !ruby/object:Gem::Dependency
|
|
167
|
+
name: eksa-mination
|
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - "~>"
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '2.0'
|
|
173
|
+
type: :runtime
|
|
174
|
+
prerelease: false
|
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
+
requirements:
|
|
177
|
+
- - "~>"
|
|
178
|
+
- !ruby/object:Gem::Version
|
|
179
|
+
version: '2.0'
|
|
166
180
|
description: Framework MVC ringan dengan tema modern, sistem routing, dan dukungan
|
|
167
181
|
multi-database (SQLite & MongoDB).
|
|
168
182
|
email:
|