eksa-framework 3.4.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.
@@ -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.0"
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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - IshikawaUta
@@ -121,8 +121,36 @@ 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
+ description: Framework MVC ringan dengan tema modern, sistem routing, dan dukungan
153
+ multi-database (SQLite & MongoDB).
126
154
  email:
127
155
  - komikers09@gmail.com
128
156
  executables:
@@ -131,6 +159,7 @@ extensions: []
131
159
  extra_rdoc_files: []
132
160
  files:
133
161
  - ".eksa.json"
162
+ - ".env.example"
134
163
  - Gemfile
135
164
  - Gemfile.lock
136
165
  - LICENSE
@@ -149,12 +178,16 @@ files:
149
178
  - app/views/posts/index.html.erb
150
179
  - app/views/posts/show.html.erb
151
180
  - config.ru
181
+ - db/eksa_app.db
152
182
  - db/setup.rb
153
183
  - exe/eksa
154
184
  - lib/eksa.rb
155
185
  - lib/eksa/auth_controller.rb
156
186
  - lib/eksa/cms_controller.rb
157
187
  - lib/eksa/controller.rb
188
+ - lib/eksa/database.rb
189
+ - lib/eksa/database/mongo_adapter.rb
190
+ - lib/eksa/database/sqlite_adapter.rb
158
191
  - lib/eksa/markdown_post.rb
159
192
  - lib/eksa/model.rb
160
193
  - lib/eksa/user.rb