hydroponics 0.3.4 → 0.3.5
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/ChangeLog.markdown +4 -0
- data/VERSION +1 -1
- data/app/actions/fuzz_key.rb +22 -0
- data/app/views/fuzz_key.erb +35 -0
- data/app/views/single/index.erb +1 -1
- data/hydroponics.gemspec +4 -2
- data/spec/hydro_app_spec.rb +8 -25
- data/spec/hydroponics_spec.rb +45 -0
- data/static/dupe.css +2 -2
- metadata +6 -4
data/ChangeLog.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.5
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Hydroponics
|
2
|
+
module Actions
|
3
|
+
# Fuzz key
|
4
|
+
#
|
5
|
+
# Randomize a given column which is a foreign key
|
6
|
+
def fuzz_key(table, data)
|
7
|
+
table = table.to_sym
|
8
|
+
data.stringify_keys!
|
9
|
+
foreign_table = data['foreign_table'].to_sym
|
10
|
+
foreign_key_col = data['foreign_key'] || (foreign_table.to_s.singularize + "_id")
|
11
|
+
foreign_key_col = foreign_key_col.to_sym
|
12
|
+
|
13
|
+
values = @db[foreign_table].map(:id)
|
14
|
+
old_data = @db[table].all
|
15
|
+
new_data = old_data.collect { |r| r[foreign_key_col] = values[rand(values.size)]; r }
|
16
|
+
@db[table].delete
|
17
|
+
@db[table].multi_insert(new_data)
|
18
|
+
|
19
|
+
@db[table].count.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
$(function() {
|
3
|
+
$("button").button();
|
4
|
+
|
5
|
+
$("button").click(function() {
|
6
|
+
var postData = {
|
7
|
+
foreign_table: j("<%= params[:foreign_table] %>")
|
8
|
+
};
|
9
|
+
|
10
|
+
if($("#foreign_key").val() != "") {
|
11
|
+
postData.foreign_key = $("#foreign_key").val();
|
12
|
+
}
|
13
|
+
|
14
|
+
$.ajax({
|
15
|
+
type: "POST",
|
16
|
+
url: "/fuzz_key/" + j("<%= @table %>"),
|
17
|
+
data: JSON.stringify(postData),
|
18
|
+
success: function(data, status, xhr) {
|
19
|
+
$("p").show();
|
20
|
+
$("p").delay(2000).fadeOut();
|
21
|
+
},
|
22
|
+
processData: false
|
23
|
+
});
|
24
|
+
});
|
25
|
+
});
|
26
|
+
</script>
|
27
|
+
|
28
|
+
<div class="column dupecontainer span-10">
|
29
|
+
<div class="fuzz-key">
|
30
|
+
<h3>Fuzz Key: <%= @table %></h3>
|
31
|
+
<p style="display:none;">done!</p>
|
32
|
+
<div id="button"><button>Fuzz</button></div>
|
33
|
+
<input id='foreign_key'></input>
|
34
|
+
</div>
|
35
|
+
</div>
|
data/app/views/single/index.erb
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
|
20
20
|
<link href="../dupe.css" media="screen" rel="stylesheet" type="text/css" />
|
21
21
|
|
22
|
-
<title>Hydroponics <%= settings.version
|
22
|
+
<title>Hydroponics <%= settings.version %></title>
|
23
23
|
</head>
|
24
24
|
|
25
25
|
<body class="container">
|
data/hydroponics.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hydroponics}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tyler Boyd"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-22}
|
13
13
|
s.default_executable = %q{hydro}
|
14
14
|
s.description = %q{A user interface to seed or destroy large quantities of data in a Rails app.}
|
15
15
|
s.email = %q{tboyd47@gmail.com}
|
@@ -29,8 +29,10 @@ Gem::Specification.new do |s|
|
|
29
29
|
"VERSION",
|
30
30
|
"app/actions/dupe.rb",
|
31
31
|
"app/actions/foreigndupe.rb",
|
32
|
+
"app/actions/fuzz_key.rb",
|
32
33
|
"app/views/dupe.erb",
|
33
34
|
"app/views/foreign_dupe.erb",
|
35
|
+
"app/views/fuzz_key.erb",
|
34
36
|
"app/views/single/index.erb",
|
35
37
|
"bin/hydro",
|
36
38
|
"config/hydro_app.rb",
|
data/spec/hydro_app_spec.rb
CHANGED
@@ -23,45 +23,28 @@ describe "HydroApp" do
|
|
23
23
|
@app || HydroApp.new
|
24
24
|
end
|
25
25
|
|
26
|
-
describe "/
|
27
|
-
it "should open
|
26
|
+
describe "GET /action/table" do
|
27
|
+
it "should open single/index.erb" do
|
28
28
|
get '/dupe/users'
|
29
29
|
last_response.should be_ok
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should open foreigndupe/index.erb" do
|
33
|
+
get '/foreign_dupe/portfolios'
|
34
|
+
last_response.should be_ok
|
35
|
+
end
|
36
|
+
|
32
37
|
it "should show the table's count" do
|
33
38
|
get '/dupe/users'
|
34
39
|
last_response.body.include?(@db[:users].count.to_s).should be_true
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
|
-
describe "/
|
39
|
-
it "should copy the first row n times" do
|
40
|
-
post '/dupe/users', {:count => 10}.to_json
|
41
|
-
last_response.should be_ok
|
42
|
-
@db[:users].count.should == 10
|
43
|
-
end
|
44
|
-
|
43
|
+
describe "POST /action/table" do
|
45
44
|
it "should return the final count on success" do
|
46
45
|
post '/dupe/users', {:count => 10}.to_json
|
47
46
|
last_response.body.match("10").should be_true
|
48
47
|
end
|
49
48
|
end
|
50
|
-
|
51
|
-
describe "/foreigndupe/*" do
|
52
|
-
it "should open foreigndupe/index.erb" do
|
53
|
-
get '/foreign_dupe/portfolios'
|
54
|
-
last_response.should be_ok
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "/foreign_dupe/*/*" do
|
59
|
-
it "should copy the first row n times" do
|
60
|
-
@db[:users].multi_insert([{:name => "ABC", :email => "123@example.com"}] * 10)
|
61
|
-
post '/foreign_dupe/portfolios', {:count => 10, :foreign_table => 'users'}.to_json
|
62
|
-
last_response.should be_ok
|
63
|
-
@db[:portfolios].count.should == 10
|
64
|
-
end
|
65
|
-
end
|
66
49
|
end
|
67
50
|
end
|
data/spec/hydroponics_spec.rb
CHANGED
@@ -124,4 +124,49 @@ describe "Hydroponics::Actions" do
|
|
124
124
|
@db[:portfolios].map(:user_id)[10].should == @db[:users].map(:id)[0]
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
describe "#fuzz_key" do
|
129
|
+
before(:each) do
|
130
|
+
@db.drop_table :users if @db.table_exists?(:users)
|
131
|
+
@db.create_table :users do
|
132
|
+
primary_key :id
|
133
|
+
Integer :portfolio_id
|
134
|
+
end
|
135
|
+
@db[:users].multi_insert([{:portfolio_id => 1}] * 100)
|
136
|
+
|
137
|
+
@db.drop_table :portfolios if @db.table_exists?(:portfolios)
|
138
|
+
@db.create_table :portfolios do
|
139
|
+
primary_key :id
|
140
|
+
String :info
|
141
|
+
end
|
142
|
+
@db[:portfolios].multi_insert([{:info => "blah"}] * 5)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should distribute ids through the given column if it is an integer" do
|
146
|
+
fuzz_key('users', :foreign_table => 'portfolios')
|
147
|
+
@db[:users].map(:portfolio_id).select { |a| a == 1 }.size.should > 0 # highly unlikely that there are no 1s
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should only assign real ids" do
|
151
|
+
@db[:portfolios].filter(:id => 1).delete
|
152
|
+
fuzz_key('users', :foreign_table => 'portfolios')
|
153
|
+
@db[:users].map(:portfolio_id).select { |i| i == 1 }.size.should == 0
|
154
|
+
@db[:users].map(:portfolio_id).select { |i| i > 1 }.size.should > 0
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should return the table count" do
|
158
|
+
@db[:portfolios].filter(:id => 1).delete
|
159
|
+
fuzz_key('users', :foreign_table => 'portfolios').should == "100"
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should allow a custom foreign key name" do
|
163
|
+
@db.drop_table :users if @db.table_exists?(:users)
|
164
|
+
@db.create_table :users do
|
165
|
+
primary_key :id
|
166
|
+
Integer :custom_id
|
167
|
+
end
|
168
|
+
@db[:users].multi_insert([{:custom_id => 1}] * 100)
|
169
|
+
fuzz_key('users', {:count => 10, :foreign_table => 'portfolios', :foreign_key => "custom_id"}).should == "100"
|
170
|
+
end
|
171
|
+
end
|
127
172
|
end
|
data/static/dupe.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
.container {width:950px;margin:0 auto;}
|
2
|
-
.dupe h3, .foreign-dupe h3 {
|
2
|
+
.dupe h3, .foreign-dupe h3, .fuzz-key h3 {
|
3
3
|
margin: 10px 5px 10px 18px;
|
4
4
|
color: #444;
|
5
5
|
float: left;
|
@@ -18,7 +18,7 @@
|
|
18
18
|
height: 130px;
|
19
19
|
width: 501px;
|
20
20
|
}
|
21
|
-
.dupe, .foreign-dupe {
|
21
|
+
.dupe, .foreign-dupe, .fuzz-key {
|
22
22
|
height: 106px;
|
23
23
|
width: 500px;
|
24
24
|
border: 1px #ddd solid;
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydroponics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 5
|
10
|
+
version: 0.3.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tyler Boyd
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-22 00:00:00 -05:00
|
19
19
|
default_executable: hydro
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -139,8 +139,10 @@ files:
|
|
139
139
|
- VERSION
|
140
140
|
- app/actions/dupe.rb
|
141
141
|
- app/actions/foreigndupe.rb
|
142
|
+
- app/actions/fuzz_key.rb
|
142
143
|
- app/views/dupe.erb
|
143
144
|
- app/views/foreign_dupe.erb
|
145
|
+
- app/views/fuzz_key.erb
|
144
146
|
- app/views/single/index.erb
|
145
147
|
- bin/hydro
|
146
148
|
- config/hydro_app.rb
|