active_wrapper 0.4.2 → 0.4.3

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.
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ .DS_Store
2
+ *.gem
3
+ *.log
4
+ coverage
5
+ pkg
6
+ tmp
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2010
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ ActiveWrapper
2
+ =============
3
+
4
+ Wraps ActiveRecord and Logger for use in non-Rails environments.
5
+
6
+ Compatibility
7
+ -------------
8
+
9
+ Maintained under Ruby 1.9.2.
10
+
11
+ Setup
12
+ -----
13
+
14
+ <pre>
15
+ gem install active_wrapper
16
+ </pre>
17
+
18
+ Usage
19
+ -----
20
+
21
+ <pre>
22
+ require 'rubygems'
23
+ require 'active_wrapper'
24
+
25
+ $db, $log = ActiveWrapper.setup(
26
+ :base => File.dirname(__FILE__),
27
+ :env => 'development',
28
+ :log => 'custom',
29
+ :stdout => true
30
+ )
31
+
32
+ $db.drop_db
33
+ $db.create_db
34
+ $db.establish_connection
35
+ $db.generate_migration('my_migration')
36
+ $db.migrate('001')
37
+ $db.migrate_reset
38
+ $log.info('log this')
39
+ $log.clear
40
+ </pre>
41
+
42
+ <code>ActiveWrapper</code> looks for the following files within the <code>:base</code> directory:
43
+
44
+ * <b>config/database.yml</b>
45
+ * <b>db/migrate/*.rb</b>
46
+
47
+ The <code>:env</code> option is <code>"development"</code> by default.
48
+
49
+ Logger
50
+ ------
51
+
52
+ In the previous example, the log is stored in <b>log/custom.log</b>.
53
+
54
+ If no <code>:log</code> name is specified, the <code>:env</code> option is used for the log name.
55
+
56
+ You may also set <code>:log</code> to false to disable logging entirely.
57
+
58
+ Setting <code>:stdout</code> to true causes stdout and stderr to redirect to the logger. It is false by default.
59
+
60
+ Rakefile
61
+ --------
62
+
63
+ Add this to your project's <b>Rakefile</b> for database migration and log tasks:
64
+
65
+ <pre>
66
+ require 'rubygems'
67
+ require 'rake'
68
+ require 'active_wrapper/tasks'
69
+
70
+ ActiveWrapper::Tasks.new(:log => 'custom') do
71
+ # Put stuff you would normally put in the environment task here
72
+ end
73
+ </pre>
74
+
75
+ Pass the same options to <code>ActiveWrapper::Tasks.new</code> as you would <code>ActiveWrapper.new</code>.
data/Rakefile ADDED
@@ -0,0 +1,89 @@
1
+ require File.dirname(__FILE__) + '/lib/active_wrapper/gems'
2
+
3
+ ActiveWrapper::Gems.activate %w(rake rspec)
4
+
5
+ require 'rake'
6
+ require 'spec/rake/spectask'
7
+
8
+ def gemspec
9
+ @gemspec ||= begin
10
+ file = File.expand_path('../active_wrapper.gemspec', __FILE__)
11
+ eval(File.read(file), binding, file)
12
+ end
13
+ end
14
+
15
+ if defined?(Spec::Rake::SpecTask)
16
+ desc "Run specs"
17
+ Spec::Rake::SpecTask.new do |t|
18
+ t.spec_files = FileList['spec/**/*_spec.rb']
19
+ t.spec_opts = %w(-fs --color)
20
+ end
21
+ task :spec
22
+ task :default => :spec
23
+ end
24
+
25
+ desc "Build gem(s)"
26
+ task :gem do
27
+ old_gemset = ENV['GEMSET']
28
+ root = File.expand_path('../', __FILE__)
29
+ pkg = "#{root}/pkg"
30
+ system "rm -Rf #{pkg}"
31
+ ActiveWrapper::Gems.gemset_names.each do |gemset|
32
+ ENV['GEMSET'] = gemset.to_s
33
+ system "cd #{root} && gem build active_wrapper.gemspec"
34
+ system "mkdir -p #{pkg} && mv *.gem pkg"
35
+ end
36
+ ENV['GEMSET'] = old_gemset
37
+ end
38
+
39
+ namespace :gem do
40
+ desc "Install gem(s)"
41
+ task :install do
42
+ Rake::Task['gem'].invoke
43
+ Dir["#{File.dirname(__FILE__)}/pkg/*.gem"].each do |pkg|
44
+ system "gem install #{pkg} --no-ri --no-rdoc"
45
+ end
46
+ end
47
+
48
+ desc "Push gem(s)"
49
+ task :push do
50
+ Rake::Task['gem'].invoke
51
+ Dir["#{File.dirname(__FILE__)}/pkg/*.gem"].each do |pkg|
52
+ system "gem push #{pkg}"
53
+ end
54
+ end
55
+ end
56
+
57
+ namespace :gems do
58
+ desc "Install gem dependencies (DEV=0 DOCS=0 GEMSPEC=default SUDO=0)"
59
+ task :install do
60
+ dev = ENV['DEV'] == '1'
61
+ docs = ENV['DOCS'] == '1' ? '' : '--no-ri --no-rdoc'
62
+ gemset = ENV['GEMSET']
63
+ sudo = ENV['SUDO'] == '1' ? 'sudo' : ''
64
+
65
+ ActiveWrapper::Gems.gemset = gemset if gemset
66
+
67
+ if dev
68
+ gems = ActiveWrapper::Gems.gemspec.development_dependencies
69
+ else
70
+ gems = ActiveWrapper::Gems.gemspec.dependencies
71
+ end
72
+
73
+ gems.each do |name|
74
+ name = name.to_s
75
+ version = ActiveWrapper::Gems.versions[name]
76
+ if Gem.source_index.find_name(name, version).empty?
77
+ version = version ? "-v #{version}" : ''
78
+ system "#{sudo} gem install #{name} #{version} #{docs}"
79
+ else
80
+ puts "already installed: #{name} #{version}"
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ desc "Validate the gemspec"
87
+ task :gemspec do
88
+ gemspec.validate
89
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ root = File.expand_path('../', __FILE__)
3
+ lib = "#{root}/lib"
4
+ $:.unshift lib unless $:.include?(lib)
5
+
6
+ require 'active_wrapper/gems'
7
+ ActiveWrapper::Gems.gemset ||= ENV['GEMSET'] || :default
8
+
9
+ Gem::Specification.new do |s|
10
+ ActiveWrapper::Gems.gemspec.hash.each do |key, value|
11
+ if key == 'name' && ActiveWrapper::Gems.gemset != :default
12
+ s.name = "#{value}-#{ActiveWrapper::Gems.gemset}"
13
+ elsif key == 'summary' && ActiveWrapper::Gems.gemset == :solo
14
+ s.summary = value + " (no dependencies)"
15
+ elsif !%w(dependencies development_dependencies).include?(key)
16
+ s.send "#{key}=", value
17
+ end
18
+ end
19
+
20
+ ActiveWrapper::Gems.dependencies.each do |g|
21
+ s.add_dependency g.to_s, ActiveWrapper::Gems.versions[g]
22
+ end
23
+
24
+ ActiveWrapper::Gems.development_dependencies.each do |g|
25
+ s.add_development_dependency g.to_s, ActiveWrapper::Gems.versions[g]
26
+ end
27
+
28
+ s.executables = `cd #{root} && git ls-files -- {bin}/*`.split("\n").collect { |f| File.basename(f) }
29
+ s.files = `cd #{root} && git ls-files`.split("\n")
30
+ s.require_paths = %w(lib)
31
+ s.test_files = `cd #{root} && git ls-files -- {features,test,spec}/*`.split("\n")
32
+ end
@@ -0,0 +1,9 @@
1
+ active_wrapper:
2
+ rake: >=0.8.7
3
+ rspec: ~>1.0
4
+ default:
5
+ activerecord: ~>3.0
6
+ activesupport: ~>3.0
7
+ ar2:
8
+ activerecord: ~>2.0
9
+ solo: null
@@ -0,0 +1,13 @@
1
+ name: active_wrapper
2
+ version: 0.4.3
3
+ authors:
4
+ - Winton Welsh
5
+ email: mail@wintoni.us
6
+ homepage: http://github.com/winton/active_wrapper
7
+ summary: Wraps ActiveRecord and Logger for use in non-Rails environments
8
+ description: Wraps ActiveRecord and Logger for use in non-Rails environments
9
+ dependencies:
10
+ - activerecord
11
+ development_dependencies:
12
+ - rake
13
+ - rspec
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/active_wrapper/gems'
2
+
3
+ ActiveWrapper::Gems.activate %w(activerecord)
4
+
5
+ require 'active_record'
6
+ require 'fileutils'
7
+ require 'logger'
8
+ require 'yaml'
9
+
10
+ $:.unshift File.dirname(__FILE__) + '/active_wrapper'
11
+
12
+ require 'db'
13
+ require 'log'
14
+
15
+ module ActiveWrapper
16
+ class <<self
17
+
18
+ def setup(options={})
19
+
20
+ env = ENV['RACK_ENV'] || ENV['RAILS_ENV'] || ENV['MERB_ENV'] || 'development'
21
+ options = {
22
+ :base => File.dirname($0),
23
+ :env => options[:env] || env,
24
+ :log => options[:env] || env
25
+ }.merge(options.reject { |k, v| v.nil? })
26
+
27
+ db = Db.new(options)
28
+ log = Log.new(options)
29
+
30
+ [ db, log ]
31
+ end
32
+ end
33
+ end
34
+
35
+ ActiveRecord::Base.default_timezone = :utc
@@ -0,0 +1,109 @@
1
+ module ActiveWrapper
2
+ class Db
3
+
4
+ attr_reader :base, :config, :env
5
+
6
+ def initialize(options)
7
+ @adapter = options[:adapter]
8
+ @base = options[:base]
9
+ if File.exists?(path = "#{base}/config/database.yml")
10
+ @config = YAML::load(File.open(path))
11
+ else
12
+ raise "Could not find #{path}"
13
+ end
14
+ @env = options[:env].to_s
15
+ unless config[env]
16
+ raise "Environment \"#{env}\" not found in #{path}"
17
+ end
18
+ end
19
+
20
+ def connected?
21
+ ActiveRecord::Base.connected?
22
+ end
23
+
24
+ def create_db
25
+ establish_connection('database' => nil)
26
+ ActiveRecord::Base.connection.create_database config[env]['database']
27
+ establish_connection({})
28
+ end
29
+
30
+ def drop_db
31
+ establish_connection('database' => nil)
32
+ ActiveRecord::Base.connection.drop_database config[env]['database']
33
+ end
34
+
35
+ def establish_connection(options=nil)
36
+ if !connected? || options
37
+ config_clone = Marshal.load(Marshal.dump(config))
38
+ config_clone[env].merge!(options || {})
39
+ config_clone[env]['adapter'] = @adapter if @adapter
40
+ ActiveRecord::Base.configurations = config_clone
41
+ ActiveRecord::Base.establish_connection(env)
42
+ end
43
+ end
44
+
45
+ def migrate(version=nil)
46
+ establish_connection
47
+ redirect_stdout do
48
+ ActiveRecord::Migrator.migrate("#{base}/db/migrate", version)
49
+ end
50
+ end
51
+
52
+ def migrate_reset
53
+ redirect_stdout do
54
+ migrate(0)
55
+ migrate
56
+ end
57
+ end
58
+
59
+ def generate_migration(name=nil)
60
+ redirect_stdout do
61
+ raise "Please specify desired migration name with NAME=my_migration_name" unless name
62
+
63
+ migration_name = name.strip.chomp
64
+ migrations_path = "#{base}/db/migrate"
65
+ migrations_template = File.expand_path("#{File.dirname(__FILE__)}/../../resources/migration.template")
66
+
67
+ # Find the highest existing migration version or set to 1
68
+ if (existing_migrations = Dir[File.join(migrations_path, '*.rb')]).length > 0
69
+ version = File.basename(existing_migrations.sort.reverse.first)[/^(\d+)_/,1].to_i + 1
70
+ else
71
+ version = 1
72
+ end
73
+
74
+ # Read the contents of the migration template into string
75
+ migrations_template = File.read(migrations_template)
76
+
77
+ # Replace the migration name in template with the acutal one
78
+ migration_content = migrations_template.gsub('__migration_name__', migration_name.camelize)
79
+ migration_content = migration_content.gsub('__migration_table__', migration_name)
80
+
81
+ # Generate migration filename
82
+ migration_filename = "#{"%03d" % version}_#{migration_name}.rb"
83
+
84
+ # Write the migration
85
+ File.open(File.join(migrations_path, migration_filename), "w+") do |migration|
86
+ migration.puts migration_content
87
+ end
88
+
89
+ # Done!
90
+ puts "Successfully created migration #{migration_filename}"
91
+ end
92
+ end
93
+
94
+ def method_missing(method, *args)
95
+ ActiveRecord::Base.connection.send(method, *args)
96
+ end
97
+
98
+ def redirect_stdout(&block)
99
+ if env == 'test'
100
+ stdout = $stdout.dup
101
+ $stdout = $stdout.reopen(RUBY_PLATFORM =~ /mswin/ ? "NUL" : "/dev/null")
102
+ end
103
+ yield
104
+ if env == 'test'
105
+ $stdout.reopen(stdout)
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,154 @@
1
+ unless defined?(ActiveWrapper::Gems)
2
+
3
+ require 'yaml'
4
+
5
+ module ActiveWrapper
6
+ module Gems
7
+ class <<self
8
+
9
+ attr_accessor :config
10
+ attr_reader :gemset, :gemsets, :versions
11
+
12
+ class SimpleStruct
13
+ attr_reader :hash
14
+
15
+ def initialize(hash)
16
+ @hash = hash
17
+ @hash.each do |key, value|
18
+ self.class.send(:define_method, key) { @hash[key] }
19
+ self.class.send(:define_method, "#{key}=") { |v| @hash[key] = v }
20
+ end
21
+ end
22
+ end
23
+
24
+ Gems.config = SimpleStruct.new(
25
+ :gemsets => [ "#{File.expand_path('../../../', __FILE__)}/config/gemsets.yml" ],
26
+ :gemspec => "#{File.expand_path('../../../', __FILE__)}/config/gemspec.yml",
27
+ :warn => true
28
+ )
29
+
30
+ def activate(*gems)
31
+ begin
32
+ require 'rubygems' unless defined?(::Gem)
33
+ rescue LoadError
34
+ puts "rubygems library could not be required" if @config.warn
35
+ end
36
+
37
+ self.gemset ||= gemset_from_loaded_specs
38
+
39
+ gems.flatten.collect(&:to_sym).each do |name|
40
+ version = @versions[name]
41
+ vendor = File.expand_path("../../../vendor/#{name}/lib", __FILE__)
42
+ if File.exists?(vendor)
43
+ $:.unshift vendor
44
+ elsif defined?(gem)
45
+ gem name.to_s, version
46
+ else
47
+ puts "#{name} #{"(#{version})" if version} failed to activate" if @config.warn
48
+ end
49
+ end
50
+ end
51
+
52
+ def dependencies
53
+ dependency_filter(@gemspec.dependencies, @gemset)
54
+ end
55
+
56
+ def development_dependencies
57
+ dependency_filter(@gemspec.development_dependencies, @gemset)
58
+ end
59
+
60
+ def gemset=(gemset)
61
+ if gemset
62
+ @gemset = gemset.to_sym
63
+
64
+ @gemsets = @config.gemsets.reverse.collect { |config|
65
+ if config.is_a?(::String)
66
+ YAML::load(File.read(config)) rescue {}
67
+ elsif config.is_a?(::Hash)
68
+ config
69
+ end
70
+ }.inject({}) do |hash, config|
71
+ deep_merge(hash, symbolize_keys(config))
72
+ end
73
+
74
+ @versions = (@gemsets[gemspec.name.to_sym] || {}).inject({}) do |hash, (key, value)|
75
+ if !value.is_a?(::Hash) && value
76
+ hash[key] = value
77
+ elsif key == @gemset
78
+ (value || {}).each { |k, v| hash[k] = v }
79
+ end
80
+ hash
81
+ end
82
+ else
83
+ @gemset = nil
84
+ @gemsets = nil
85
+ @versions = nil
86
+ end
87
+ end
88
+
89
+ def gemset_names
90
+ (
91
+ [ :default ] +
92
+ @gemsets[gemspec.name.to_sym].inject([]) { |array, (key, value)|
93
+ array.push(key) if value.is_a?(::Hash) || value.nil?
94
+ array
95
+ }
96
+ ).uniq
97
+ end
98
+
99
+ def gemspec(reload=false)
100
+ if @gemspec && !reload
101
+ @gemspec
102
+ else
103
+ data = YAML::load(File.read(@config.gemspec)) rescue {}
104
+ @gemspec = SimpleStruct.new(data)
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def deep_merge(first, second)
111
+ merger = lambda do |key, v1, v2|
112
+ Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2
113
+ end
114
+ first.merge(second, &merger)
115
+ end
116
+
117
+ def dependency_filter(dependencies, match)
118
+ (dependencies || []).inject([]) { |array, value|
119
+ if value.is_a?(::Hash)
120
+ array += value[match.to_s] if value[match.to_s]
121
+ else
122
+ array << value
123
+ end
124
+ array
125
+ }.uniq.collect(&:to_sym)
126
+ end
127
+
128
+ def gemset_from_loaded_specs
129
+ if defined?(Gem)
130
+ Gem.loaded_specs.each do |name, spec|
131
+ if name == gemspec.name
132
+ return :default
133
+ elsif name[0..gemspec.name.length] == "#{gemspec.name}-"
134
+ return name[gemspec.name.length+1..-1].to_sym
135
+ end
136
+ end
137
+ :default
138
+ else
139
+ :none
140
+ end
141
+ end
142
+
143
+ def symbolize_keys(hash)
144
+ return {} unless hash.is_a?(::Hash)
145
+ hash.inject({}) do |options, (key, value)|
146
+ value = symbolize_keys(value) if value.is_a?(::Hash)
147
+ options[(key.to_sym rescue key) || key] = value
148
+ options
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,39 @@
1
+ module ActiveWrapper
2
+ class Log
3
+
4
+ attr_reader :base, :log, :logger, :stdout
5
+
6
+ def initialize(options)
7
+ @base = options[:base]
8
+ @log = options[:log]
9
+ @stdout = options[:stdout]
10
+
11
+ return if @log == false
12
+
13
+ FileUtils.mkdir_p("#{base}/log")
14
+ file = File.open("#{base}/log/#{log}.log", 'a')
15
+ file.sync = true
16
+
17
+ if stdout
18
+ @logger = Logger.new($stdout)
19
+ $stdout.reopen(file)
20
+ $stderr.reopen(file)
21
+ else
22
+ @logger = Logger.new(file)
23
+ end
24
+
25
+ ActiveRecord::Base.logger = @logger
26
+ end
27
+
28
+ def clear
29
+ Dir["#{base}/log/*.log"].each do |file|
30
+ f = File.open(file, "w")
31
+ f.close
32
+ end
33
+ end
34
+
35
+ def method_missing(method, *args)
36
+ logger.send(method, *args)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../active_wrapper")
2
+
3
+ module ActiveWrapper
4
+ class Tasks
5
+
6
+ def initialize(options={}, &block)
7
+
8
+ task :environment do
9
+ $db, $log = ActiveWrapper.setup(options)
10
+ yield if block
11
+ end
12
+
13
+ namespace :db do
14
+ desc "Create the database"
15
+ task :create => :environment do
16
+ $db.create_db
17
+ end
18
+
19
+ desc "Drop the database"
20
+ task :drop => :environment do
21
+ $db.drop_db
22
+ end
23
+
24
+ desc "Migrate the database with optional VERSION"
25
+ task :migrate => :environment do
26
+ $db.migrate(ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
27
+ end
28
+
29
+ desc "Generate a migration with given NAME"
30
+ task :migration => :environment do
31
+ $db.generate_migration(ENV['NAME'])
32
+ end
33
+ end
34
+
35
+ namespace :log do
36
+ desc "Clear all logs"
37
+ task :clear => :environment do
38
+ $log.clear
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ class __migration_name__ < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :__migration_table__ do |t|
4
+
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :__migration_table__
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ActiveWrapper::Db do
4
+
5
+ before(:each) do
6
+ $db, $log, $mail = ActiveWrapper.setup(
7
+ :base => $root + '/spec/fixtures/example_project',
8
+ :env => 'test'
9
+ )
10
+ $db.drop_db
11
+ $db.create_db
12
+ end
13
+
14
+ it "should establish a connection" do
15
+ $db.disconnect!
16
+ $db.establish_connection
17
+ $db.connected?.should == true
18
+ end
19
+
20
+ it "should create a database" do
21
+ $db.current_database.should == 'active_wrapper'
22
+ end
23
+
24
+ it "should drop a database" do
25
+ $db.drop_db
26
+ $db.current_database.should == nil
27
+ end
28
+
29
+ it "should migrate a database" do
30
+ $db.migrate
31
+ $db.execute('insert into tests () values ()')
32
+ $db.execute('select * from tests').num_rows.should == 1
33
+ end
34
+
35
+ it "should migrate reset a database" do
36
+ $db.migrate
37
+ $db.execute('insert into tests () values ()')
38
+ $db.migrate_reset
39
+ $db.execute('select * from tests').num_rows.should == 0
40
+ end
41
+
42
+ it "should generate a migration" do
43
+ $db.generate_migration 'another_test'
44
+ path = $root + "/spec/fixtures/example_project/db/migrate/002_another_test.rb"
45
+ File.exists?(path).should == true
46
+ FileUtils.rm_f path
47
+ end
48
+ end
@@ -0,0 +1,249 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveWrapper::Gems do
4
+
5
+ before(:each) do
6
+ @old_config = ActiveWrapper::Gems.config
7
+
8
+ ActiveWrapper::Gems.config.gemspec = "#{$root}/spec/fixtures/gemspec.yml"
9
+ ActiveWrapper::Gems.config.gemsets = [
10
+ "#{$root}/spec/fixtures/gemsets.yml"
11
+ ]
12
+ ActiveWrapper::Gems.config.warn = true
13
+
14
+ ActiveWrapper::Gems.gemspec true
15
+ ActiveWrapper::Gems.gemset = nil
16
+ end
17
+
18
+ after(:each) do
19
+ ActiveWrapper::Gems.config = @old_config
20
+ end
21
+
22
+ describe :activate do
23
+ it "should activate gems" do
24
+ ActiveWrapper::Gems.stub!(:gem)
25
+ ActiveWrapper::Gems.should_receive(:gem).with('rspec', '=1.3.1')
26
+ ActiveWrapper::Gems.should_receive(:gem).with('rake', '=0.8.7')
27
+ ActiveWrapper::Gems.activate :rspec, 'rake'
28
+ end
29
+ end
30
+
31
+ describe :gemset= do
32
+ before(:each) do
33
+ ActiveWrapper::Gems.config.gemsets = [
34
+ {
35
+ :name => {
36
+ :rake => '>0.8.6',
37
+ :default => {
38
+ :externals => '=1.0.2'
39
+ }
40
+ }
41
+ },
42
+ "#{$root}/spec/fixtures/gemsets.yml"
43
+ ]
44
+ end
45
+
46
+ describe :default do
47
+ before(:each) do
48
+ ActiveWrapper::Gems.gemset = :default
49
+ end
50
+
51
+ it "should set @gemset" do
52
+ ActiveWrapper::Gems.gemset.should == :default
53
+ end
54
+
55
+ it "should set @gemsets" do
56
+ ActiveWrapper::Gems.gemsets.should == {
57
+ :name => {
58
+ :rake => ">0.8.6",
59
+ :default => {
60
+ :externals => '=1.0.2',
61
+ :mysql => "=2.8.1",
62
+ :rspec => "=1.3.1"
63
+ },
64
+ :rspec2 => {
65
+ :mysql2 => "=0.2.6",
66
+ :rspec => "=2.3.0"
67
+ },
68
+ :solo => nil
69
+ }
70
+ }
71
+ end
72
+
73
+ it "should set Gems.versions" do
74
+ ActiveWrapper::Gems.versions.should == {
75
+ :externals => "=1.0.2",
76
+ :mysql => "=2.8.1",
77
+ :rake => ">0.8.6",
78
+ :rspec => "=1.3.1"
79
+ }
80
+ end
81
+
82
+ it "should return proper values for Gems.dependencies" do
83
+ ActiveWrapper::Gems.dependencies.should == [ :rake, :mysql ]
84
+ ActiveWrapper::Gems.development_dependencies.should == []
85
+ end
86
+
87
+ it "should return proper values for Gems.gemset_names" do
88
+ ActiveWrapper::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
89
+ end
90
+ end
91
+
92
+ describe :rspec2 do
93
+ before(:each) do
94
+ ActiveWrapper::Gems.gemset = "rspec2"
95
+ end
96
+
97
+ it "should set @gemset" do
98
+ ActiveWrapper::Gems.gemset.should == :rspec2
99
+ end
100
+
101
+ it "should set @gemsets" do
102
+ ActiveWrapper::Gems.gemsets.should == {
103
+ :name => {
104
+ :rake => ">0.8.6",
105
+ :default => {
106
+ :externals => '=1.0.2',
107
+ :mysql => "=2.8.1",
108
+ :rspec => "=1.3.1"
109
+ },
110
+ :rspec2 => {
111
+ :mysql2=>"=0.2.6",
112
+ :rspec => "=2.3.0"
113
+ },
114
+ :solo => nil
115
+ }
116
+ }
117
+ end
118
+
119
+ it "should set Gems.versions" do
120
+ ActiveWrapper::Gems.versions.should == {
121
+ :mysql2 => "=0.2.6",
122
+ :rake => ">0.8.6",
123
+ :rspec => "=2.3.0"
124
+ }
125
+ end
126
+
127
+ it "should return proper values for Gems.dependencies" do
128
+ ActiveWrapper::Gems.dependencies.should == [ :rake, :mysql2 ]
129
+ ActiveWrapper::Gems.development_dependencies.should == []
130
+ end
131
+
132
+ it "should return proper values for Gems.gemset_names" do
133
+ ActiveWrapper::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
134
+ end
135
+ end
136
+
137
+ describe :solo do
138
+ before(:each) do
139
+ ActiveWrapper::Gems.gemset = :solo
140
+ end
141
+
142
+ it "should set @gemset" do
143
+ ActiveWrapper::Gems.gemset.should == :solo
144
+ end
145
+
146
+ it "should set @gemsets" do
147
+ ActiveWrapper::Gems.gemsets.should == {
148
+ :name => {
149
+ :rake => ">0.8.6",
150
+ :default => {
151
+ :externals => '=1.0.2',
152
+ :mysql => "=2.8.1",
153
+ :rspec => "=1.3.1"
154
+ },
155
+ :rspec2 => {
156
+ :mysql2=>"=0.2.6",
157
+ :rspec => "=2.3.0"
158
+ },
159
+ :solo => nil
160
+ }
161
+ }
162
+ end
163
+
164
+ it "should set Gems.versions" do
165
+ ActiveWrapper::Gems.versions.should == {:rake=>">0.8.6"}
166
+ end
167
+
168
+ it "should return proper values for Gems.dependencies" do
169
+ ActiveWrapper::Gems.dependencies.should == [:rake]
170
+ ActiveWrapper::Gems.development_dependencies.should == []
171
+ end
172
+
173
+ it "should return proper values for Gems.gemset_names" do
174
+ ActiveWrapper::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
175
+ end
176
+ end
177
+
178
+ describe :nil do
179
+ before(:each) do
180
+ ActiveWrapper::Gems.gemset = nil
181
+ end
182
+
183
+ it "should set everything to nil" do
184
+ ActiveWrapper::Gems.gemset.should == nil
185
+ ActiveWrapper::Gems.gemsets.should == nil
186
+ ActiveWrapper::Gems.versions.should == nil
187
+ end
188
+ end
189
+ end
190
+
191
+ describe :gemset_from_loaded_specs do
192
+ before(:each) do
193
+ Gem.stub!(:loaded_specs)
194
+ end
195
+
196
+ it "should return the correct gemset for name gem" do
197
+ Gem.should_receive(:loaded_specs).and_return({ "name" => nil })
198
+ ActiveWrapper::Gems.send(:gemset_from_loaded_specs).should == :default
199
+ end
200
+
201
+ it "should return the correct gemset for name-rspec gem" do
202
+ Gem.should_receive(:loaded_specs).and_return({ "name-rspec2" => nil })
203
+ ActiveWrapper::Gems.send(:gemset_from_loaded_specs).should == :rspec2
204
+ end
205
+ end
206
+
207
+ describe :reload_gemspec do
208
+ it "should populate @gemspec" do
209
+ ActiveWrapper::Gems.gemspec.hash.should == {
210
+ "name" => "name",
211
+ "version" => "0.1.0",
212
+ "authors" => ["Author"],
213
+ "email" => "email@email.com",
214
+ "homepage" => "http://github.com/author/name",
215
+ "summary" => "Summary",
216
+ "description" => "Description",
217
+ "dependencies" => [
218
+ "rake",
219
+ { "default" => [ "mysql" ] },
220
+ { "rspec2" => [ "mysql2" ] }
221
+ ],
222
+ "development_dependencies" => nil
223
+ }
224
+ end
225
+
226
+ it "should create methods from keys of @gemspec" do
227
+ ActiveWrapper::Gems.gemspec.name.should == "name"
228
+ ActiveWrapper::Gems.gemspec.version.should == "0.1.0"
229
+ ActiveWrapper::Gems.gemspec.authors.should == ["Author"]
230
+ ActiveWrapper::Gems.gemspec.email.should == "email@email.com"
231
+ ActiveWrapper::Gems.gemspec.homepage.should == "http://github.com/author/name"
232
+ ActiveWrapper::Gems.gemspec.summary.should == "Summary"
233
+ ActiveWrapper::Gems.gemspec.description.should == "Description"
234
+ ActiveWrapper::Gems.gemspec.dependencies.should == [
235
+ "rake",
236
+ { "default" => ["mysql"] },
237
+ { "rspec2" => [ "mysql2" ] }
238
+ ]
239
+ ActiveWrapper::Gems.gemspec.development_dependencies.should == nil
240
+ end
241
+
242
+ it "should produce a valid gemspec" do
243
+ ActiveWrapper::Gems.gemset = :default
244
+ gemspec = File.expand_path("../../../active_wrapper.gemspec", __FILE__)
245
+ gemspec = eval(File.read(gemspec), binding, gemspec)
246
+ gemspec.validate.should == true
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
2
+
3
+ describe ActiveWrapper::Log do
4
+
5
+ before(:each) do
6
+ FileUtils.rm_f(@path = $root + "/spec/fixtures/example_project/log/test.log")
7
+ $db, $log, $mail = ActiveWrapper.setup(
8
+ :base => $root + '/spec/fixtures/example_project',
9
+ :env => 'test'
10
+ )
11
+ end
12
+
13
+ it "should create a log file" do
14
+ File.exists?(@path).should == true
15
+ end
16
+
17
+ it "should log to the log file" do
18
+ $log.info "test"
19
+ File.read(@path).include?('test').should == true
20
+ end
21
+
22
+ it "should clear the log file while keeping the logger intact" do
23
+ $log.clear
24
+ File.read(@path).include?('test').should == false
25
+ $log.info "test"
26
+ File.read(@path).include?('test').should == true
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require File.expand_path(File.dirname(__FILE__) + "/../../lib/active_wrapper/tasks")
4
+
5
+ ActiveWrapper::Tasks.new(
6
+ :base => File.dirname(__FILE__),
7
+ :env => 'test'
8
+ )
@@ -0,0 +1,6 @@
1
+ test:
2
+ database: active_wrapper
3
+ adapter: mysql
4
+ username: root
5
+ password:
6
+ host: localhost
@@ -0,0 +1,10 @@
1
+ class Test < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :tests do |t|
4
+ end
5
+ end
6
+
7
+ def self.down
8
+ drop_table :tests
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ name:
2
+ rake: =0.8.7
3
+ default:
4
+ mysql: =2.8.1
5
+ rspec: =1.3.1
6
+ rspec2:
7
+ mysql2: =0.2.6
8
+ rspec: =2.3.0
9
+ solo: null
@@ -0,0 +1,15 @@
1
+ name: name
2
+ version: 0.1.0
3
+ authors:
4
+ - Author
5
+ email: email@email.com
6
+ homepage: http://github.com/author/name
7
+ summary: Summary
8
+ description: Description
9
+ dependencies:
10
+ - rake
11
+ - default:
12
+ - mysql
13
+ - rspec2:
14
+ - mysql2
15
+ development_dependencies: null
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,13 @@
1
+ require 'pp'
2
+
3
+ $root = File.expand_path('../../', __FILE__)
4
+
5
+ require "#{$root}/lib/active_wrapper/gems"
6
+
7
+ ActiveWrapper::Gems.gemset = ENV['GEMSET'] if ENV['GEMSET']
8
+ ActiveWrapper::Gems.activate :rspec
9
+
10
+ require "#{$root}/lib/active_wrapper"
11
+
12
+ Spec::Runner.configure do |config|
13
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 2
9
- version: 0.4.2
8
+ - 3
9
+ version: 0.4.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Winton Welsh
@@ -68,8 +68,30 @@ extensions: []
68
68
 
69
69
  extra_rdoc_files: []
70
70
 
71
- files: []
72
-
71
+ files:
72
+ - .gitignore
73
+ - LICENSE
74
+ - README.md
75
+ - Rakefile
76
+ - active_wrapper.gemspec
77
+ - config/gemsets.yml
78
+ - config/gemspec.yml
79
+ - lib/active_wrapper.rb
80
+ - lib/active_wrapper/db.rb
81
+ - lib/active_wrapper/gems.rb
82
+ - lib/active_wrapper/log.rb
83
+ - lib/active_wrapper/tasks.rb
84
+ - resources/migration.template
85
+ - spec/active_wrapper/db_spec.rb
86
+ - spec/active_wrapper/gems_spec.rb
87
+ - spec/active_wrapper/log_spec.rb
88
+ - spec/fixtures/example_project/Rakefile
89
+ - spec/fixtures/example_project/config/database.yml
90
+ - spec/fixtures/example_project/db/migrate/001_test.rb
91
+ - spec/fixtures/gemsets.yml
92
+ - spec/fixtures/gemspec.yml
93
+ - spec/spec.opts
94
+ - spec/spec_helper.rb
73
95
  has_rdoc: true
74
96
  homepage: http://github.com/winton/active_wrapper
75
97
  licenses: []
@@ -102,5 +124,14 @@ rubygems_version: 1.3.7
102
124
  signing_key:
103
125
  specification_version: 3
104
126
  summary: Wraps ActiveRecord and Logger for use in non-Rails environments
105
- test_files: []
106
-
127
+ test_files:
128
+ - spec/active_wrapper/db_spec.rb
129
+ - spec/active_wrapper/gems_spec.rb
130
+ - spec/active_wrapper/log_spec.rb
131
+ - spec/fixtures/example_project/Rakefile
132
+ - spec/fixtures/example_project/config/database.yml
133
+ - spec/fixtures/example_project/db/migrate/001_test.rb
134
+ - spec/fixtures/gemsets.yml
135
+ - spec/fixtures/gemspec.yml
136
+ - spec/spec.opts
137
+ - spec/spec_helper.rb