framework 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ba75921072b35b2f243539a2c8875c6eaabccd39
4
+ data.tar.gz: 3091bbda391dcabdc6e04588d40b25cc12ef07e9
5
+ SHA512:
6
+ metadata.gz: e1c690e3bfed331f6dd5206df9a3d6e1f5ff1f7ce7ab3394d1af9fe2cc0d71e82d9e9c3cc90adf39786467e8e2452e1520abd44947928b47aa00eb30bdb19458
7
+ data.tar.gz: f09cafc01abb92a531662ae3b6dbb245f9c72f1e721cb9d76e4f820119ff4daf9354e63d005d68423c0f3a148f028941b8a79398c0bb04370c49b5b991a2f033
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Sergei Zinin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ $:.unshift(File.expand_path("../lib", __FILE__))
2
+ ENV['BUNDLE_GEMFILE'] = 'Gemfile'
3
+
4
+ require 'framework'
5
+ require 'rubygems'
6
+ require 'bundler'
7
+ require 'rake'
8
+ require 'rake/testtask'
9
+
10
+ begin
11
+ Bundler.setup(:default, :development)
12
+ rescue Bundler::BundlerError => e
13
+ $stderr.puts e.message
14
+ $stderr.puts "Run `bundle install` to install missing gems"
15
+ exit e.status_code
16
+ end
17
+
18
+ Dir["#{File.expand_path("../lib/framework", __FILE__)}/tasks/engine/*.rake"].each(&method(:load))
19
+ Dir["#{File.expand_path("../lib/framework", __FILE__)}/tasks/*.rake"].each(&method(:load))
20
+ Dir["#{Dir.pwd}/app/tasks/**/*.rake"].each(&method(:load))
data/bin/framework ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'framework/cli'
4
+
5
+ Framework::Cli.start(ARGV)
@@ -0,0 +1,142 @@
1
+ module Framework
2
+ class Application
3
+ CONFIG_PATH = "config/application.yml"
4
+
5
+ attr_reader :env
6
+ attr_accessor :logger
7
+ delegate :hint, :note, to: :logger
8
+
9
+ # @param [String] env Environment from configuration file
10
+ def initialize(env = nil)
11
+ @env = env || Framework.env
12
+ Framework.app = self
13
+ yield self if block_given?
14
+ end
15
+
16
+ # Entry point for the app
17
+ # @return [Application]
18
+ def init!
19
+ @logger = @config = @database_config = nil
20
+
21
+ load_application_config
22
+ load_database_config
23
+ note "Loading #{env} environment (#{Framework::VERSION})"
24
+ autoload
25
+ note "Establishing database connection"
26
+ establish_database_connection
27
+ note "Application has been initialized"
28
+ self
29
+ end
30
+ alias_method :reload!, :init!
31
+
32
+ # @return [Hash<String>]
33
+ def config
34
+ @config || load_application_config
35
+ end
36
+
37
+ def create_database!(name = nil)
38
+ name ||= 'default'
39
+ establish_postgres_connection(name)
40
+ ActiveRecord::Base.connection.create_database(database_config[name][env]['database'])
41
+ puts "The database #{database_config[name][env]['database']} has been successfully created"
42
+ end
43
+
44
+ def drop_database!(name = nil)
45
+ name ||= 'default'
46
+ establish_postgres_connection(name)
47
+ ActiveRecord::Base.connection.drop_database(database_config[name][env]['database'])
48
+ puts "The database #{database_config[name][env]['database']} has been successfully dropped"
49
+ end
50
+
51
+ def migrate_database(version = nil)
52
+ ActiveRecord::Migrator.migrate "db/migrations", version.try(:to_i)
53
+ end
54
+
55
+ def rollback_database(steps = 1)
56
+ ActiveRecord::Migrator.rollback "db/migrations", steps
57
+ end
58
+
59
+ # @return [Hash<String>]
60
+ def database_config
61
+ @database_config || load_database_config
62
+ end
63
+
64
+ # @return [String] Database name
65
+ def database
66
+ adapter = database_config['default'][env]['adapter']
67
+ database = database_config['default'][env]['database']
68
+ adapter == 'sqlite3' ? "db/sqlite/#{env}/#{database}.db" : database
69
+ end
70
+
71
+ def self.init!
72
+ yield Framework::Application.new.init!
73
+ end
74
+
75
+ def db_connection(db_name = 'default')
76
+ ActiveRecord::Base.establish_connection(database_config[db_name][env])
77
+ ActiveRecord::Base.connection
78
+ end
79
+
80
+ private
81
+
82
+ def establish_database_connection
83
+ if database_config
84
+ database_config.each do |_, db_config|
85
+ ActiveRecord::Base.establish_connection(db_config[env])
86
+
87
+ if db_config[env]['enable_logging']
88
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ # Used to create/drop db
95
+ def establish_postgres_connection(name = 'default')
96
+ if database_config[name]
97
+ ActiveRecord::Base.establish_connection(database_config[name][env].merge('database' => 'postgres',
98
+ 'schema_search_path' => 'public'))
99
+ end
100
+ end
101
+
102
+ # Autoloads all app-specific files
103
+ def autoload
104
+ config['autoload_paths'].each do |path|
105
+ if path.end_with?('.rb')
106
+ load(path)
107
+ else
108
+ load_path(File.join(path, 'concerns'))
109
+
110
+ Dir["#{path}/**/*.rb"].each do |path_to_load|
111
+ load(path_to_load) unless path_to_load.include?('concerns/')
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ # @return [Hash]
118
+ def load_application_config
119
+ @config = YAML.load_file(CONFIG_PATH)[env]
120
+ end
121
+
122
+ # @return [Hash]
123
+ def load_database_config
124
+ @database_config = YAML.load_file('config/databases.yml')
125
+ end
126
+
127
+ # @param [String] path Relative to project root
128
+ def load_path(path)
129
+ Dir["#{path}/**/*.rb"].each(&method(:load))
130
+ end
131
+
132
+ # @return [IO, nil]
133
+ def log_level
134
+ config['enable_logging'] ? STDOUT : nil
135
+ end
136
+
137
+ # @return [Framework::Logger]
138
+ def logger
139
+ @logger ||= Framework::Logger.new(log_level)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,181 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+ require 'active_support/core_ext/string/strip'
3
+ require 'thor'
4
+
5
+ require 'framework/version'
6
+
7
+ module Framework
8
+ class AppGenerator < Thor::Group
9
+ include Thor::Actions
10
+
11
+ argument :name
12
+
13
+ def self.source_root
14
+ File.dirname(__FILE__)
15
+ end
16
+
17
+ def create_base_directories
18
+ empty_directory 'app/migrations'
19
+ create_file 'app/migrations/.keep'
20
+
21
+ empty_directory 'app/models'
22
+ empty_directory 'app/models/concerns'
23
+ create_file 'app/models/concerns/.keep'
24
+
25
+ empty_directory 'lib'
26
+ create_file 'lib/.keep'
27
+
28
+ empty_directory 'db'
29
+ empty_directory 'db/migrations'
30
+ create_file 'db/migrations/.keep'
31
+
32
+ end
33
+
34
+ def create_application_config
35
+ create_file 'config/application.yml' do
36
+ <<-CONFIG.strip_heredoc
37
+ development: &common
38
+ enable_logging: yes
39
+ autoload_paths:
40
+ - config/initializers
41
+ - app/models
42
+ default_timezone: 'Pacific Time (US & Canada)'
43
+
44
+ test:
45
+ <<: *common
46
+ enable_logging: no
47
+
48
+ staging:
49
+ <<: *common
50
+
51
+ production:
52
+ <<: *common
53
+ enable_logging: no
54
+ CONFIG
55
+ end
56
+ end
57
+
58
+ def create_database_config
59
+ db_name = name.underscore
60
+
61
+ create_file 'config/databases.yml' do
62
+ <<-CONFIG.strip_heredoc
63
+ # Defult database is used by default.
64
+ # Any models locating at app/models root directory will point to this database by default.
65
+ default:
66
+ development: &common
67
+ adapter: postgresql
68
+ username:
69
+ password:
70
+ database: #{db_name}_development
71
+ min_messages: WARNING
72
+ reconnect: true
73
+ pool: 5
74
+ encoding: unicode
75
+ host: localhost
76
+
77
+ test:
78
+ <<: *common
79
+ database: #{db_name}_test
80
+
81
+ production:
82
+ <<: *common
83
+ database: #{db_name}_production
84
+
85
+ # Custom one. Models located at app/models/second_one path will point to this database by default.
86
+ second_one:
87
+ development: &common
88
+ adapter: postgresql
89
+ username:
90
+ password:
91
+ database: second_sample_development
92
+ min_messages: WARNING
93
+ reconnect: true
94
+ pool: 5
95
+ encoding: unicode
96
+ host: localhost
97
+
98
+ test:
99
+ <<: *common
100
+ database: second_sample_test
101
+
102
+ production:
103
+ <<: *common
104
+ database: second_sample_production
105
+ CONFIG
106
+ end
107
+ end
108
+
109
+ def create_environment
110
+ create_file 'config/environment.rb' do
111
+ <<-CONFIG.strip_heredoc
112
+ # Set up gems listed in the Gemfile.
113
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
114
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
115
+
116
+ require 'framework'
117
+
118
+ Bundler.require(:default, Framework.env)
119
+
120
+ Framework::Application.new do |app|
121
+ app.init!
122
+ end
123
+ CONFIG
124
+ end
125
+ end
126
+
127
+ def create_gemfile
128
+ create_file 'Gemfile' do
129
+ <<-CONFIG.strip_heredoc
130
+ source 'https://rubygems.org'
131
+
132
+ gem 'framework', '#{Framework::VERSION}'
133
+ gem 'pg'
134
+ CONFIG
135
+ end
136
+ end
137
+
138
+ def create_rakefile
139
+ create_file 'Rakefile' do
140
+ <<-CONFIG.strip_heredoc
141
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
142
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
143
+
144
+ require 'framework'
145
+ require 'framework/rake'
146
+
147
+ Dir["\#{Dir.pwd}/app/tasks/**/*.rake"].each(&method(:load))
148
+ CONFIG
149
+ end
150
+ end
151
+
152
+ def create_sample_tasks
153
+ empty_directory 'app/tasks'
154
+ create_file 'app/tasks/hello.rake' do
155
+ <<-RAKE.strip_heredoc
156
+ task hello: :environment do
157
+ Framework::Logger.disappointment("Hello from: Framework v#{Framework::VERSION}")
158
+ end
159
+ RAKE
160
+ end
161
+ end
162
+
163
+ def create_sample_initializers
164
+ empty_directory 'config/initializers'
165
+ create_file 'config/initializers/time_zone.rb' do
166
+ <<-CONFIG.strip_heredoc
167
+ # Sample usage of application config
168
+ Time.zone = Framework.app.config['default_timezone']
169
+ CONFIG
170
+ end
171
+ end
172
+
173
+ def create_readme
174
+ create_file 'README.md', "This app utilizes Framework v#{Framework::VERSION} and rocks MIT license."
175
+ end
176
+ end
177
+
178
+ class Cli < Thor
179
+ register(Framework::AppGenerator, 'new', 'new APP_NAME', 'Generates new application')
180
+ end
181
+ end
@@ -0,0 +1,25 @@
1
+ require 'json'
2
+
3
+ module Framework
4
+ class DbListener
5
+ attr_reader :db_name, :channel
6
+
7
+ def initialize(channel: 'framework_notifications', db_name: 'default')
8
+ @channel = channel.freeze
9
+ @db_name = db_name.freeze
10
+ end
11
+
12
+ def listen
13
+ connection = Framework.app.db_connection(db_name)
14
+ connection.execute "LISTEN #{channel}"
15
+
16
+ loop do
17
+ connection.raw_connection.wait_for_notify do |event, pid, data|
18
+ yield data.nil? ? data : JSON.parse(data)
19
+ end
20
+ end
21
+ ensure
22
+ connection.execute "UNLISTEN #{channel}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,38 @@
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
@@ -0,0 +1,58 @@
1
+ require 'erb'
2
+
3
+ module Framework
4
+ class MigrationGenerator
5
+
6
+ def initialize(db_name: db_name, migration_name: name)
7
+ @db_name = db_name.underscore
8
+ @migration_name = migration_name.underscore
9
+ @timestamp = Time.now.utc.strftime("%Y%m%d%H%M%S")
10
+ @path = "db/migrations/#{@timestamp}_#@migration_name.rb"
11
+ end
12
+
13
+ def generate
14
+ context = Context.new(@db_name, @migration_name).template_binding
15
+ migration_file = File.open(@path, "w+")
16
+ migration_file << ERB.new(template).result(context)
17
+ migration_file.close
18
+
19
+ Framework.app.hint "Generated migration: #@path"
20
+ end
21
+
22
+ def templates_path
23
+ File.expand_path(File.join(File.dirname(__FILE__), '../templates'))
24
+ end
25
+
26
+ def template
27
+ @template ||= File.read(File.join(templates_path, "migration.rb.erb"))
28
+ end
29
+
30
+ class Context
31
+ attr_accessor :migration_name, :db_name
32
+
33
+ def initialize(db_name, migration_name)
34
+ @migration_name = migration_name.camelize
35
+ @db_name = db_name.underscore
36
+ validate!
37
+ end
38
+
39
+ def template_binding
40
+ binding
41
+ end
42
+
43
+ def load_migrations
44
+ Dir["./db/migrations/**/*.rb"].each(&method(:load))
45
+ rescue
46
+ raise "An error was occurred"
47
+ end
48
+
49
+ def validate!
50
+ load_migrations
51
+ Module.const_get(@migration_name)
52
+ raise "Migration with the same name already exists"
53
+ rescue NameError
54
+ true
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ class Framework::Logger < Logger
2
+
3
+ # @param [String] message
4
+ def disappointment(message)
5
+ info("\e[#{32}mFramework\e[1m \e[#{31}m#{message}\e[0m")
6
+ end
7
+
8
+ # @param [String] message
9
+ def hint(message)
10
+ info("\e[#{32}mFramework\e[1m \e[#{33}m#{message}\e[0m")
11
+ end
12
+
13
+ # @param [String] message
14
+ def note(message)
15
+ info("\e[#{32}mFramework\e[0m \e[#{33}m#{message}\e[0m")
16
+ end
17
+
18
+ # @param [String] message
19
+ def whisper(message)
20
+ info("\e[#{32}mFramework\e[0m \e[#{37}m#{message}\e[0m")
21
+ end
22
+
23
+ # @param [String] message
24
+ def self.disappointment(message)
25
+ internal.disappointment(message)
26
+ end
27
+
28
+ # @param [String] message
29
+ def self.hint(message)
30
+ internal.hint(message)
31
+ end
32
+
33
+ # @param [String] message
34
+ def self.note(message)
35
+ internal.note(message)
36
+ end
37
+
38
+ # @param [String] message
39
+ def self.whisper(message)
40
+ internal.whisper(message)
41
+ end
42
+
43
+ # Returns application logger
44
+ # @return [Framework::Logger]
45
+ def self.internal
46
+ Framework.app.try(:logger) || @internal ||= self.new(STDOUT)
47
+ end
48
+ end
@@ -0,0 +1,13 @@
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
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+ $:.unshift(File.expand_path("../../", __FILE__))
3
+ ENV['BUNDLE_GEMFILE'] = 'Gemfile'
4
+
5
+ require 'framework'
6
+ require 'rubygems'
7
+ require 'bundler'
8
+ require 'rake'
9
+ require 'rake/testtask'
10
+
11
+ begin
12
+ Bundler.setup(:default, :development)
13
+ rescue Bundler::BundlerError => e
14
+ $stderr.puts e.message
15
+ $stderr.puts "Run `bundle install` to install missing gems"
16
+ exit e.status_code
17
+ end
18
+
19
+ Dir["#{File.expand_path("../", __FILE__)}/tasks/engine/*.rake"].each(&method(:load))
20
+ Dir["#{File.expand_path("../", __FILE__)}/tasks/*.rake"].each(&method(:load))
@@ -0,0 +1,21 @@
1
+ desc "Runs irb console and initializes the application"
2
+ task :console, :env do |_, args|
3
+ require 'irb'
4
+
5
+ unless env = ENV['ANALYTICS_ENV']
6
+ env = args[:env] || Framework::DEFAULT_ENV
7
+ end
8
+
9
+ system "mkdir -p #{Dir.pwd}/db/#{env}"
10
+
11
+ Framework::Application.new(env) do |app|
12
+ app.init!
13
+ app.hint("Use `Framework.app` variable to deal with application API")
14
+
15
+ require "awesome_print"
16
+ AwesomePrint.irb!
17
+ end
18
+
19
+ ARGV.clear
20
+ IRB.start
21
+ end
@@ -0,0 +1,49 @@
1
+ require 'framework/migration'
2
+
3
+ namespace :db do
4
+ desc "Creates database"
5
+ task :create, :name do |_, args|
6
+ puts "Loading #{Framework.env}"
7
+ Framework::Application.new.create_database!(args[:name])
8
+ end
9
+
10
+ desc "Drops database"
11
+ task :drop, :name do |_, args|
12
+ puts "Loading #{Framework.env}"
13
+ Framework::Application.new.drop_database!(args[:name])
14
+ end
15
+
16
+ desc "Runs migrations"
17
+ task :migrate, [:version] => :environment do |_, args|
18
+ Framework.app.migrate_database(args.version)
19
+ end
20
+
21
+ desc "Rolls back"
22
+ task :rollback, [:num_steps] => :environment do |_, args|
23
+ Framework.app.rollback_database((args.num_steps || 1).to_i)
24
+ end
25
+
26
+ namespace :test do
27
+ desc "Creates test database"
28
+ task :create, :name do |_, args|
29
+ env = 'test'
30
+ puts "Loading #{env.inspect}"
31
+ Framework::Application.new(env).create_database!(args[:name])
32
+ end
33
+
34
+ desc "Drops test database"
35
+ task :drop, :name do |_, args|
36
+ env = 'test'
37
+ puts "Loading #{env.inspect}"
38
+ Framework::Application.new(env).drop_database!(args[:name])
39
+ end
40
+
41
+ desc "Runs test migrations"
42
+ task :migrate do
43
+ env = 'test'
44
+ puts "Loading #{env.inspect}"
45
+ Framework::Application.new(env).init!
46
+ ActiveRecord::Migrator.migrate('db/migrations/')
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ task :environment do
2
+ Framework::Application.new(ENV['ANALYTICS_ENV'] || 'development').init!
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'framework/generators/migration_generator'
2
+
3
+ namespace :g do
4
+ desc "Generates migration"
5
+ task :migration, [:db_name, :migration_name] => :environment do |_, args|
6
+ Framework::MigrationGenerator.new(db_name: args[:db_name], migration_name: args[:migration_name]).generate
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ class <%= @migration_name %> < Framework::Migration
2
+ use_database :<%= @db_name %>
3
+
4
+ def up
5
+ end
6
+
7
+ def down
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Framework
2
+ VERSION = '0.0.1'.freeze
3
+ end
data/lib/framework.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'active_record'
2
+ require 'bundler'
3
+
4
+ require 'framework/version'
5
+ require 'framework/extensions/active_record/base_extension'
6
+ require 'framework/logger'
7
+ require 'framework/application'
8
+ require 'framework/db_listener'
9
+
10
+ module Framework
11
+ DEFAULT_ENV = 'development'.freeze
12
+
13
+ # @return [Framework::Application]
14
+ def self.app
15
+ @app
16
+ end
17
+
18
+ # @param [Framework::Application] app
19
+ def self.app=(app)
20
+ @app = app
21
+ end
22
+
23
+ def self.env
24
+ @app ? @app.env : (ENV['FRAMEWORK_ENV'] || DEFAULT_ENV)
25
+ end
26
+ end
27
+
28
+ begin
29
+ Bundler.require(:default, Framework.env)
30
+ rescue Bundler::BundlerError => e
31
+ $stderr.puts e.message
32
+ $stderr.puts "Run `bundle install` to install missing gems"
33
+ exit e.status_code
34
+ end
@@ -0,0 +1,21 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ env = ENV["FRAMEWORK_ENV"] ||= 'test'
3
+ require 'framework'
4
+ require File.expand_path("../../config/environment", __FILE__)
5
+ require 'rspec'
6
+ require 'database_cleaner'
7
+
8
+ # Requires supporting ruby files with custom matchers and macros, etc,
9
+ # in spec/support/ and its subdirectories.
10
+ Dir[File.expand_path("../../spec/support/**/*.rb", __FILE__)].each(&method(:load))
11
+
12
+ # Checks for pending migrations before tests are run.
13
+ # If you are not using ActiveRecord, you can remove this line.
14
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
15
+
16
+ RSpec.configure do |config|
17
+ config.raise_errors_for_deprecations!
18
+ config.order = "random"
19
+ config.color = true
20
+ config.formatter = :documentation
21
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: framework
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sergei Nikolaevich Zinin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 4.0.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 4.0.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: awesome_print
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.2'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.2.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.2'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.2.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: rake
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '10.3'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 10.3.2
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.3'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 10.3.2
93
+ - !ruby/object:Gem::Dependency
94
+ name: thor
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.19'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 0.19.1
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.19'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 0.19.1
113
+ - !ruby/object:Gem::Dependency
114
+ name: bundler
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.6'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.6.2
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.6'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.6.2
133
+ - !ruby/object:Gem::Dependency
134
+ name: rspec
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '3.1'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 3.1.0
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '3.1'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 3.1.0
153
+ description: Allows to quickly build well structured complex Ruby apps.
154
+ email: zinin@xakep.ru
155
+ executables:
156
+ - framework
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - LICENSE
161
+ - Rakefile
162
+ - bin/framework
163
+ - lib/framework.rb
164
+ - lib/framework/application.rb
165
+ - lib/framework/cli.rb
166
+ - lib/framework/db_listener.rb
167
+ - lib/framework/extensions/active_record/base_extension.rb
168
+ - lib/framework/generators/migration_generator.rb
169
+ - lib/framework/logger.rb
170
+ - lib/framework/migration.rb
171
+ - lib/framework/rake.rb
172
+ - lib/framework/tasks/console.rake
173
+ - lib/framework/tasks/db.rake
174
+ - lib/framework/tasks/engine/environment.rake
175
+ - lib/framework/tasks/generators.rake
176
+ - lib/framework/templates/migration.rb.erb
177
+ - lib/framework/version.rb
178
+ - spec/spec_helper.rb
179
+ homepage: http://github.com/einzige/framework
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: 2.0.0
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: 2.2.2
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.2.2
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Ruby Application Framework for all your needs.
203
+ test_files:
204
+ - spec/spec_helper.rb