rapids 0.1.0 → 0.1.2
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.
|
@@ -30,7 +30,7 @@ module Rapids
|
|
|
30
30
|
"#{sql_column_name(column,path)} #{column_type}"
|
|
31
31
|
end.join(",")
|
|
32
32
|
|
|
33
|
-
"CREATE TABLE `#{batch_table_name}` (#{columns_sql}) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
33
|
+
"CREATE TABLE `#{batch_table_name}` (#{columns_sql}) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=#{@model.connection.collation}"
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -30,14 +30,20 @@ module Rapids
|
|
|
30
30
|
specific_object = path.inject(row) do |memo,association|
|
|
31
31
|
if memo.respond_to?(association)
|
|
32
32
|
memo.send(association)
|
|
33
|
+
elsif memo.is_a?(Hash) && memo[association.to_s]
|
|
34
|
+
memo[association.to_s]
|
|
33
35
|
elsif association.is_a?(String)
|
|
34
36
|
memo
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
|
|
38
|
-
if specific_object.
|
|
40
|
+
if specific_object.is_a?(Array)
|
|
39
41
|
many_attributes = specific_object.map do |s|
|
|
40
|
-
s.
|
|
42
|
+
if s.is_a?(ActiveRecord::Base)
|
|
43
|
+
s.instance_variable_get(:@attributes)[source_column_name]
|
|
44
|
+
else
|
|
45
|
+
s[source_column_name]
|
|
46
|
+
end
|
|
41
47
|
end.compact
|
|
42
48
|
if many_attributes.empty?
|
|
43
49
|
default_on_nil(nil,destination_column)
|
|
@@ -45,7 +51,11 @@ module Rapids
|
|
|
45
51
|
default_on_nil(many_attributes.sort.join(","),destination_column)
|
|
46
52
|
end
|
|
47
53
|
else
|
|
48
|
-
val = specific_object.
|
|
54
|
+
val = if specific_object.is_a?(ActiveRecord::Base)
|
|
55
|
+
specific_object.instance_variable_get(:@attributes)[source_column_name] #speeds things up a bit since it's not typed first before being quoted
|
|
56
|
+
else
|
|
57
|
+
specific_object[source_column_name]
|
|
58
|
+
end
|
|
49
59
|
default_on_nil(val,destination_column)
|
|
50
60
|
end
|
|
51
61
|
end
|
data/lib/rapids/version.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Rapids::Batch
|
|
|
6
6
|
batch = Rapids::Batch::DefineBatch.new
|
|
7
7
|
|
|
8
8
|
create_table = CreateTable.new(Category,batch)
|
|
9
|
-
create_table.to_sql.should == "CREATE TABLE `$categories_batch` (`category` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
9
|
+
create_table.to_sql.should == "CREATE TABLE `$categories_batch` (`category` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
it "should generate sql for a basic definition" do
|
|
@@ -14,7 +14,7 @@ module Rapids::Batch
|
|
|
14
14
|
batch.find_or_create(:author,[:name])
|
|
15
15
|
|
|
16
16
|
create_table = CreateTable.new(Post,batch)
|
|
17
|
-
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$author$name` varchar(255),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
17
|
+
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$author$name` varchar(255),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it "should generate sql for a manual definition" do
|
|
@@ -22,7 +22,7 @@ module Rapids::Batch
|
|
|
22
22
|
batch.find_or_create("Category",[:category])
|
|
23
23
|
|
|
24
24
|
create_table = CreateTable.new(Post,batch)
|
|
25
|
-
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$Category$category` varchar(255),`author_id` int(11),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
25
|
+
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$Category$category` varchar(255),`author_id` int(11),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "should generate sql for a manual definition, with explicit source column" do
|
|
@@ -30,7 +30,7 @@ module Rapids::Batch
|
|
|
30
30
|
batch.find_or_create("AltCategory",[[:name,:category]])
|
|
31
31
|
|
|
32
32
|
create_table = CreateTable.new(Post,batch)
|
|
33
|
-
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$AltCategory$name` varchar(255),`author_id` int(11),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
33
|
+
create_table.to_sql.should == "CREATE TABLE `$posts_batch` (`foc$AltCategory$name` varchar(255),`author_id` int(11),`category` varchar(255),`name` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it "should generate sql for a more complicated find or create with reliances on a has_many relationship" do
|
|
@@ -38,7 +38,7 @@ module Rapids::Batch
|
|
|
38
38
|
batch.find_or_create(:post,[:name,{:post_tags => [:tag_id]}])
|
|
39
39
|
|
|
40
40
|
create_table = CreateTable.new(Comment,batch)
|
|
41
|
-
create_table.to_sql.should == "CREATE TABLE `$comments_batch` (`body` varchar(255),`foc$post$author_id` int(11),`foc$post$category` varchar(255),`foc$post$name` varchar(255),`foc$post$post_tags$tag_id` varchar(255),`title` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8"
|
|
41
|
+
create_table.to_sql.should == "CREATE TABLE `$comments_batch` (`body` varchar(255),`foc$post$author_id` int(11),`foc$post$category` varchar(255),`foc$post$name` varchar(255),`foc$post$post_tags$tag_id` varchar(255),`title` varchar(255)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
end
|
|
@@ -38,5 +38,53 @@ module Rapids::Batch
|
|
|
38
38
|
insert_into = InsertInto.new(Post,batch,collection)
|
|
39
39
|
clean_sql(insert_into.to_sql).should == "INSERT INTO `$posts_batch` (`foc$AltCategory$name`,`author_id`,`category`,`name`) VALUES ('food',NULL,'food','Dining at 323 Butter St')"
|
|
40
40
|
end
|
|
41
|
+
|
|
42
|
+
describe "Without model objects" do
|
|
43
|
+
it "should generate sql for a simple batch definition" do
|
|
44
|
+
batch = Rapids::Batch::DefineBatch.new
|
|
45
|
+
collection = %w{food politics}.map do |category_name|
|
|
46
|
+
{"category" => category_name}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
insert_into = InsertInto.new(Category,batch,collection)
|
|
50
|
+
clean_sql(insert_into.to_sql).should == "INSERT INTO `$categories_batch` (`category`) VALUES ('food'),('politics')"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should generate sql for a basic definition" do
|
|
54
|
+
batch = Rapids::Batch::DefineBatch.new
|
|
55
|
+
batch.find_or_create(:author,[:name])
|
|
56
|
+
collection = [{"name" => "Dining at 323 Butter St","category" => "food","author" => {"name" => "Joe"}}]
|
|
57
|
+
|
|
58
|
+
insert_into = InsertInto.new(Post,batch,collection)
|
|
59
|
+
clean_sql(insert_into.to_sql).should == "INSERT INTO `$posts_batch` (`foc$author$name`,`category`,`name`) VALUES ('Joe','food','Dining at 323 Butter St')"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should generate sql for a manual definition" do
|
|
63
|
+
batch = Rapids::Batch::DefineBatch.new
|
|
64
|
+
batch.find_or_create("Category",[:name])
|
|
65
|
+
collection = [{"name" => "Dining at 323 Butter St","category" => "food"}]
|
|
66
|
+
|
|
67
|
+
insert_into = InsertInto.new(Post,batch,collection)
|
|
68
|
+
clean_sql(insert_into.to_sql).should == "INSERT INTO `$posts_batch` (`foc$Category$category`,`author_id`,`category`,`name`) VALUES ('food',NULL,'food','Dining at 323 Butter St')"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should generate sql for a manual definition, with explicit source column" do
|
|
72
|
+
batch = Rapids::Batch::DefineBatch.new
|
|
73
|
+
batch.find_or_create("AltCategory",[[:name,:category]])
|
|
74
|
+
collection = [{"name" => "Dining at 323 Butter St","category" => "food"}]
|
|
75
|
+
|
|
76
|
+
insert_into = InsertInto.new(Post,batch,collection)
|
|
77
|
+
clean_sql(insert_into.to_sql).should == "INSERT INTO `$posts_batch` (`foc$AltCategory$name`,`author_id`,`category`,`name`) VALUES ('food',NULL,'food','Dining at 323 Butter St')"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should generate sql for a more complicated find or create with reliances on a has_many relationship" do
|
|
81
|
+
batch = Rapids::Batch::DefineBatch.new
|
|
82
|
+
batch.find_or_create(:post,[:name,{:post_tags => [:tag_id]}])
|
|
83
|
+
collection = [{"title" => "You suck","body" => "Im a troll","post" => {"name" => "I just did something cool","post_tags" => [{"tag_id" => 1},{"tag_id" => 2}]}}]
|
|
84
|
+
|
|
85
|
+
create_table = InsertInto.new(Comment,batch,collection)
|
|
86
|
+
create_table.to_sql.should == "INSERT INTO `$comments_batch` (`body`,`foc$post$author_id`,`foc$post$category`,`foc$post$name`,`foc$post$post_tags$tag_id`,`title`) VALUES ('Im a troll',NULL,NULL,'I just did something cool','1,2','You suck')"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
41
89
|
end
|
|
42
90
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rapids
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 31
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 1
|
|
9
|
-
-
|
|
10
|
-
version: 0.1.
|
|
9
|
+
- 2
|
|
10
|
+
version: 0.1.2
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- James Smith
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-08-
|
|
18
|
+
date: 2011-08-24 00:00:00 -04:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|