bigbroda 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.pryrc +3 -0
  4. data/.rspec +2 -0
  5. data/.rvmrc +1 -0
  6. data/Gemfile +18 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +408 -0
  9. data/Rakefile +12 -0
  10. data/google_bigquery.gemspec +30 -0
  11. data/lib/.DS_Store +0 -0
  12. data/lib/active_record/.DS_Store +0 -0
  13. data/lib/active_record/connection_adapters/bigquery_adapter.rb +949 -0
  14. data/lib/active_record/tasks/bigquery_database_tasks.rb +42 -0
  15. data/lib/generators/.DS_Store +0 -0
  16. data/lib/generators/google_bigquery/.DS_Store +0 -0
  17. data/lib/generators/google_bigquery/install/install_generator.rb +21 -0
  18. data/lib/generators/templates/README +11 -0
  19. data/lib/generators/templates/bigquery.rb.erb +7 -0
  20. data/lib/google_bigquery/auth.rb +27 -0
  21. data/lib/google_bigquery/client.rb +52 -0
  22. data/lib/google_bigquery/config.rb +17 -0
  23. data/lib/google_bigquery/dataset.rb +77 -0
  24. data/lib/google_bigquery/engine.rb +21 -0
  25. data/lib/google_bigquery/jobs.rb +173 -0
  26. data/lib/google_bigquery/project.rb +16 -0
  27. data/lib/google_bigquery/railtie.rb +39 -0
  28. data/lib/google_bigquery/table.rb +63 -0
  29. data/lib/google_bigquery/table_data.rb +23 -0
  30. data/lib/google_bigquery/version.rb +3 -0
  31. data/lib/google_bigquery.rb +27 -0
  32. data/spec/.DS_Store +0 -0
  33. data/spec/dummy/.DS_Store +0 -0
  34. data/spec/dummy/.gitignore +20 -0
  35. data/spec/dummy/README.rdoc +261 -0
  36. data/spec/dummy/Rakefile +7 -0
  37. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  38. data/spec/dummy/app/assets/stylesheets/application.css.scss +13 -0
  39. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  40. data/spec/dummy/app/helpers/application_helper.rb +3 -0
  41. data/spec/dummy/app/mailers/.gitkeep +0 -0
  42. data/spec/dummy/app/models/log_data.rb +3 -0
  43. data/spec/dummy/app/models/post.rb +3 -0
  44. data/spec/dummy/app/models/user.rb +4 -0
  45. data/spec/dummy/app/views/layouts/application.html.haml +32 -0
  46. data/spec/dummy/config/application.rb +23 -0
  47. data/spec/dummy/config/boot.rb +11 -0
  48. data/spec/dummy/config/database.yml +32 -0
  49. data/spec/dummy/config/environment.rb +6 -0
  50. data/spec/dummy/config/environments/development.rb +29 -0
  51. data/spec/dummy/config/environments/production.rb +80 -0
  52. data/spec/dummy/config/environments/test.rb +36 -0
  53. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  54. data/spec/dummy/config/initializers/bigquery.rb +19 -0
  55. data/spec/dummy/config/initializers/inflections.rb +16 -0
  56. data/spec/dummy/config/initializers/mime_types.rb +6 -0
  57. data/spec/dummy/config/initializers/secret_token.rb +8 -0
  58. data/spec/dummy/config/initializers/session_store.rb +9 -0
  59. data/spec/dummy/config/initializers/wrap_parameters.rb +15 -0
  60. data/spec/dummy/config/locales/devise.en.yml +58 -0
  61. data/spec/dummy/config/locales/en.yml +5 -0
  62. data/spec/dummy/config/locales/simple_form.en.yml +26 -0
  63. data/spec/dummy/config/routes.rb +4 -0
  64. data/spec/dummy/config.ru +4 -0
  65. data/spec/dummy/db/migrate/20140224051640_create_users.rb +11 -0
  66. data/spec/dummy/db/migrate/20140224063709_add_last_name_to_user.rb +5 -0
  67. data/spec/dummy/db/migrate/20140225014314_create_log_data.rb +12 -0
  68. data/spec/dummy/db/migrate/20140227015551_create_posts.rb +9 -0
  69. data/spec/dummy/db/schema.rb +39 -0
  70. data/spec/dummy/db/schema_migrations.json +1 -0
  71. data/spec/dummy/lib/assets/.gitkeep +0 -0
  72. data/spec/dummy/lib/templates/erb/scaffold/_form.html.erb +13 -0
  73. data/spec/dummy/log/.gitkeep +0 -0
  74. data/spec/dummy/public/404.html +26 -0
  75. data/spec/dummy/public/422.html +26 -0
  76. data/spec/dummy/public/500.html +25 -0
  77. data/spec/dummy/public/favicon.ico +0 -0
  78. data/spec/dummy/script/rails +6 -0
  79. data/spec/dummy/test/fixtures/log_data.yml +9 -0
  80. data/spec/dummy/test/fixtures/posts.yml +11 -0
  81. data/spec/dummy/test/fixtures/users.yml +11 -0
  82. data/spec/dummy/test/models/log_data_test.rb +7 -0
  83. data/spec/dummy/test/models/post_test.rb +7 -0
  84. data/spec/dummy/test/models/user_test.rb +7 -0
  85. data/spec/fixtures/.DS_Store +0 -0
  86. data/spec/fixtures/configs/account_config.yml-example +6 -0
  87. data/spec/fixtures/keys/.DS_Store +0 -0
  88. data/spec/fixtures/keys/example-privatekey-p12 +0 -0
  89. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/.DS_Store +0 -0
  90. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/adapter/simple_quering.yml +324 -0
  91. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/after_each.yml +154 -0
  92. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/authorize_config.yml +367 -0
  93. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/create_each.yml +195 -0
  94. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/_down/adds_the_email_at_utc_hour_column.yml +575 -0
  95. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/_up/adds_the_created_at_updated_at_column.yml +644 -0
  96. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/add_column/adds_published_column.yml +779 -0
  97. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/associations/users_posts.yml +1464 -0
  98. data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/remove_column/should_raise_error.yml +713 -0
  99. data/spec/fixtures/vcr_cassettes/Dataset/_list.yml +64 -0
  100. data/spec/fixtures/vcr_cassettes/Dataset/authorize_config.yml +367 -0
  101. data/spec/fixtures/vcr_cassettes/Dataset/operations/_get_delete.yml +237 -0
  102. data/spec/fixtures/vcr_cassettes/Dataset/operations/_patch_delete.yml +240 -0
  103. data/spec/fixtures/vcr_cassettes/Dataset/operations/_update_delete.yml +297 -0
  104. data/spec/fixtures/vcr_cassettes/Dataset/operations/create_delete.yml +173 -0
  105. data/spec/fixtures/vcr_cassettes/Project/_list.yml +64 -0
  106. data/spec/fixtures/vcr_cassettes/Project/authorize_config.yml +2166 -0
  107. data/spec/fixtures/vcr_cassettes/Table/authorize_config.yml +367 -0
  108. data/spec/fixtures/vcr_cassettes/Table/operations/creation_edition/_create_delete.yml +404 -0
  109. data/spec/fixtures/vcr_cassettes/Table/operations/creation_edition/_create_update_delete.yml +471 -0
  110. data/spec/fixtures/vcr_cassettes/Table/operations/list.yml +232 -0
  111. data/spec/fixtures/vcr_cassettes/TableData/authorize_config.yml +2166 -0
  112. data/spec/fixtures/vcr_cassettes/TableData/create_each.yml +135 -0
  113. data/spec/fixtures/vcr_cassettes/TableData/delete_each.yml +154 -0
  114. data/spec/fixtures/vcr_cassettes/TableData/insertAll2.yml +189 -0
  115. data/spec/fixtures/vcr_cassettes/auth.yml +2168 -0
  116. data/spec/fixtures/vcr_cassettes/authorize_config.yml +2166 -0
  117. data/spec/fixtures/vcr_cassettes/datasets.yml +119 -0
  118. data/spec/fixtures/vcr_cassettes/delete_each_dataset.yml +48 -0
  119. data/spec/functional/adapter/adapter_spec.rb +213 -0
  120. data/spec/functional/auth_spec.rb +24 -0
  121. data/spec/functional/client_spec.rb +9 -0
  122. data/spec/functional/config_spec.rb +24 -0
  123. data/spec/functional/dataset_spec.rb +77 -0
  124. data/spec/functional/project_spec.rb +24 -0
  125. data/spec/functional/table_data_spec.rb +61 -0
  126. data/spec/functional/table_spec.rb +105 -0
  127. data/spec/models/user_spec.rb +0 -0
  128. data/spec/spec_helper.rb +48 -0
  129. data/spec/support/models.rb +11 -0
  130. data/spec/support/schema.rb +43 -0
  131. metadata +370 -0
@@ -0,0 +1,42 @@
1
+ module ActiveRecord
2
+ module Tasks # :nodoc:
3
+ #extend ActiveSupport::Autoload
4
+
5
+ class BigQueryDatabaseTasks
6
+
7
+ include ActiveRecord::Tasks::DatabaseTasks
8
+
9
+ delegate :connection, :establish_connection, to: ActiveRecord::Base
10
+
11
+ ActiveRecord::Tasks::DatabaseTasks.register_task(/bigquery/, ActiveRecord::Tasks::BigQueryDatabaseTasks)
12
+
13
+ def create
14
+ establish_connection configuration
15
+ connection.create_database configuration['database']
16
+ establish_connection configuration
17
+ end
18
+
19
+ def drop
20
+ establish_connection configuration
21
+ connection.drop_database configuration['database']
22
+ establish_connection configuration
23
+ end
24
+
25
+ def initialize(configuration)
26
+ @configuration = configuration
27
+ end
28
+
29
+ private
30
+
31
+ def configuration
32
+ @configuration
33
+ end
34
+
35
+ def configuration_without_database
36
+ configuration.merge('database' => nil)
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ end
Binary file
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+
3
+ module GoogleBigquery
4
+ class InstallGenerator < ::Rails::Generators::Base
5
+
6
+ source_root File.expand_path("../../../templates", __FILE__)
7
+
8
+ desc "Creates a BigQuery initializer."
9
+ #class_option :orm
10
+
11
+ def copy_initializer
12
+ say_status("installing", "BigQuery", :green)
13
+ copy_file "bigquery.rb.erb", "config/initializers/bigquery.rb"
14
+ end
15
+
16
+ def show_readme
17
+ readme "README" if behavior == :invoke
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+
2
+ Hey, Thanks for install BigBroda
3
+ In order to make Google BigQuery work you will need to follow these steps:
4
+
5
+ 1. register your api access in: google api console at https://code.google.com/apis/console/) and create a server key.
6
+
7
+ 2. Download the p12 key. and save it in your app ie:. config/keys/xxx.p12
8
+
9
+ 3. Configure options in config/initializers/bigquery.rb
10
+
11
+ Enjoy :)
@@ -0,0 +1,7 @@
1
+ GoogleBigquery::Config.setup do |config|
2
+ #config.pass_phrase = "notasecret"
3
+ #config.key_file = Rails.root + "/config/XXXXkey_file.p12"
4
+ #config.client_id = "XXXXX.apps.googleusercontent.com"
5
+ #config.scope = "https://www.googleapis.com/auth/bigquery"
6
+ #config.email = "XXXXXX@developer.gserviceaccount.com"
7
+ end
@@ -0,0 +1,27 @@
1
+ module GoogleBigquery
2
+ class Auth
3
+
4
+ attr_accessor :api, :client
5
+ cattr_accessor :api, :client
6
+
7
+ def initialize
8
+ config = GoogleBigquery::Config
9
+ @key = Google::APIClient::PKCS12.load_key(config.key_file, config.pass_phrase)
10
+ @asserter = Google::APIClient::JWTAsserter.new( config.email, config.scope, @key)
11
+ end
12
+
13
+ def authorize
14
+ @client = Google::APIClient.new()
15
+ @client.authorization = @asserter.authorize()
16
+ @api = @client.discovered_api("bigquery",'v2')
17
+ self.class.api = @api
18
+ self.class.client = @client
19
+ end
20
+
21
+ def self.authorized?
22
+ client.present?
23
+ end
24
+
25
+ end
26
+ end
27
+
@@ -0,0 +1,52 @@
1
+ module GoogleBigquery
2
+ class Client
3
+
4
+ attr_accessor :options, :api, :client
5
+
6
+ def initialize(opts = {})
7
+
8
+ @api ||= GoogleBigquery::Auth.api
9
+ @client ||= GoogleBigquery::Auth.client
10
+ #@auth.authorize # check expiration and cache ?
11
+
12
+ self.tap do |client|
13
+ client.options ||= {}
14
+ client.defaults_options(opts)
15
+ client.options ||= opts
16
+ yield client if block_given?
17
+ end
18
+ end
19
+
20
+ def defaults_options(opts)
21
+
22
+ end
23
+
24
+ def parse_response(res)
25
+ JSON.parse(res.body)
26
+ end
27
+
28
+ def self.parse_response(res)
29
+ raise_detected_errors(res)
30
+ JSON.parse(res.body)
31
+ end
32
+
33
+ private
34
+
35
+ def merge_options(name, opts)
36
+ @options.merge! name => opts
37
+ end
38
+
39
+ def raise_detected_errors
40
+ body = JSON.parse(@results.body)
41
+ raise body["error"]["errors"].collect{|e| "#{e["reason"]}: #{e["message"]}" }.join(", ") if body.keys.include?("error")
42
+ end
43
+
44
+ def self.raise_detected_errors(res)
45
+ body = JSON.parse(res.body)
46
+ raise body["error"]["errors"].map{|o| "[BigQuery: #{o['domain']}]: #{o['reason']} #{o['message']}" }.join(", ") if body.has_key?("error")
47
+ end
48
+
49
+ end
50
+ end
51
+
52
+
@@ -0,0 +1,17 @@
1
+ require "active_support/core_ext/module/attribute_accessors"
2
+
3
+ module GoogleBigquery
4
+ class Config
5
+
6
+ def self.setup
7
+ yield self
8
+ end
9
+
10
+ mattr_accessor :pass_phrase,
11
+ :key_file,
12
+ :client_id,
13
+ :scope,
14
+ :profile_id,
15
+ :email
16
+ end
17
+ end
@@ -0,0 +1,77 @@
1
+
2
+ module GoogleBigquery
3
+ class Dataset < GoogleBigquery::Client
4
+
5
+ attr_accessor :options
6
+
7
+ def initialize( opts={})
8
+ super
9
+ end
10
+
11
+ def self.list(project_id)
12
+ parse_response GoogleBigquery::Auth.client.execute(
13
+ GoogleBigquery::Auth.api.datasets.list,
14
+ projectId: project_id
15
+ )
16
+ end
17
+
18
+ def self.get(project_id, dataset_id)
19
+ res = GoogleBigquery::Auth.client.execute(
20
+ :api_method=> GoogleBigquery::Auth.api.datasets.get,
21
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id }
22
+ )
23
+ parse_response(res)
24
+ end
25
+
26
+ def self.update(project_id, dataset_id, body={})
27
+ res = GoogleBigquery::Auth.client.execute(
28
+ :api_method=> GoogleBigquery::Auth.api.datasets.update,
29
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
30
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id }
31
+ )
32
+ parse_response(res)
33
+ end
34
+
35
+ def self.patch(project_id, dataset_id, body={})
36
+ res = GoogleBigquery::Auth.client.execute(
37
+ :api_method=> GoogleBigquery::Auth.api.datasets.update,
38
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
39
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id }
40
+ )
41
+ parse_response(res)
42
+ end
43
+
44
+ def self.create(project_id, body={})
45
+ res = GoogleBigquery::Auth.client.execute(
46
+ :api_method=> GoogleBigquery::Auth.api.datasets.insert,
47
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
48
+ :parameters=> {"projectId"=> project_id }
49
+ )
50
+ parse_response(res)
51
+ end
52
+
53
+ def delete(opts)
54
+ end
55
+
56
+ def self.delete(project_id, dataset_id, body={})
57
+
58
+ tables = GoogleBigquery::Table.list(project_id, dataset_id)["tables"]
59
+
60
+ unless tables.nil? or tables.empty?
61
+ tables.map!{|o| o["tableReference"]["tableId"]}
62
+ tables.each do |table_id|
63
+ GoogleBigquery::Table.delete(project_id, dataset_id, table_id)
64
+ end
65
+ end
66
+
67
+ res = GoogleBigquery::Auth.client.execute(
68
+ :api_method=> GoogleBigquery::Auth.api.datasets.delete,
69
+ #:body_object=> {"deleteContents"=> true},
70
+ :parameters=> {"projectId"=> project_id, "datasetId" => dataset_id }
71
+ )
72
+ res.status == 204 ? true : parse_response(res)
73
+
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require "active_record/connection_adapters/bigquery_adapter.rb"
4
+
5
+ module GoogleBigquery
6
+ class Engine < ::Rails::Engine
7
+
8
+ isolate_namespace GoogleBigquery
9
+ #config.generators do |g|
10
+ # g.test_framework :rspec,
11
+ # :fixture_replacement => :factory_girl ,
12
+ # :dir => "spec/factories"
13
+ # g.integration_tool :rspec
14
+ #end
15
+
16
+ #initializer "require GoogleBigquery" do
17
+ #end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,173 @@
1
+ module GoogleBigquery
2
+ class Jobs < GoogleBigquery::Client
3
+
4
+ def initialize(client=nil, opts={})
5
+ @client = client
6
+ end
7
+
8
+ #query
9
+ #Runs a BigQuery SQL query synchronously and returns query results if the query completes within a specified timeout.
10
+ def self.query(project_id, body={})
11
+ res = GoogleBigquery::Auth.client.execute(
12
+ :api_method=> GoogleBigquery::Auth.api.jobs.query,
13
+ :body_object=> body,
14
+ :parameters=> {"projectId"=> project_id}
15
+ )
16
+ parse_response(res)
17
+
18
+ end
19
+
20
+ #Retrieves the specified job by ID.
21
+ def self.get(project_id , job_id)
22
+ res = GoogleBigquery::Auth.client.execute(
23
+ :api_method=> GoogleBigquery::Auth.api.jobs.get,
24
+ :parameters=> {"projectId"=> project_id, "jobId"=>job_id}
25
+ )
26
+ #parse_response(res)
27
+ end
28
+
29
+ #Retrieves the results of a query job.
30
+ def self.getQueryResults(project_id , job_id, body={})
31
+ res = GoogleBigquery::Auth.client.execute(
32
+ :api_method=> GoogleBigquery::Auth.api.jobs.get_query_results,
33
+ :body_object=> body,
34
+ :parameters=> {"projectId"=> project_id, "jobId"=>job_id}
35
+ )
36
+ parse_response(res)
37
+ end
38
+
39
+ #Starts a new asynchronous job.
40
+ def self.insert(project_id, body={})
41
+ res = GoogleBigquery::Auth.client.execute(
42
+ :api_method=> GoogleBigquery::Auth.api.jobs.insert,
43
+ :body_object=> body,
44
+ :parameters=> {"projectId"=> project_id}
45
+ )
46
+ parse_response(res)
47
+ end
48
+
49
+ #Lists all the Jobs in the specified project that were started by the user.
50
+ def self.list(project_id, body={})
51
+ res = GoogleBigquery::Auth.client.execute(
52
+ :api_method=> GoogleBigquery::Auth.api.jobs.list,
53
+ :body_object=> body,
54
+ :parameters=> {"projectId"=> project_id}
55
+ )
56
+ parse_response(res)
57
+ end
58
+
59
+ #export data
60
+ def self.export(project_id, dataset_id, table_id, bucket_location)
61
+ body = {'projectId'=> project_id,
62
+ 'configuration'=> {
63
+ 'extract'=> {
64
+ 'sourceTable'=> {
65
+ 'projectId'=> project_id,
66
+ 'datasetId'=> dataset_id,
67
+ 'tableId'=> table_id
68
+ },
69
+ 'destinationUri'=> "gs://#{bucket_location}",
70
+ 'destinationFormat'=> 'NEWLINE_DELIMITED_JSON'
71
+ }
72
+ }
73
+ }
74
+
75
+ res = GoogleBigquery::Auth.client.execute(
76
+ :api_method=> GoogleBigquery::Auth.api.jobs.insert,
77
+ :body_object=> body,
78
+ :parameters=> {"projectId"=> project_id}
79
+ )
80
+
81
+ job_id = JSON.parse(res.body)["jobReference"]["jobId"]
82
+ puts 'Waiting for export to complete..'
83
+
84
+ loop do
85
+ status = JSON.parse(self.get(project_id, job_id).body)
86
+
87
+ if 'DONE' == status['status']['state']
88
+
89
+ puts "Done exporting!"
90
+ if status["status"]["errors"]
91
+ puts status["status"]["errors"].map{|o| "#{o['reason']} : #{o['message']}"}
92
+ end
93
+
94
+ return
95
+
96
+ end
97
+ sleep(10)
98
+ end
99
+ end
100
+
101
+ def self.load(project_id, dataset_id, table_id, sources, fields)
102
+ body = { 'projectId'=> project_id,
103
+ 'configuration'=> {
104
+ 'load'=> {
105
+ 'sourceUri' => sources.first,
106
+ 'sourceUris' => sources,
107
+ 'schema' => {
108
+ "fields"=> fields
109
+ },
110
+ 'destinationTable'=> {
111
+ 'projectId'=> project_id,
112
+ 'datasetId'=> dataset_id,
113
+ 'tableId'=> table_id
114
+ }
115
+ }
116
+ }
117
+ }
118
+ res = GoogleBigquery::Auth.client.execute(
119
+ :api_method=> GoogleBigquery::Auth.api.jobs.insert,
120
+ :body_object=> body,
121
+ :parameters=> {"projectId"=> project_id}
122
+ )
123
+ #binding.pry
124
+ job_id = JSON.parse(res.body)["jobReference"]["jobId"]
125
+ puts 'Waiting for import to complete..'
126
+
127
+ loop do
128
+ status = JSON.parse(self.get(project_id, job_id).body)
129
+
130
+ if 'DONE' == status['status']['state']
131
+
132
+ puts "Done loading!"
133
+ if status["status"]["errors"]
134
+ puts status["status"]["errors"].map{|o| "#{o['reason']} : #{o['message']}"}
135
+ end
136
+
137
+ return
138
+
139
+ end
140
+ sleep(10)
141
+ end
142
+ end
143
+
144
+ def self.import()
145
+ end
146
+
147
+ def self.copy()
148
+ end
149
+
150
+ private
151
+
152
+ def self.build_body_object(options)
153
+ project_id = options[:project_id]
154
+ dataset_id = options[:dataset_id]
155
+ table_id = options[:table_id]
156
+ bucket_location = options[:bucket_location]
157
+ {'projectId'=> project_id,
158
+ 'configuration'=> {
159
+ 'extract'=> {
160
+ 'sourceTable'=> {
161
+ 'projectId'=> project_id,
162
+ 'datasetId'=> dataset_id,
163
+ 'tableId'=> table_id
164
+ },
165
+ 'destinationUri'=> "gs://#{bucket_location}",
166
+ 'destinationFormat'=> 'NEWLINE_DELIMITED_JSON'
167
+ }
168
+ }
169
+ }
170
+ end
171
+
172
+ end
173
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module GoogleBigquery
3
+ class Project < GoogleBigquery::Client
4
+
5
+ attr_accessor :options
6
+
7
+ def initialize( opts={})
8
+ super
9
+ end
10
+
11
+ def self.list
12
+ parse_response GoogleBigquery::Auth.client.execute( GoogleBigquery::Auth.api.projects.list)
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: UTF-8
2
+
3
+ module GoogleBigquery
4
+ class Railtie < ::Rails::Railtie
5
+ config.before_configuration do
6
+ require "#{Rails.root}/config/initializers/bigquery"
7
+ GoogleBigquery::Auth.new.authorize
8
+ # if config.action_view.javascript_expansions
9
+ # config.action_view.javascript_expansions[:high_charts] |= %w(highcharts exporting)
10
+ # end
11
+ end
12
+
13
+ config.after_initialize do
14
+ #Google::APIClient.logger = Rails.logger
15
+ Google::APIClient.logger = Logger.new("#{Rails.root}/log/bigquery-cli.log")
16
+ #Logger.new(STDOUT)
17
+ end
18
+
19
+ rake_tasks do
20
+ require "active_record/base"
21
+ require "active_record/tasks/bigquery_database_tasks"
22
+
23
+ #ActiveRecord::Tasks::DatabaseTasks.seed_loader = Rails.application
24
+ #ActiveRecord::Tasks::DatabaseTasks.env = Rails.env
25
+
26
+ #namespace :db do
27
+
28
+ #end
29
+
30
+ #load "active_record/railties/databases.rake"
31
+ end
32
+
33
+
34
+
35
+
36
+ end
37
+
38
+ end
39
+
@@ -0,0 +1,63 @@
1
+
2
+ module GoogleBigquery
3
+ class Table < GoogleBigquery::Client
4
+
5
+ attr_accessor :options
6
+
7
+ def initialize( opts={})
8
+ super
9
+ end
10
+
11
+ def self.list(project_id, dataset_id)
12
+ parse_response GoogleBigquery::Auth.client.execute(
13
+ GoogleBigquery::Auth.api.tables.list,
14
+ projectId: project_id, datasetId: dataset_id
15
+ )
16
+ end
17
+
18
+ def self.get(project_id, dataset_id, table_id)
19
+ res = GoogleBigquery::Auth.client.execute(
20
+ :api_method=> GoogleBigquery::Auth.api.tables.get,
21
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id, "tableId"=> table_id }
22
+ )
23
+ parse_response(res)
24
+ end
25
+
26
+ def self.update(project_id, dataset_id, table_id, body={})
27
+ res = GoogleBigquery::Auth.client.execute(
28
+ :api_method=> GoogleBigquery::Auth.api.tables.update,
29
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
30
+ :parameters=> {"projectId"=> project_id, "datasetId" => dataset_id, "tableId"=> table_id }
31
+ )
32
+ parse_response(res)
33
+ end
34
+
35
+ def self.patch(project_id, dataset_id, table_id, body={})
36
+ res = GoogleBigquery::Auth.client.execute(
37
+ :api_method=> GoogleBigquery::Auth.api.tables.update,
38
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
39
+ :parameters=> {"projectId"=> project_id, "datasetId" => dataset_id, "tableId"=> table_id }
40
+ )
41
+ parse_response(res)
42
+ end
43
+
44
+ def self.create(project_id, dataset_id, body={})
45
+ res = GoogleBigquery::Auth.client.execute(
46
+ :api_method=> GoogleBigquery::Auth.api.tables.insert,
47
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
48
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id }
49
+ )
50
+ parse_response(res)
51
+ end
52
+
53
+ def self.delete(project_id, dataset_id, table_id, body={})
54
+ res = GoogleBigquery::Auth.client.execute(
55
+ :api_method=> GoogleBigquery::Auth.api.tables.delete,
56
+ #:body_object=> body, #{"deleteContents"=> false},
57
+ :parameters=> {"projectId"=> project_id, "datasetId" => dataset_id, "tableId"=> table_id }
58
+ )
59
+ res.status == 204 ? true : parse_response(res)
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,23 @@
1
+
2
+ module GoogleBigquery
3
+ class TableData < GoogleBigquery::Client
4
+
5
+ def self.create(project_id, dataset_id, table_id, body={})
6
+ res = GoogleBigquery::Auth.client.execute(
7
+ :api_method=> GoogleBigquery::Auth.api.tabledata.insert_all,
8
+ :body_object=> body , #{"datasetReference"=> {"datasetId" =>"whoa"}},
9
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id, "tableId"=>table_id }
10
+ )
11
+ parse_response(res)
12
+ end
13
+
14
+ def self.list(project_id, dataset_id, table_id)
15
+ res = GoogleBigquery::Auth.client.execute(
16
+ :api_method=> GoogleBigquery::Auth.api.tabledata.list,
17
+ :parameters=> {"projectId"=> project_id, "datasetId"=> dataset_id, "tableId"=>table_id }
18
+ )
19
+ parse_response(res)
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module GoogleBigquery
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,27 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
+
3
+ require "google/api_client"
4
+ require "active_support"
5
+
6
+ module GoogleBigquery
7
+
8
+ autoload :VERSION, 'google_bigquery/version.rb'
9
+ autoload :Config, 'google_bigquery/config.rb'
10
+ autoload :Auth, 'google_bigquery/auth.rb'
11
+ autoload :Client, 'google_bigquery/client.rb'
12
+ autoload :Project, 'google_bigquery/project.rb'
13
+ autoload :Dataset, 'google_bigquery/dataset.rb'
14
+ autoload :Table, 'google_bigquery/table.rb'
15
+ autoload :TableData,'google_bigquery/table_data.rb'
16
+ autoload :Jobs, 'google_bigquery/jobs.rb'
17
+
18
+ if defined?(::Rails::Railtie)
19
+ autoload :Rails, 'google_bigquery/engine.rb' if ::Rails.version >= '3.1'
20
+ end
21
+
22
+ if defined?(::Rails::Railtie)
23
+ autoload :Rails, 'google_bigquery/engine.rb' if ::Rails.version >= '3.1'
24
+ require File.join(File.dirname(__FILE__), *%w[google_bigquery railtie]) if ::Rails.version.to_s >= '3.1'
25
+ end
26
+
27
+ end
data/spec/.DS_Store ADDED
Binary file
Binary file
@@ -0,0 +1,20 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ /public/assets
15
+ # Ignore all logfiles and tempfiles.
16
+ /log/*.log
17
+ /tmp
18
+
19
+ *.rdb
20
+ /public/uploads