james2m-acts_as_fu 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/acts-as-fu.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/acts_as_fu.rb'
@@ -0,0 +1,85 @@
1
+ %w(rubygems activerecord).each { |lib| require lib }
2
+
3
+ RAILS_ROOT = File.join(File.dirname(__FILE__), '..') unless defined?(RAILS_ROOT)
4
+ RAILS_ENV = 'test' unless defined?(RAILS_ENV)
5
+
6
+ module ActsAsFu
7
+
8
+ class Connection < ActiveRecord::Base
9
+ cattr_accessor :connected
10
+ cattr_reader :log
11
+ self.abstract_class = true
12
+
13
+ def self.connect!(config={})
14
+ @@log = ""
15
+ self.logger = Logger.new(StringIO.new(log))
16
+ self.connection.disconnect! rescue nil
17
+ self.establish_connection(config)
18
+ end
19
+ end
20
+
21
+ def build_model(name, options={}, &block)
22
+ connect! unless connected?
23
+
24
+ super_class = options[:superclass] || begin
25
+ ActsAsFu::Connection.connection.create_table(name, :force => true) { }
26
+ ActsAsFu::Connection
27
+ end
28
+
29
+ set_class!(name, super_class, &block)
30
+ end
31
+
32
+ private
33
+
34
+ def set_class!(name, super_class, &block)
35
+ klass_name = name.to_s.classify
36
+ Object.send(:remove_const, klass_name) rescue nil
37
+
38
+ klass = Class.new(super_class)
39
+ set_class_constant(klass_name, klass)
40
+
41
+ model_eval(klass, &block)
42
+ klass
43
+ end
44
+
45
+ def set_class_constant(klass_name, klass)
46
+ modules = klass_name.split('::')
47
+ if modules.size == 1
48
+ Object.const_set(klass_name, klass)
49
+ else
50
+ klass_const = modules.pop
51
+ namespaced_module = modules.join('::').constantize
52
+ namespaced_module.const_set(klass_const, klass)
53
+ end
54
+ end
55
+
56
+ def connect!
57
+ ActsAsFu::Connection.connect!({
58
+ :adapter => "sqlite3",
59
+ :database => ":memory:"
60
+ })
61
+ ActsAsFu::Connection.connected = true
62
+ end
63
+
64
+ def connected?
65
+ ActsAsFu::Connection.connected
66
+ end
67
+
68
+ def model_eval(klass, &block)
69
+ class << klass
70
+ def method_missing_with_columns(sym, *args, &block)
71
+ ActsAsFu::Connection.connection.change_table(name.tableize) do |t|
72
+ t.send(sym, *args)
73
+ end
74
+ end
75
+
76
+ alias_method_chain :method_missing, :columns
77
+ end
78
+
79
+ klass.class_eval(&block) if block_given?
80
+
81
+ class << klass
82
+ alias_method :method_missing, :method_missing_without_columns
83
+ end
84
+ end
85
+ end
data/lib/acts_as_fu.rb ADDED
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+
3
+ require 'acts_as_fu/base'
4
+
5
+ include ActsAsFu
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: james2m-acts_as_fu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Pat Nakajima
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activerecord
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description:
26
+ email: patnakajima@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - lib/acts_as_fu
35
+ - lib/acts-as-fu.rb
36
+ - lib/acts_as_fu/base.rb
37
+ - lib/acts_as_fu.rb
38
+ has_rdoc: true
39
+ homepage: http://github.com/james2m/acts_as_fu
40
+ post_install_message:
41
+ rdoc_options: []
42
+
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.2.0
61
+ signing_key:
62
+ specification_version: 2
63
+ summary: Generate ActiveRecord models on the fly for your tests
64
+ test_files: []
65
+