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.
@@ -0,0 +1,47 @@
1
+ require 'json'
2
+ begin
3
+ require 'dotenv'
4
+ Dotenv.load if File.exist?('.env')
5
+ rescue LoadError
6
+ # Dotenv not available, rely on existing ENV
7
+ end
8
+
9
+ module Eksa
10
+ module Database
11
+ def self.adapter
12
+ @adapter ||= create_adapter
13
+ end
14
+
15
+ def self.reset_adapter
16
+ @adapter = nil
17
+ end
18
+
19
+ def self.create_adapter
20
+ config = load_config
21
+ type = config.dig('database', 'type') || 'sqlite'
22
+
23
+ case type
24
+ when 'mongo', 'mongodb'
25
+ require_relative 'database/mongo_adapter'
26
+ mongo_config = config.dig('database', 'mongodb') || {}
27
+
28
+ # Prioritize Environment Variable for Security
29
+ env_uri = ENV['EKSA_MONGODB_URI'] || ENV['MONGODB_URI']
30
+ mongo_config['uri'] = env_uri if env_uri
31
+
32
+ MongoAdapter.new(mongo_config)
33
+ else
34
+ require_relative 'database/sqlite_adapter'
35
+ SqliteAdapter.new(config.dig('database', 'sqlite'))
36
+ end
37
+ end
38
+
39
+ def self.load_config
40
+ config_path = File.join(Dir.pwd, '.eksa.json')
41
+ return {} unless File.exist?(config_path)
42
+ JSON.parse(File.read(config_path))
43
+ rescue
44
+ {}
45
+ end
46
+ end
47
+ end
data/lib/eksa/model.rb CHANGED
@@ -1,24 +1,10 @@
1
- require 'sqlite3'
2
- require 'fileutils'
1
+ require_relative 'database'
3
2
 
4
3
  module Eksa
5
4
  class Model
6
- class << self
7
- attr_accessor :database_path
8
- end
9
-
10
5
  def self.db
11
- path = database_path || default_db_path
12
- db_dir = File.dirname(path)
13
- FileUtils.mkdir_p(db_dir) unless Dir.exist?(db_dir)
14
-
15
- @db ||= SQLite3::Database.new(path)
16
6
  ensure_schema
17
- @db
18
- end
19
-
20
- def self.default_db_path
21
- File.expand_path("../../db/eksa_app.db", __dir__)
7
+ Eksa::Database.adapter
22
8
  end
23
9
 
24
10
  def self.ensure_schema
data/lib/eksa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Eksa
2
- VERSION = "3.4.3"
2
+ VERSION = "3.5.1"
3
3
  end
data/lib/eksa.rb CHANGED
@@ -6,6 +6,7 @@ require_relative 'eksa/controller'
6
6
  require_relative 'eksa/model'
7
7
  require_relative 'eksa/markdown_post'
8
8
  require_relative 'eksa/user'
9
+ require_relative 'eksa/database'
9
10
  require_relative 'eksa/auth_controller'
10
11
  require_relative 'eksa/cms_controller'
11
12
 
@@ -26,8 +27,6 @@ module Eksa
26
27
  end
27
28
 
28
29
  def configure_framework
29
- Eksa::Model.database_path = @config[:db_path]
30
-
31
30
  # Setup Session Middleware for Authentication
32
31
  use Rack::Session::Cookie, secret: @config[:session_secret], key: 'eksa.session'
33
32
 
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.4.3
4
+ version: 3.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - IshikawaUta
@@ -121,8 +121,50 @@ dependencies:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
123
  version: '2.0'
124
- description: Framework MVC ringan dengan tema modern, sistem routing, dan auto-database
125
- SQLite.
124
+ - !ruby/object:Gem::Dependency
125
+ name: mongo
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.19'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.19'
138
+ - !ruby/object:Gem::Dependency
139
+ name: dotenv
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.8'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.8'
152
+ - !ruby/object:Gem::Dependency
153
+ name: bigdecimal
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '3.1'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.1'
166
+ description: Framework MVC ringan dengan tema modern, sistem routing, dan dukungan
167
+ multi-database (SQLite & MongoDB).
126
168
  email:
127
169
  - komikers09@gmail.com
128
170
  executables:
@@ -131,6 +173,7 @@ extensions: []
131
173
  extra_rdoc_files: []
132
174
  files:
133
175
  - ".eksa.json"
176
+ - ".env.example"
134
177
  - Gemfile
135
178
  - Gemfile.lock
136
179
  - LICENSE
@@ -149,12 +192,16 @@ files:
149
192
  - app/views/posts/index.html.erb
150
193
  - app/views/posts/show.html.erb
151
194
  - config.ru
195
+ - db/eksa_app.db
152
196
  - db/setup.rb
153
197
  - exe/eksa
154
198
  - lib/eksa.rb
155
199
  - lib/eksa/auth_controller.rb
156
200
  - lib/eksa/cms_controller.rb
157
201
  - lib/eksa/controller.rb
202
+ - lib/eksa/database.rb
203
+ - lib/eksa/database/mongo_adapter.rb
204
+ - lib/eksa/database/sqlite_adapter.rb
158
205
  - lib/eksa/markdown_post.rb
159
206
  - lib/eksa/model.rb
160
207
  - lib/eksa/user.rb