testdata_generater_for_mysql 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+ # Specify your gem's dependencies in batchbase.gemspec
3
+ gemspec
4
+
5
+ gem 'mysql2'
6
+ gem 'progressbar','0.11.0'
7
+
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # テスト用データジェネレータforMySQL
2
+
3
+ まぁよく「テストデータ」ってのを作るんですが、、、毎回マルチプルインサートな簡易スクリプトを作っては捨てしてきた自分からの卒業を目論んだリポジトリです。
4
+ ドキュメントはありませんが、サンプルでほぼやれることは解説していますのでそちらを参考にしてください。
5
+
6
+ サンプル
7
+ https://github.com/pacojp/testdata_generater_for_mysql/blob/master/example/sample1.rb
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,115 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'rubygems'
4
+ require 'testdata_generater_for_mysql'
5
+
6
+ #
7
+ # localhostにtestdata_generater_for_mysql_testというデータベースを作成し
8
+ # rootのパスワードなしでアクセスできるようにしてあるとして
9
+ #
10
+
11
+ # 取り敢えずおまじない
12
+ include TestdataGeneraterForMysql
13
+
14
+ # データベースへのアクセス情報を設定します(Mysql2::Client.newの引数です)
15
+ setup_mysql_client :host => "127.0.0.1", :username => "root",:database=>'testdata_generater_for_mysql_test'
16
+ # マルチプルインサートの実行単位を指定します(以下だと200行ずつインサート実行。defaultは100)
17
+ insert_per_rows 200
18
+ # プログレスバーを非表示にしたければ以下をコメントアウト
19
+ #hide_progress_bar
20
+
21
+ # 取り敢えず必要なテーブルを作成します(すでに存在する場合は消します)
22
+ query "DROP TABLE IF EXISTS tests;"
23
+ query "
24
+ CREATE TABLE tests (
25
+ `id` int(11) NOT NULL auto_increment,
26
+ `brand_id` int(11) NOT NULL,
27
+ `shop_id` int(11) NOT NULL,
28
+ `user_id` int(11) NOT NULL,
29
+ `name` varchar(20) NOT NULL,
30
+ `value1` int(11) NOT NULL,
31
+ `value_nil` int(11) ,
32
+ `value_func` varchar(20),
33
+ `value_true` tinyint(1) ,
34
+ `value_time` datetime ,
35
+ `created_at` datetime ,
36
+ PRIMARY KEY (`id`),
37
+ KEY `idx01` USING BTREE (`brand_id`,`shop_id`)
38
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
39
+ "
40
+
41
+ #
42
+ # ■データ作成
43
+ #
44
+ # まずはループ情報を設定します。
45
+ # テストデータを作る際は以下な感じで行うと思いますが
46
+ #
47
+ # (1..10).each do |brand_id|
48
+ # (1..3).each do |shop_id|
49
+ # (1..15).each do |user_id|
50
+ # # do_someting here with brand_id,show_id,user_id
51
+ # end
52
+ # end
53
+ # end
54
+ #
55
+ # これを以下で表現しています。
56
+ #
57
+ CNT_BRAND = 21
58
+ SHOP_PER_BRAND = 15
59
+ USER_PER_SHOP = 1_003
60
+ loops = [
61
+ [:brand_id, (1..CNT_BRAND)],
62
+ [:shop_id, (1..SHOP_PER_BRAND)],
63
+ ['user_id', (1..USER_PER_SHOP)] # 文字列でキーを指定も
64
+ ]
65
+ #
66
+ # 次に各列の処理を設定します。
67
+ # データはハッシュにて設定します。設定したいカラムの名前をkeyにて設定、
68
+ # valueはProcインスタンスにて設定します。Procのイニシャライザのブロック引数に
69
+ # loopsで設定した値が引き渡されます(上記ループ解説の# do_somethingの箇所の値が
70
+ # ハッシュにて引き渡されます)。
71
+ # 基本的にvalueは実行時にエスケープされシングルクォーテーションで囲まれます(数値でも同様)。
72
+ # 「NOW()」等関数を指定したい場合は"NOW()".to_funcと指定すると値にエスケープ及び
73
+ # シングルクォーテーションでの囲みがかからなくなります
74
+ #
75
+ procs = {
76
+ :brand_id => Proc.new{|v|v[:brand_id]},
77
+ :shop_id => Proc.new{|v|v[:shop_id]},
78
+ :user_id => Proc.new{|v|v['user_id']},
79
+ :name => Proc.new{|v|"#{v[:brand_id]}_#{v[:shop_id]}_#{v['user_id']}'s name"},
80
+ :value1 => Proc.new{rand(10000)},
81
+ :value_nil => Proc.new{nil},
82
+ :value_func => Proc.new{"CONCAT('My', 'S', 'QL')".to_func}, #関数指定時はString#to_funcで
83
+ :value_true => Proc.new{true}, # true は 1 false は 0
84
+ :value_time => Proc.new{Time.mktime(2001,2,3,4,35,6)}, # Time,DateTime,Date
85
+ :created_at => Proc.new{'NOW()'.to_func},
86
+ }
87
+ #
88
+ # 実際にテストデータを作成します
89
+ # 引数はテーブル名、ループ、列に対する処理、になります
90
+ #
91
+ create_rows(
92
+ 'tests',
93
+ loops,
94
+ procs
95
+ )
96
+
97
+
98
+ # 以下作成結果のサンプルを出力しています
99
+ puts '=' * 60
100
+ puts query("SELECT count(id) AS cnt FROM tests").first['cnt'].to_s + "rows created"
101
+ puts 'sample:'
102
+ p query("SELECT * FROM tests WHERE brand_id = #{CNT_BRAND} AND shop_id = #{SHOP_PER_BRAND} AND user_id = #{USER_PER_SHOP}").first
103
+
104
+ __END__
105
+
106
+ 出力結果は以下な感じになります
107
+
108
+ $ ruby example/sample1.rb
109
+ ================ create rows for tests =================
110
+ 100% |oooooooooooooooooooooooooooooooooooo| Time: 0:00:23
111
+ ============================================================
112
+ 315945rows created
113
+ sample:
114
+ {"id"=>315945, "brand_id"=>21, "shop_id"=>15, "user_id"=>1003, "name"=>"21_15_1003's name", "value1"=>6704, "value_nil"=>nil, "value_func"=>"MySQL", "value_true"=>1, "value_time"=>2001-02-03 04:35:06 +0900, "created_at"=>2012-10-07 16:06:13 +0900}
115
+
@@ -0,0 +1,5 @@
1
+ require "testdata_generater_for_mysql/version"
2
+ require "testdata_generater_for_mysql/core"
3
+
4
+ module TestdataGeneraterForMysql
5
+ end
@@ -0,0 +1,180 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'progressbar'
4
+ require 'mysql2'
5
+
6
+ #
7
+ # TODO 以下の削除 サンプルの作成
8
+ #
9
+ # 使い方
10
+ #
11
+ # ・まずは本ファイルをrequiresします
12
+ #
13
+ # ・setup_mysql_settingsでmysql2のclientを内部的に作成(@__clientで作成します)
14
+ # ・あとはcreate_rowsメソッドを使ってください
15
+ # ・基本的にインサート文のすべてのvalueにシングルクォーテーションで囲まれます。が、列名が「***_at」の場合は除く(もし特定の日時を入れたい場合は Proc.new{"'2001-10-14'"}のようにシングルクォーテーションを含めて設定してください
16
+ # ・insert__per_rowsにてマルチプルインサートの単位が設定できます(デフォルトは100)
17
+ #
18
+ # #
19
+ # # テーブル名
20
+ # # ループ達(配列で)
21
+ # # 各列の値の作成方法
22
+ # #
23
+ # create_rows(
24
+ # 'm_pkey_or_index__index',
25
+ # [
26
+ # [:brand_id,(1..13)],
27
+ # [:user_id,(1..100)]
28
+ # ],
29
+ # :brand_id=>Proc.new{|v|v[:brand_id]},
30
+ # :user_id=>Proc.new{|v|v[:user_id]},
31
+ # :name=>Proc.new{|v|"#{v[:brand_id]}_#{v[:user_id]}_name"},
32
+ # :value1=>Proc.new{rand(10000)},
33
+ # :created_at=>Proc.new{'NOW()'},
34
+ # )
35
+ #
36
+
37
+ class String
38
+ def to_func
39
+ @__is_function = true
40
+ self
41
+ end
42
+
43
+ def function?
44
+ if @__is_function
45
+ true
46
+ else
47
+ false
48
+ end
49
+ end
50
+ end
51
+
52
+ module TestdataGeneraterForMysql
53
+
54
+ INSERT_PER_ROWS = 100
55
+
56
+ def setup_mysql_client(hash)
57
+ @__client = Mysql2::Client.new(hash)
58
+ end
59
+
60
+ def insert_per_rows(v)
61
+ @__insert_per_rows = v
62
+ end
63
+
64
+ def get_insert_per_rows
65
+ @__insert_per_rows ||= INSERT_PER_ROWS
66
+ end
67
+
68
+ def hide_progress_bar
69
+ @__disable_progress_bar = true
70
+ end
71
+
72
+ def query(q)
73
+ @__client.query(q)
74
+ end
75
+
76
+ def create_rows(table_name,loops,col_procs)
77
+ if loops.size == 0
78
+ raise 'loops size must be bigger than 0'
79
+ end
80
+
81
+ total_rows = 0
82
+ loops.each_with_index do |l,i|
83
+ if i == 0
84
+ total_rows = l[1].count
85
+ else
86
+ total_rows *= l[1].count
87
+ end
88
+ end
89
+ @__table_name = table_name
90
+ raise 'something wrong' if @__insert_values && @__insert_values.size > 0
91
+ @__insert_values = []
92
+ @__inserted_rows = 0
93
+ @__col_procs = col_procs
94
+ unless @__disable_progress_bar
95
+ title = "create rows for #{table_name}"
96
+ width = 60
97
+ $stderr.puts title.center(title.size + 6,' ').center(width,'=')
98
+ @__pbar = ProgressBar.new('', total_rows, $stderr)
99
+ @__pbar.format_arguments = [:percentage, :bar, :stat]
100
+ @__pbar.format = "%3d%% %s %s"
101
+ end
102
+
103
+ looping(loops,0)
104
+ do_insert # あまりの作成
105
+
106
+ if @__pbar
107
+ @__pbar.finish
108
+ end
109
+ end
110
+
111
+ def looping(ar,index,values={})
112
+ ar[index][1].each do |i|
113
+ values[ar[index][0]] = i
114
+ next_index = index + 1
115
+ if ar.size > next_index
116
+ looping(ar,next_index,values)
117
+ elsif ar.size == next_index
118
+ hash = {}
119
+ @__col_procs.each do |key,proc|
120
+ hash[key] = proc.call(values)
121
+ end
122
+ set_insert_values(hash)
123
+ end
124
+ end
125
+ end
126
+
127
+ def set_insert_values(hash)
128
+ @__insert_values ||= []
129
+ @__insert_values << hash
130
+ if @__insert_values.size > get_insert_per_rows
131
+ do_insert
132
+ end
133
+ end
134
+
135
+ def do_insert
136
+ return if @__insert_values.size == 0
137
+ @__inserted_rows += @__insert_values.size
138
+ query = <<"EOS"
139
+ INSERT INTO `#{@__client.escape(@__table_name)}`
140
+ (#{@__col_procs.keys.map{|o|"`#{@__client.escape(o.to_s)}`"}.join(',')})
141
+ VALUES
142
+ #{
143
+ @__insert_values.map do |row|
144
+ "(#{
145
+ row.map do |key,value|
146
+ case value
147
+ when nil
148
+ "NULL"
149
+ when TrueClass,FalseClass
150
+ if value
151
+ "'1'"
152
+ else
153
+ "'0'"
154
+ end
155
+ # TODO when datetime time
156
+ when Time,DateTime
157
+ "'#{value.strftime("%Y-%m-%d %H:%M:%S")}'"
158
+ when Date
159
+ "'#{value.strftime("%Y-%m-%d")}'"
160
+ else
161
+ s = value
162
+ s = s.to_s unless s.kind_of?(String)
163
+ if s.respond_to?(:function?) && s.function?
164
+ "#{value.to_s}"
165
+ else
166
+ "'#{@__client.escape(value.to_s)}'"
167
+ end
168
+ end
169
+ end.join(',')
170
+ })"
171
+ end.join(',')
172
+ }
173
+ EOS
174
+ @__client.query(query)
175
+ if @__pbar
176
+ @__pbar.inc(@__insert_values.size)
177
+ end
178
+ @__insert_values = []
179
+ end
180
+ end
@@ -0,0 +1,3 @@
1
+ module TestdataGeneraterForMysql
2
+ VERSION = "0.0.1"
3
+ end
data/test/test.rb ADDED
@@ -0,0 +1,186 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ $: << File.dirname(__FILE__)
4
+ require 'test_helper'
5
+ require 'test/unit'
6
+ require 'Fileutils'
7
+ require 'date'
8
+
9
+ #
10
+ # localhostにtestdata_generater_for_mysql_testというデータベースを作成し
11
+ # rootのパスワードなしでアクセスできるようにしておいてください
12
+ #
13
+
14
+ include TestdataGeneraterForMysql
15
+
16
+ class TestTestdataGeneraterForMysql < Test::Unit::TestCase
17
+
18
+ CNT_BRAND = 5
19
+ SHOP_PER_BRAND = 6
20
+ USER_PER_SHOP = 22
21
+ STAMP_PER_USER = 3
22
+
23
+ def setup
24
+ hide_progress_bar
25
+ setup_mysql_client :host => "127.0.0.1", :username => "root",:database=>'testdata_generater_for_mysql_test'
26
+ insert_per_rows 29
27
+ query "DROP TABLE IF EXISTS tests;"
28
+ end
29
+
30
+ def assert_count(should_be ,where=nil, message=nil)
31
+ where = where ? "WHERE #{where}" : ''
32
+ where_st = where
33
+ where_st = 'COUNT ALL' if where.size == 0
34
+ count = query("SELECT COUNT(*) AS cnt FROM tests #{where}").first['cnt']
35
+ message = build_message message, "'#{where}' should be #{should_be},but #{count}", where
36
+ assert_block message do
37
+ count == should_be
38
+ end
39
+ end
40
+
41
+ def test_2_loops
42
+ # テーブル作成
43
+ query "
44
+ CREATE TABLE tests (
45
+ `id` int(11) NOT NULL auto_increment,
46
+ `brand_id` int(11) NOT NULL,
47
+ `shop_id` int(11) NOT NULL,
48
+ `name` varchar(20) NOT NULL,
49
+ `value1` int(11) NOT NULL,
50
+ `value2` int(11) ,
51
+ `value3` int(11) ,
52
+ `value_nil` int(11) ,
53
+ `value_func` varchar(20),
54
+ `value_true` tinyint(1) ,
55
+ `value_false` tinyint(1) ,
56
+ `value_date` date ,
57
+ `value_dtime` datetime ,
58
+ `value_time` datetime ,
59
+ `created_at` datetime ,
60
+ PRIMARY KEY (`id`),
61
+ KEY `idx01` USING BTREE (`brand_id`,`shop_id`)
62
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
63
+ "
64
+
65
+ # データ作成
66
+ loops = [
67
+ [:brand_id, (1..CNT_BRAND)],
68
+ [:shop_id, (1..SHOP_PER_BRAND)]
69
+ ]
70
+ procs = {
71
+ :brand_id => Proc.new{|v|v[:brand_id]},
72
+ :shop_id => Proc.new{|v|v[:shop_id]},
73
+ :name => Proc.new{|v|"#{v[:brand_id]}_#{v[:shop_id]}'s name"},
74
+ :value1 => Proc.new{rand(10000)},
75
+ :value2 => Proc.new{rand(10000)},
76
+ :value_nil => Proc.new{nil},
77
+ :value_func => Proc.new{"CONCAT('My', 'S', 'QL')".to_func},
78
+ :value_true => Proc.new{true},
79
+ :value_false => Proc.new{false},
80
+ :value_date => Proc.new{Date.new(2001,2,3)},
81
+ :value_dtime => Proc.new{DateTime.new(2001,2,3,4,35,6)},
82
+ :value_time => Proc.new{Time.mktime(2001,2,3,4,35,6)},
83
+ :created_at => Proc.new{'NOW()'.to_func},
84
+ }
85
+ create_rows(
86
+ 'tests',
87
+ loops,
88
+ procs
89
+ )
90
+
91
+ # 作成データのチェック
92
+ cnt_all = CNT_BRAND * SHOP_PER_BRAND
93
+ assert_count cnt_all
94
+ assert_count SHOP_PER_BRAND, "brand_id = 3"
95
+ assert_count CNT_BRAND, "shop_id = 3"
96
+ assert_count 0, "value2 IS NULL"
97
+ assert_count cnt_all, "value3 IS NULL"
98
+ assert_count cnt_all, "value_nil IS NULL"
99
+ assert_count cnt_all, "value_func = 'MySQL'"
100
+ assert_count 0, "created_at IS NULL"
101
+ assert_count 1, "name = '1_1''s name'"
102
+ assert_count cnt_all, "value_true = 1"
103
+ assert_count cnt_all, "value_false = 0"
104
+ assert_count cnt_all, "value_date = '2001-02-03'"
105
+ assert_count cnt_all, "value_dtime = '2001-02-03 04:35:06'"
106
+ assert_count cnt_all, "value_time = '2001-02-03 04:35:06'"
107
+ end
108
+
109
+ def test_4_loops
110
+ # テーブル作成
111
+ query "
112
+ CREATE TABLE tests (
113
+ `id` int(11) NOT NULL auto_increment,
114
+ `brand_id` int(11) NOT NULL,
115
+ `shop_id` int(11) NOT NULL,
116
+ `user_id` int(11) NOT NULL,
117
+ `stamp_id` int(11) NOT NULL,
118
+ `name` varchar(20) NULL,
119
+ `value1` int(11) NOT NULL,
120
+ `value2` int(11) ,
121
+ `value3` int(11) ,
122
+ `value_nil` int(11) ,
123
+ `value_func` varchar(20),
124
+ `value_true` tinyint(1) ,
125
+ `value_false` tinyint(1) ,
126
+ `value_date` date ,
127
+ `value_dtime` datetime ,
128
+ `value_time` datetime ,
129
+ `created_at` datetime NULL,
130
+ PRIMARY KEY (`id`),
131
+ KEY `idx01` USING BTREE (`brand_id`,`shop_id`,`user_id`,`stamp_id`)
132
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
133
+ "
134
+
135
+ # データ作成
136
+ loops = [
137
+ [:brand_id, (1..CNT_BRAND)],
138
+ [:shop_id, (1..SHOP_PER_BRAND)],
139
+ [:user_id, (1..USER_PER_SHOP)],
140
+ [:stamp_id, (1..STAMP_PER_USER)],
141
+ ]
142
+ procs = {
143
+ :brand_id => Proc.new{|v|v[:brand_id]},
144
+ :shop_id => Proc.new{|v|v[:shop_id]},
145
+ :user_id => Proc.new{|v|v[:user_id]},
146
+ :stamp_id => Proc.new{|v|v[:stamp_id]},
147
+ :name => Proc.new{|v|"#{v[:brand_id]}_#{v[:shop_id]}_#{v[:user_id]}_#{v[:stamp_id]}'s name"},
148
+ :value1 => Proc.new{rand(10000)},
149
+ :value2 => Proc.new{rand(10000)},
150
+ :value_nil => Proc.new{nil},
151
+ :value_func => Proc.new{"CONCAT('My', 'S', 'QL')".to_func},
152
+ :value_true => Proc.new{true},
153
+ :value_false => Proc.new{false},
154
+ :value_date => Proc.new{Date.new(2001,2,3)},
155
+ :value_dtime => Proc.new{DateTime.new(2001,2,3,4,35,6)},
156
+ :value_time => Proc.new{Time.mktime(2001,2,3,4,35,6)},
157
+ :created_at => Proc.new{'NOW()'.to_func},
158
+ }
159
+ create_rows(
160
+ 'tests',
161
+ loops,
162
+ procs
163
+ )
164
+
165
+ # 作成データのチェック
166
+ cnt_all = CNT_BRAND * SHOP_PER_BRAND * USER_PER_SHOP * STAMP_PER_USER
167
+ cnt_per_brand = cnt_all / CNT_BRAND
168
+ cnt_per_user = cnt_all / USER_PER_SHOP
169
+ assert_count cnt_all
170
+ assert_count cnt_per_brand, "brand_id = 3"
171
+ assert_count cnt_per_user, "user_id = 3"
172
+ assert_count 0, "value2 IS NULL"
173
+ assert_count cnt_all, "value3 IS NULL"
174
+ assert_count cnt_all, "value_nil IS NULL"
175
+ assert_count cnt_all, "value_func = 'MySQL'"
176
+ assert_count 0, "created_at IS NULL"
177
+ assert_count 1, "name = '1_1_1_1''s name'"
178
+ assert_count cnt_all, "value_true = 1"
179
+ assert_count cnt_all, "value_false = 0"
180
+ assert_count cnt_all, "value_date = '2001-02-03'"
181
+ assert_count cnt_all, "value_dtime = '2001-02-03 04:35:06'"
182
+ assert_count cnt_all, "value_time = '2001-02-03 04:35:06'"
183
+ row = query("SELECT * FROM tests WHERE name = '1_1_1_1''s name'").first
184
+ assert row['brand_id'] == 1 && row["shop_id"] == 1 && row["user_id"] == 1 && row["stamp_id"] == 1
185
+ end
186
+ end
@@ -0,0 +1,5 @@
1
+ $: << File.dirname(__FILE__) + '/../lib'
2
+ #require File.dirname(__FILE__) + '/../lib/image_convert_lite'
3
+
4
+ require 'testdata_generater_for_mysql'
5
+ require 'testdata_generater_for_mysql/version'
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "testdata_generater_for_mysql/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "testdata_generater_for_mysql"
7
+ s.version = TestdataGeneraterForMysql::VERSION
8
+ s.authors = ["pacojp"]
9
+ s.email = ["paco.jp@gmail.com"]
10
+ s.homepage = "https://github.com/pacojp/testdata_generater_for_mysql"
11
+ s.summary = %q{oreore mysql test data generater}
12
+ s.description = %q{oreore mysql test data generater}
13
+
14
+ s.rubyforge_project = "testdata_generater_for_mysql"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: testdata_generater_for_mysql
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - pacojp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-07 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: oreore mysql test data generater
15
+ email:
16
+ - paco.jp@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.md
24
+ - Rakefile
25
+ - example/sample1.rb
26
+ - lib/testdata_generater_for_mysql.rb
27
+ - lib/testdata_generater_for_mysql/core.rb
28
+ - lib/testdata_generater_for_mysql/version.rb
29
+ - test/test.rb
30
+ - test/test_helper.rb
31
+ - testdata_generater_for_mysql.gemspec
32
+ homepage: https://github.com/pacojp/testdata_generater_for_mysql
33
+ licenses: []
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project: testdata_generater_for_mysql
52
+ rubygems_version: 1.8.23
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: oreore mysql test data generater
56
+ test_files:
57
+ - test/test.rb
58
+ - test/test_helper.rb
59
+ has_rdoc: