data_sampler 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,7 +3,4 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in data_sampler.gemspec
4
4
  gemspec
5
5
 
6
- # These are here to coerce RubyMine into recognising these dependencies
7
- gem "activerecord"
8
- gem "schema_plus"
9
6
 
data/README CHANGED
@@ -1,7 +1,11 @@
1
1
 
2
- Ever found yourself wanting a modest amount of fresh rows from a production database for development purposes, but
3
- put back by the need to maintain referential integrity in the extracted data sample? This data sampler utility will
4
- take care that referential dependencies are fulfilled by recursively fetching any rows referred to by the sample.
2
+ Ever found yourself wanting a modest amount of fresh rows from a production database
3
+ for development purposes, but put back by the need to maintain referential integrity
4
+ in the extracted data sample?
5
+
6
+ This data sampling utility will take care that referential dependencies are
7
+ fulfilled by recursively expanding the sample with unfilled dependencies until
8
+ the sample is referentially consistent.
5
9
 
6
10
  COMMANDS:
7
11
 
data/bin/data_sampler CHANGED
@@ -23,7 +23,6 @@ command :sample do |c|
23
23
  :database => 'test',
24
24
  :username => 'root',
25
25
  :encoding => 'utf8',
26
- :socket => '/opt/local/var/run/mysql5/mysqld.sock',
27
26
  :rows => 1000
28
27
  ActiveRecord::Base.logger = Logger.new(options.log) if options.log
29
28
  ActiveRecord::Base.establish_connection(options.__hash__).with_connection do |conn|
data/data_sampler.gemspec CHANGED
@@ -23,4 +23,7 @@ take care that referential dependencies are fulfilled by recursively fetching an
23
23
  s.add_dependency "schema_plus"
24
24
  s.add_dependency "activerecord"
25
25
  s.add_dependency "commander"
26
+ s.add_dependency "mysql"
27
+
28
+ s.add_development_dependency "pry"
26
29
  end
@@ -14,7 +14,7 @@ module DataSampler
14
14
  end
15
15
 
16
16
  def to_s
17
- "#{keys} in table #{table_name}"
17
+ "#{keys} in table `#{table_name}`"
18
18
  end
19
19
 
20
20
  end
@@ -14,20 +14,23 @@ module DataSampler
14
14
  def compute!
15
15
  @connection.tables.each do |table_name|
16
16
  # Workaround for inconsistent casing in table definitions (http://bugs.mysql.com/bug.php?id=60773)
17
- table_name.downcase!
17
+ # table_name.downcase!
18
18
  @table_samples[table_name] = TableSample.new(@connection, table_name, @rows_per_table)
19
19
  end
20
- warn "Sampling #{@table_samples.count} tables..."
20
+ warn "Sampling #{@table_samples.count} tables from database `#{@connection.current_database}`..."
21
21
  @table_samples.values.map &:sample!
22
22
  warn "Ensuring referential integrity..."
23
23
  begin
24
24
  new_dependencies = 0
25
25
  @table_samples.values.each do |table_sample|
26
- new_dependencies += 1 if table_sample.ensure_referential_integrity(@table_samples)
26
+ if table_sample.ensure_referential_integrity(@table_samples)
27
+ new_dependencies += 1
28
+ warn " Found new dependents for table `#{table_sample.table_name}`"
29
+ end
27
30
  end
28
- warn " - discovered #{new_dependencies} new dependencies" if new_dependencies > 0
31
+ warn " Discovered #{new_dependencies} new dependencies" if new_dependencies > 0
29
32
  end while new_dependencies > 0
30
- warn " - referential integrity obtained"
33
+ warn "Referential integrity obtained"
31
34
  @computed = true
32
35
  end
33
36
 
@@ -38,4 +41,4 @@ module DataSampler
38
41
 
39
42
  end
40
43
 
41
- end
44
+ end
@@ -26,7 +26,9 @@ module DataSampler
26
26
  return if fulfilled?(dependency)
27
27
  where = dependency.keys.collect { |col, val| "#{@connection.quote_column_name col} = #{@connection.quote val}" } * ' AND '
28
28
  sql = "SELECT * FROM #{@connection.quote_table_name @table_name} WHERE " + where
29
- add @connection.select_one(sql)
29
+ row = @connection.select_one(sql)
30
+ raise "Dependent row not found for #{dependency} (using SQL: #{sql})" if row.nil?
31
+ add row
30
32
  end
31
33
 
32
34
  def fulfilled?(dependency)
@@ -58,6 +60,7 @@ module DataSampler
58
60
  deps_in_progress = @pending_dependencies
59
61
  @pending_dependencies = Set.new
60
62
  deps_in_progress.each do |dependency|
63
+ raise "Table sample for #{dependency.table_name} not found" unless table_samples[dependency.table_name]
61
64
  any_new = true if table_samples[dependency.table_name].fulfil(dependency)
62
65
  end
63
66
  any_new
@@ -83,6 +86,7 @@ module DataSampler
83
86
  protected
84
87
 
85
88
  def fetch_sample(count)
89
+ warn " Sampling #{count} rows from table `#{@table_name}`"
86
90
  sql = "SELECT * FROM #{@connection.quote_table_name @table_name}"
87
91
  pk = @connection.primary_key(@table_name)
88
92
  sql += " ORDER BY #{@connection.quote_column_name pk} DESC" unless pk.nil?
@@ -1,3 +1,3 @@
1
1
  module DataSampler
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_sampler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-24 00:00:00.000000000Z
12
+ date: 2013-03-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: schema_plus
16
- requirement: &70204676786560 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70204676786560
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activerecord
27
- requirement: &70204676785900 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,31 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70204676785900
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: commander
38
- requirement: &70204676785240 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: mysql
64
+ requirement: !ruby/object:Gem::Requirement
39
65
  none: false
40
66
  requirements:
41
67
  - - ! '>='
@@ -43,7 +69,28 @@ dependencies:
43
69
  version: '0'
44
70
  type: :runtime
45
71
  prerelease: false
46
- version_requirements: *70204676785240
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
47
94
  description: ! 'Ever found yourself wanting a modest amount of fresh rows from a production
48
95
  database for development purposes, but
49
96
 
@@ -90,9 +137,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
137
  version: '0'
91
138
  requirements: []
92
139
  rubyforge_project: data_sampler
93
- rubygems_version: 1.8.10
140
+ rubygems_version: 1.8.23
94
141
  signing_key:
95
142
  specification_version: 3
96
143
  summary: Extract a sample of records from a database while maintaining referential
97
144
  integrity.
98
145
  test_files: []
146
+ has_rdoc: