aqueduct 0.0.0 → 0.1.0

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.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.0
2
+
3
+ * Enhancements
4
+ * Defined common interface for repositories and wrappers
5
+
1
6
  == 0.0.0
2
7
 
3
- * Skeleton files to compile gem and make it available on rubygems.org
8
+ * Skeleton files to compile gem and make it available on rubygems.org
data/README.rdoc CHANGED
@@ -1,3 +1,17 @@
1
- = Aqueduct
1
+ = Aqueduct {<img src="https://secure.travis-ci.org/remomueller/aqueduct.png"/>}[http://travis-ci.org/remomueller/aqueduct] {<img src="https://gemnasium.com/remomueller/aqueduct.png" alt="Dependency Status" />}[https://gemnasium.com/remomueller/aqueduct]
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ Data integration gem designed to increase data flow between applications.
4
+
5
+ == Installation
6
+
7
+ Aqueduct can be installed from rubygems.org using:
8
+
9
+ gem install aqueduct
10
+
11
+ Or update your Gemfile to include:
12
+
13
+ gem 'aqueduct'
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2012 Remo Mueller. See {LICENSE}[https://github.com/remomueller/aqueduct/blob/master/LICENSE] for further details.
data/Rakefile CHANGED
@@ -16,10 +16,13 @@ RDoc::Task.new(:rdoc) do |rdoc|
16
16
  rdoc.rdoc_dir = 'rdoc'
17
17
  rdoc.title = 'Aqueduct'
18
18
  rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('CHANGELOG.rdoc')
19
20
  rdoc.rdoc_files.include('README.rdoc')
20
21
  rdoc.rdoc_files.include('lib/**/*.rb')
21
22
  end
22
23
 
24
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
25
+ load 'rails/tasks/engine.rake'
23
26
 
24
27
 
25
28
 
@@ -35,4 +38,4 @@ Rake::TestTask.new(:test) do |t|
35
38
  end
36
39
 
37
40
 
38
- task :default => :test
41
+ task default: :test
data/aqueduct.gemspec CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |s|
19
19
  s.email = ["remosm@gmail.com"]
20
20
  s.homepage = "https://github.com/remomueller"
21
21
  s.summary = "Data integration gem designed to increase data flow between applications"
22
- s.description = "Data integration gem designed to increase data flow between applications"
22
+ s.description = "Data integration gem designed to increase data flow between applications using a common interface"
23
23
 
24
24
  s.files = Dir["{app,config,db,lib}/**/*"] + ["aqueduct.gemspec", "CHANGELOG.rdoc", "LICENSE", "Rakefile", "README.rdoc"]
25
25
  s.test_files = Dir["test/**/*"]
26
26
 
27
- s.add_dependency "rails", "~> 3.2.0"
27
+ s.add_dependency "rails", "~> 3.2.1"
28
28
 
29
29
  s.add_development_dependency "sqlite3"
30
30
  end
data/lib/aqueduct.rb CHANGED
@@ -1,4 +1,47 @@
1
+ require 'aqueduct/repository'
2
+ require 'aqueduct/wrapper'
1
3
  require 'aqueduct/version'
2
4
 
3
5
  module Aqueduct
6
+ module Repositories
7
+ autoload :Developer, 'aqueduct/repositories/developer'
8
+ end
9
+
10
+ module Wrappers
11
+ autoload :Developer, 'aqueduct/wrappers/developer'
12
+ end
13
+
14
+ autoload :Repository, 'aqueduct/repository'
15
+ autoload :Wrapper, 'aqueduct/wrapper'
16
+
17
+ def self.repositories
18
+ @@repositories ||= []
19
+ end
20
+
21
+ def self.wrappers
22
+ @@wrappers ||= []
23
+ end
24
+
25
+ class Builder
26
+ def self.repository(source, user)
27
+ klass = source.repository[0].upcase + source.repository[1..-1]
28
+
29
+ begin
30
+ Aqueduct::Repositories.const_get(klass).new(source, user)
31
+ rescue NameError
32
+ raise LoadError, "Please add aqueduct-#{source.repository} to your Gemfile."
33
+ end
34
+ end
35
+
36
+ def self.wrapper(source, user)
37
+ klass = source.wrapper[0].upcase + source.wrapper[1..-1]
38
+
39
+ begin
40
+ Aqueduct::Wrappers.const_get(klass).new(source, user)
41
+ rescue NameError
42
+ raise LoadError, "Please add aqueduct-#{source.wrapper} to your Gemfile."
43
+ end
44
+ end
45
+ end
46
+
4
47
  end
@@ -0,0 +1,42 @@
1
+ require 'aqueduct'
2
+
3
+ module Aqueduct
4
+ module Repositories
5
+ class Developer
6
+ include Aqueduct::Repository
7
+
8
+ # Returns a list of urls to download files
9
+ def count_files(file_locators, file_type)
10
+ error = ''
11
+ result = 0
12
+ file_paths = []
13
+ url_paths = []
14
+ file_locators.each do |file_locator|
15
+ file_locator = file_locator.to_s.gsub(/[\/*]/, '') # Don't allow wild cards or subfolders
16
+ file_type = file_type.to_s.gsub(/[\/*]/, '') # Don't allow wild cards or subfolders
17
+ matching_file_names = Dir.glob(File.join(Rails.root, 'test', 'support', 'repositories', "#{file_locator}#{file_type}"))
18
+ matching_file_names.each do |file_name|
19
+ file_paths << file_name unless file_name.blank?
20
+ url_paths << SITE_URL + "/sources/#{@source.id}/download_file?file_locator=#{file_locator}&file_type=#{file_type}&fn=#{file_name.split('/').last}" unless file_name.blank?
21
+ end
22
+ end
23
+
24
+ { result: url_paths.size, error: error, file_paths: file_paths, urls: url_paths }
25
+ end
26
+
27
+ # Only For Local repositories.
28
+ def get_file(file_locator, file_type)
29
+ result_hash = count_files([file_locator], file_type)
30
+ { file_path: result_hash[:file_paths].first.to_s, error: result_hash[:error] }
31
+ end
32
+
33
+ def has_repository?
34
+ { result: true, error: "" }
35
+ end
36
+
37
+ def file_server_available?
38
+ { result: true, error: "" }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,34 @@
1
+ require 'aqueduct'
2
+
3
+ module Aqueduct
4
+ module Repository
5
+
6
+ def self.included(base)
7
+ Aqueduct.repositories << base
8
+ end
9
+
10
+ def initialize(source, current_user)
11
+ @source = source
12
+ @current_user = current_user
13
+ end
14
+
15
+ # Returns a list of urls to download files
16
+ def count_files(file_locators, file_type)
17
+ { result: 0, error: "Unknown Repository: #{@source.repository}", file_paths: [], urls: [] }
18
+ end
19
+
20
+ # Only For Local repositories.
21
+ def get_file(file_locator, file_type)
22
+ { file_path: '', error: "Unknown Repository: #{@source.repository}" }
23
+ end
24
+
25
+ def has_repository?
26
+ { result: false, error: "Unknown Repository: #{@source.repository}" }
27
+ end
28
+
29
+ def file_server_available?
30
+ { result: false, error: "Unknown Repository: #{@source.repository}" }
31
+ end
32
+
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  module Aqueduct
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 0
4
+ MINOR = 1
5
5
  TINY = 0
6
6
  BUILD = nil # nil, "pre", "rc", "rc2"
7
7
 
@@ -0,0 +1,80 @@
1
+ require 'aqueduct'
2
+
3
+ module Aqueduct
4
+ module Wrapper
5
+
6
+ def self.included(base)
7
+ Aqueduct.wrappers << base
8
+ end
9
+
10
+ def initialize(source, current_user)
11
+ @source = source
12
+ @current_user = current_user
13
+ @db_connection = nil
14
+ end
15
+
16
+ def connect
17
+ @db_connection
18
+ end
19
+
20
+ def disconnect
21
+ true
22
+ end
23
+
24
+ def query(sql_statement)
25
+ [[],0]
26
+ end
27
+
28
+ def use_sql?
29
+ true
30
+ end
31
+
32
+ def sql_codes
33
+ { text: '', numeric: '', open: '', close: '' }
34
+ end
35
+
36
+ # Returns the Connection Status of the underlying data source.
37
+ def connected?
38
+ { result: false, error: "Unknown Wrapper: #{@source.wrapper}" }
39
+ end
40
+
41
+ # Returns an array of tables
42
+ def tables
43
+ { result: [], error: "Unknown Wrapper: #{@source.wrapper}" }
44
+ end
45
+
46
+ # Returns an array of columns for a given table
47
+ def table_columns(table)
48
+ { columns: [], error: "Unknown Wrapper: #{@source.wrapper}" }
49
+ end
50
+
51
+ def get_all_values_for_column(table, column)
52
+ { values: [], error: "<span style='vertical-align:middle'><img height='13' width='13' align='absmiddle' src='#{SITE_URL}/assets/contour/cross.png' alt='warning' /></span> Unknown Wrapper: #{@source.wrapper}" }
53
+ end
54
+
55
+ def column_values(table, column)
56
+ { result: [], error: "Unknown Wrapper: #{@source.wrapper}" }
57
+ end
58
+
59
+ def count(query_concepts, conditions, tables, join_conditions, concept_to_count)
60
+ { result: 0, error: "Unknown Wrapper: #{@source.wrapper}" }
61
+ end
62
+
63
+ def external_concepts(folder = '', search_term = '')
64
+ { result: [], error: '' }#, error: "Unknown Wrapper: #{@source.wrapper}"}
65
+ end
66
+
67
+ def external_concept_information(external_key = '')
68
+ { result: {}, error: "Unknown Wrapper: #{@source.wrapper}" }
69
+ end
70
+
71
+ def concept_tables(query_concept)
72
+ { result: [], error: "Unknown Wrapper: #{@source.wrapper}" }
73
+ end
74
+
75
+ def conditions(query_concepts)
76
+ { conditions: '', error: "Unknown Wrapper: #{@source.wrapper}" }
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,77 @@
1
+ require 'aqueduct'
2
+
3
+ module Aqueduct
4
+ module Wrappers
5
+ class Developer
6
+ include Aqueduct::Wrapper
7
+
8
+ def initialize(source, current_user)
9
+ @source = source
10
+ @current_user = current_user
11
+ @db_connection = true
12
+ end
13
+
14
+ def disconnect
15
+ true
16
+ end
17
+
18
+ def query(sql_statement)
19
+ [[[1,2,3,4],[5,nil,7,8]],2]
20
+ end
21
+
22
+ def sql_codes
23
+ { text: 'text', numeric: 'numeric', open: '[', close: ']' }
24
+ end
25
+
26
+ # Returns the Connection Status of the underlying data source.
27
+ def connected?
28
+ { result: true, error: "" }
29
+ end
30
+
31
+ # Returns an array of tables
32
+ def tables
33
+ { result: ['table'], error: "" }
34
+ end
35
+
36
+ # Returns an array of columns for a given table
37
+ def table_columns(table)
38
+ if table.blank?
39
+ { columns: [], error: "No Table Name Provided" }
40
+ else
41
+ { columns: (1..50).collect{|i| { column: "column#{i}" }} + [{ column: "gender" }], error: "" }
42
+ end
43
+ end
44
+
45
+ def get_all_values_for_column(table, column)
46
+ values = []
47
+ case column when 'gender'
48
+ values = ['m', 'f', nil, 'm', 'm', 'f']
49
+ when 'column4'
50
+ values = [20, 21, 22, 23, 27, 28]
51
+ end
52
+ { values: values, error: "" }
53
+ end
54
+
55
+ def column_values(table, column)
56
+ values = []
57
+ values_hash = self.get_all_values_for_column(table, column)
58
+ values = values_hash[:values].uniq
59
+ { result: values, error: values_hash[:error] }
60
+ end
61
+
62
+ def count(query_concepts, conditions, tables, join_conditions, concept_to_count)
63
+ result = (conditions == '1 = 1') ? 100 : 0
64
+ { result: result, error: "" }
65
+ end
66
+
67
+ def concept_tables(query_concept)
68
+ { result: ['table'], error: "" }
69
+ end
70
+
71
+ def conditions(query_concepts)
72
+ conditions = (query_concepts.size > 0) ? '1 = 1' : '1 = 0'
73
+ { conditions: conditions, error: "" }
74
+ end
75
+ end
76
+ end
77
+ end
Binary file
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 0) do
15
+
16
+ end
Binary file
@@ -0,0 +1,6 @@
1
+  (0.1ms) select sqlite_version(*)
2
+  (1.9ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
3
+  (0.0ms) PRAGMA index_list("schema_migrations")
4
+  (1.5ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
5
+  (0.3ms) select sqlite_version(*)
6
+  (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
@@ -0,0 +1,14 @@
1
+  (0.1ms) select sqlite_version(*)
2
+  (3.3ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
3
+  (0.0ms) PRAGMA index_list("schema_migrations")
4
+  (1.3ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
5
+  (0.2ms) select sqlite_version(*)
6
+  (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
7
+  (0.2ms) begin transaction
8
+  (0.0ms) rollback transaction
9
+  (0.3ms) begin transaction
10
+  (0.1ms) rollback transaction
11
+  (0.4ms) begin transaction
12
+  (0.1ms) rollback transaction
13
+  (0.5ms) begin transaction
14
+  (0.1ms) rollback transaction
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aqueduct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-26 00:00:00.000000000 Z
12
+ date: 2012-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70189672997500 !ruby/object:Gem::Requirement
16
+ requirement: &70203822551000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.2.0
21
+ version: 3.2.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70189672997500
24
+ version_requirements: *70203822551000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &70189672997080 !ruby/object:Gem::Requirement
27
+ requirement: &70203822550400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,15 +32,20 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70189672997080
35
+ version_requirements: *70203822550400
36
36
  description: Data integration gem designed to increase data flow between applications
37
+ using a common interface
37
38
  email:
38
39
  - remosm@gmail.com
39
40
  executables: []
40
41
  extensions: []
41
42
  extra_rdoc_files: []
42
43
  files:
44
+ - lib/aqueduct/repositories/developer.rb
45
+ - lib/aqueduct/repository.rb
43
46
  - lib/aqueduct/version.rb
47
+ - lib/aqueduct/wrapper.rb
48
+ - lib/aqueduct/wrappers/developer.rb
44
49
  - lib/aqueduct.rb
45
50
  - lib/tasks/aqueduct_tasks.rake
46
51
  - aqueduct.gemspec
@@ -70,6 +75,11 @@ files:
70
75
  - test/dummy/config/locales/en.yml
71
76
  - test/dummy/config/routes.rb
72
77
  - test/dummy/config.ru
78
+ - test/dummy/db/development.sqlite3
79
+ - test/dummy/db/schema.rb
80
+ - test/dummy/db/test.sqlite3
81
+ - test/dummy/log/development.log
82
+ - test/dummy/log/test.log
73
83
  - test/dummy/public/404.html
74
84
  - test/dummy/public/422.html
75
85
  - test/dummy/public/500.html
@@ -125,6 +135,11 @@ test_files:
125
135
  - test/dummy/config/locales/en.yml
126
136
  - test/dummy/config/routes.rb
127
137
  - test/dummy/config.ru
138
+ - test/dummy/db/development.sqlite3
139
+ - test/dummy/db/schema.rb
140
+ - test/dummy/db/test.sqlite3
141
+ - test/dummy/log/development.log
142
+ - test/dummy/log/test.log
128
143
  - test/dummy/public/404.html
129
144
  - test/dummy/public/422.html
130
145
  - test/dummy/public/500.html