legacy_data 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -17,10 +17,43 @@ class ModelsFromTablesGenerator < Rails::Generator::Base
17
17
 
18
18
  analyzed_tables.each do |analyzed_table|
19
19
  analyzed_table.class_name = LegacyData::TableClassNameMapper.class_name_for(analyzed_table[:table_name])
20
+
20
21
  m.class_collisions :class_path, analyzed_table[:class_name]
21
22
  m.template 'model.rb',
22
23
  File.join('app/models', "#{analyzed_table[:class_name].underscore}.rb"),
23
24
  :assigns => analyzed_table.to_hash
25
+
26
+ add_factory_girl_factory analyzed_table.to_hash
27
+
28
+ # # puts m.source_root
29
+ # # factory_template = m.source_path('factory.rb')
30
+ #
31
+ # factory_template = File.dirname(__FILE__) + '/templates/factory.rb'
32
+ # puts "factory_template #{factory_template}"
33
+ # new_factory = m.send(:render_file, factory_template) do |file|
34
+ # # vars = analyzed_table.to_hash
35
+ # # b = binding
36
+ # # vars.each { |k,v| eval "#{k} = vars[:#{k}] || vars['#{k}']", b }
37
+ # # puts 'in block'
38
+ # "in block"
39
+ # # Render the source file with the temporary binding.
40
+ # # ERB.new(file.read, nil, '-').result(b)
41
+ # end
42
+ # puts 'after new_factory'
43
+ # puts " its... #{new_factory}"
44
+ #
45
+ # m.gsub_file 'spec/factories.rb', /\Z/ do |match|
46
+ # # # # puts match
47
+ # # # puts 'BEFORE'
48
+ # # # # puts m.source_path('factory.rb')
49
+ # # # # puts analyzed_table.to_hash.inspect
50
+ # # # puts 'BEFORE'
51
+ # puts 'before'
52
+ # puts new_factory
53
+ # puts "DONE"
54
+ # "#{match}\n #{new_factory}\n"
55
+ # # "#{match}\n ok \n"
56
+ # end
24
57
  end
25
58
  end
26
59
  rescue => e
@@ -38,4 +71,36 @@ protected
38
71
  'Do not follow foreign keys to model associated tables') { |value| options[:skip_associated] = true }
39
72
  end
40
73
 
74
+
75
+ def add_factory_girl_factory analyzed_schema
76
+ factory_name = analyzed_schema[:class_name].underscore
77
+ columns = analyzed_schema[:columns]
78
+
79
+ File.open("#{RAILS_ROOT}/spec/factories.rb", 'a+') do |file|
80
+ file.write "Factory.define :#{factory_name} do |#{factory_name.to_s.first}|\n"
81
+ columns.each do |c|
82
+ if c.null == false && c.name != analyzed_schema[:primary_key]
83
+ value = case c.type
84
+ when :integer
85
+ "7"
86
+ when :string
87
+ "'hi'"
88
+ when :boolean
89
+ 'false'
90
+ when :date
91
+ '{Time.now}'
92
+ when :datetime
93
+ '{Time.now}'
94
+ when :decimal
95
+ '12.3'
96
+ else
97
+ raise "the generator forgot to handle columns of type #{c.type}"
98
+ end
99
+ file.write " #{factory_name.to_s.first}.#{c.name} #{value}\n"
100
+ end
101
+ end
102
+ file.write "end\n\n"
103
+ end
104
+ end
105
+
41
106
  end
data/legacy_data.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{legacy_data}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alex Rothenberg"]
12
- s.date = %q{2009-10-12}
12
+ s.date = %q{2009-10-13}
13
13
  s.description = %q{Create ActiveRecord models from an existing database}
14
14
  s.email = %q{alex@alexrothenberg.com}
15
15
  s.extra_rdoc_files = [
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "lib/legacy_data/schema.rb",
34
34
  "lib/legacy_data/table_class_name_mapper.rb",
35
35
  "lib/legacy_data/table_definition.rb",
36
+ "spec/expected/factories.rb",
36
37
  "spec/expected/post.rb",
37
38
  "spec/functional/expected/comment.rb",
38
39
  "spec/functional/expected/post.rb",
@@ -51,7 +52,8 @@ Gem::Specification.new do |s|
51
52
  s.rubygems_version = %q{1.3.2}
52
53
  s.summary = %q{Create ActiveRecord models from an existing database}
53
54
  s.test_files = [
54
- "spec/expected/post.rb",
55
+ "spec/expected/factories.rb",
56
+ "spec/expected/post.rb",
55
57
  "spec/functional/expected/comment.rb",
56
58
  "spec/functional/expected/post.rb",
57
59
  "spec/functional/functional_spec_helper.rb",
@@ -66,7 +66,7 @@ module LegacyData
66
66
  def analyze_table
67
67
  log "analyzing #{table_name} => #{class_name}"
68
68
  TableDefinition.new(:table_name => table_name,
69
- :columns => column_names,
69
+ :columns => columns,
70
70
  :primary_key => primary_key,
71
71
  :relations => relations,
72
72
  :constraints => constraints
@@ -0,0 +1,5 @@
1
+ Factory.define :post do |p|
2
+ p.title 'hi'
3
+ p.body 'hi'
4
+ end
5
+
@@ -4,6 +4,7 @@ describe 'Models From Tables generator' do
4
4
  before :all do
5
5
  silence_warnings { RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/../../output/functional') }
6
6
  FileUtils.mkdir_p(RAILS_ROOT + '/app/models')
7
+ FileUtils.mkdir_p(RAILS_ROOT + '/spec')
7
8
 
8
9
  LegacyData::Schema.stub!(:log)
9
10
  end
@@ -45,7 +45,7 @@ describe LegacyData::Schema do
45
45
 
46
46
  it 'should have all the information about the table' do
47
47
  @schema.stub!(:class_name ).and_return(class_name =mock)
48
- @schema.stub!(:column_names).and_return(columns =mock)
48
+ @schema.stub!(:columns ).and_return(columns =mock)
49
49
  @schema.stub!(:primary_key ).and_return(primary_key=mock)
50
50
  @schema.stub!(:relations ).and_return(relations =mock)
51
51
  @schema.stub!(:constraints ).and_return(constraints=mock)
@@ -2,17 +2,21 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe 'Models From Tables generator' do
4
4
  before :all do
5
- silence_warnings { RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/../../output') }
5
+ silence_warnings { RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/../output') }
6
6
  FileUtils.mkdir_p(RAILS_ROOT + '/app/models')
7
+ FileUtils.mkdir_p(RAILS_ROOT + '/spec')
7
8
  end
8
9
  after :all do
9
10
  Object.send(:remove_const, :RAILS_ROOT)
10
11
  end
11
12
 
12
13
  before :each do
14
+ FileUtils.rm(RAILS_ROOT + '/spec/factories.rb')
15
+
13
16
  @posts = LegacyData::TableDefinition.new( :class_name => 'Posts',
14
17
  :table_name => 'posts',
15
- :columns => ['title', 'body'],
18
+ :columns => [stub(:name=>'title', :null=>false, :type=>:string),
19
+ stub(:name=>'body', :null=>false, :type=>:string)],
16
20
  :primary_key => 'id',
17
21
  :relations => { :has_many =>{'comments'=>{:foreign_key=>'comment_id'}},
18
22
  :belongs_to =>{},
@@ -27,16 +31,21 @@ describe 'Models From Tables generator' do
27
31
  }
28
32
  )
29
33
 
30
- end
31
-
32
- it 'should generate a posts model' do
34
+
33
35
  LegacyData::Schema.should_receive(:analyze).with(hash_including(:table_name=>'posts')).and_return([@posts])
34
36
  LegacyData::TableClassNameMapper.should_receive(:let_user_validate_dictionary)
35
37
  LegacyData::TableClassNameMapper.stub!(:class_name_for).with('posts' ).and_return('Post')
36
38
  LegacyData::TableClassNameMapper.stub!(:class_name_for).with('comments').and_return('Comment')
37
39
 
38
40
  invoke_generator('models_from_tables', ["--table-name", "posts"], :create)
39
-
41
+ end
42
+
43
+ it 'should generate a posts model' do
40
44
  File.read(RAILS_ROOT + '/app/models/post.rb').should == File.read(File.expand_path(File.dirname(__FILE__) + '/expected/post.rb'))
41
45
  end
46
+
47
+ it 'should generate a :posts factory' do
48
+
49
+ File.read(RAILS_ROOT + '/spec/factories.rb').should == File.read(File.expand_path(File.dirname(__FILE__) + '/expected/factories.rb'))
50
+ end
42
51
  end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,8 @@ require 'rubygems'
2
2
  require 'activerecord'
3
3
  # require 'active_record/connection_adapters/oracle_enhanced_adapter'
4
4
 
5
+
6
+
5
7
  ## TODO parameterize this ....
6
8
  ActiveRecord::Base.establish_connection({:adapter=>'sqlite3', :database=> ":memory:"})
7
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legacy_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rothenberg
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-12 00:00:00 -04:00
12
+ date: 2009-10-13 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -58,6 +58,7 @@ files:
58
58
  - lib/legacy_data/schema.rb
59
59
  - lib/legacy_data/table_class_name_mapper.rb
60
60
  - lib/legacy_data/table_definition.rb
61
+ - spec/expected/factories.rb
61
62
  - spec/expected/post.rb
62
63
  - spec/functional/expected/comment.rb
63
64
  - spec/functional/expected/post.rb
@@ -97,6 +98,7 @@ signing_key:
97
98
  specification_version: 3
98
99
  summary: Create ActiveRecord models from an existing database
99
100
  test_files:
101
+ - spec/expected/factories.rb
100
102
  - spec/expected/post.rb
101
103
  - spec/functional/expected/comment.rb
102
104
  - spec/functional/expected/post.rb