winton-active_wrapper 0.1.0

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/MIT-LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2009 Winton Welsh
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.markdown ADDED
@@ -0,0 +1,68 @@
1
+ ActiveWrapper
2
+ =============
3
+
4
+ Wraps ActiveRecord and Logger for use in non-Rails environments.
5
+
6
+ Setup
7
+ -----
8
+
9
+ <pre>
10
+ sudo gem install active_wrapper
11
+ </pre>
12
+
13
+ Usage
14
+ -----
15
+
16
+ <pre>
17
+ require 'rubygems'
18
+ require 'active_wrapper'
19
+
20
+ $db, $log = ActiveWrapper.new(
21
+ :base => File.dirname('__FILE__'),
22
+ :env => 'development',
23
+ :log => 'custom',
24
+ :stdout => true
25
+ )
26
+
27
+ $db.establish_connection
28
+ $db.generate_migration('my_migration')
29
+ $db.migrate('001')
30
+ $db.migrate_reset
31
+ $log.info('log this')
32
+ $log.clear
33
+ </pre>
34
+
35
+ <code>ActiveWrapper</code> looks for the following files within the <code>:base</code> directory:
36
+
37
+ * <b>config/database.yml</b>
38
+ * <b>db/migrate/*.rb</b>
39
+
40
+ The <code>:env</code> option is <code>"development"</code> by default.
41
+
42
+ Logger
43
+ ------
44
+
45
+ In the previous example, the log is stored in <b>log/custom.log</b>.
46
+
47
+ If no <code>:log</code> name is specified, the <code>:env</code> option is used for the log name.
48
+
49
+ You may also set <code>:log</code> to false to disable logging entirely.
50
+
51
+ Setting <code>:stdout</code> to true causes stdout and stderr to redirect to the logger. It is false by default.
52
+
53
+ Rakefile
54
+ --------
55
+
56
+ Add this to your project's <b>Rakefile</b> for database migration and log tasks:
57
+
58
+ <pre>
59
+ require 'rubygems'
60
+ require 'rake'
61
+ require 'active_wrapper/tasks'
62
+
63
+ ActiveWrapper::Tasks.new(:log => 'custom') do
64
+ # Put stuff you would normally put in the environment task here
65
+ end
66
+ </pre>
67
+
68
+ Pass the same options to <code>ActiveWrapper::Tasks.new</code> as you would <code>ActiveWrapper.new</code>.
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/gempackagetask'
4
+ require 'spec/rake/spectask'
5
+ require 'gemspec'
6
+
7
+ desc "Generate gemspec"
8
+ task :gemspec do
9
+ File.open("#{Dir.pwd}/#{GEM_NAME}.gemspec", 'w') do |f|
10
+ f.write(GEM_SPEC.to_ruby)
11
+ end
12
+ end
13
+
14
+ desc "Install gem"
15
+ task :install do
16
+ Rake::Task['gem'].invoke
17
+ `sudo gem uninstall #{GEM_NAME} -x`
18
+ `sudo gem install pkg/#{GEM_NAME}*.gem`
19
+ `rm -Rf pkg`
20
+ end
21
+
22
+ desc "Package gem"
23
+ Rake::GemPackageTask.new(GEM_SPEC) do |pkg|
24
+ pkg.gem_spec = GEM_SPEC
25
+ end
26
+
27
+ desc "Setup project"
28
+ task :setup do
29
+ name = File.basename(Dir.pwd)
30
+ `rm -Rf .git`
31
+ begin
32
+ dir = Dir['**/gem_template*']
33
+ from = dir.pop
34
+ if from
35
+ rb = from.include?('.rb')
36
+ to = File.dirname(from) + "/#{name}#{'.rb' if rb}"
37
+ FileUtils.mv(from, to)
38
+ end
39
+ end while dir.length > 0
40
+ Dir["**/*"].each do |path|
41
+ next if path.include?('Rakefile')
42
+ if File.file?(path)
43
+ `sed -i "" 's/gem_template/#{name}/g' #{path}`
44
+ end
45
+ end
46
+ `git init`
47
+ end
48
+
49
+ desc "Run specs"
50
+ Spec::Rake::SpecTask.new do |t|
51
+ t.rcov = true
52
+ t.spec_opts = ["--format", "specdoc", "--colour"]
53
+ t.spec_files = FileList["spec/**/*_spec.rb"]
54
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{active_wrapper}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Winton Welsh"]
9
+ s.date = %q{2009-06-14}
10
+ s.email = %q{mail@wintoni.us}
11
+ s.extra_rdoc_files = ["README.markdown"]
12
+ s.files = ["active_wrapper.gemspec", "gemspec.rb", "lib", "lib/active_wrapper", "lib/active_wrapper/db.rb", "lib/active_wrapper/log.rb", "lib/active_wrapper/tasks.rb", "lib/active_wrapper.rb", "MIT-LICENSE", "Rakefile", "README.markdown", "resources", "resources/migration.template", "spec", "spec/spec.opts", "spec/spec_helper.rb"]
13
+ s.homepage = %q{http://github.com/winton/active_wrapper}
14
+ s.require_paths = ["lib"]
15
+ s.rubygems_version = %q{1.3.1}
16
+ s.summary = %q{Wraps ActiveRecord and Logger for use in non-Rails environments}
17
+
18
+ if s.respond_to? :specification_version then
19
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
20
+ s.specification_version = 2
21
+
22
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
23
+ else
24
+ end
25
+ else
26
+ end
27
+ end
data/gemspec.rb ADDED
@@ -0,0 +1,17 @@
1
+ GEM_NAME = 'active_wrapper'
2
+ GEM_FILES = FileList['**/*'] - FileList['coverage', 'coverage/**/*', 'pkg', 'pkg/**/*']
3
+ GEM_SPEC = Gem::Specification.new do |s|
4
+ # == CONFIGURE ==
5
+ s.author = "Winton Welsh"
6
+ s.email = "mail@wintoni.us"
7
+ s.homepage = "http://github.com/winton/#{GEM_NAME}"
8
+ s.summary = "Wraps ActiveRecord and Logger for use in non-Rails environments"
9
+ # == CONFIGURE ==
10
+ s.extra_rdoc_files = [ "README.markdown" ]
11
+ s.files = GEM_FILES.to_a
12
+ s.has_rdoc = false
13
+ s.name = GEM_NAME
14
+ s.platform = Gem::Platform::RUBY
15
+ s.require_path = "lib"
16
+ s.version = "0.1.0"
17
+ end
@@ -0,0 +1,61 @@
1
+ module ActiveWrapper
2
+ class Db
3
+
4
+ attr_reader :base, :env
5
+
6
+ def initialize(options)
7
+ @base = options[:base]
8
+ @env = options[:env]
9
+ end
10
+
11
+ def establish_connection
12
+ unless ActiveRecord::Base.connected?
13
+ config = YAML::load(File.open("#{base}/config/database.yml"))
14
+ ActiveRecord::Base.configurations = config
15
+ ActiveRecord::Base.establish_connection(env)
16
+ end
17
+ end
18
+
19
+ def migrate(version=nil)
20
+ ActiveRecord::Migrator.migrate("#{base}/db/migrate", version)
21
+ end
22
+
23
+ def migrate_reset
24
+ db_migrate(0)
25
+ db_migrate
26
+ end
27
+
28
+ def generate_migration(name=nil)
29
+ raise "Please specify desired migration name with NAME=my_migration_name" unless name
30
+
31
+ migration_name = name.strip.chomp
32
+ migrations_path = "#{base}/db/migrate"
33
+ migrations_template = File.expand_path("#{File.dirname(__FILE__)}/../../resources/migration.template")
34
+
35
+ # Find the highest existing migration version or set to 1
36
+ if (existing_migrations = Dir[File.join(migrations_path, '*.rb')]).length > 0
37
+ version = File.basename(existing_migrations.sort.reverse.first)[/^(\d+)_/,1].to_i + 1
38
+ else
39
+ version = 1
40
+ end
41
+
42
+ # Read the contents of the migration template into string
43
+ migrations_template = File.read(migrations_template)
44
+
45
+ # Replace the migration name in template with the acutal one
46
+ migration_content = migrations_template.gsub('__migration_name__', migration_name.camelize)
47
+ migration_content = migration_content.gsub('__migration_table__', migration_name)
48
+
49
+ # Generate migration filename
50
+ migration_filename = "#{"%03d" % version}_#{migration_name}.rb"
51
+
52
+ # Write the migration
53
+ File.open(File.join(migrations_path, migration_filename), "w+") do |migration|
54
+ migration.puts migration_content
55
+ end
56
+
57
+ # Done!
58
+ puts "Successfully created migration #{migration_filename}"
59
+ end
60
+ end
61
+ 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,35 @@
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.new(options)
10
+ yield
11
+ end
12
+
13
+ namespace :db do
14
+ desc "Migrate the database with optional VERSION"
15
+ task :migrate => :environment do
16
+ $db.migrate(ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
17
+ end
18
+ end
19
+
20
+ namespace :generate do
21
+ desc "Generate a migration with given NAME"
22
+ task :migration => :environment do
23
+ $db.generate_migration(ENV['NAME'])
24
+ end
25
+ end
26
+
27
+ namespace :log do
28
+ desc "Clear all logs"
29
+ task :clear => :environment do
30
+ $log.clear
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + "/active_wrapper/db"
2
+ require File.dirname(__FILE__) + "/active_wrapper/log"
3
+
4
+ class ActiveWrapper
5
+
6
+ def initialize(options={})
7
+
8
+ options = {
9
+ :base => File.dirname($0),
10
+ :env => 'development',
11
+ :log => 'development'
12
+ }.merge(options)
13
+
14
+ [ Db.new(options), Log.new(options) ]
15
+ end
16
+ 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
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,16 @@
1
+ $TESTING=true
2
+ SPEC = File.dirname(__FILE__)
3
+ $:.unshift File.expand_path("#{SPEC}/../lib")
4
+
5
+ require 'active_wrapper'
6
+ require 'pp'
7
+
8
+ Spec::Runner.configure do |config|
9
+ end
10
+
11
+ # For use with rspec textmate bundle
12
+ def debug(object)
13
+ puts "<pre>"
14
+ puts object.pretty_inspect.gsub('<', '&lt;').gsub('>', '&gt;')
15
+ puts "</pre>"
16
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: winton-active_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Winton Welsh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-14 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: mail@wintoni.us
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.markdown
24
+ files:
25
+ - active_wrapper.gemspec
26
+ - gemspec.rb
27
+ - lib
28
+ - lib/active_wrapper
29
+ - lib/active_wrapper/db.rb
30
+ - lib/active_wrapper/log.rb
31
+ - lib/active_wrapper/tasks.rb
32
+ - lib/active_wrapper.rb
33
+ - MIT-LICENSE
34
+ - Rakefile
35
+ - README.markdown
36
+ - resources
37
+ - resources/migration.template
38
+ - spec
39
+ - spec/spec.opts
40
+ - spec/spec_helper.rb
41
+ has_rdoc: false
42
+ homepage: http://github.com/winton/active_wrapper
43
+ post_install_message:
44
+ rdoc_options: []
45
+
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ requirements: []
61
+
62
+ rubyforge_project:
63
+ rubygems_version: 1.2.0
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: Wraps ActiveRecord and Logger for use in non-Rails environments
67
+ test_files: []
68
+