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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bdcf04ff77acdbac3a0a4a47627a6c56e199759b59865bda47bf37cd70aff62
4
- data.tar.gz: 720a0ab9be8096479a5f77ec725e8a13c137b6ff672f375437030a9814060d04
3
+ metadata.gz: 5e2b3aa79e4c4bd4ffa4b7c2cc55903fb1795d6867181af0f4482d8f81755054
4
+ data.tar.gz: 2192158838c5691c2205bd4fc35d5600afab029c5658c2e138d74f88b09ca505
5
5
  SHA512:
6
- metadata.gz: ffe8207254f46369eb601196393c6530c0e78261d74e64b2d7d1a60cccdb423e6406f451194627234e12946118e3bcf309ded54672daf0b4bc86dcd5d41450b0
7
- data.tar.gz: c192aac6dbde4f0cc624c71479ba0183260435dbb2d5c2a6d94509c2ac033cb03a3a60efea1e3e1a5cfbdd1224fe7c2577083b0da442cdec81eea0c460fc91d6
6
+ metadata.gz: a46b901cfc580f3a568f24211a031e595c8c8590dc7bbe7546baa59cf45271771e1e11e2e25ee75b34e53f25d4a420823bcc9c313f30c876bdc12f7c44bbba6d
7
+ data.tar.gz: 76e273fd74a3043f095f8a12ce47c753d994166ac7bde13c55ca95a2dc2982f6b0f76ca88c2b8b2f68f47ee9e7895d905773dbec783d95af834093875b0d32a0
data/Gemfile CHANGED
@@ -15,4 +15,5 @@ gem 'bigdecimal', '~> 3.1'
15
15
  gem 'kramdown'
16
16
  gem 'kramdown-parser-gfm'
17
17
  gem 'bcrypt', '~> 3.1'
18
- gem 'rack-session', '~> 2.0'
18
+ gem 'rack-session', '~> 2.0'
19
+ gem 'eksa-mination'
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.2
1
+ # ✨ Eksa Framework v3.5.3
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,7 +9,7 @@
9
9
 
10
10
  ---
11
11
 
12
- ## 🚀 Fitur Unggulan v3.5.2
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 RSpec dan `rack-test`.
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 RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
120
+ Gunakan **EksaMination** (pendekatan pengujian yang lebih ringan dan terintegrasi) untuk memastikan aplikasi stabil:
121
121
 
122
122
  ```bash
123
- bundle exec rspec
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.0
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.0
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 RSpec dan `rack-test`.
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 RSpec yang sudah terkonfigurasi untuk memastikan aplikasi stabil:
124
+ Gunakan **EksaMination** (pendekatan pengujian yang lebih ringan dan terintegrasi) untuk memastikan aplikasi stabil:
124
125
 
125
126
  ```bash
126
- bundle exec rspec
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](https://github.com/IshikawaUta/eksa-framework/blob/main/LICENSE) untuk detail lebih lanjut.
144
+ Proyek ini dilisensikan di bawah **MIT License**. Lihat file [LICENSE](LICENSE) untuk detail lebih lanjut.
@@ -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.2</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.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">
@@ -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.2.</p>
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.2 menyematkan data terstruktur secara otomatis untuk ranking pencarian yang lebih baik.</p>
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.2 Professional Documentation</p>
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>
@@ -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.2 Alpha
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
@@ -1,3 +1,3 @@
1
1
  module Eksa
2
- VERSION = "3.5.2"
2
+ VERSION = "3.5.3"
3
3
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require_relative 'spec_helper'
2
2
 
3
3
  describe Eksa::Application do
4
4
  let(:app) do
@@ -1,8 +1,8 @@
1
- require 'spec_helper'
1
+ require_relative 'spec_helper'
2
2
  require 'fileutils'
3
3
 
4
4
  describe Eksa::MarkdownPost do
5
- before(:all) do
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(:all) do
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
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require_relative 'spec_helper'
2
2
 
3
3
  class RecurrentModel < Eksa::Model
4
4
  def self.setup_schema
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
- RSpec.configure do |config|
11
- config.include Rack::Test::Methods
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
- config.expect_with :rspec do |expectations|
14
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
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
- config.mock_with :rspec do |mocks|
18
- mocks.verify_partial_doubles = true
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
- config.shared_context_metadata_behavior = :apply_to_host_groups
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.2
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: