framework 0.1.1 → 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
2
  SHA256:
3
- metadata.gz: 1292045d0694939b8f12f2886ea2c70661d44a2fbe899941e1e773677447efef
4
- data.tar.gz: 59ff906be745fbad82615507049a88b73979af31ceea39e8a9b603db4292bec0
3
+ metadata.gz: 3d306fda1beba1a5705e191bc0d832aac2d4d7ff225f4e9ece7290818c93a82e
4
+ data.tar.gz: e80f3a9069ebe9e26bfe8200d3f023ea213cacca283f1a1b97e7ab72d6b8c130
5
5
  SHA512:
6
- metadata.gz: bb7275487125b9e2173fe980e46b60d7839e8a2a9d32e8f4a30ef7f7a244e035804430d8d073af59ffe406318437efcf63202e9ad4b4bce2904df2f193a389c4
7
- data.tar.gz: 5cef0a92115cfd535d60e83020111a8561efd0fccb8b56a85f46b8dde625d379e4b4b6c05d0a66c6721a670a656e48708410a2045b7e2570e58df7b854cccc10
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,15 +83,15 @@ 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)
91
- ActiveRecord::MigrationContext.new(root.join("db/migrate")).migrate(version && version.to_i)
90
+ ActiveRecord::Migrator.migrate root.join("db/migrate"), version.try(:to_i)
92
91
  end
93
92
 
94
93
  def rollback_database(steps = 1)
95
- ActiveRecord::MigrationContext.new(root.join("db/migrate")).rollback(steps)
94
+ ActiveRecord::Migrator.rollback root.join("db/migrate"), steps
96
95
  end
97
96
 
98
97
  # @return [Hash<String>]
@@ -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,43 @@ 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(erb(CONFIG_PATH).result)[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(erb('config/databases.yml').result)
215
+ @database_config = YAML.load(erb('config/database.yml').result, aliases: true)
207
216
  end
208
217
 
209
218
  # @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[6.0]
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.1'.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.1
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: 2019-06-11 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,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.0.rc1
19
+ version: 7.0.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 6.0.0.rc1
26
+ version: 7.0.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 6.0.0.rc1
33
+ version: 7.0.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 6.0.0.rc1
40
+ version: 7.0.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: actionpack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 6.0.0.rc1
47
+ version: 7.0.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 6.0.0.rc1
54
+ version: 7.0.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: awesome_print
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,82 +70,82 @@ dependencies:
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 12.3.0
76
73
  - - "~>"
77
74
  - !ruby/object:Gem::Version
78
- version: '12.3'
75
+ version: '13.0'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 13.0.6
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- version: 12.3.0
86
83
  - - "~>"
87
84
  - !ruby/object:Gem::Version
88
- version: '12.3'
85
+ version: '13.0'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 13.0.6
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: thor
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0.20'
95
+ version: '1.2'
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
- version: 0.20.3
98
+ version: 1.2.1
99
99
  type: :runtime
100
100
  prerelease: false
101
101
  version_requirements: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - "~>"
104
104
  - !ruby/object:Gem::Version
105
- version: '0.20'
105
+ version: '1.2'
106
106
  - - ">="
107
107
  - !ruby/object:Gem::Version
108
- version: 0.20.3
108
+ version: 1.2.1
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: bundler
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: '1.16'
115
+ version: '2.4'
116
116
  - - ">="
117
117
  - !ruby/object:Gem::Version
118
- version: 1.16.6
118
+ version: '2.4'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '1.16'
125
+ version: '2.4'
126
126
  - - ">="
127
127
  - !ruby/object:Gem::Version
128
- version: 1.16.6
128
+ version: '2.4'
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: rspec
131
131
  requirement: !ruby/object:Gem::Requirement
132
132
  requirements:
133
- - - ">="
134
- - !ruby/object:Gem::Version
135
- version: 3.8.0
136
133
  - - "~>"
137
134
  - !ruby/object:Gem::Version
138
- version: '3.8'
135
+ version: '3.12'
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 3.12.0
139
139
  type: :development
140
140
  prerelease: false
141
141
  version_requirements: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: 3.8.0
146
143
  - - "~>"
147
144
  - !ruby/object:Gem::Version
148
- version: '3.8'
145
+ version: '3.12'
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 3.12.0
149
149
  description: Allows to quickly build well structured complex Ruby apps.
150
150
  email: zinin@xakep.ru
151
151
  executables:
@@ -162,7 +162,6 @@ files:
162
162
  - lib/framework/cli.rb
163
163
  - lib/framework/config.rb
164
164
  - lib/framework/db_listener.rb
165
- - lib/framework/extensions/active_record/base_extension.rb
166
165
  - lib/framework/generators/application_generator.rb
167
166
  - lib/framework/generators/migration_generator.rb
168
167
  - lib/framework/generators/multi_generator.rb
@@ -189,15 +188,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
188
  requirements:
190
189
  - - ">="
191
190
  - !ruby/object:Gem::Version
192
- version: 2.5.0
191
+ version: 3.2.1
193
192
  required_rubygems_version: !ruby/object:Gem::Requirement
194
193
  requirements:
195
194
  - - ">="
196
195
  - !ruby/object:Gem::Version
197
- version: 2.5.0
196
+ version: 3.2.1
198
197
  requirements: []
199
- rubyforge_project:
200
- rubygems_version: 2.7.9
198
+ rubygems_version: 3.4.8
201
199
  signing_key:
202
200
  specification_version: 4
203
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