framework 0.1.0 → 0.1.2

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
- SHA1:
3
- metadata.gz: b924ac673b1e9c9e29672278324cde4cff1bbe12
4
- data.tar.gz: cffd250d8d621a60a7e7eb9fc1c3a208aa71054f
2
+ SHA256:
3
+ metadata.gz: 3d306fda1beba1a5705e191bc0d832aac2d4d7ff225f4e9ece7290818c93a82e
4
+ data.tar.gz: e80f3a9069ebe9e26bfe8200d3f023ea213cacca283f1a1b97e7ab72d6b8c130
5
5
  SHA512:
6
- metadata.gz: b1bd3b320516b6235e1d4416c8242374c091404c7e741f1f1eabb31ecc8f94de931e688e1c8002e6c40da0b63398c5556944e46a64b08943fdaf203a525bd61a
7
- data.tar.gz: bb5a3e9e24ad18650e4e895906a232b3323e69f81530acc71aba835eb995420afd5e610c0d1c1ad6620fb22c642827262a022e440e67129cb0e8aed16bc625d2
6
+ metadata.gz: 18e936df7bf63b2c7953349b9cc5b6c17819f6b668c56d5ba746517213c9f783fdc0212d310d3ea449d2987db4c5155d44401a11ba49282ec70217b1fa4e718d
7
+ data.tar.gz: cef1db46ba193e61ea3a5f4a69f5da5443b04e529185178388ea8108309ad419ff3ed696d971b3ddcb4a051d496abb2269b3fcc41a2efd29a599277dd4a05619
data/README.md CHANGED
@@ -3,11 +3,10 @@ Ruby Framework
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/framework.svg)](http://badge.fury.io/rb/framework)
5
5
 
6
- Framework to build Ruby applications for all your needs. Inspired by Rails, but clear and clean from any web-related backend.
6
+ Framework to build Ruby applications for all your needs. Rails without web perks.
7
7
 
8
8
  ### Features
9
9
 
10
- - Easy configuration to work with multiple databases
11
10
  - ActiveRecord interface
12
11
  - Customizable structure
13
12
  - YAML configuration
@@ -70,7 +69,7 @@ Pretty similar to Rails (just a sample):
70
69
  | | |____hello.rake
71
70
  |____config
72
71
  | |____application.yml
73
- | |____databases.yml
72
+ | |____database.yml
74
73
  | |____environment.rb
75
74
  | |____initializers
76
75
  | | |____time_zone.rb
@@ -1,12 +1,11 @@
1
1
  require 'framework/root'
2
2
  require 'framework/config'
3
- require 'action_dispatch/middleware/executor'
4
- require 'action_dispatch/middleware/reloader'
5
- require 'action_dispatch/middleware/callbacks'
3
+ require 'active_support/reloader'
4
+ require 'active_support/file_update_checker'
6
5
 
7
6
  module Framework
8
7
  class Application
9
- CONFIG_PATH = "config/application.yml"
8
+ CONFIG_PATH = "config/application.yml".freeze
10
9
 
11
10
  attr_reader :env
12
11
  attr_accessor :logger
@@ -52,7 +51,7 @@ module Framework
52
51
 
53
52
  def create_database!(name = nil)
54
53
  name ||= 'default'
55
- cfg = database_config[name][env]
54
+ cfg = name == 'default' ? database_config[env] : database_config.dig(env, name)
56
55
 
57
56
  case cfg['adapter']
58
57
  when 'postgresql'
@@ -70,7 +69,7 @@ module Framework
70
69
 
71
70
  def drop_database!(name = nil)
72
71
  name ||= 'default'
73
- cfg = database_config[name][env]
72
+ cfg = name == 'default' ? database_config[env] : database_config.dig(env, name)
74
73
 
75
74
  case cfg['adapter']
76
75
  when 'postgresql'
@@ -84,7 +83,7 @@ module Framework
84
83
  raise "Unknown adapter '#{cfg['adapter']}'"
85
84
  end
86
85
 
87
- puts "The database #{database_config[name][env]['database']} has been successfully dropped"
86
+ puts "The database #{cfg['database']} has been successfully dropped"
88
87
  end
89
88
 
90
89
  def migrate_database(version = nil)
@@ -102,8 +101,8 @@ module Framework
102
101
 
103
102
  # @return [String] Database name
104
103
  def database
105
- adapter = database_config['default'][env]['adapter']
106
- database = database_config['default'][env]['database']
104
+ adapter = database_config.dig(env, 'adapter')
105
+ database = database_config.dig(env, 'database')
107
106
  adapter == 'sqlite3' ? root.join("db/sqlite/#{env}/#{database}.db") : database
108
107
  end
109
108
 
@@ -112,7 +111,7 @@ module Framework
112
111
  end
113
112
 
114
113
  def db_connection(db_name = 'default')
115
- ActiveRecord::Base.establish_connection(database_config[db_name][env])
114
+ ActiveRecord::Base.establish_connection(db_name == 'default' ? database_config.dig(env) : database_config.dig(env, db_name))
116
115
  ActiveRecord::Base.connection
117
116
  end
118
117
 
@@ -177,33 +176,48 @@ module Framework
177
176
  end
178
177
 
179
178
  def establish_database_connection
180
- if database_config
181
- database_config.each do |_, db_config|
182
- ActiveRecord::Base.establish_connection(db_config[env])
179
+ env_dbs = database_config[env]
180
+
181
+ if env_dbs
182
+ # If all are hashes, then we have multiple connections
183
+ if env_dbs.all? { |item| item.is_a?(Hash) }
184
+ env_dbs.each do |_db_key, db_config|
185
+ ActiveRecord::Base.establish_connection(db_config.except('enable_logging'))
183
186
 
184
- if db_config[env]['enable_logging']
185
- ActiveRecord::Base.logger = Logger.new(STDOUT)
187
+ if db_config['enable_logging']
188
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
189
+ end
186
190
  end
191
+ else
192
+ # We have flat one database
193
+ ActiveRecord::Base.establish_connection(env_dbs.except('enable_logging'))
187
194
  end
188
195
  end
189
196
  end
190
197
 
191
198
  # Used to create/drop db
192
199
  def establish_postgres_connection(name = 'default')
193
- if database_config[name]
194
- ActiveRecord::Base.establish_connection(database_config[name][env].merge('database' => 'postgres',
195
- 'schema_search_path' => 'public'))
200
+ if database_config
201
+ conf = name == 'default' ? database_config.dig(env) : database_config.dig(env, name)
202
+
203
+ ActiveRecord::Base.establish_connection(conf.merge('database' => 'postgres',
204
+ 'schema_search_path' => 'public'))
196
205
  end
197
206
  end
198
207
 
199
208
  # @return [Hash]
200
209
  def load_application_config
201
- @config = Framework::Config.new(YAML.load_file(root.join(CONFIG_PATH))[env])
210
+ @config = Framework::Config.new(YAML.load(erb(CONFIG_PATH).result, aliases: true)[env])
202
211
  end
203
212
 
204
213
  # @return [Hash]
205
214
  def load_database_config
206
- @database_config = YAML.load_file(root.join('config/databases.yml'))
215
+ @database_config = YAML.load(erb('config/database.yml').result, aliases: true)
216
+ end
217
+
218
+ # @param [String] path
219
+ def erb(path)
220
+ ERB.new(File.read(root.join(path)))
207
221
  end
208
222
 
209
223
  # @param [String] path
@@ -50,49 +50,26 @@ module Framework
50
50
  def create_database_config
51
51
  db_name = name.underscore
52
52
 
53
- create_file 'config/databases.yml' do
53
+ create_file 'config/database.yml' do
54
54
  <<-CONFIG.strip_heredoc
55
- # Defult database is used by default.
56
- # Any models locating at app/models root directory will point to this database by default.
57
- default:
58
- development: &common
59
- adapter: postgresql
60
- username:
61
- password:
62
- database: #{db_name}_development
63
- min_messages: WARNING
64
- reconnect: true
65
- pool: 5
66
- encoding: unicode
67
- host: localhost
68
-
69
- test:
70
- <<: *common
71
- database: #{db_name}_test
72
-
73
- production:
74
- <<: *common
75
- database: #{db_name}_production
76
-
77
- second_one:
78
- development: &common
79
- adapter: postgresql
80
- username:
81
- password:
82
- database: second_sample_development
83
- min_messages: WARNING
84
- reconnect: true
85
- pool: 5
86
- encoding: unicode
87
- host: localhost
88
-
89
- test:
90
- <<: *common
91
- database: second_sample_test
92
-
93
- production:
94
- <<: *common
95
- database: second_sample_production
55
+ development: &common
56
+ adapter: postgresql
57
+ username:
58
+ password:
59
+ database: #{db_name}_development
60
+ min_messages: WARNING
61
+ reconnect: true
62
+ pool: 5
63
+ encoding: unicode
64
+ host: localhost
65
+
66
+ test:
67
+ <<: *common
68
+ database: #{db_name}_test
69
+
70
+ production:
71
+ <<: *common
72
+ database: #{db_name}_production
96
73
  CONFIG
97
74
  end
98
75
  end
@@ -102,7 +79,7 @@ module Framework
102
79
  <<-CONFIG.strip_heredoc
103
80
  # Set up gems listed in the Gemfile.
104
81
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
105
- require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
82
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
106
83
 
107
84
  require 'framework'
108
85
 
@@ -19,7 +19,7 @@ module Framework
19
19
  migration_file << ERB.new(template).result(context)
20
20
  migration_file.close
21
21
 
22
- p "Generated migration: #@path"
22
+ puts "Generated migration: #@path"
23
23
  end
24
24
 
25
25
  def templates_path
@@ -1,13 +1,4 @@
1
1
  module Framework
2
- class Migration < ActiveRecord::Migration
3
-
4
- def self.use_database(db_name)
5
- define_method :connection do
6
- @connection ||= begin
7
- Framework::Logger.whishper "Using database: #{db_name}"
8
- Framework.app.db_connection(db_name)
9
- end
10
- end
11
- end
2
+ class Migration < ActiveRecord::Migration[7.0]
12
3
  end
13
4
  end
@@ -1,6 +1,4 @@
1
- class <%= @migration_name %> < Framework::Migration
2
- use_database :<%= @db_name %>
3
-
1
+ class <%= @migration_name %> < ActiveRecord::Migration[7.0]
4
2
  def up
5
3
  end
6
4
 
@@ -1,3 +1,3 @@
1
1
  module Framework
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.1.2'.freeze
3
3
  end
data/lib/framework.rb CHANGED
@@ -2,7 +2,6 @@ require 'active_record'
2
2
  require 'bundler'
3
3
 
4
4
  require 'framework/version'
5
- require 'framework/extensions/active_record/base_extension'
6
5
  require 'framework/logger'
7
6
  require 'framework/application'
8
7
  require 'framework/db_listener'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei Nikolaevich Zinin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-16 00:00:00.000000000 Z
11
+ date: 2023-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,160 +16,136 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 5.0.0.1
19
+ version: 7.0.4
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '5.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 5.0.0.1
26
+ version: 7.0.4
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '5.0'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 5.0.0.1
33
+ version: 7.0.4
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
38
  - - "~>"
48
39
  - !ruby/object:Gem::Version
49
- version: '5.0'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 5.0.0.1
40
+ version: 7.0.4
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: actionpack
55
43
  requirement: !ruby/object:Gem::Requirement
56
44
  requirements:
57
45
  - - "~>"
58
46
  - !ruby/object:Gem::Version
59
- version: '5.0'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 5.0.0.1
47
+ version: 7.0.4
63
48
  type: :runtime
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
66
51
  requirements:
67
52
  - - "~>"
68
53
  - !ruby/object:Gem::Version
69
- version: '5.0'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 5.0.0.1
54
+ version: 7.0.4
73
55
  - !ruby/object:Gem::Dependency
74
56
  name: awesome_print
75
57
  requirement: !ruby/object:Gem::Requirement
76
58
  requirements:
77
59
  - - "~>"
78
60
  - !ruby/object:Gem::Version
79
- version: '1.6'
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 1.6.1
61
+ version: 2.0.0.pre2
83
62
  type: :runtime
84
63
  prerelease: false
85
64
  version_requirements: !ruby/object:Gem::Requirement
86
65
  requirements:
87
66
  - - "~>"
88
67
  - !ruby/object:Gem::Version
89
- version: '1.6'
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 1.6.1
68
+ version: 2.0.0.pre2
93
69
  - !ruby/object:Gem::Dependency
94
70
  name: rake
95
71
  requirement: !ruby/object:Gem::Requirement
96
72
  requirements:
97
73
  - - "~>"
98
74
  - !ruby/object:Gem::Version
99
- version: '10.5'
75
+ version: '13.0'
100
76
  - - ">="
101
77
  - !ruby/object:Gem::Version
102
- version: 10.5.0
78
+ version: 13.0.6
103
79
  type: :runtime
104
80
  prerelease: false
105
81
  version_requirements: !ruby/object:Gem::Requirement
106
82
  requirements:
107
83
  - - "~>"
108
84
  - !ruby/object:Gem::Version
109
- version: '10.5'
85
+ version: '13.0'
110
86
  - - ">="
111
87
  - !ruby/object:Gem::Version
112
- version: 10.5.0
88
+ version: 13.0.6
113
89
  - !ruby/object:Gem::Dependency
114
90
  name: thor
115
91
  requirement: !ruby/object:Gem::Requirement
116
92
  requirements:
117
93
  - - "~>"
118
94
  - !ruby/object:Gem::Version
119
- version: '0.19'
95
+ version: '1.2'
120
96
  - - ">="
121
97
  - !ruby/object:Gem::Version
122
- version: 0.19.1
98
+ version: 1.2.1
123
99
  type: :runtime
124
100
  prerelease: false
125
101
  version_requirements: !ruby/object:Gem::Requirement
126
102
  requirements:
127
103
  - - "~>"
128
104
  - !ruby/object:Gem::Version
129
- version: '0.19'
105
+ version: '1.2'
130
106
  - - ">="
131
107
  - !ruby/object:Gem::Version
132
- version: 0.19.1
108
+ version: 1.2.1
133
109
  - !ruby/object:Gem::Dependency
134
110
  name: bundler
135
111
  requirement: !ruby/object:Gem::Requirement
136
112
  requirements:
137
113
  - - "~>"
138
114
  - !ruby/object:Gem::Version
139
- version: '1.6'
115
+ version: '2.4'
140
116
  - - ">="
141
117
  - !ruby/object:Gem::Version
142
- version: 1.6.2
118
+ version: '2.4'
143
119
  type: :development
144
120
  prerelease: false
145
121
  version_requirements: !ruby/object:Gem::Requirement
146
122
  requirements:
147
123
  - - "~>"
148
124
  - !ruby/object:Gem::Version
149
- version: '1.6'
125
+ version: '2.4'
150
126
  - - ">="
151
127
  - !ruby/object:Gem::Version
152
- version: 1.6.2
128
+ version: '2.4'
153
129
  - !ruby/object:Gem::Dependency
154
130
  name: rspec
155
131
  requirement: !ruby/object:Gem::Requirement
156
132
  requirements:
157
133
  - - "~>"
158
134
  - !ruby/object:Gem::Version
159
- version: '3.4'
135
+ version: '3.12'
160
136
  - - ">="
161
137
  - !ruby/object:Gem::Version
162
- version: 3.4.0
138
+ version: 3.12.0
163
139
  type: :development
164
140
  prerelease: false
165
141
  version_requirements: !ruby/object:Gem::Requirement
166
142
  requirements:
167
143
  - - "~>"
168
144
  - !ruby/object:Gem::Version
169
- version: '3.4'
145
+ version: '3.12'
170
146
  - - ">="
171
147
  - !ruby/object:Gem::Version
172
- version: 3.4.0
148
+ version: 3.12.0
173
149
  description: Allows to quickly build well structured complex Ruby apps.
174
150
  email: zinin@xakep.ru
175
151
  executables:
@@ -186,7 +162,6 @@ files:
186
162
  - lib/framework/cli.rb
187
163
  - lib/framework/config.rb
188
164
  - lib/framework/db_listener.rb
189
- - lib/framework/extensions/active_record/base_extension.rb
190
165
  - lib/framework/generators/application_generator.rb
191
166
  - lib/framework/generators/migration_generator.rb
192
167
  - lib/framework/generators/multi_generator.rb
@@ -213,15 +188,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
188
  requirements:
214
189
  - - ">="
215
190
  - !ruby/object:Gem::Version
216
- version: 2.3.1
191
+ version: 3.2.1
217
192
  required_rubygems_version: !ruby/object:Gem::Requirement
218
193
  requirements:
219
194
  - - ">="
220
195
  - !ruby/object:Gem::Version
221
- version: 2.3.1
196
+ version: 3.2.1
222
197
  requirements: []
223
- rubyforge_project:
224
- rubygems_version: 2.5.1
198
+ rubygems_version: 3.4.8
225
199
  signing_key:
226
200
  specification_version: 4
227
201
  summary: Ruby Application Framework for all your needs.
@@ -1,38 +0,0 @@
1
- module Framework
2
- module Extensions
3
- module ActiveRecord
4
- module BaseExtension
5
- extend ActiveSupport::Concern
6
-
7
- module ClassMethods
8
-
9
- # @override
10
- # def inherited(child_class)
11
- # super
12
- #
13
- # unless child_class == ::ActiveRecord::SchemaMigration
14
- # if (chunks = child_class.name.split('::')).many?
15
- # child_class.store_full_sti_class = false
16
- # child_class.use_database(chunks.first.downcase)
17
- # end
18
- # end
19
- # end
20
-
21
- # Makes your model use different databases
22
- # @param [String, Symbol] db_name
23
- # @param [String] env
24
- def use_database(db_name, env = nil)
25
- env ||= Framework.app.env
26
- env = env.to_s
27
- db_name = db_name.to_s
28
-
29
- # self.abstract_class = Framework.env != 'test'
30
- # self.table_name = self.name.split('::').last.tableize if self.superclass == ::ActiveRecord::Base
31
- establish_connection(Framework.app.database_config[db_name][env])
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- ActiveRecord::Base.send :include, Framework::Extensions::ActiveRecord::BaseExtension