enrar 1.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 +15 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +55 -0
- data/Rakefile +11 -0
- data/enrar.gemspec +26 -0
- data/lib/enrar.rb +74 -0
- data/lib/enrar/db.rb +14 -0
- data/lib/enrar/migration.rb +37 -0
- data/lib/enrar/migrator.rb +19 -0
- data/lib/enrar/schema.rb +9 -0
- data/lib/enrar/task.rb +49 -0
- data/lib/enrar/version.rb +3 -0
- data/test/fixtures/create_posts.rb +7 -0
- data/test/fixtures/create_tests.rb +7 -0
- data/test/fixtures/create_users.rb +7 -0
- data/test/fixtures/test_project/Gemfile +6 -0
- data/test/fixtures/test_project/Rakefile +4 -0
- data/test/fixtures/test_project/bin/connection-test +7 -0
- data/test/fixtures/test_project/config/database.yml +4 -0
- data/test/fixtures/test_project/lib/test_project.rb +5 -0
- data/test/fixtures/test_project/lib/test_project/version.rb +3 -0
- data/test/fixtures/test_project/test_project.gemspec +26 -0
- data/test/integrations/enrar_in_code_test.rb +10 -0
- data/test/integrations/rake_test.rb +18 -0
- data/test/test_helper.rb +6 -0
- data/test/test_helpers/rake_testing.rb +26 -0
- data/test/test_helpers/test_project.rb +28 -0
- data/test/units/configuration_test.rb +98 -0
- data/test/units/db_test.rb +18 -0
- data/test/units/enrar_setup_test.rb +18 -0
- data/test/units/migration_test.rb +35 -0
- data/test/units/migrator_test.rb +25 -0
- data/test/units/sanity_test.rb +18 -0
- data/test/units/schema_test.rb +14 -0
- metadata +157 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTk4NDVmMzQ0OTA1NGM5MWEzYjdlMDVmYzQ4Y2JlMmM5NWExODJlYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZTJkODMxMzQ0ZTExMzU3Yjg4YzdiYjJhZjQ3YjE2MDMxODVhNDhlYw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MTAzMDcyNTgyNmRlY2Y4YTZkN2MwY2E4YjJiMzBmMjAwNTc5N2NhNmU0NGM4
|
10
|
+
MThmYWY2NDgzNzZkYWEyYjAyMjE5MTk0NTdhMDRkNTNkYWJmZWIyYWM4ZThk
|
11
|
+
NmQ5YTc4MDU3YWExYTY4MjVjYmE4ZmY5ZDExZTA0MzRkMTBhYmI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTNmYTE2OTEzYWRmOGQyZjRmMmY1N2YwM2Q3OWVhZGRjMTZlNjVlNWUzMGRj
|
14
|
+
ZjE5MWEwN2FmMTI1M2E4NWQyYjAyYTQ0NjU2ZTc4ZjdkNGE2M2I1MTliMWQ5
|
15
|
+
NTg5NWU3NmQxZjY2Yjg0YjljZGQ1MzEwM2U4ZmE3MTVlMzc1MDg=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 TJ Taylor
|
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/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Enrar
|
2
|
+
|
3
|
+
Who doesn't love the simplicity of working with Rails and ActiveRecord when you have to touch a database? Unfortunately, there are times that you have to use a database and _don't_ get to work in Rails. This gem tries to make your life a little bit easier by providing a lot of the Rails-y/ActiveRecord goodness without all the Rails.
|
4
|
+
|
5
|
+
There are a few opinions that Enrar holds onto from Rails that tend to not be a problem, but that you should be aware of:
|
6
|
+
|
7
|
+
1. The default location for you database configuration is in PROJECT\_ROOT/config/database.yml. If that's where you've got it, you're all set from the get-go.
|
8
|
+
2. Your migrations will get placed in PROJECT\_ROOT/db/migrate. This is non-negotiable at the moment.
|
9
|
+
3. Your schema.rb will get placed in PROJECT\_ROOT/db. This is also non-negotiable.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
gem 'enrar'
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install enrar
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
After you've added Ernar to your project, add the following lines to your Rakefile:
|
28
|
+
|
29
|
+
require 'enrar/task'
|
30
|
+
Enrar::Task.new
|
31
|
+
|
32
|
+
Then you can run around almost as if you're in Rails-land.
|
33
|
+
|
34
|
+
$ rake 'enrar:db:migrations:generate[migration_name]'
|
35
|
+
$ # The quotes are necessary if you're in zsh. You can leave them off in you're in bash.
|
36
|
+
|
37
|
+
$ rake 'enrar:db:migrate'
|
38
|
+
$ rake 'enrar:db:version'
|
39
|
+
|
40
|
+
Additionally, you can use Enrar in your code to manage the ActiveRecord configurations.
|
41
|
+
|
42
|
+
#!/usr/bin/env ruby
|
43
|
+
require 'enrar'
|
44
|
+
|
45
|
+
Enrar.initialize!
|
46
|
+
# From here on out, ActiveRecord::Base is setup with ENRAR_ENV as the environment
|
47
|
+
# and ActiveRecord::Base.configurations is defined as expected.
|
48
|
+
|
49
|
+
## Contributing
|
50
|
+
|
51
|
+
1. Fork it
|
52
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
53
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
54
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
55
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/enrar.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'enrar/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "enrar"
|
8
|
+
spec.version = Enrar::VERSION
|
9
|
+
spec.authors = ["TJ Taylor"]
|
10
|
+
spec.email = ["Thomas_Taylor2@cable.comcast.com"]
|
11
|
+
spec.description = %q{No Rails ActiveRecord}
|
12
|
+
spec.summary = %q{Primarily for ActiveRecord Migrations outside rails}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "sqlite3"
|
24
|
+
|
25
|
+
spec.add_dependency 'activerecord', '>= 3.2'
|
26
|
+
end
|
data/lib/enrar.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require "enrar/version"
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
require 'active_record'
|
5
|
+
require 'active_support/core_ext/string'
|
6
|
+
|
7
|
+
require 'rake'
|
8
|
+
|
9
|
+
require 'enrar/db'
|
10
|
+
require 'enrar/migrator'
|
11
|
+
require 'enrar/migration'
|
12
|
+
require 'enrar/schema'
|
13
|
+
|
14
|
+
module Enrar
|
15
|
+
def self.env
|
16
|
+
@@env ||= (ENV['ENRAR_ENV'] || 'development')
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.gem_root
|
20
|
+
@@gem_root ||= Pathname(File.expand_path('../', __FILE__))
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.db_config
|
24
|
+
@@db_config ||= root.join('config', 'database.yml')
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.root=(path)
|
28
|
+
@@root = Pathname(path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.root
|
32
|
+
@@root ||= begin
|
33
|
+
root_path = Dir.pwd
|
34
|
+
|
35
|
+
while not_in_a_project_root?(root_path)
|
36
|
+
parent = File.dirname(root_path)
|
37
|
+
root_path = parent != root_path && parent
|
38
|
+
end
|
39
|
+
|
40
|
+
root = File.exist?("#{root_path}/#{flag}") ? root_path : nil
|
41
|
+
raise "Could not find root path for #{self}" unless root
|
42
|
+
|
43
|
+
RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ?
|
44
|
+
Pathname.new(root).expand_path : Pathname.new(root).realpath
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.not_in_a_project_root?(root_path)
|
49
|
+
root_path && File.directory?(root_path) && !File.exist?("#{root_path}/#{flag}")
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.clear_config!
|
53
|
+
@@env = nil
|
54
|
+
@@root = nil
|
55
|
+
@@db_config = nil
|
56
|
+
@@rake_tasks = nil
|
57
|
+
end
|
58
|
+
|
59
|
+
# This is a file that designates the top-level of a project
|
60
|
+
def self.flag
|
61
|
+
'Gemfile'
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.initialize!
|
65
|
+
ActiveRecord::Base.configurations = YAML::load_file(db_config.to_s)
|
66
|
+
ActiveRecord::Base.establish_connection ActiveRecord::Base.configurations[env]
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.setup!
|
71
|
+
initialize!
|
72
|
+
ActiveRecord::Base.connection
|
73
|
+
end
|
74
|
+
end
|
data/lib/enrar/db.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Enrar
|
4
|
+
class Migration
|
5
|
+
attr_reader :migration_class_name
|
6
|
+
|
7
|
+
def initialize(name)
|
8
|
+
@migration_class_name = name.underscore.camelize
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate!
|
12
|
+
FileUtils.mkdir_p path.dirname
|
13
|
+
File.write(path.to_s, ERB.new(TEMPLATE).result(binding))
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def path
|
18
|
+
Enrar.root.join('db/migrate', filename)
|
19
|
+
end
|
20
|
+
|
21
|
+
def filename
|
22
|
+
"#{version}_#{@migration_class_name.underscore}.rb"
|
23
|
+
end
|
24
|
+
|
25
|
+
def version
|
26
|
+
@version ||= Time.now.strftime('%Y%m%d%H%M%S%L').to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
TEMPLATE = <<-MIGRATION.strip_heredoc
|
30
|
+
class <%= @migration_class_name %> < ActiveRecord::Migration
|
31
|
+
def change
|
32
|
+
# insert your migration stuffs here
|
33
|
+
end
|
34
|
+
end
|
35
|
+
MIGRATION
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'enrar'
|
2
|
+
|
3
|
+
module Enrar
|
4
|
+
class Migrator
|
5
|
+
def initialize(to_version = nil, options = {})
|
6
|
+
@verbose = options[:verbose].nil? ? true : options[:verbose]
|
7
|
+
@version = to_version
|
8
|
+
end
|
9
|
+
|
10
|
+
def migrate!
|
11
|
+
ActiveRecord::Migration.verbose = @verbose
|
12
|
+
ActiveRecord::Migrator.migrate migrations_dir, @version
|
13
|
+
end
|
14
|
+
|
15
|
+
def migrations_dir
|
16
|
+
Enrar.root.join('db', 'migrate')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/enrar/schema.rb
ADDED
data/lib/enrar/task.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'enrar'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
module Enrar
|
6
|
+
|
7
|
+
# Create the Enrar Rake tasks programmatically.
|
8
|
+
# This code was shamelessly stolen and modified from the Rake library.
|
9
|
+
class Task < Rake::TaskLib
|
10
|
+
|
11
|
+
# Name of test task. (default is :enrar)
|
12
|
+
attr_accessor :name
|
13
|
+
|
14
|
+
# The path to your database.yml file. (default is config/database.yml)
|
15
|
+
attr_accessor :database_config
|
16
|
+
|
17
|
+
# Do you want me to be noisy?
|
18
|
+
attr_accessor :verbose
|
19
|
+
|
20
|
+
# Create the Enrar tasks
|
21
|
+
def initialize(name=:enrar)
|
22
|
+
@name = name
|
23
|
+
@database_config = 'config/database.yml'
|
24
|
+
@verbose = verbose
|
25
|
+
yield self if block_given?
|
26
|
+
define
|
27
|
+
end
|
28
|
+
|
29
|
+
# Create the tasks defined by this task lib.
|
30
|
+
def define
|
31
|
+
desc "Generate a migration (don't forget to pass the migration name)"
|
32
|
+
task "#{@name}:migrations:generate", [:name] do |t, args|
|
33
|
+
raise 'Need a migration name' unless args[:name]
|
34
|
+
Enrar::Migration.new(args[:name]).generate!
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Create the db"
|
38
|
+
task "#{@name}:db:create" do
|
39
|
+
Enrar::DB.new.create!
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Migrate the database (VERBOSE=true)"
|
43
|
+
task "#{@name}:db:migrate", [:version] do |t, args|
|
44
|
+
Enrar::Migrator.new(args[:version], verbose: ENV['VERBOSE']).migrate!
|
45
|
+
end
|
46
|
+
self
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'test_project/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "test_project"
|
8
|
+
spec.version = TestProject::VERSION
|
9
|
+
spec.authors = ["TJ Taylor"]
|
10
|
+
spec.email = ["Thomas_Taylor2@cable.comcast.com"]
|
11
|
+
spec.description = %q{TODO: Write a gem description}
|
12
|
+
spec.summary = %q{TODO: Write a gem summary}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = Dir['lib/**/*.rb']
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
|
24
|
+
spec.add_dependency 'enrar'
|
25
|
+
spec.add_dependency 'sqlite3'
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'Enrar used in code' do
|
4
|
+
before(:each) { setup_test_project! }
|
5
|
+
after(:each) { teardown_test_project! }
|
6
|
+
|
7
|
+
it 'should fully setup ActiveRecord via config' do
|
8
|
+
`bundle exec bin/connection-test 2>&1`.must_match /true/i
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'Rake tasks' do
|
4
|
+
before(:each) do
|
5
|
+
setup_test_project!
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:each) do
|
9
|
+
teardown_test_project!
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'enrar:migrations:generate' do
|
13
|
+
it 'generates a migration' do
|
14
|
+
i_call_rake_task 'enrar:migrations:generate', 'create_test_table'
|
15
|
+
Dir[@test_directory + '/db/migrate/*_create_test_table.rb'].wont_be_empty
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class MiniTest::Unit::TestCase
|
2
|
+
def i_call_rake_task(task_name, *args)
|
3
|
+
rake= nil
|
4
|
+
Dir.chdir(Enrar.gem_root) do
|
5
|
+
# Get an instance of rake
|
6
|
+
rake = Rake::Application.new
|
7
|
+
Rake.application = rake
|
8
|
+
end
|
9
|
+
|
10
|
+
Rake.application.rake_require rake_task_path(task_name),
|
11
|
+
[Enrar.gem_root.to_s],
|
12
|
+
loaded_files_excluding_current_rake_file(task_name)
|
13
|
+
|
14
|
+
task = rake[task_name]
|
15
|
+
assert task, "No rake task defined: #{task_name}"
|
16
|
+
task.invoke *args
|
17
|
+
end
|
18
|
+
|
19
|
+
def loaded_files_excluding_current_rake_file(file)
|
20
|
+
$".reject {|file| file == Enrar.gem_root.join("#{rake_task_path(file)}.rake").to_s }
|
21
|
+
end
|
22
|
+
|
23
|
+
def rake_task_path(name)
|
24
|
+
"tasks/#{name.split(":").first}"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MiniTest::Unit::TestCase
|
4
|
+
def setup_test_project!
|
5
|
+
@test_directory = File.expand_path('../../fixtures/test_project', __FILE__)
|
6
|
+
@old_directory = Dir.pwd
|
7
|
+
ENV['ENRAR_ENV'] = 'development'
|
8
|
+
|
9
|
+
Enrar.clear_config!
|
10
|
+
Enrar.root = @test_directory
|
11
|
+
Dir.chdir @test_directory
|
12
|
+
Enrar.initialize!
|
13
|
+
|
14
|
+
@migration_versions = %w(create_tests create_posts create_users).map do |migration_name|
|
15
|
+
sample = File.read(File.expand_path("../../fixtures/#{migration_name}.rb", __FILE__))
|
16
|
+
migration = Enrar::Migration.new(migration_name).generate!
|
17
|
+
File.write(migration.path, sample)
|
18
|
+
sleep 0.001
|
19
|
+
migration.version
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown_test_project!
|
24
|
+
Enrar.clear_config!
|
25
|
+
FileUtils.rm_r @test_directory + '/db'
|
26
|
+
Dir.chdir @old_directory
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'configurations' do
|
4
|
+
describe Enrar, '.root' do
|
5
|
+
it "points to the user's project's root" do
|
6
|
+
Enrar.root.to_s.must_equal File.expand_path('../../../', __FILE__)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe Enrar, '.gem_root' do
|
11
|
+
it "points to Enrar's root" do
|
12
|
+
Enrar.root.to_s.must_equal File.expand_path('../../../', __FILE__)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "stays the same even if I change directory" do
|
16
|
+
old_root = Enrar.root
|
17
|
+
Dir.chdir('/') do
|
18
|
+
Enrar.root.must_equal old_root
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe Enrar, '.root=' do
|
24
|
+
def new_root
|
25
|
+
File.expand_path('../../fixtures/test_project', __FILE__)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "sets the location of the user's project's root" do
|
29
|
+
Enrar.root = new_root
|
30
|
+
Enrar.root.to_s.must_equal new_root
|
31
|
+
end
|
32
|
+
|
33
|
+
it "creates it as a Pathname" do
|
34
|
+
Enrar.root = new_root
|
35
|
+
Enrar.root.must_be_kind_of Pathname
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe Enrar, '.db_config' do
|
40
|
+
it 'defaults to Enrar.root.join(config/database.yml)' do
|
41
|
+
Enrar.db_config.must_equal Enrar.root.join('config', 'database.yml')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'is a Pathname object' do
|
45
|
+
Enrar.db_config.must_be_kind_of Pathname
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'is a YAML file' do
|
49
|
+
Enrar.db_config.basename.to_s.must_match /ya?ml/i
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe Enrar do
|
54
|
+
before(:each) { Enrar.clear_config! }
|
55
|
+
|
56
|
+
describe '.clear_config' do
|
57
|
+
it 'clears out all the configuration settings' do
|
58
|
+
default_root = Enrar.root
|
59
|
+
Enrar.root = '/lib/some/where'
|
60
|
+
Enrar.clear_config!
|
61
|
+
Enrar.root.must_equal default_root
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '.env' do
|
66
|
+
it 'defaults to "development"' do
|
67
|
+
ENV['ENRAR_ENV'] = nil
|
68
|
+
Enrar.env.must_equal 'development'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'is set-able via CLI option ENRAR_ENV' do
|
72
|
+
ENV['ENRAR_ENV'] = 'production'
|
73
|
+
Enrar.env.must_equal 'production'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'a test project' do
|
79
|
+
before(:each) do
|
80
|
+
ENV['ENRAR_ENV'] = 'development'
|
81
|
+
Enrar.clear_config!
|
82
|
+
Enrar.root = File.expand_path('../../fixtures/test_project', __FILE__)
|
83
|
+
Enrar.initialize!
|
84
|
+
end
|
85
|
+
|
86
|
+
describe Enrar, '.initialize!' do
|
87
|
+
it 'loads the environment and sets up ActiveRecord' do
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe ActiveRecord::Base, '.configurations' do
|
92
|
+
it 'is set with Enrar.db_config' do
|
93
|
+
parsed_yaml = YAML::load_file(Enrar.db_config)
|
94
|
+
ActiveRecord::Base.configurations.must_equal parsed_yaml
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Enrar::DB do
|
4
|
+
describe 'creating the databse' do
|
5
|
+
before(:each) do
|
6
|
+
setup_test_project!
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
teardown_test_project!
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'creates a migration file' do
|
14
|
+
Enrar::DB.new.create!
|
15
|
+
File.exist?(@test_directory + '/db/development.sqlite3').must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Enrar do
|
4
|
+
before(:each) do
|
5
|
+
setup_test_project!
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:each) do
|
9
|
+
teardown_test_project!
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.setup!' do
|
13
|
+
it 'works like initialize!, but it creates and migrates the db first' do
|
14
|
+
Enrar.setup!
|
15
|
+
ActiveRecord::Base.connected?.must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Enrar::Migration do
|
4
|
+
it 'accepts an underscored name' do
|
5
|
+
Enrar::Migration.new('create_test_table').migration_class_name.must_equal 'CreateTestTable'
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'accepts a camelized name' do
|
9
|
+
Enrar::Migration.new('CreateTestTable').migration_class_name.must_equal 'CreateTestTable'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'has a version' do
|
13
|
+
Enrar::Migration.new('CreateTestTable').version.to_i.must_be_within_delta Time.now.strftime('%Y%m%d%H%M%S%L').to_i, 2000
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'generating a migration' do
|
17
|
+
before(:each) do
|
18
|
+
@test_directory = File.expand_path('../../fixtures/test_project', __FILE__)
|
19
|
+
ENV['ENRAR_ENV'] = 'development'
|
20
|
+
Enrar.clear_config!
|
21
|
+
Enrar.root = @test_directory
|
22
|
+
Enrar.initialize!
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:each) do
|
26
|
+
FileUtils.rm_r @test_directory + '/db'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates a migration file' do
|
30
|
+
migration = Enrar::Migration.new('create_test_table')
|
31
|
+
migration.generate!
|
32
|
+
File.exist?(migration.path).must_equal true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Enrar::Migrator do
|
4
|
+
describe 'migrating the database' do
|
5
|
+
before(:each) do
|
6
|
+
setup_test_project!
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
teardown_test_project!
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'runs all migrations in the migration_dir' do
|
14
|
+
Enrar::Migrator.new(nil, verbose: false).migrate!
|
15
|
+
ActiveRecord::Base.connection.table_exists?('tests').must_equal true
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'accepts a migration version' do
|
19
|
+
Enrar::Migrator.new(@migration_versions.first.to_i, verbose: false).migrate!
|
20
|
+
ActiveRecord::Base.connection.table_exists?('tests').must_equal true
|
21
|
+
ActiveRecord::Base.connection.table_exists?('posts').must_equal false, 'Posts WAS created'
|
22
|
+
ActiveRecord::Base.connection.table_exists?('users').must_equal false, 'Users WAS created'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'Sanity' do
|
4
|
+
it 'passes' do
|
5
|
+
true.must_equal true
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'secretfile:generate', 'A test that rake testing works' do
|
9
|
+
after(:each) do
|
10
|
+
File.delete '.super-secret'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'generates the secret file' do
|
14
|
+
i_call_rake_task 'secretfile:generate'
|
15
|
+
File.exists?('.super-secret').must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Enrar::Schema do
|
4
|
+
before(:each) do
|
5
|
+
setup_test_project!
|
6
|
+
Enrar::Migrator.new(nil, verbose: false).migrate!
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) { teardown_test_project! }
|
10
|
+
|
11
|
+
it 'knows the version number' do
|
12
|
+
Enrar::Schema.new.version.must_equal @migration_versions.last
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: enrar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- TJ Taylor
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
prerelease: false
|
15
|
+
name: bundler
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.3'
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ~>
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '1.3'
|
26
|
+
type: :development
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
prerelease: false
|
29
|
+
name: rake
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :development
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
prerelease: false
|
43
|
+
name: sqlite3
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
prerelease: false
|
57
|
+
name: activerecord
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.2'
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.2'
|
68
|
+
type: :runtime
|
69
|
+
description: No Rails ActiveRecord
|
70
|
+
email:
|
71
|
+
- Thomas_Taylor2@cable.comcast.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- enrar.gemspec
|
82
|
+
- lib/enrar.rb
|
83
|
+
- lib/enrar/db.rb
|
84
|
+
- lib/enrar/migration.rb
|
85
|
+
- lib/enrar/migrator.rb
|
86
|
+
- lib/enrar/schema.rb
|
87
|
+
- lib/enrar/task.rb
|
88
|
+
- lib/enrar/version.rb
|
89
|
+
- test/fixtures/create_posts.rb
|
90
|
+
- test/fixtures/create_tests.rb
|
91
|
+
- test/fixtures/create_users.rb
|
92
|
+
- test/fixtures/test_project/Gemfile
|
93
|
+
- test/fixtures/test_project/Rakefile
|
94
|
+
- test/fixtures/test_project/bin/connection-test
|
95
|
+
- test/fixtures/test_project/config/database.yml
|
96
|
+
- test/fixtures/test_project/lib/test_project.rb
|
97
|
+
- test/fixtures/test_project/lib/test_project/version.rb
|
98
|
+
- test/fixtures/test_project/test_project.gemspec
|
99
|
+
- test/integrations/enrar_in_code_test.rb
|
100
|
+
- test/integrations/rake_test.rb
|
101
|
+
- test/test_helper.rb
|
102
|
+
- test/test_helpers/rake_testing.rb
|
103
|
+
- test/test_helpers/test_project.rb
|
104
|
+
- test/units/configuration_test.rb
|
105
|
+
- test/units/db_test.rb
|
106
|
+
- test/units/enrar_setup_test.rb
|
107
|
+
- test/units/migration_test.rb
|
108
|
+
- test/units/migrator_test.rb
|
109
|
+
- test/units/sanity_test.rb
|
110
|
+
- test/units/schema_test.rb
|
111
|
+
homepage: ''
|
112
|
+
licenses:
|
113
|
+
- MIT
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.0.3
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: Primarily for ActiveRecord Migrations outside rails
|
135
|
+
test_files:
|
136
|
+
- test/fixtures/create_posts.rb
|
137
|
+
- test/fixtures/create_tests.rb
|
138
|
+
- test/fixtures/create_users.rb
|
139
|
+
- test/fixtures/test_project/Gemfile
|
140
|
+
- test/fixtures/test_project/Rakefile
|
141
|
+
- test/fixtures/test_project/bin/connection-test
|
142
|
+
- test/fixtures/test_project/config/database.yml
|
143
|
+
- test/fixtures/test_project/lib/test_project.rb
|
144
|
+
- test/fixtures/test_project/lib/test_project/version.rb
|
145
|
+
- test/fixtures/test_project/test_project.gemspec
|
146
|
+
- test/integrations/enrar_in_code_test.rb
|
147
|
+
- test/integrations/rake_test.rb
|
148
|
+
- test/test_helper.rb
|
149
|
+
- test/test_helpers/rake_testing.rb
|
150
|
+
- test/test_helpers/test_project.rb
|
151
|
+
- test/units/configuration_test.rb
|
152
|
+
- test/units/db_test.rb
|
153
|
+
- test/units/enrar_setup_test.rb
|
154
|
+
- test/units/migration_test.rb
|
155
|
+
- test/units/migrator_test.rb
|
156
|
+
- test/units/sanity_test.rb
|
157
|
+
- test/units/schema_test.rb
|