data_task 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDk5OWQzMDU3YzNkZGUyZTczODUxNTdhODk4MTg4MjU0MGU3NDYwOQ==
4
+ NzJlMjU4MzQwNWU2MTNjNjdiM2M1MDUxNWQ0OGM3MDIyZGMxZjM1ZQ==
5
5
  data.tar.gz: !binary |-
6
- NzRmMWMzNjM4MGJjYmZjYTkwYTIwOTFiNjQ0YTVjZWZjNmU1NmQwNg==
6
+ Y2M3MTBkMTZkN2I1ZTcwOTlhMzJlYzY1ODViMTJhZjg5Njc3NTkzNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmNmMjc3MzFmMzBmOGI2MmFjNDBkODAyNDQ5YmZiNzBjMjFmY2JhNDFhMTk5
10
- M2NmZjk5MzU4ZWRiNzFkMDYxYTgxN2I1MTM0ZjI0OGUzMjRjOTM4YmVmNmVm
11
- ZjlkYzhhM2Y0YmU5YTdiNTY2NTMyMTVlMzhiNDE2ODU5YzQ2M2I=
9
+ NzdkZDc3MGM4M2NkYTBmNTFlMDE3M2YyN2E2Y2M2ODNiZTA2YmFiOGNhZGM2
10
+ ZDNhYzA0NmZhZDQxZmUxM2UxMWZmOWViY2JhOGFhYmVlOGZhZDBjOGQwZDA3
11
+ ZTIyYmE0OGZhZGFhZDIzMTRmMTgwZmViNDVjMmE0YTQyODdkNjk=
12
12
  data.tar.gz: !binary |-
13
- MzdiNGYyN2IyOWU4YWNkYjgwNzE1MzRmYThlNGNlODU1NmQ2N2ZhZDU1YTcz
14
- YWEwZjQyM2Q4NWJkYmFlZGI4YjVhNWIxY2M4ODZjMzc3OGM4YmFlZWQ3YTcx
15
- ZTcwNDMyZTQ3YThmYjY2MjIyNGQ1OGMyMzNlMmEzOTdjY2Y2NTQ=
13
+ YjM3NTI1ZDU1OGU2YWRkNDE4NTY4YjM3ZjYxMDAyZTRlODA5ZDY3NjY4NDk3
14
+ OGI3ZTAyNGRmNGFjZTFmMTgzNWQ1NDFiOGY2OWQwMmE0YWU5ODE2ZmI5ZWJi
15
+ MDk1NmE3MmJiMDBiODk5NWYyZWI1Y2UwYWYzMTdjMmExZDI4ZWQ=
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # DataTask
5
5
 
6
- DataTask extends Rake's dependency-based programming language to databases. This gem provides the `data` task, analogous to Rake's built-in `file` task but extended to work with pluggable backends beyond the local filesystem.
6
+ DataTask is a build tool for data. It extends Rake's dependency-based programming language to databases. This gem provides the `data` task, analogous to Rake's built-in `file` task but extended to work with pluggable backends beyond the local filesystem.
7
7
 
8
8
  Adapters are included for Sqlite3, PostgreSQL, and Greenplum.
9
9
 
@@ -26,19 +26,16 @@ Or install it yourself as:
26
26
  To write your first data task, connect to your database by instantiating an adapter:
27
27
 
28
28
  ```
29
- postgres = Rake::DataTask::Postgres.new(
30
- 'host' => 'localhost',
31
- 'port' => 5432,
32
- 'database' => 'example',
33
- 'username' => 'postgres'
29
+ sqlite = Rake::DataTask::Sqlite.new(
30
+ 'database' => 'example'
34
31
  )
35
32
  ```
36
33
 
37
34
  Then use this adapter instance as the target for a data task:
38
35
 
39
36
  ```
40
- desc "Load a data file into PostgreSQL for analysis."
41
- data postgres['raw'] => 'raw.txt' do
37
+ desc "Load a data file into Sqlite for analysis."
38
+ data sqlite['raw'] => 'raw.txt' do
42
39
  # Add loading logic here
43
40
  end
44
41
  ```
@@ -52,36 +49,36 @@ require 'rake'
52
49
  require 'data_task'
53
50
 
54
51
  # connect to the database
55
- postgres = Rake::DataTask::Postgres.new(
56
- 'host' => 'localhost',
57
- 'port' => 5432,
58
- 'database' => 'example',
59
- 'username' => 'postgres'
60
- )
52
+ sqlite = Rake::DataTask::Sqlite.new('database' => 'example')
61
53
 
62
54
  # mark raw.txt as a potential dependency
63
55
  file 'raw.txt'
64
56
 
65
- # define a loader for the postgres table 'raw', dependent on raw.txt
66
- desc "Load a data file into PostgreSQL for analysis."
67
- data postgres['raw'] => 'raw.txt' do
68
- postgres.create_table 'raw', nil, '(var1 text)'
69
- postgres.execute "copy raw.txt to raw"
57
+ # define a loader for the Sqlite3 table 'raw', dependent on raw.txt
58
+ desc "Load a data file into Sqlite3 for analysis."
59
+ data sqlite['raw'] => 'raw.txt' do
60
+ sqlite.create_table 'raw', nil, '(var1 text)'
61
+ File.open('raw.txt').each { |line| sqlite.execute "insert into raw values ('#{line}')" }
62
+ end
63
+
64
+ # define an analytical table, dependent on the raw data table
65
+ desc "Analyze loaded data."
66
+ data sqlite['analyzed'] => sqlite['raw'] do
67
+ sqlite.create_table 'analyzed', 'select * from raw'
70
68
  end
71
69
  ```
72
70
 
73
71
  To run it:
74
72
 
75
73
  1. paste the example into a file named 'Rakefile',
76
- 2. make sure the PostgreSQL configuration matches your server,
77
- 3. open a terminal and run the commands below:
74
+ 2. in the same directory as your Rakefile, open a terminal and run the commands below:
78
75
 
79
76
  ```
80
77
  $ echo "v1" > raw.txt
81
- $ rake 'raw'
78
+ $ rake analyzed
82
79
  ```
83
80
 
84
- The contents of raw.txt should be in your table 'raw' on PostgreSQL. Running the rake command a second time will result in no operations as long as raw.txt hasn't changed. With big data files, this can be a big time-saver.
81
+ The contents of raw.txt should be in your table 'raw' on your Sqlite database. Running the rake command a second time will result in no operations as long as raw.txt and the 'raw' table haven't changed.
85
82
 
86
83
 
87
84
  ## Contributing
data/data_task.gemspec CHANGED
@@ -21,11 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 1.9.3'
22
22
 
23
23
  spec.add_runtime_dependency 'rake', '~> 10.0.4'
24
- spec.add_runtime_dependency 'pg', '~> 0.17.1'
25
- spec.add_runtime_dependency 'sqlite3'
26
24
 
27
25
  spec.add_development_dependency 'bundler', '~> 1.6'
28
26
  spec.add_development_dependency 'minitest-around', '~> 0.2'
29
27
  spec.add_development_dependency 'minitest-spec-context', '~> 0.0.3'
30
28
  spec.add_development_dependency 'coveralls'
29
+ spec.add_development_dependency 'pg', '~> 0.17.1'
30
+ spec.add_development_dependency 'sqlite3'
31
+
31
32
  end
@@ -1,4 +1,3 @@
1
- require 'pg'
2
1
  require_relative 'support/transactions'
3
2
  require_relative 'support/booleans'
4
3
  require_relative './postgres'
@@ -1,8 +1,12 @@
1
- require 'pg'
2
- require_relative '../data'
1
+ begin
2
+ require 'pg'
3
+ rescue LoadError
4
+ puts "The Postgres adapter requires the pg gem, which can be installed via rubygems."
5
+ end
3
6
  require_relative 'support/transactions'
4
7
  require_relative 'support/booleans'
5
8
  require_relative 'support/connection_persistence'
9
+ require_relative '../data'
6
10
 
7
11
  module Rake
8
12
  module DataTask
@@ -1,7 +1,11 @@
1
- require 'sqlite3'
2
- require_relative '../data'
1
+ begin
2
+ require 'sqlite3'
3
+ rescue LoadError
4
+ puts "The Sqlite adapter requires the sqlite3 gem, which can be installed via rubygems."
5
+ end
3
6
  require_relative 'support/transactions'
4
7
  require_relative 'support/booleans'
8
+ require_relative '../data'
5
9
 
6
10
  module Rake
7
11
  module DataTask
@@ -73,7 +77,7 @@ module Rake
73
77
 
74
78
  alias_method :data_mtime, :table_mtime
75
79
 
76
- def create_table table_name, data_definition, column_definitions, track_table=true
80
+ def create_table table_name, data_definition, column_definitions=nil, track_table=true
77
81
  drop_table table_name
78
82
  execute <<-EOSQL
79
83
  create table #{table_name} #{column_definitions}
@@ -1,5 +1,5 @@
1
1
  module Rake
2
2
  module DataTask
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_task
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shahin Saneinejad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-11 00:00:00.000000000 Z
11
+ date: 2014-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -25,77 +25,77 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 10.0.4
27
27
  - !ruby/object:Gem::Dependency
28
- name: pg
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.17.1
34
- type: :runtime
33
+ version: '1.6'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.17.1
40
+ version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
42
+ name: minitest-around
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
47
+ version: '0.2'
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: minitest-spec-context
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '1.6'
61
+ version: 0.0.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '1.6'
68
+ version: 0.0.3
69
69
  - !ruby/object:Gem::Dependency
70
- name: minitest-around
70
+ name: coveralls
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - ! '>='
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
- version: '0.2'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: minitest-spec-context
84
+ name: pg
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: 0.0.3
89
+ version: 0.17.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: 0.0.3
96
+ version: 0.17.1
97
97
  - !ruby/object:Gem::Dependency
98
- name: coveralls
98
+ name: sqlite3
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ! '>='