framework 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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