framework 0.0.2 → 0.0.5
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 +4 -4
- data/README.md +2 -2
- data/lib/framework/application.rb +99 -26
- data/lib/framework/extensions/active_record/base_extension.rb +12 -12
- data/lib/framework/generators/application_generator.rb +2 -3
- data/lib/framework/generators/migration_generator.rb +2 -2
- data/lib/framework/root.rb +24 -0
- data/lib/framework/tasks/console.rake +2 -2
- data/lib/framework/tasks/db.rake +4 -4
- data/lib/framework/version.rb +1 -1
- data/lib/framework.rb +7 -2
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3572d9060dff548fcfe8b378ad1b25d095b36170
|
4
|
+
data.tar.gz: 9ae54d8c3a6a6c97046987244abf89a70527d14a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cdf544edfd49c3df6f37b8c4855e027170319417d29475db39c6ebece5573113a33d9be8ca057ba0bff845aa47eb3750ef2b1c29bac9ef6b77205b927dcaa0c
|
7
|
+
data.tar.gz: 1b33ce1beac4cfbdf6203b0536870411722f7e0ebf7ce5727ca025e5cd6451f36717fbbe2a43b1601ee84df6b17abd089739a9b5e5addbcf60b10f2f3159c13e
|
data/README.md
CHANGED
@@ -69,7 +69,7 @@ Pretty similar to Rails (just a sample):
|
|
69
69
|
| |____initializers
|
70
70
|
| | |____time_zone.rb
|
71
71
|
|____db
|
72
|
-
| |
|
72
|
+
| |____migrate
|
73
73
|
| | |____.keep
|
74
74
|
| | |____20141128085924_create_tasks.rb
|
75
75
|
| | |____20141128090211_create_users.rb
|
@@ -89,8 +89,8 @@ Configurations are stored in `config/application.yml`. Note, that as opposed to
|
|
89
89
|
development: &common
|
90
90
|
enable_logging: yes
|
91
91
|
autoload_paths:
|
92
|
-
- config/initializers
|
93
92
|
- app/models
|
93
|
+
- app/managers
|
94
94
|
default_timezone: 'Pacific Time (US & Canada)'
|
95
95
|
|
96
96
|
test:
|
@@ -1,14 +1,18 @@
|
|
1
|
+
require 'framework/root'
|
2
|
+
|
1
3
|
module Framework
|
2
4
|
class Application
|
3
5
|
CONFIG_PATH = "config/application.yml"
|
4
6
|
|
5
7
|
attr_reader :env
|
6
8
|
attr_accessor :logger
|
7
|
-
|
9
|
+
attr_reader :root
|
10
|
+
delegate :hint, :note, :whisper, :disappointment, to: :logger
|
8
11
|
|
9
12
|
# @param [String] env Environment from configuration file
|
10
|
-
def initialize(env
|
13
|
+
def initialize(env: nil, root: nil)
|
11
14
|
@env = env || Framework.env
|
15
|
+
@root = Root.new(root || Dir.pwd)
|
12
16
|
Framework.app = self
|
13
17
|
yield self if block_given?
|
14
18
|
end
|
@@ -21,13 +25,21 @@ module Framework
|
|
21
25
|
load_application_config
|
22
26
|
load_database_config
|
23
27
|
note "Loading #{env} environment (#{Framework::VERSION})"
|
24
|
-
autoload
|
25
28
|
note "Establishing database connection"
|
26
29
|
establish_database_connection
|
30
|
+
require_dependencies 'config/initializers'
|
31
|
+
load_application_files
|
27
32
|
note "Application has been initialized"
|
28
33
|
self
|
29
34
|
end
|
30
|
-
|
35
|
+
|
36
|
+
def reload!
|
37
|
+
@config = nil
|
38
|
+
disappointment "Reloading #{env}"
|
39
|
+
load_application_config
|
40
|
+
load_application_files
|
41
|
+
self
|
42
|
+
end
|
31
43
|
|
32
44
|
# @return [Hash<String>]
|
33
45
|
def config
|
@@ -72,11 +84,11 @@ module Framework
|
|
72
84
|
end
|
73
85
|
|
74
86
|
def migrate_database(version = nil)
|
75
|
-
ActiveRecord::Migrator.migrate "db/
|
87
|
+
ActiveRecord::Migrator.migrate root.join("db/migrate"), version.try(:to_i)
|
76
88
|
end
|
77
89
|
|
78
90
|
def rollback_database(steps = 1)
|
79
|
-
ActiveRecord::Migrator.rollback "db/
|
91
|
+
ActiveRecord::Migrator.rollback root.join("db/migrate"), steps
|
80
92
|
end
|
81
93
|
|
82
94
|
# @return [Hash<String>]
|
@@ -88,7 +100,7 @@ module Framework
|
|
88
100
|
def database
|
89
101
|
adapter = database_config['default'][env]['adapter']
|
90
102
|
database = database_config['default'][env]['database']
|
91
|
-
adapter == 'sqlite3' ? "db/sqlite/#{env}/#{database}.db" : database
|
103
|
+
adapter == 'sqlite3' ? root.join("db/sqlite/#{env}/#{database}.db") : database
|
92
104
|
end
|
93
105
|
|
94
106
|
def self.init!
|
@@ -102,6 +114,64 @@ module Framework
|
|
102
114
|
|
103
115
|
private
|
104
116
|
|
117
|
+
# Autoloads all app-specific files
|
118
|
+
def load_application_files
|
119
|
+
if %w(development test).include?(env.to_s)
|
120
|
+
config['autoload_paths'].each(&method(:autoreload_constants))
|
121
|
+
autoreload_yml
|
122
|
+
end
|
123
|
+
config['autoload_paths'].each(&method(:require_dependencies))
|
124
|
+
end
|
125
|
+
|
126
|
+
def autoreload_yml(path=root)
|
127
|
+
autoreload(path, 'yml') { @yml_reloaded = true } unless @yml_reloaded
|
128
|
+
end
|
129
|
+
|
130
|
+
def autoreload(path=root, ext, &block)
|
131
|
+
files = Dir[root.join(path, "/**/*.#{ext}")]
|
132
|
+
|
133
|
+
reloader = ActiveSupport::FileUpdateChecker.new(files) do
|
134
|
+
whisper "Reloading .#{ext} files"
|
135
|
+
block.try(:call, files)
|
136
|
+
Framework.app.reload!
|
137
|
+
end
|
138
|
+
|
139
|
+
ActionDispatch::Callbacks.to_prepare do
|
140
|
+
reloader.execute_if_updated
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def autoreload_constants(path)
|
145
|
+
return if reloadable_paths.include?(path)
|
146
|
+
|
147
|
+
ActiveSupport::Dependencies.autoload_paths += [root.join(path)]
|
148
|
+
absolute_path = Pathname.new(root.join(path))
|
149
|
+
|
150
|
+
autoreload(path, 'rb') do |files|
|
151
|
+
files.each do |file_path|
|
152
|
+
pathname = Pathname.new(file_path)
|
153
|
+
|
154
|
+
# Get Const Name
|
155
|
+
const_name = pathname.basename.to_s.sub('.rb', '').camelize.to_sym
|
156
|
+
full_name = pathname.relative_path_from(absolute_path).sub('.rb', '').to_s.camelize
|
157
|
+
|
158
|
+
# Get Module Name
|
159
|
+
relative_file_path = Pathname.new(pathname.dirname).relative_path_from(absolute_path).to_s
|
160
|
+
|
161
|
+
if Object.const_defined?(full_name)
|
162
|
+
if relative_file_path == '.'
|
163
|
+
Object.send :remove_const, const_name
|
164
|
+
else
|
165
|
+
module_name = relative_file_path.camelize
|
166
|
+
module_name.constantize.send(:remove_const, const_name)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
reloadable_paths << path
|
173
|
+
end
|
174
|
+
|
105
175
|
def establish_database_connection
|
106
176
|
if database_config
|
107
177
|
database_config.each do |_, db_config|
|
@@ -122,34 +192,19 @@ module Framework
|
|
122
192
|
end
|
123
193
|
end
|
124
194
|
|
125
|
-
# Autoloads all app-specific files
|
126
|
-
def autoload
|
127
|
-
config['autoload_paths'].each do |path|
|
128
|
-
if path.end_with?('.rb')
|
129
|
-
load(path)
|
130
|
-
else
|
131
|
-
load_path(File.join(path, 'concerns'))
|
132
|
-
|
133
|
-
Dir["#{path}/**/*.rb"].each do |path_to_load|
|
134
|
-
load(path_to_load) unless path_to_load.include?('concerns/')
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
195
|
# @return [Hash]
|
141
196
|
def load_application_config
|
142
|
-
@config = YAML.load_file(CONFIG_PATH)[env]
|
197
|
+
@config = YAML.load_file(root.join(CONFIG_PATH))[env]
|
143
198
|
end
|
144
199
|
|
145
200
|
# @return [Hash]
|
146
201
|
def load_database_config
|
147
|
-
@database_config = YAML.load_file('config/databases.yml')
|
202
|
+
@database_config = YAML.load_file(root.join('config/databases.yml'))
|
148
203
|
end
|
149
204
|
|
150
|
-
# @param [String] path
|
205
|
+
# @param [String] path
|
151
206
|
def load_path(path)
|
152
|
-
Dir["#{path}/**/*.rb"].each(&method(:
|
207
|
+
Dir["#{path}/**/*.rb"].each(&method(:require_dependency))
|
153
208
|
end
|
154
209
|
|
155
210
|
# @return [IO, nil]
|
@@ -161,5 +216,23 @@ module Framework
|
|
161
216
|
def logger
|
162
217
|
@logger ||= Framework::Logger.new(log_level)
|
163
218
|
end
|
219
|
+
|
220
|
+
def reloadable_paths
|
221
|
+
@reloadable_paths ||= []
|
222
|
+
end
|
223
|
+
|
224
|
+
def require_dependencies(autoload_path)
|
225
|
+
path = root.join(autoload_path)
|
226
|
+
|
227
|
+
if path.end_with?('.rb')
|
228
|
+
require_dependency(path)
|
229
|
+
else
|
230
|
+
load_path(File.join(path, 'concerns'))
|
231
|
+
|
232
|
+
Dir["#{path}/**/*.rb"].each do |path_to_load|
|
233
|
+
require_dependency(path_to_load) unless path_to_load.include?('concerns/')
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
164
237
|
end
|
165
238
|
end
|
@@ -7,16 +7,16 @@ module Framework
|
|
7
7
|
module ClassMethods
|
8
8
|
|
9
9
|
# @override
|
10
|
-
def inherited(child_class)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
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
20
|
|
21
21
|
# Makes your model use different databases
|
22
22
|
# @param [String, Symbol] db_name
|
@@ -26,8 +26,8 @@ module Framework
|
|
26
26
|
env = env.to_s
|
27
27
|
db_name = db_name.to_s
|
28
28
|
|
29
|
-
self.abstract_class = Framework.env != 'test'
|
30
|
-
self.table_name = self.name.split('::').last.tableize if self.superclass == ::ActiveRecord::Base
|
29
|
+
# self.abstract_class = Framework.env != 'test'
|
30
|
+
# self.table_name = self.name.split('::').last.tableize if self.superclass == ::ActiveRecord::Base
|
31
31
|
establish_connection(Framework.app.database_config[db_name][env])
|
32
32
|
end
|
33
33
|
end
|
@@ -20,8 +20,8 @@ module Framework
|
|
20
20
|
create_file 'lib/.keep'
|
21
21
|
|
22
22
|
empty_directory 'db'
|
23
|
-
empty_directory 'db/
|
24
|
-
create_file 'db/
|
23
|
+
empty_directory 'db/migrate'
|
24
|
+
create_file 'db/migrate/.keep'
|
25
25
|
end
|
26
26
|
|
27
27
|
def create_application_config
|
@@ -30,7 +30,6 @@ module Framework
|
|
30
30
|
development: &common
|
31
31
|
enable_logging: yes
|
32
32
|
autoload_paths:
|
33
|
-
- config/initializers
|
34
33
|
- app/models
|
35
34
|
default_timezone: 'Pacific Time (US & Canada)'
|
36
35
|
|
@@ -10,7 +10,7 @@ module Framework
|
|
10
10
|
@db_name = db_name.underscore
|
11
11
|
@migration_name = migration_name.underscore
|
12
12
|
@timestamp = Time.now.utc.strftime("%Y%m%d%H%M%S")
|
13
|
-
@path = "db/
|
13
|
+
@path = "db/migrate/#{@timestamp}_#@migration_name.rb"
|
14
14
|
end
|
15
15
|
|
16
16
|
def generate
|
@@ -44,7 +44,7 @@ module Framework
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def load_migrations
|
47
|
-
Dir["./db/
|
47
|
+
Dir["./db/migrate/**/*.rb"].each(&method(:load))
|
48
48
|
rescue
|
49
49
|
raise 'An error was occurred'
|
50
50
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Framework
|
2
|
+
class Root < String
|
3
|
+
|
4
|
+
# @param path [String]
|
5
|
+
def initialize(path=Dir.pwd)
|
6
|
+
super(path)
|
7
|
+
self.freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
# @param args [Array<String>]
|
11
|
+
# @return [String]
|
12
|
+
def join(*args)
|
13
|
+
File.join(self, *args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
self
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -2,13 +2,13 @@ desc "Runs irb console and initializes the application"
|
|
2
2
|
task :console, :env do |_, args|
|
3
3
|
require 'irb'
|
4
4
|
|
5
|
-
unless env = ENV['FRAMEWORK_ENV']
|
5
|
+
unless env = ENV['FRAMEWORK_ENV'] || ENV['RAILS_ENV']
|
6
6
|
env = args[:env] || Framework::DEFAULT_ENV
|
7
7
|
end
|
8
8
|
|
9
9
|
system "mkdir -p #{Dir.pwd}/db/#{env}"
|
10
10
|
|
11
|
-
Framework::Application.new(env) do |app|
|
11
|
+
Framework::Application.new(env: env) do |app|
|
12
12
|
app.init!
|
13
13
|
app.hint("Use `Framework.app` variable to deal with application API")
|
14
14
|
|
data/lib/framework/tasks/db.rake
CHANGED
@@ -28,22 +28,22 @@ namespace :db do
|
|
28
28
|
task :create, :name do |_, args|
|
29
29
|
env = 'test'
|
30
30
|
puts "Loading #{env.inspect}"
|
31
|
-
Framework::Application.new(env).create_database!(args[:name])
|
31
|
+
Framework::Application.new(env: env).create_database!(args[:name])
|
32
32
|
end
|
33
33
|
|
34
34
|
desc "Drops test database"
|
35
35
|
task :drop, :name do |_, args|
|
36
36
|
env = 'test'
|
37
37
|
puts "Loading #{env.inspect}"
|
38
|
-
Framework::Application.new(env).drop_database!(args[:name])
|
38
|
+
Framework::Application.new(env: env).drop_database!(args[:name])
|
39
39
|
end
|
40
40
|
|
41
41
|
desc "Runs test migrations"
|
42
42
|
task :migrate do
|
43
43
|
env = 'test'
|
44
44
|
puts "Loading #{env.inspect}"
|
45
|
-
Framework::Application.new(env).init!
|
46
|
-
ActiveRecord::Migrator.migrate('db/
|
45
|
+
Framework::Application.new(env: env).init!
|
46
|
+
ActiveRecord::Migrator.migrate('db/migrate/')
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
data/lib/framework/version.rb
CHANGED
data/lib/framework.rb
CHANGED
@@ -21,7 +21,12 @@ module Framework
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.env
|
24
|
-
@app ? @app.env : (ENV['FRAMEWORK_ENV'] || DEFAULT_ENV)
|
24
|
+
@app ? @app.env : (ENV['FRAMEWORK_ENV'] || ENV['RAILS_ENV'] || DEFAULT_ENV)
|
25
25
|
end
|
26
|
-
end
|
27
26
|
|
27
|
+
# Returns current work dir String
|
28
|
+
# @return [Framework::Root]
|
29
|
+
def self.root
|
30
|
+
@app.try(:root)
|
31
|
+
end
|
32
|
+
end
|
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.0.
|
4
|
+
version: 0.0.5
|
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: 2014-
|
11
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,40 +16,40 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.2'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 3.2.16
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '3.2'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 3.2.16
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activesupport
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '3.2'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 3.2.16
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '3.2'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
52
|
+
version: 3.2.16
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: awesome_print
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- lib/framework/logger.rb
|
173
173
|
- lib/framework/migration.rb
|
174
174
|
- lib/framework/rake.rb
|
175
|
+
- lib/framework/root.rb
|
175
176
|
- lib/framework/tasks/console.rake
|
176
177
|
- lib/framework/tasks/db.rake
|
177
178
|
- lib/framework/tasks/engine/environment.rake
|