mongify 0.0.8 → 0.0.9

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.
@@ -1,3 +1,9 @@
1
+ == 0.0.9 / 19 Jan 2011
2
+ * Added ability to rename tables
3
+ * Fixed bug 'pre_mogified_id' not being removed in all records
4
+ * Added ability to ignore tables
5
+ * Added ability to ignore columns
6
+ * Added ability to rename columns
1
7
  == 0.0.8 / 18 Jan 2011
2
8
  * Added ability to embed as object on an embedded table
3
9
  * Some bugs fixed
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongify (0.0.8)
4
+ mongify (0.0.9)
5
5
  activerecord (>= 2.3.10)
6
6
  activesupport (>= 2.3.10)
7
7
  bson_ext (>= 1.1.5)
@@ -15,8 +15,8 @@ GEM
15
15
  activerecord (2.3.10)
16
16
  activesupport (= 2.3.10)
17
17
  activesupport (2.3.10)
18
- bson (1.1.5)
19
- bson_ext (1.1.5)
18
+ bson (1.2.0)
19
+ bson_ext (1.2.0)
20
20
  builder (3.0.0)
21
21
  cucumber (0.10.0)
22
22
  builder (>= 2.1.2)
@@ -30,8 +30,8 @@ GEM
30
30
  json (1.4.6)
31
31
  mocha (0.9.10)
32
32
  rake
33
- mongo (1.1.5)
34
- bson (>= 1.1.5)
33
+ mongo (1.2.0)
34
+ bson (>= 1.2.0)
35
35
  mysql (2.8.1)
36
36
  mysql2 (0.2.6)
37
37
  net-ssh (2.0.24)
@@ -45,7 +45,9 @@ GEM
45
45
  rspec-expectations (2.4.0)
46
46
  diff-lcs (~> 1.1.2)
47
47
  rspec-mocks (2.4.0)
48
- sqlite3-ruby (1.3.2)
48
+ sqlite3 (1.3.3)
49
+ sqlite3-ruby (1.3.3)
50
+ sqlite3 (>= 1.3.3)
49
51
  term-ansicolor (1.0.5)
50
52
  watchr (0.7)
51
53
  yard (0.6.4)
@@ -54,16 +56,10 @@ PLATFORMS
54
56
  ruby
55
57
 
56
58
  DEPENDENCIES
57
- activerecord (>= 2.3.10)
58
- activesupport (>= 2.3.10)
59
- bson_ext (>= 1.1.5)
60
59
  cucumber (>= 0.10)
61
60
  mocha (>= 0.9.8)
62
61
  mongify!
63
- mongo (>= 1.1.5)
64
62
  mysql (>= 2.8.1)
65
- mysql2
66
- net-ssh (>= 2.0)
67
63
  rcov (>= 0.9.9)
68
64
  rspec (>= 2.0)
69
65
  sqlite3-ruby (>= 1.3)
@@ -90,12 +90,21 @@ Save the file as <tt>"translation_file.rb"</tt> and run the command:
90
90
 
91
91
  mongify process translation_file.rb -c database.config
92
92
 
93
- == Translation Options
93
+ == Translation Layout and Options
94
94
 
95
95
  When dealing with a translation, there is a few options you can set
96
96
 
97
97
  === Table
98
98
 
99
+ ==== Structure
100
+
101
+ Structure for defining a table is as follows:
102
+ table "table_name", {options} do
103
+ # columns go here...
104
+ end
105
+
106
+ ==== Options
107
+
99
108
  Table Options are as follow:
100
109
  table "table_name" # Does a straight copy of the table
101
110
  table "table_name", :embed_in => :users # Embeds table_name into users, assuming a user_id is present in table_name.
@@ -104,20 +113,47 @@ Table Options are as follow:
104
113
  # This will also assume you want the table embedded as an array.
105
114
  table "table_name", :embed_in => :users, :as => :object # Embeds table_name into users as a one to one relationship
106
115
  # This also assumes you have a user_id present in table_name
107
- <em>You can also specify both +:on+ and +:as+ options when embedding</em>
116
+ <em>You can also specify both <b>:on</b> and <b>:as</b> options when embedding</em>
117
+
118
+ table "table_name", :rename_to => 'my_table' # This will allow you to rename the table as it's getting process
119
+ # Just remember that columns that use :reference need to
120
+ # reference the new name.
121
+
122
+ table "table_name", :ignore => true # This will ignore the whole table (like it doesn't exist)
123
+ # This option is good for tables like: schema_migrations
108
124
 
109
125
  === Columns
110
- Columns take a few more options:
111
- column "id", :key # Columns that are primary keys and need to be marked as :key
112
- column "title", :string # Data from this column will be copied straight over without modification
113
- column "body", :text # Since mongo doesn't care about text fields, this will just be converted to string
126
+
127
+ ==== Structure
128
+
129
+ Structure for defining a column is as follows:
130
+ column "name", :type, {options}
131
+ <em>Columns with no type given will be set to <tt>:string</tt></em>
132
+
133
+ ==== Notes
134
+ Leaving a column out when defining a table will result in a copy of the information (as a string).
135
+
136
+ ==== Types
137
+
138
+ Before we cover the options, you need to know what types of columns are supported:
139
+ :key # Columns that are primary keys need to be marked as :key type
140
+ :integer # Will be converted to a integer
141
+ :float # Will be converted to a float
142
+ :decimal # Will be converted to a BigDecimal
143
+ :string # Will be converted to a string
144
+ :text # Will be converted to a string
145
+ :datetime # Specifying a field as :datetime will convert it to Time format as it gets imported into MongoDB
146
+ :binary # Will be converted to a string
147
+
148
+ ==== Options
149
+
114
150
  column "post_id", :integer, :referneces => :posts # Referenced columns need to be marked as such, this will mean that they will be updated
115
151
  # with the new BSON::ObjectID.
116
- column "created_at", :datetime # Specifying a field as :datetime will convert it to Time format as it
117
- # gets imported into MongoDB
118
- column "name" # Columns without a type will be set to :string
119
-
120
- Leaving a column out of the list will just result in a straight copy of the information.
152
+ <b>NOTE: if you rename the table 'posts', you should set the :references to the new name</b>
153
+
154
+ column "name", :string, :ignore => true # Ignoring a column will make the column NOT copy over to the new database
155
+
156
+ column "surname", :string, :rename_to => 'last_name'# Rename_to allows you to rename the column
121
157
 
122
158
  <em>**this is subject to change during the alpha (0.0.x release)**</em>
123
159
 
@@ -135,9 +171,7 @@ More testing will be done once the basic functionality is done
135
171
 
136
172
  === while processing
137
173
 
138
- * Allow renaming tables
139
- * Allow renaming of columns
140
- * Allow deleting of columns
174
+ * Work with polymorphic tables
141
175
  * Allow running a proc on column value
142
176
  * Update user on what is being processed
143
177
 
@@ -146,7 +180,7 @@ More testing will be done once the basic functionality is done
146
180
 
147
181
  === Requirements
148
182
 
149
- You just need bundler 1.0
183
+ You just need bundler 1.0.8
150
184
 
151
185
  gem install bundler
152
186
  bundle install
@@ -11,7 +11,7 @@ Feature: Processing a translation
11
11
  Then it succeeds
12
12
  And there should be 3 users in mongodb
13
13
  And there should be 3 posts in mongodb
14
- And the first post's owner_id should be first user
14
+ And the first post's user_id should be first user
15
15
  And there should be 0 comments in mongodb
16
16
  And the first post should have 1 comment
17
17
 
@@ -5,25 +5,30 @@ module Mongify
5
5
  # A column in the sql table
6
6
  #
7
7
  class Column
8
- attr_reader :name, :type, :options
8
+ attr_reader :sql_name, :type, :options
9
9
 
10
- AVAILABLE_OPTIONS = ['references', 'default']
10
+ AVAILABLE_OPTIONS = ['references', 'ignore', 'rename_to']
11
11
 
12
- def initialize(name, type=:string, *args)
13
- @name = name
12
+ def initialize(sql_name, type=:string, options={})
13
+ @sql_name = sql_name
14
14
  type = :string if type.nil?
15
15
  @type = type.is_a?(Symbol) ? type : type.to_sym
16
- @options = args.extract_options!.stringify_keys
16
+ @options = options.stringify_keys
17
17
 
18
18
  auto_detect!
19
19
 
20
20
  self
21
21
  end
22
22
 
23
+ def name
24
+ @name ||= rename_to || sql_name
25
+ end
26
+
23
27
  def translate(value)
28
+ return {} if ignored?
24
29
  case type
25
30
  when :key
26
- {"pre_mongified_#{name}" => value}
31
+ {"pre_mongified_id" => value}
27
32
  else
28
33
  {"#{name}" => type_cast(value)}
29
34
  end
@@ -53,10 +58,14 @@ module Mongify
53
58
  end
54
59
  end
55
60
 
56
- def reference?
61
+ def referenced?
57
62
  !self.options['references'].nil?
58
63
  end
59
64
 
65
+ def renamed?
66
+ self.name != self.sql_name
67
+ end
68
+
60
69
  #######
61
70
  private
62
71
  #######
@@ -82,6 +91,10 @@ module Mongify
82
91
  def key?
83
92
  self.type == :key
84
93
  end
94
+
95
+ def ignored?
96
+ !!self.ignore
97
+ end
85
98
 
86
99
  def auto_detect!
87
100
  case name.downcase
@@ -57,10 +57,9 @@ module Mongify
57
57
  end
58
58
 
59
59
  def remove_pre_mongified_ids(collection_name)
60
- db[collection_name].update({}, { '$unset' => { 'pre_mongified_id' => 1} })
60
+ db[collection_name].update({}, { '$unset' => { 'pre_mongified_id' => 1} }, :multi => true)
61
61
  end
62
62
 
63
-
64
63
  def reset!
65
64
  @connection = nil
66
65
  @db = nil
@@ -5,14 +5,14 @@ module Mongify
5
5
  #
6
6
  class Table
7
7
 
8
- attr_accessor :name
8
+ attr_accessor :name, :sql_name
9
9
  attr_reader :options, :columns
10
10
 
11
- def initialize(name, options={}, &block)
11
+ def initialize(sql_name, options={}, &block)
12
12
  @columns = []
13
13
  @column_lookup = {}
14
14
  @options = options.stringify_keys
15
- self.name = name
15
+ self.sql_name = sql_name
16
16
 
17
17
  self.instance_exec(&block) if block_given?
18
18
 
@@ -21,20 +21,26 @@ module Mongify
21
21
  self
22
22
  end
23
23
 
24
+ def name
25
+ @name ||= @options['rename_to']
26
+ @name ||= self.sql_name
27
+ end
28
+
29
+ def ignored?
30
+ @options['ignore']
31
+ end
32
+
24
33
  #Add a Database Column
25
34
  def add_column(column)
26
35
  raise Mongify::DatabaseColumnExpected, "Expected a Mongify::Database::Column" unless column.is_a?(Mongify::Database::Column)
27
- add_column_index(column.name, @columns.size)
28
- @columns << column
36
+ add_and_index_column(column)
29
37
  end
30
38
 
31
39
 
32
40
  def column(name, type=nil, options={})
33
- options = type and type = nil if type.is_a?(Hash)
41
+ options, type = type, nil if type.is_a?(Hash)
34
42
  type = type.to_sym if type
35
- add_column_index(name.to_s.downcase, @columns.size)
36
- @columns << (col = Mongify::Database::Column.new(name, type, options))
37
- col
43
+ add_and_index_column(Mongify::Database::Column.new(name, type, options))
38
44
  end
39
45
 
40
46
  def find_column(name)
@@ -44,7 +50,7 @@ module Mongify
44
50
 
45
51
 
46
52
  def reference_columns
47
- @columns.reject{ |c| !c.reference? }
53
+ @columns.reject{ |c| !c.referenced? }
48
54
  end
49
55
 
50
56
  def translate(row)
@@ -83,8 +89,10 @@ module Mongify
83
89
  private
84
90
  #######
85
91
 
86
- def add_column_index(name, index)
87
- @column_lookup[name] = index
92
+ def add_and_index_column(column)
93
+ @column_lookup[column.sql_name] = @columns.size
94
+ @columns << column
95
+ column
88
96
  end
89
97
 
90
98
  def import_columns
@@ -5,8 +5,6 @@ module Mongify
5
5
  # Actually runs the translation from sql to no sql
6
6
  #
7
7
  class Translation
8
- attr_reader :tables, :sql_connection, :no_sql_connection
9
-
10
8
  include Printer
11
9
  include Process
12
10
  class << self
@@ -18,7 +16,7 @@ module Mongify
18
16
 
19
17
  def load(connection)
20
18
  raise Mongify::SqlConnectionRequired, "Can only read from Mongify::Database::SqlConnection" unless connection.is_a?(Mongify::Database::SqlConnection)
21
- return unless connection.has_connection?
19
+ return unless connection.valid? && connection.has_connection?
22
20
  translation = self.new
23
21
  connection.tables.each do |t|
24
22
  columns = []
@@ -31,18 +29,25 @@ module Mongify
31
29
  end
32
30
  end
33
31
 
34
-
35
32
  def initialize
36
- @tables = []
33
+ @all_tables = []
37
34
  end
38
35
 
39
36
  def table(table_name, options={}, &block)
40
37
  table = Mongify::Database::Table.new(table_name, options, &block)
41
- @tables << table
38
+ @all_tables << table
42
39
  end
43
40
 
44
41
  def add_table(table)
45
- @tables << table
42
+ @all_tables << table
43
+ end
44
+
45
+ def all_tables
46
+ @all_tables
47
+ end
48
+
49
+ def tables
50
+ all_tables.reject{ |t| t.ignored? }
46
51
  end
47
52
 
48
53
  def copy_tables
@@ -53,11 +58,5 @@ module Mongify
53
58
  tables.reject{|t| !t.embed?}
54
59
  end
55
60
 
56
- #######
57
- private
58
- #######
59
-
60
-
61
-
62
61
  end
63
- end
62
+ end
@@ -6,7 +6,7 @@ module Mongify
6
6
  module Printer
7
7
  def print
8
8
  ''.tap do |output|
9
- @tables.each do |t|
9
+ all_tables.each do |t|
10
10
  output << %Q[table "#{t.name}" do\n]
11
11
  t.columns.each do |c|
12
12
  output << "\t#{c.to_print}\n"
@@ -4,12 +4,8 @@ module Mongify
4
4
  #
5
5
  class Translation
6
6
  module Process
7
- def sql_connection=(value)
8
- @sql_connection=value
9
- end
10
- def no_sql_connection=(value)
11
- @no_sql_connection=value
12
- end
7
+ attr_accessor :sql_connection, :no_sql_connection
8
+
13
9
  def process(sql_connection, no_sql_connection)
14
10
  raise Mongify::SqlConnectionRequired, "Can only read from Mongify::Database::SqlConnection" unless sql_connection.is_a?(Mongify::Database::SqlConnection)
15
11
  raise Mongify::NoSqlConnectionRequired, "Can only write to Mongify::Database::NoSqlConnection" unless no_sql_connection.is_a?(Mongify::Database::NoSqlConnection)
@@ -32,7 +28,7 @@ module Mongify
32
28
 
33
29
  def copy_data
34
30
  self.copy_tables.each do |t|
35
- sql_connection.select_rows(t.name).each do |row|
31
+ sql_connection.select_rows(t.sql_name).each do |row|
36
32
  no_sql_connection.insert_into(t.name, t.translate(row))
37
33
  end
38
34
  end
@@ -40,7 +36,7 @@ module Mongify
40
36
 
41
37
  def copy_embedded_tables
42
38
  self.embed_tables.each do |t|
43
- sql_connection.select_rows(t.name).each do |row|
39
+ sql_connection.select_rows(t.sql_name).each do |row|
44
40
  target_row = no_sql_connection.find_one(t.embed_in, {:pre_mongified_id => row[t.embed_on]})
45
41
  next unless target_row.present?
46
42
  row = t.translate(row)
@@ -1,3 +1,3 @@
1
1
  module Mongify
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -9,7 +9,7 @@ end
9
9
  table "posts" do
10
10
  column "id", :key
11
11
  column "title", :string
12
- column "owner_id", :integer, :references => :users
12
+ column "owner_id", :integer, :references => :users, :rename_to => 'user_id'
13
13
  column "body", :text
14
14
  column "published_at", :datetime
15
15
  column "created_at", :datetime
@@ -29,7 +29,7 @@ table "preferences", :embed_in => :users, :as => :object do
29
29
  column "id", :key
30
30
  column "user_id", :integer, :references => "users"
31
31
  column "notify_by_email", :boolean
32
- column "created_at", :datetime
33
- column "updated_at", :datetime
32
+ column "created_at", :datetime, :ignore => true
33
+ column "updated_at", :datetime, :ignore => true
34
34
  end
35
35
 
@@ -8,6 +8,9 @@ describe Mongify::Database::Column do
8
8
  it "should have name" do
9
9
  @column.name.should == 'first_name'
10
10
  end
11
+ it "should have a sql_name" do
12
+ @column.sql_name.should == 'first_name'
13
+ end
11
14
 
12
15
  it "should get setup options" do
13
16
  @column = Mongify::Database::Column.new('account_id', :integer, :references => 'accounts')
@@ -19,7 +22,7 @@ describe Mongify::Database::Column do
19
22
  @column.type.should == :string
20
23
  end
21
24
 
22
- context "key" do
25
+ context "key?" do
23
26
  it "should be true" do
24
27
  @column = Mongify::Database::Column.new('id', :key)
25
28
  @column.should be_a_key
@@ -31,6 +34,29 @@ describe Mongify::Database::Column do
31
34
  end
32
35
  end
33
36
 
37
+ context "rename_to" do
38
+ before(:each) do
39
+ @column = Mongify::Database::Column.new('surname', :string, :rename_to => 'last_name')
40
+ end
41
+ it "should have the right sql_name" do
42
+ @column.sql_name.should == 'surname'
43
+ end
44
+ it "should have the right name" do
45
+ @column.name.should == 'last_name'
46
+ end
47
+ it "should translate to new name" do
48
+ @column.translate('value').should == {'last_name' => 'value'}
49
+ end
50
+
51
+ it "should be renamed" do
52
+ @column.should be_renamed
53
+ end
54
+ it "should be not renamed" do
55
+ col = Mongify::Database::Column.new('surname', :string)
56
+ col.should_not be_renamed
57
+ end
58
+ end
59
+
34
60
  context "options" do
35
61
  it "should allow to be set by name" do
36
62
  @column = Mongify::Database::Column.new('first_name')
@@ -73,16 +99,12 @@ describe Mongify::Database::Column do
73
99
  @column = Mongify::Database::Column.new('user_id', :integer)
74
100
  @column.to_print.should == %Q[column "user_id", :integer, :references => "users"]
75
101
  end
76
- it "should output nil options" do
77
- @column.default = nil
78
- @column.to_print.should == %Q[column "first_name", :string]
79
- end
80
102
  end
81
103
 
82
- context :reference? do
104
+ context :referenced? do
83
105
  it "should be true" do
84
106
  @column = Mongify::Database::Column.new('user_id', :integer, :references => 'users')
85
- @column.should be_a_reference
107
+ @column.should be_a_referenced
86
108
  end
87
109
  end
88
110
 
@@ -91,6 +113,11 @@ describe Mongify::Database::Column do
91
113
  @column = Mongify::Database::Column.new('first_name', :string)
92
114
  @column.translate('bob').should == {'first_name' => 'bob'}
93
115
  end
116
+ it "should ignore an ignored column" do
117
+ @column = Mongify::Database::Column.new('first_name', :string, :ignore => true)
118
+ @column.should be_ignored
119
+ @column.translate('bob').should == {}
120
+ end
94
121
  context "datetime" do
95
122
  it "should return a datetime format" do
96
123
  @column = Mongify::Database::Column.new('created_at', :datetime)
@@ -120,7 +120,7 @@ describe Mongify::Database::NoSqlConnection do
120
120
 
121
121
  context "remove_pre_mongified_ids" do
122
122
  it "should call update with unset" do
123
- @collection.should_receive(:update).with({},{'$unset' => {'pre_mongified_id' => 1}})
123
+ @collection.should_receive(:update).with({},{'$unset' => {'pre_mongified_id' => 1}}, {:multi=>true})
124
124
  @mongodb_connection.remove_pre_mongified_ids('users')
125
125
  end
126
126
  end
@@ -8,19 +8,40 @@ describe Mongify::Database::Table do
8
8
  it "should have name" do
9
9
  @table.name.should == "users"
10
10
  end
11
+ it "should have sql_name" do
12
+ @table.sql_name.should == "users"
13
+ end
11
14
  it "should allow you to change table name" do
12
15
  @table.name = 'accounts'
13
16
  @table.name.should == 'accounts'
14
17
  end
15
18
 
19
+ it "should be ingored" do
20
+ table = Mongify::Database::Table.new('users', :ignore => true)
21
+ table.should be_ignored
22
+ end
23
+
16
24
  it "should get setup options" do
17
25
  @table = Mongify::Database::Table.new('users', :embed_in => 'accounts', :as => 'users')
18
26
  @table.options.should == {'embed_in' => 'accounts', 'as' => 'users'}
19
27
  end
20
28
 
29
+ context "rename_to" do
30
+ before(:each) do
31
+ @table = Mongify::Database::Table.new('users', :rename_to => 'people')
32
+ end
33
+
34
+ it "should have new name" do
35
+ @table.name.should == "people"
36
+ end
37
+ it "should have sql_name" do
38
+ @table.sql_name.should == "users"
39
+ end
40
+ end
41
+
21
42
  context "column_index (find_column)" do
22
43
  it "should add column index on column creation" do
23
- @table.should_receive(:add_column_index).with('first_name', 0)
44
+ @table.should_receive(:add_and_index_column)
24
45
  @table.column('first_name', :string)
25
46
  end
26
47
  end
@@ -31,16 +52,27 @@ describe Mongify::Database::Table do
31
52
  end
32
53
 
33
54
  it "should work without a type" do
34
- col = @table.column 'name', :default => '123'
55
+ col = @table.column 'name'
35
56
  col.type.should == :string
36
57
  end
37
58
 
59
+ it "should work without a type with options" do
60
+ col = @table.column 'name', :rename_to => 'first_name'
61
+ col.type.should == :string
62
+ col.should be_renamed
63
+ end
64
+
38
65
  it "should be able to find" do
39
66
  @table.column 'another'
40
67
  col = @table.column 'dark'
41
68
  @table.find_column('dark').should == col
42
69
  end
43
70
 
71
+ it "should be searchable with sql_name only" do
72
+ col = @table.column 'surname', :string, :rename_to => 'last_name'
73
+ @table.find_column('surname').should == col
74
+ end
75
+
44
76
  it "should return nil if not found" do
45
77
  @table.column 'dark'
46
78
  @table.find_column('blue').should be_nil
@@ -63,22 +63,30 @@ describe Mongify::Translation::Process do
63
63
  @no_sql_connection = mock()
64
64
  @translation.stub(:no_sql_connection).and_return(@no_sql_connection)
65
65
 
66
- @table = mock(:translate => {}, :name => 'users', :embed? => false)
66
+ @table = mock(:translate => {'first_name'=> 'Timmy', 'last_name' => 'Zuza', 'preference_id' => 1},
67
+ :name => 'users',
68
+ :embed? => false,
69
+ :sql_name => 'users')
70
+
67
71
  @translation.stub(:tables).and_return([@table])
68
72
  end
69
73
 
70
74
  context "copy_data" do
71
75
  it "should call translate on the tables" do
72
- @no_sql_connection.should_receive(:insert_into).and_return(true)
73
- @table.should_receive(:translate).once.and_return({})
76
+ @no_sql_connection.should_receive(:insert_into).with("users", {"last_name"=>"Zuza", "preference_id"=>1, "first_name"=>"Timmy"}).and_return(true)
77
+ @translation.send(:copy_data)
78
+ end
79
+ it "should allow rename of table" do
80
+ @table.stub(:name).and_return('people')
81
+ @no_sql_connection.should_receive(:insert_into).with("people", {"last_name"=>"Zuza", "preference_id"=>1, "first_name"=>"Timmy"}).and_return(true)
74
82
  @translation.send(:copy_data)
75
83
  end
76
84
  end
77
85
 
78
86
  context "copy_embed_tables" do
79
87
  before(:each) do
80
- @target_table = mock(:name => 'posts', :embed? => false)
81
- @embed_table = mock(:translate => {}, :name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false)
88
+ @target_table = mock(:name => 'posts', :embed? => false, :sql_name => 'posts')
89
+ @embed_table = mock(:translate => {}, :name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false, :sql_name => 'comments')
82
90
  @no_sql_connection.stub(:find_one).and_return({'_id' => 500})
83
91
  @translation.stub(:tables).and_return([@target_table, @embed_table])
84
92
  @translation.stub(:fetch_reference_ids).and_return({})
@@ -90,23 +98,29 @@ describe Mongify::Translation::Process do
90
98
  @translation.send(:copy_embedded_tables)
91
99
  end
92
100
  it "should remove the pre_mongified_id before embedding" do
93
- @embed_table = mock(:translate => {'first_name' => 'bob', 'pre_mongified_id' => 1}, :name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false)
101
+ @embed_table = mock(:translate => {'first_name' => 'bob', 'pre_mongified_id' => 1}, :name => 'comments', :sql_name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false)
94
102
  @translation.stub(:tables).and_return([@target_table, @embed_table])
95
103
  @no_sql_connection.should_receive(:update).with("posts", 500, {"$addToSet"=>{"comments"=>{'first_name' => 'bob'}}})
96
104
  @translation.send(:copy_embedded_tables)
97
105
  end
98
106
  it "should remove the parent_id from the embedding row" do
99
- @embed_table = mock(:translate => {'first_name' => 'bob', 'post_id' => 1}, :name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false)
107
+ @embed_table = mock(:translate => {'first_name' => 'bob', 'post_id' => 1}, :name => 'comments', :sql_name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => false)
100
108
  @translation.stub(:tables).and_return([@target_table, @embed_table])
101
109
  @no_sql_connection.should_receive(:update).with("posts", 500, {"$addToSet"=>{"comments"=>{'first_name' => 'bob'}}})
102
110
  @translation.send(:copy_embedded_tables)
103
111
  end
104
112
  it "should call $addToSet on update of an embed_as_object table" do
105
- @embed_table = mock(:translate => {'first_name' => 'bob', 'post_id' => 1}, :name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => true)
113
+ @embed_table = mock(:translate => {'first_name' => 'bob', 'post_id' => 1}, :name => 'comments', :sql_name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => true)
106
114
  @translation.stub(:tables).and_return([@target_table, @embed_table])
107
115
  @no_sql_connection.should_receive(:update).with("posts", 500, {"$set"=>{"comments"=>{'first_name' => 'bob'}}})
108
116
  @translation.send(:copy_embedded_tables)
109
117
  end
118
+ it "should allow rename of table" do
119
+ @embed_table = mock(:translate => {'first_name' => 'bob', 'post_id' => 1}, :name => 'notes', :sql_name => 'comments', :embed? => true, :embed_on => 'post_id', :embed_in => 'posts', :embed_as_object? => true)
120
+ @translation.stub(:tables).and_return([@target_table, @embed_table])
121
+ @no_sql_connection.should_receive(:update).with("posts", 500, {"$set"=>{"notes"=>{'first_name' => 'bob'}}})
122
+ @translation.send(:copy_embedded_tables)
123
+ end
110
124
  end
111
125
 
112
126
  context "update_reference_ids" do
@@ -17,9 +17,10 @@ describe Mongify::Translation do
17
17
  before(:each) do
18
18
  @connection = Mongify::Database::SqlConnection.new
19
19
  @connection.stub(:has_connection?).and_return(true)
20
+ @connection.stub(:valid?).and_return(true)
20
21
  @connection.stub(:tables).and_return(['users'])
21
22
  col = mock(:name => 'first_name', :type => 'string', :default => nil)
22
- @connection.stub(:columns_for).and_return([col])
23
+ @connection.stub(:columns_for).with('users').and_return([col])
23
24
  end
24
25
  it "should return a translation" do
25
26
  Mongify::Translation.load(@connection).should be_a(Mongify::Translation)
@@ -49,10 +50,16 @@ describe Mongify::Translation do
49
50
 
50
51
  context "tables reference" do
51
52
  before(:each) do
52
- @copy_table = mock(:name => 'users', :embed? => false)
53
- @embed_table = mock(:name => 'comments', :embed? => true)
53
+ @copy_table = mock(:name => 'users', :embed? => false, :ignored? => false)
54
+ @embed_table = mock(:name => 'comments', :embed? => true, :ignored? => false)
55
+ @ignored_table = mock(:name => 'apples', :ignored? => true, :embed? => false)
54
56
  @translation = Mongify::Translation.new()
55
- @translation.stub(:tables).and_return([@copy_table, @embed_table])
57
+ @translation.stub(:all_tables).and_return([@copy_table, @embed_table, @ignored_table])
58
+ end
59
+ context "tables" do
60
+ it "should not show ignored" do
61
+
62
+ end
56
63
  end
57
64
  context "copy_tables" do
58
65
  it "should return tables that are not embeded" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongify
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 8
10
- version: 0.0.8
9
+ - 9
10
+ version: 0.0.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Kalek
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-18 00:00:00 -05:00
18
+ date: 2011-01-19 00:00:00 -05:00
19
19
  default_executable: mongify
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency