bigbroda 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +25 -0
- data/.pryrc +3 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +22 -0
- data/README.md +408 -0
- data/Rakefile +12 -0
- data/google_bigquery.gemspec +30 -0
- data/lib/.DS_Store +0 -0
- data/lib/active_record/.DS_Store +0 -0
- data/lib/active_record/connection_adapters/bigquery_adapter.rb +949 -0
- data/lib/active_record/tasks/bigquery_database_tasks.rb +42 -0
- data/lib/generators/.DS_Store +0 -0
- data/lib/generators/google_bigquery/.DS_Store +0 -0
- data/lib/generators/google_bigquery/install/install_generator.rb +21 -0
- data/lib/generators/templates/README +11 -0
- data/lib/generators/templates/bigquery.rb.erb +7 -0
- data/lib/google_bigquery/auth.rb +27 -0
- data/lib/google_bigquery/client.rb +52 -0
- data/lib/google_bigquery/config.rb +17 -0
- data/lib/google_bigquery/dataset.rb +77 -0
- data/lib/google_bigquery/engine.rb +21 -0
- data/lib/google_bigquery/jobs.rb +173 -0
- data/lib/google_bigquery/project.rb +16 -0
- data/lib/google_bigquery/railtie.rb +39 -0
- data/lib/google_bigquery/table.rb +63 -0
- data/lib/google_bigquery/table_data.rb +23 -0
- data/lib/google_bigquery/version.rb +3 -0
- data/lib/google_bigquery.rb +27 -0
- data/spec/.DS_Store +0 -0
- data/spec/dummy/.DS_Store +0 -0
- data/spec/dummy/.gitignore +20 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +16 -0
- data/spec/dummy/app/assets/stylesheets/application.css.scss +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/helpers/application_helper.rb +3 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/log_data.rb +3 -0
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/models/user.rb +4 -0
- data/spec/dummy/app/views/layouts/application.html.haml +32 -0
- data/spec/dummy/config/application.rb +23 -0
- data/spec/dummy/config/boot.rb +11 -0
- data/spec/dummy/config/database.yml +32 -0
- data/spec/dummy/config/environment.rb +6 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
- data/spec/dummy/config/initializers/bigquery.rb +19 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +6 -0
- data/spec/dummy/config/initializers/secret_token.rb +8 -0
- data/spec/dummy/config/initializers/session_store.rb +9 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +15 -0
- data/spec/dummy/config/locales/devise.en.yml +58 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/locales/simple_form.en.yml +26 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20140224051640_create_users.rb +11 -0
- data/spec/dummy/db/migrate/20140224063709_add_last_name_to_user.rb +5 -0
- data/spec/dummy/db/migrate/20140225014314_create_log_data.rb +12 -0
- data/spec/dummy/db/migrate/20140227015551_create_posts.rb +9 -0
- data/spec/dummy/db/schema.rb +39 -0
- data/spec/dummy/db/schema_migrations.json +1 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/lib/templates/erb/scaffold/_form.html.erb +13 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/test/fixtures/log_data.yml +9 -0
- data/spec/dummy/test/fixtures/posts.yml +11 -0
- data/spec/dummy/test/fixtures/users.yml +11 -0
- data/spec/dummy/test/models/log_data_test.rb +7 -0
- data/spec/dummy/test/models/post_test.rb +7 -0
- data/spec/dummy/test/models/user_test.rb +7 -0
- data/spec/fixtures/.DS_Store +0 -0
- data/spec/fixtures/configs/account_config.yml-example +6 -0
- data/spec/fixtures/keys/.DS_Store +0 -0
- data/spec/fixtures/keys/example-privatekey-p12 +0 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/.DS_Store +0 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/adapter/simple_quering.yml +324 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/after_each.yml +154 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/authorize_config.yml +367 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/create_each.yml +195 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/_down/adds_the_email_at_utc_hour_column.yml +575 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/_up/adds_the_created_at_updated_at_column.yml +644 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/add_column/adds_published_column.yml +779 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/associations/users_posts.yml +1464 -0
- data/spec/fixtures/vcr_cassettes/ActiveRecord_Adapter/migrations/remove_column/should_raise_error.yml +713 -0
- data/spec/fixtures/vcr_cassettes/Dataset/_list.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Dataset/authorize_config.yml +367 -0
- data/spec/fixtures/vcr_cassettes/Dataset/operations/_get_delete.yml +237 -0
- data/spec/fixtures/vcr_cassettes/Dataset/operations/_patch_delete.yml +240 -0
- data/spec/fixtures/vcr_cassettes/Dataset/operations/_update_delete.yml +297 -0
- data/spec/fixtures/vcr_cassettes/Dataset/operations/create_delete.yml +173 -0
- data/spec/fixtures/vcr_cassettes/Project/_list.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Project/authorize_config.yml +2166 -0
- data/spec/fixtures/vcr_cassettes/Table/authorize_config.yml +367 -0
- data/spec/fixtures/vcr_cassettes/Table/operations/creation_edition/_create_delete.yml +404 -0
- data/spec/fixtures/vcr_cassettes/Table/operations/creation_edition/_create_update_delete.yml +471 -0
- data/spec/fixtures/vcr_cassettes/Table/operations/list.yml +232 -0
- data/spec/fixtures/vcr_cassettes/TableData/authorize_config.yml +2166 -0
- data/spec/fixtures/vcr_cassettes/TableData/create_each.yml +135 -0
- data/spec/fixtures/vcr_cassettes/TableData/delete_each.yml +154 -0
- data/spec/fixtures/vcr_cassettes/TableData/insertAll2.yml +189 -0
- data/spec/fixtures/vcr_cassettes/auth.yml +2168 -0
- data/spec/fixtures/vcr_cassettes/authorize_config.yml +2166 -0
- data/spec/fixtures/vcr_cassettes/datasets.yml +119 -0
- data/spec/fixtures/vcr_cassettes/delete_each_dataset.yml +48 -0
- data/spec/functional/adapter/adapter_spec.rb +213 -0
- data/spec/functional/auth_spec.rb +24 -0
- data/spec/functional/client_spec.rb +9 -0
- data/spec/functional/config_spec.rb +24 -0
- data/spec/functional/dataset_spec.rb +77 -0
- data/spec/functional/project_spec.rb +24 -0
- data/spec/functional/table_data_spec.rb +61 -0
- data/spec/functional/table_spec.rb +105 -0
- data/spec/models/user_spec.rb +0 -0
- data/spec/spec_helper.rb +48 -0
- data/spec/support/models.rb +11 -0
- data/spec/support/schema.rb +43 -0
- metadata +370 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://www.googleapis.com/bigquery/v2/projects/985884699512/datasets
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"datasetReference":{"datasetId":"rspec-schema"}}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- |-
|
12
|
+
google-api-ruby-client/0.7.1 Mac OS X/10.9
|
13
|
+
(gzip)
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip
|
18
|
+
Authorization:
|
19
|
+
- Bearer ya29.1.AADtN_Wg4Sg29lGgLuTYiuQYm942Z0_LCwqQ9Jg0OS4RVbh8wzOygJS7_Pe-1y7K
|
20
|
+
Cache-Control:
|
21
|
+
- no-store
|
22
|
+
Accept:
|
23
|
+
- '*/*'
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 400
|
27
|
+
message: Bad Request
|
28
|
+
headers:
|
29
|
+
Content-Type:
|
30
|
+
- application/json; charset=UTF-8
|
31
|
+
Content-Encoding:
|
32
|
+
- gzip
|
33
|
+
Date:
|
34
|
+
- Wed, 26 Feb 2014 00:34:44 GMT
|
35
|
+
Expires:
|
36
|
+
- Wed, 26 Feb 2014 00:34:44 GMT
|
37
|
+
Cache-Control:
|
38
|
+
- private, max-age=0
|
39
|
+
X-Content-Type-Options:
|
40
|
+
- nosniff
|
41
|
+
X-Frame-Options:
|
42
|
+
- SAMEORIGIN
|
43
|
+
X-Xss-Protection:
|
44
|
+
- 1; mode=block
|
45
|
+
Content-Length:
|
46
|
+
- '198'
|
47
|
+
Server:
|
48
|
+
- GSE
|
49
|
+
Alternate-Protocol:
|
50
|
+
- 443:quic
|
51
|
+
body:
|
52
|
+
encoding: ASCII-8BIT
|
53
|
+
string: !binary |-
|
54
|
+
H4sIAAAAAAAAAM2OOw6DQAxEe05hbZVICSIRVWoazhBSmF0LkPaD7CUN4u5Z
|
55
|
+
IJ8rpLE8b6Z4cwaKmAOrG8wZvIOkdE9pQwma4HDwCarOhhatOu2cCSVsfPBP
|
56
|
+
tIP5FI5EsKO1qfcGDEYUilBX0CiWkfRZdE8OG5VD9S0F3CQRWgK0Y49+csSD
|
57
|
+
hsNoJ4HJG2LRgUmOgN78thFcSO+luJage2TUMS3BBt/lanVa0nmsdkoHs4qV
|
58
|
+
RbHFf1NdsiV7AbxkedaWAQAA
|
59
|
+
http_version:
|
60
|
+
recorded_at: Wed, 26 Feb 2014 00:34:44 GMT
|
61
|
+
- request:
|
62
|
+
method: delete
|
63
|
+
uri: https://www.googleapis.com/bigquery/v2/projects/985884699512/datasets/rspec-schema
|
64
|
+
body:
|
65
|
+
encoding: UTF-8
|
66
|
+
string: ''
|
67
|
+
headers:
|
68
|
+
User-Agent:
|
69
|
+
- |-
|
70
|
+
google-api-ruby-client/0.7.1 Mac OS X/10.9
|
71
|
+
(gzip)
|
72
|
+
Accept-Encoding:
|
73
|
+
- gzip
|
74
|
+
Content-Type:
|
75
|
+
- ''
|
76
|
+
Authorization:
|
77
|
+
- Bearer ya29.1.AADtN_Wg4Sg29lGgLuTYiuQYm942Z0_LCwqQ9Jg0OS4RVbh8wzOygJS7_Pe-1y7K
|
78
|
+
Cache-Control:
|
79
|
+
- no-store
|
80
|
+
Accept:
|
81
|
+
- '*/*'
|
82
|
+
response:
|
83
|
+
status:
|
84
|
+
code: 400
|
85
|
+
message: Bad Request
|
86
|
+
headers:
|
87
|
+
Content-Type:
|
88
|
+
- application/json; charset=UTF-8
|
89
|
+
Content-Encoding:
|
90
|
+
- gzip
|
91
|
+
Date:
|
92
|
+
- Wed, 26 Feb 2014 00:34:45 GMT
|
93
|
+
Expires:
|
94
|
+
- Wed, 26 Feb 2014 00:34:45 GMT
|
95
|
+
Cache-Control:
|
96
|
+
- private, max-age=0
|
97
|
+
X-Content-Type-Options:
|
98
|
+
- nosniff
|
99
|
+
X-Frame-Options:
|
100
|
+
- SAMEORIGIN
|
101
|
+
X-Xss-Protection:
|
102
|
+
- 1; mode=block
|
103
|
+
Content-Length:
|
104
|
+
- '198'
|
105
|
+
Server:
|
106
|
+
- GSE
|
107
|
+
Alternate-Protocol:
|
108
|
+
- 443:quic
|
109
|
+
body:
|
110
|
+
encoding: ASCII-8BIT
|
111
|
+
string: !binary |-
|
112
|
+
H4sIAAAAAAAAAM2OOw6DQAxEe05hbZVICSIRVWoazhBSmF0LkPaD7CUN4u5Z
|
113
|
+
IJ8rpLE8b6Z4cwaKmAOrG8wZvIOkdE9pQwma4HDwCarOhhatOu2cCSVsfPBP
|
114
|
+
tIP5FI5EsKO1qfcGDEYUilBX0CiWkfRZdE8OG5VD9S0F3CQRWgK0Y49+csSD
|
115
|
+
hsNoJ4HJG2LRgUmOgN78thFcSO+luJage2TUMS3BBt/lanVa0nmsdkoHs4qV
|
116
|
+
RbHFf1NdsiV7AbxkedaWAQAA
|
117
|
+
http_version:
|
118
|
+
recorded_at: Wed, 26 Feb 2014 00:34:45 GMT
|
119
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: delete
|
5
|
+
uri: https://www.googleapis.com/bigquery/v2/projects/985884699512/datasets/rspec_schema
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- |-
|
12
|
+
google-api-ruby-client/0.7.1 Mac OS X/10.9
|
13
|
+
(gzip)
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip
|
16
|
+
Content-Type:
|
17
|
+
- ''
|
18
|
+
Authorization:
|
19
|
+
- Bearer ya29.1.AADtN_VHikWnQmc17jxgAZiFSL0I58Xs9zF1BB935LWssQalVVpP8ri-FoGEmcU9
|
20
|
+
Cache-Control:
|
21
|
+
- no-store
|
22
|
+
Accept:
|
23
|
+
- '*/*'
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 204
|
27
|
+
message: No Content
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-cache, no-store, max-age=0, must-revalidate
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Expires:
|
34
|
+
- Fri, 01 Jan 1990 00:00:00 GMT
|
35
|
+
Date:
|
36
|
+
- Wed, 26 Feb 2014 01:02:20 GMT
|
37
|
+
Etag:
|
38
|
+
- '"YElLezYfBS2yoouJ_U61l1GQsXY/vyGp6PvFo4RvsFtPoIWeCReyIC8"'
|
39
|
+
Server:
|
40
|
+
- GSE
|
41
|
+
Alternate-Protocol:
|
42
|
+
- 443:quic
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: ''
|
46
|
+
http_version:
|
47
|
+
recorded_at: Wed, 26 Feb 2014 01:02:20 GMT
|
48
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,213 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
2
|
+
|
3
|
+
require "active_record"
|
4
|
+
require "active_record/connection_adapters/bigquery_adapter.rb"
|
5
|
+
|
6
|
+
class CreateUsers < ActiveRecord::Migration
|
7
|
+
def self.up
|
8
|
+
create_table :users do |t|
|
9
|
+
t.string :name
|
10
|
+
t.record :nested_data
|
11
|
+
t.references :taggable, :polymorphic => true
|
12
|
+
t.boolean :admin
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
drop_table :users
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class CreatePosts < ActiveRecord::Migration
|
23
|
+
def self.up
|
24
|
+
create_table :posts do |t|
|
25
|
+
t.string :title
|
26
|
+
t.references :user
|
27
|
+
t.boolean :admin
|
28
|
+
t.timestamps
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.down
|
33
|
+
drop_table :users
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class AddPublishedToUser < ActiveRecord::Migration
|
38
|
+
def change
|
39
|
+
add_column :users, :published, :boolean, default: true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class RemovePublishedToUser < ActiveRecord::Migration
|
44
|
+
def change
|
45
|
+
remove_column :users, :published
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class User < ActiveRecord::Base
|
50
|
+
validates :name, presence: true
|
51
|
+
has_many :posts
|
52
|
+
|
53
|
+
scope :admins , ->{where(admin: true)}
|
54
|
+
end
|
55
|
+
|
56
|
+
class Post < ActiveRecord::Base
|
57
|
+
validates :title, presence: true
|
58
|
+
belongs_to :user
|
59
|
+
end
|
60
|
+
|
61
|
+
def create_tables
|
62
|
+
@table = GoogleBigquery::Table.create(@project, @name, @table_body )
|
63
|
+
|
64
|
+
@rows = {"rows"=> [
|
65
|
+
{
|
66
|
+
"insertId"=> Time.now.to_i.to_s,
|
67
|
+
"json"=> {
|
68
|
+
"name"=> "User #{Time.now.to_s}"
|
69
|
+
}
|
70
|
+
}
|
71
|
+
]}
|
72
|
+
|
73
|
+
GoogleBigquery::TableData.create(@project, @name, @table_name , @rows )
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "ActiveRecord Adapter", :vcr => { :allow_unused_http_interactions => true } do
|
77
|
+
|
78
|
+
let(:migration) { CreateUsers.new}
|
79
|
+
let(:posts_migration) { CreatePosts.new}
|
80
|
+
let(:add_col_migration) { AddPublishedToUser.new}
|
81
|
+
let(:remove_col_migration) { RemovePublishedToUser.new}
|
82
|
+
|
83
|
+
before :all do
|
84
|
+
|
85
|
+
VCR.use_cassette("ActiveRecord_Adapter/authorize_config") do
|
86
|
+
config_setup
|
87
|
+
@auth = GoogleBigquery::Auth.new
|
88
|
+
@auth.authorize
|
89
|
+
@name = "rspec_schema"
|
90
|
+
@project = config_options["email"].match(/(\d*)/)[0]
|
91
|
+
|
92
|
+
@table_name = "users"
|
93
|
+
@table_body = { "tableReference"=> {
|
94
|
+
"projectId"=> @project,
|
95
|
+
"datasetId"=> @name,
|
96
|
+
"tableId"=> @table_name},
|
97
|
+
"schema"=> [:fields=>[
|
98
|
+
{:name=> "id", :type=> "string"},
|
99
|
+
{:name=> "name", :type=> "string", :mode => "REQUIRED"},
|
100
|
+
{:name=> "age", :type=> "integer"},
|
101
|
+
{:name=> "weight", :type=> "float"},
|
102
|
+
{:name=> "is_magic", :type=> "boolean"}
|
103
|
+
]
|
104
|
+
]
|
105
|
+
}
|
106
|
+
|
107
|
+
ActiveRecord::Base.establish_connection(
|
108
|
+
:adapter => 'bigquery',
|
109
|
+
:project => @project,
|
110
|
+
:database => @name
|
111
|
+
)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
before :each do
|
116
|
+
VCR.use_cassette("ActiveRecord_Adapter/create_each") do
|
117
|
+
GoogleBigquery::Dataset.create(@project,
|
118
|
+
{"datasetReference"=> { "datasetId" => @name }} )
|
119
|
+
create_tables
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
after :each do
|
124
|
+
VCR.use_cassette("ActiveRecord_Adapter/after_each") do
|
125
|
+
GoogleBigquery::Dataset.delete(@project, @name)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "adapter" do
|
130
|
+
|
131
|
+
it "simple quering", :vcr do
|
132
|
+
#sleep 50
|
133
|
+
#binding.pry
|
134
|
+
#User.select("name, id").where("name contains ?", "frank").count
|
135
|
+
#User.select("name, id").where("name contains ?", "frank")
|
136
|
+
#User.select("name, id")
|
137
|
+
#User.create(name: "frank capra")
|
138
|
+
#User.find_by(id: "some-id-1393025921")
|
139
|
+
#User.where("id =? and name= ?", "some-id-1393025921", "User 2014-02-21 20:38:41 -0300")
|
140
|
+
expect(User.count).to be 1
|
141
|
+
expect(User.first).to be_an_instance_of User
|
142
|
+
expect(User.all.size).to be 1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "migrations" do
|
147
|
+
|
148
|
+
before :each do
|
149
|
+
VCR.use_cassette("ActiveRecord_Adapter/after_each") do
|
150
|
+
GoogleBigquery::Table.delete(@project, @name, "users")
|
151
|
+
migration.up; User.reset_column_information
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe '#up', vcr: {:record => :new_episodes} do
|
156
|
+
it 'adds the created_at & updated_at column', :vcr do
|
157
|
+
User.columns_hash.should have_key('created_at')
|
158
|
+
User.columns_hash.should have_key('updated_at')
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '#down', vcr: {:record => :new_episodes} do
|
163
|
+
before {
|
164
|
+
migration.down; User.reset_column_information
|
165
|
+
}
|
166
|
+
|
167
|
+
it 'adds the email_at_utc_hour column' do
|
168
|
+
User.should_not be_table_exists
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
#describe "add column", vcr: {:record => :new_episodes} do
|
174
|
+
# before {
|
175
|
+
# add_col_migration.change; User.reset_column_information
|
176
|
+
# }
|
177
|
+
|
178
|
+
# it 'adds published column' do
|
179
|
+
# #binding.pry
|
180
|
+
# User.columns_hash.should have_key('published')
|
181
|
+
# end
|
182
|
+
#end
|
183
|
+
|
184
|
+
describe "remove column", vcr: {:record => :new_episodes} do
|
185
|
+
before {
|
186
|
+
add_col_migration.change; User.reset_column_information
|
187
|
+
}
|
188
|
+
|
189
|
+
it 'should raise error' do
|
190
|
+
expect{remove_col_migration.change}.to raise_error
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
describe "associations", vcr: {:record => :new_episodes} do
|
195
|
+
before {
|
196
|
+
posts_migration.up; Post.reset_column_information
|
197
|
+
}
|
198
|
+
|
199
|
+
it "users_posts" do
|
200
|
+
User.create(name: "ALF")
|
201
|
+
#sleep 50
|
202
|
+
post = User.first.posts.create(title: "yeah")
|
203
|
+
#sleep 50
|
204
|
+
expect(User.first).to respond_to(:id)
|
205
|
+
expect(User.first.posts.first).to be_an_instance_of Post
|
206
|
+
expect(User.joins(:posts).first.posts.count).to be 1
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
|
+
|
3
|
+
describe "Config" do
|
4
|
+
before(:all) do
|
5
|
+
config_setup
|
6
|
+
@auth = GoogleBigquery::Auth.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "authorization object" do
|
10
|
+
VCR.use_cassette('auth') do
|
11
|
+
@auth.authorize
|
12
|
+
@auth.api.class.should be Google::APIClient::API
|
13
|
+
GoogleBigquery::Auth.api.class.should be Google::APIClient::API
|
14
|
+
GoogleBigquery::Auth.client.class.should be Google::APIClient
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
|
+
|
3
|
+
describe "Config class" do
|
4
|
+
before(:all) do
|
5
|
+
|
6
|
+
GoogleBigquery::Config.setup do |config|
|
7
|
+
config.pass_phrase = config_options["pass_phrase"]
|
8
|
+
config.key_file = config_options["key_file"]
|
9
|
+
config.client_id = config_options["client_id"]
|
10
|
+
config.scope = config_options["scope"]
|
11
|
+
config.profile_id = config_options["profile_id"]
|
12
|
+
config.email = config_options["email"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has all the keys required" do
|
17
|
+
GoogleBigquery::Config.pass_phrase.should_not be_empty
|
18
|
+
GoogleBigquery::Config.key_file.should_not be_empty
|
19
|
+
GoogleBigquery::Config.scope.should_not be_empty
|
20
|
+
GoogleBigquery::Config.profile_id.should_not be_empty
|
21
|
+
GoogleBigquery::Config.email.should_not be_empty
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
|
+
|
3
|
+
describe "Dataset", :vcr => { :allow_unused_http_interactions => true } do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
VCR.use_cassette("Dataset/authorize_config") do
|
7
|
+
config_setup
|
8
|
+
@auth = GoogleBigquery::Auth.new
|
9
|
+
@auth.authorize
|
10
|
+
@project = config_options["email"].match(/(\d*)/)[0]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
@name = "rspec_schema"
|
16
|
+
end
|
17
|
+
|
18
|
+
it ".list", :vcr do
|
19
|
+
expect(GoogleBigquery::Dataset.list(@project)["datasets"]).to_not be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
context "operations" do
|
23
|
+
after(:each) do
|
24
|
+
VCR.use_cassette('delete_each_dataset') do
|
25
|
+
GoogleBigquery::Dataset.delete(@project, @name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "create & .delete", :vcr do
|
30
|
+
expect(
|
31
|
+
GoogleBigquery::Dataset.create(@project,
|
32
|
+
{"datasetReference"=> { "datasetId" => @name }} )["id"]
|
33
|
+
).to include @name
|
34
|
+
end
|
35
|
+
|
36
|
+
it ".update & delete", :vcr do
|
37
|
+
expect(
|
38
|
+
GoogleBigquery::Dataset.create(@project,
|
39
|
+
{"datasetReference"=> { "datasetId" =>@name }} )["id"]
|
40
|
+
).to include @name
|
41
|
+
|
42
|
+
expect(
|
43
|
+
GoogleBigquery::Dataset.update(@project, @name,
|
44
|
+
{"datasetReference"=> {
|
45
|
+
"datasetId" =>@name },
|
46
|
+
"description"=> "foobar"} )["description"]
|
47
|
+
).to include "foobar"
|
48
|
+
end
|
49
|
+
|
50
|
+
it ".patch & delete", :vcr do
|
51
|
+
expect(
|
52
|
+
GoogleBigquery::Dataset.create(@project,
|
53
|
+
{"datasetReference"=> { "datasetId" =>@name }} )["id"]
|
54
|
+
).to include @name
|
55
|
+
|
56
|
+
expect(
|
57
|
+
GoogleBigquery::Dataset.patch(@project, @name,
|
58
|
+
{"datasetReference"=> {
|
59
|
+
"datasetId" =>@name },
|
60
|
+
"description"=> "foobar"} )["description"]
|
61
|
+
).to include "foobar"
|
62
|
+
end
|
63
|
+
|
64
|
+
it ".get & delete", :vcr do
|
65
|
+
expect(
|
66
|
+
GoogleBigquery::Dataset.create(@project,
|
67
|
+
{"datasetReference"=> { "datasetId" =>@name }} )["id"]
|
68
|
+
).to include @name
|
69
|
+
|
70
|
+
expect(
|
71
|
+
GoogleBigquery::Dataset.get(@project, @name )["id"]
|
72
|
+
).to include @name
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
2
|
+
|
3
|
+
describe "Project", :vcr => { :allow_unused_http_interactions => true } do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
VCR.use_cassette("Project/authorize_config") do
|
7
|
+
config_setup
|
8
|
+
@auth = GoogleBigquery::Auth.new
|
9
|
+
@auth.authorize
|
10
|
+
@project = config_options["email"].match(/(\d*)/)[0]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
@name = "rspec_schema"
|
16
|
+
end
|
17
|
+
|
18
|
+
it ".list", :vcr do
|
19
|
+
expect(
|
20
|
+
GoogleBigquery::Project.list["projects"].class
|
21
|
+
).to be Array
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')
|
4
|
+
|
5
|
+
describe "TableData", :vcr => { :allow_unused_http_interactions => true } do
|
6
|
+
before(:all) do
|
7
|
+
VCR.use_cassette("TableData/authorize_config") do
|
8
|
+
config_setup
|
9
|
+
@auth = GoogleBigquery::Auth.new
|
10
|
+
@auth.authorize
|
11
|
+
@project = config_options["email"].match(/(\d*)/)[0]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
@name = "rspec_schema"
|
17
|
+
VCR.use_cassette("TableData/create_each", :record => :new_episodes) do
|
18
|
+
GoogleBigquery::Dataset.create(@project, {"datasetReference"=> { "datasetId" => @name }} )["id"]
|
19
|
+
@table_name = "users"
|
20
|
+
@table_body = { "tableReference"=> {
|
21
|
+
"projectId"=> @project,
|
22
|
+
"datasetId"=> @name,
|
23
|
+
"tableId"=> @table_name},
|
24
|
+
"schema"=> [:fields=>[
|
25
|
+
{:name=> "name", :type=> "string", :mode => "REQUIRED"},
|
26
|
+
{:name=> "age", :type=> "integer"},
|
27
|
+
{:name=> "weight", :type=> "float"},
|
28
|
+
{:name=> "is_magic", :type=> "boolean"}
|
29
|
+
]
|
30
|
+
]
|
31
|
+
}
|
32
|
+
@table = GoogleBigquery::Table.create(@project, @name, @table_body )
|
33
|
+
|
34
|
+
@rows = {"rows"=> [
|
35
|
+
{
|
36
|
+
"insertId"=> Time.now.to_i.to_s,
|
37
|
+
"json"=> {
|
38
|
+
"name"=> "User #{Time.now.to_s}"
|
39
|
+
}
|
40
|
+
}
|
41
|
+
]}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
after(:each) do
|
46
|
+
VCR.use_cassette("TableData/delete_each") do
|
47
|
+
GoogleBigquery::Dataset.delete(@project, @name)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "insertAll" do
|
52
|
+
VCR.use_cassette("TableData/insertAll2", :record => :new_episodes) do
|
53
|
+
GoogleBigquery::TableData.create(@project, @name, @table_name , @rows )
|
54
|
+
#sleep 60
|
55
|
+
expect(GoogleBigquery::Jobs.query(@project, {"query"=> "SELECT * FROM [#{@name}.#{@table_name}] LIMIT 1000" })["rows"].empty?).to be false
|
56
|
+
expect(GoogleBigquery::TableData.list(@project, @name, @table_name)["rows"].empty?).to be false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
end
|