zillabyte-cli 0.9.33 → 0.9.34

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OGZjZTEyZTYyMmFmZTY5YzIwMDU0OTIyYjkyNDM3ZmViNWFlYzQ5ZA==
5
- data.tar.gz: !binary |-
6
- YzMzMDAzYjRjYTQzNjE4YzA0NTI0MTJhYWFjYzc2ZjE2MDcwMWIwMA==
2
+ SHA1:
3
+ metadata.gz: 873b66c2ff0aefd25f8e83dd77b47ab67bbeaf11
4
+ data.tar.gz: ad39b03a444c5b52b5834de35ab2fa7641157516
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZDBhZGVmZDU5NzFlOGZmNGM4MWQ4ZTEyNmYyNDgwMzI5YTVkMjFiMjFlYjc1
10
- Zjc4OWY2YmU2MmEwN2JmY2QxZjhiMzk0NTVlYmJiODhhMjg2ZGNiNjk5OTMx
11
- OTgwYjA0M2YzNWI0OGFlZjE4NDE4OGU4YjI1ZDAyMTMwNjdlNGY=
12
- data.tar.gz: !binary |-
13
- NGQyNWUzNjVlZTFiMmRhYWNlMmU3NjJmYmMxMmRmNWRlNGM4M2YwOTE1MjFh
14
- NjAwOGFmMDJlNzc2YTA1ZmQyM2U3MTZlZGM3NzgxNTNjMTcyMWUyNTQwZmQz
15
- MGMzZDA5NjIyMDYxOGVkOGQ4ODhiNmU2Y2RkY2FmZjA1MWU2NmU=
6
+ metadata.gz: 14fdbd895bbb43c5c800a681365595a64b72875d782c6935bb062ab70592992a76a649224584283e6ad6e09dd2ff5ca8d96c0c8b1fe7e7aed94baac6f5448b8e
7
+ data.tar.gz: 45329f8e5348ab8313a688250929cf556f97ac6ca40b52c108a32ddb6f384ba4ffd09fc330660eb2bb5e2d04b4dcf6cbdc5a57726539fc551a02833e9665a725
@@ -1,5 +1,5 @@
1
1
  module Zillabyte
2
2
  module CLI
3
- VERSION = "0.9.33"
3
+ VERSION = "0.9.34"
4
4
  end
5
5
  end
data/lib/zillabyte/cli.rb CHANGED
@@ -1,14 +1,15 @@
1
1
  module Zillabyte; module CLI
2
2
 
3
3
  def self.start(*args)
4
+ require("zillabyte/helpers")
4
5
  begin
6
+ Zillabyte::Helpers.error("We're sorry, but Zillabyte requires Ruby 1.9.3 or above.") if !Zillabyte::Helpers.version_okay?(RUBY_VERSION, "1.9.3")
5
7
  command = args.shift().strip() rescue "help"
6
8
  require("zillabyte/command")
7
9
  Zillabyte::Command.load(command)
8
10
  Zillabyte::Command.run(command, args)
9
11
  rescue Interrupt
10
12
  `stty icanon echo`
11
- require("zillabyte/helpers")
12
13
  Zillabyte::Helpers.error("Command cancelled.")
13
14
  rescue => error
14
15
  raise
@@ -171,22 +171,6 @@ class Zillabyte::Command::Base
171
171
  self
172
172
  end
173
173
 
174
- def version_okay?(current_version, min_version)
175
- current_version = current_version.split(".").map {|v| v.to_i}
176
- minimum_version = min_version.split(".").map {|v| v.to_i}
177
- if current_version[0] > minimum_version[0]
178
- return true
179
- elsif current_version[0] == minimum_version[0]
180
- if current_version[1] > minimum_version[1]
181
- return true
182
- elsif current_version[1] == minimum_version[1]
183
- return true if current_version[2] >= minimum_version[2]
184
- end
185
- end
186
- return false
187
- end
188
-
189
-
190
174
  end
191
175
 
192
176
 
@@ -7,6 +7,7 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
7
7
  MAX_POLL_SECONDS = 60 * 5
8
8
  POLL_SLEEP = 1
9
9
  APPENDS_ROWS_SLICE = 5_000;
10
+ ONE_HUNDRED_MB = 1e8;
10
11
 
11
12
  # data
12
13
  #
@@ -138,39 +139,34 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
138
139
  description = options[:description] || nil
139
140
  aliases = options[:aliases] || nil
140
141
 
141
- if type.nil?
142
- hash = get_dataset_properties(schema,is_public,description,aliases)
143
- else
144
- hash = hash_dataset_properties(schema,is_public,description,aliases, type)
145
- end
142
+ hash = get_dataset_properties(schema,is_public,description,aliases)
146
143
 
147
144
  if file
148
145
  filetype ||= File.extname(file).gsub(".", "")
149
- rows = sanity_check_file(file,filetype, {"columns" => hash[:schema]}, type)
150
- hash[:rows] = rows
146
+ n_shards = calculate_number_of_shards(file)
147
+ hash[:shards] = n_shards
148
+ display "Sharding into ~#{n_shards} shard(s) for upload. (Actual number may be smaller.)" if type.nil?
151
149
  end
152
150
 
153
151
  res = api.data.create name, hash
152
+
154
153
  if res['error']
155
154
  error("#{res['error_message']}", type)
156
155
  else
156
+ if file
157
+ row_size = save_rows(hash[:schema], file, filetype, res['uris'], type)
158
+ end
157
159
  if type == "json"
158
160
  display "{}"
159
161
  else
160
- display "dataset ##{res['id']} #{res['action']}. size: #{res['size'] || 0} rows."
162
+ display "dataset ##{res['id']} #{res['action']}. size: #{row_size || 0} rows."
161
163
  end
162
164
  end
163
-
164
165
  end
165
166
  alias_command "relations:create", "data:create"
166
167
  alias_command "relation:create", "data:create"
167
168
  alias_command "datasets:create", "data:create"
168
169
  alias_command "dataset:create", "data:create"
169
-
170
-
171
-
172
-
173
-
174
170
 
175
171
  # data:authorize [ID] [SCOPE]
176
172
  #
@@ -255,28 +251,21 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
255
251
  error("no file given", type) if file.nil?
256
252
 
257
253
  dataset = self.api.data.get(id, options)
258
- columns = dataset["columns"].map{|col| {col["index"] => col["type"]}}
259
- raw_rows = sanity_check_file(file,filetype,{"columns" => columns}, type)
254
+ schema = dataset["schema"]
255
+ n_shards = calculate_number_of_shards(file)
260
256
 
261
- total_rows = 0
262
257
  display("uploading content.", false)
263
- raw_rows.each_slice(APPENDS_ROWS_SLICE) do |rows|
264
-
265
-
266
- # TODO: post to direct signed s3 (http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/PresignedPost.html)
267
- display(".", false)
268
- require("base64")
269
- res = self.api.data.append(id, {:gzip_rows => Base64.encode64(gzip(rows.to_json()))})
270
- # res = self.api.data.append(id, {:rows => rows})
271
-
272
- break unless res["size"]
273
- total_rows += res["size"]
274
- end
258
+ res = self.api.data.append(id, {:shards => n_shards})
275
259
 
276
- if type == "json"
277
- display({:rows => total_rows}.to_json)
260
+ if res['error']
261
+ error("#{res['error_message']}", type)
278
262
  else
279
- display "dataset ##{id} appended #{total_rows} rows"
263
+ row_size = save_rows(schema, file, filetype, res['uris'], type)
264
+ if type == "json"
265
+ display({:rows => row_size}.to_json)
266
+ else
267
+ display "dataset ##{id} appended #{row_size} rows"
268
+ end
280
269
  end
281
270
 
282
271
  end
@@ -547,7 +536,7 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
547
536
  end
548
537
 
549
538
  if is_public.nil?
550
- error("specify public or private using --public")
539
+ error("specify public or private using --public", type)
551
540
  end
552
541
 
553
542
  {:schema => schema, :public => is_public, :description => description, :aliases => aliases, :output_type => type}
@@ -613,85 +602,6 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
613
602
  {:schema => schema, :public => is_public, :description => description, :aliases => aliases}
614
603
  end
615
604
 
616
- def sanity_check_file(file, filetype, dataset, type = nil)
617
- rows = []
618
-
619
- n_columns = dataset["columns"].size
620
- float_cols = []
621
- int_cols = []
622
- array_cols = []
623
- map_cols = []
624
- (0...n_columns).each do |i|
625
- value = dataset["columns"][i].values[0].downcase
626
- # use integer instead of numeric to be consistent with multilang type declarations
627
- if(value == 'integer')
628
- int_cols << i
629
- elsif(value == "float" or value == "double")
630
- float_cols << i
631
- elsif(value == "array")
632
- array_cols << i
633
- elsif(value == "map")
634
- map_cols << i
635
- end
636
- end
637
-
638
- case filetype
639
- when "csv"
640
- begin
641
- require("csv")
642
- CSV.foreach(file) do |row|
643
- if row.size != n_columns
644
- error("Dataset expects #{n_columns} column(s). Found a row with #{row.size}::\n #{row}", type)
645
- end
646
-
647
- float_cols.each do |i|
648
- if (!(row[i] =~ /^[+-]?(\d+(.\d+)?)$/))
649
- error("Column #{i+1} should be a FLOAT or DOUBLE in row ::\n #{row}", type)
650
- end
651
- end
652
-
653
- int_cols.each do |i|
654
- if (!(row[i] =~ /^[+-]?(\d+)$/))
655
- error("Column #{i+1} should be an INTEGER in row ::\n #{row}", type)
656
- end
657
- end
658
-
659
- array_cols.each do |i|
660
- err = "Column #{i+1} should be an ARRAY (i.e. [v0,v1,...]) in row ::\n #{row}\n Please remember to escape strings in the array!"
661
- begin
662
- array = JSON.parse(row[i])
663
- rescue
664
- error(err, type)
665
- end
666
- if !array.instance_of?(Array)
667
- error(err, type)
668
- end
669
- end
670
-
671
- map_cols.each do |i|
672
- err = "Column #{i+1} should be a MAP (i.e. {\"k1\":v1,\"k2\":v2,...}) in row ::\n #{row}\n Please remember to escape strings in the map!"
673
- begin
674
- map = JSON.parse(row[i])
675
- rescue
676
- error(err, type)
677
- end
678
- if !map.instance_of?(Hash)
679
- error(err, type)
680
- end
681
- end
682
- rows << row
683
- end
684
- rescue Exception => e
685
- error("error when parsing csv : #{e}", type)
686
- end
687
-
688
- else
689
- error "unsupported type: #{filetype}"
690
-
691
- end
692
- rows
693
- end
694
-
695
605
  # # relations:status ID
696
606
  # #
697
607
  # # shows status of a relation
@@ -750,6 +660,130 @@ class Zillabyte::Command::Data < Zillabyte::Command::Base
750
660
  compressed
751
661
  end
752
662
 
663
+ def sanity_check_row(row, schema, n_columns, output_type)
664
+ if row.size != n_columns
665
+ error("Dataset expects #{n_columns} column(s). Found a row with #{row.size}::\n #{row}", output_type)
666
+ end
667
+
668
+ row_hash = {}
669
+ schema.each_with_index do |col, i|
670
+ case col.values.first
671
+ when "float", "double"
672
+ if (!(row[i] =~ /^[+-]?(\d+(.\d+)?)$/))
673
+ error("Column #{i+1} should be a FLOAT or DOUBLE in row ::\n #{row}", output_type)
674
+ end
675
+ row_hash[col.keys.first] = row[i].to_f
676
+ when "integer"
677
+ if (!(row[i] =~ /^[+-]?(\d+)$/))
678
+ error("Column #{i+1} should be an INTEGER in row ::\n #{row}", output_type)
679
+ end
680
+ row_hash[col.keys.first] = row[i].to_i
681
+ when "array"
682
+ err = "Column #{i+1} should be an ARRAY (i.e. [v0,v1,...]) in row ::\n #{row}\n Please remember to escape strings in the array!"
683
+ begin
684
+ row_hash[col.keys.first] = JSON.parse(row[i])
685
+ rescue
686
+ error(err, output_type)
687
+ end
688
+ if !row[i].instance_of?(Array)
689
+ error(err, output_type)
690
+ end
691
+ when "map"
692
+ err = "Column #{i+1} should be a MAP (i.e. {\"k1\":v1,\"k2\":v2,...}) in row ::\n #{row}\n Please remember to escape strings in the map!"
693
+ begin
694
+ row_hash[col.keys.first] = JSON.parse(row[i])
695
+ rescue
696
+ error(err, output_type)
697
+ end
698
+ if !row[i].instance_of?(Hash)
699
+ error(err, output_type)
700
+ end
701
+ else
702
+ row_hash[col.keys.first] = row[i]
703
+ end
704
+ end
705
+
706
+ row_hash.to_json
707
+ end
708
+
709
+ def flush_to_s3(rows, public_uris, output_type)
710
+ require "zlib"
711
+ while(true)
712
+ begin
713
+ str = StringIO.new("")
714
+ gz = Zlib::GzipWriter.new(str)
715
+ gz.write(rows.join("\n"))
716
+ gz.finish
717
+ str.rewind
718
+ rescue Exception => e
719
+ # just retry
720
+ end
721
+ break
722
+ end
723
+
724
+ require 'net/http'
725
+ require "uri"
726
+ display("Uploading.") if output_type.nil?
727
+ uri = URI.parse(public_uris.shift)
728
+ try_again = 1
729
+ while(try_again)
730
+ begin
731
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
732
+ request = Net::HTTP::Put.new(uri.request_uri)
733
+ request.body_stream = str
734
+ request['Content-Length'] = request.body_stream.size
735
+ request['Content-Type'] = ''
736
+ response = http.request(request)
737
+ if response.code.to_i >= 300
738
+ display("Received code #{response.code}...re-trying.") if output_type.nil?
739
+ try_again = 1
740
+ sleep(3)
741
+ else
742
+ try_again = nil
743
+ end
744
+ end
745
+ rescue Exception => e
746
+ try_again = 1
747
+ end
748
+ end
749
+ end
750
+
751
+ def save_rows(schema, file, filetype, public_uris, output_type)
752
+ n_columns = schema.size
753
+ n_flushes = 1
754
+ total_rows = 0
755
+ display "Checking your file and constructing shard ##{n_flushes}." if output_type.nil?
756
+ case filetype
757
+ when "csv"
758
+ require("csv")
759
+ total_size = 0
760
+ rows = []
761
+ CSV.foreach(file) do |row|
762
+ total_rows += 1
763
+ print "." if(total_rows % 10000 == 0)
764
+ total_size += row.join.bytesize
765
+ row_json = sanity_check_row(row, schema, n_columns, output_type)
766
+ rows << row_json
767
+
768
+ if total_size > ONE_HUNDRED_MB
769
+ flush_to_s3(rows, public_uris, output_type)
770
+ total_size = 0
771
+ n_flushes += 1
772
+ display "Checking your file and constructing shard ##{n_flushes}." if output_type.nil?
773
+ rows = []
774
+ end
775
+ end
776
+ flush_to_s3(rows, public_uris, output_type) if total_size > 0
777
+ else
778
+ error "unsupported type: #{filetype}", output_type
779
+ end
753
780
 
781
+ total_rows
782
+ end
783
+
784
+ def calculate_number_of_shards(file)
785
+ filesize = File.size(file)
786
+ (filesize / ONE_HUNDRED_MB + 1).floor
787
+ end
754
788
 
755
789
  end
@@ -5,7 +5,7 @@ require("zillabyte/cli/base")
5
5
  class Zillabyte::Command::Download < Zillabyte::Command::Base
6
6
 
7
7
  MIN_LOCAL_JAR_VERSION = "0.0.3"
8
- LATEST_JAR_VERSION = "0.9.33"
8
+ LATEST_JAR_VERSION = "0.9.34"
9
9
  MIN_JAVA_VERSION = "1.7.0"
10
10
 
11
11
  # --local # HIDDEN
@@ -0,0 +1,2 @@
1
+ # <%= name %>
2
+
@@ -324,6 +324,21 @@ module Zillabyte
324
324
  end
325
325
  end
326
326
 
327
+ def version_okay?(current_version, min_version)
328
+ current_version = current_version.split(".").map {|v| v.to_i}
329
+ minimum_version = min_version.split(".").map {|v| v.to_i}
330
+ if current_version[0] > minimum_version[0]
331
+ return true
332
+ elsif current_version[0] == minimum_version[0]
333
+ if current_version[1] > minimum_version[1]
334
+ return true
335
+ elsif current_version[1] == minimum_version[1]
336
+ return true if current_version[2] >= minimum_version[2]
337
+ end
338
+ end
339
+ return false
340
+ end
341
+
327
342
  end
328
343
  end
329
344
 
metadata CHANGED
@@ -1,139 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zillabyte-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.33
4
+ version: 0.9.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - zillabyte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-19 00:00:00.000000000 Z
11
+ date: 2014-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: netrc
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.7.7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.7.7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rest-client
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.6.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.6.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: excon
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.31'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.31'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: terminal-table
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.4'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.4'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: activesupport
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 3.2.11
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.2.11
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: multi_json
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '1.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: colorize
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0.6'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.6'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: indentation
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0.1'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0.1'
139
139
  description: The Official Zillabyte CLI Gem
@@ -194,6 +194,7 @@ files:
194
194
  - lib/zillabyte/cli/templates/apps/python/zillabyte.conf.yaml
195
195
  - lib/zillabyte/cli/templates/apps/ruby/Gemfile
196
196
  - lib/zillabyte/cli/templates/apps/ruby/README.md
197
+ - lib/zillabyte/cli/templates/apps/ruby/README.md.erb
197
198
  - lib/zillabyte/cli/templates/apps/ruby/app.rb.erb
198
199
  - lib/zillabyte/cli/templates/apps/ruby/zillabyte.conf.yaml
199
200
  - lib/zillabyte/cli/templates/components/js/simple_function.js
@@ -220,22 +221,28 @@ homepage: http://www.zillabyte.com
220
221
  licenses:
221
222
  - MIT
222
223
  metadata: {}
223
- post_install_message: ! "\nGetting Started with Zillabyte\n==============================\n\n(1)
224
- Register for an auth token at http://zillabyte.com\n(2) Log in by running 'zillabyte
225
- login' in the command line\n(3) Build an empty app by running 'zillabyte apps:init'\n
226
- \ Or... check out our Quick Starts by visiting http://docs.zillabyte.com/\n\nQuestions,
227
- comments? Please visit us at http://docs.zillabyte.com\n"
224
+ post_install_message: |2
225
+
226
+ Getting Started with Zillabyte
227
+ ==============================
228
+
229
+ (1) Register for an auth token at http://zillabyte.com
230
+ (2) Log in by running 'zillabyte login' in the command line
231
+ (3) Build an empty app by running 'zillabyte apps:init'
232
+ Or... check out our Quick Starts by visiting http://docs.zillabyte.com/
233
+
234
+ Questions, comments? Please visit us at http://docs.zillabyte.com
228
235
  rdoc_options: []
229
236
  require_paths:
230
237
  - lib
231
238
  required_ruby_version: !ruby/object:Gem::Requirement
232
239
  requirements:
233
- - - ! '>='
240
+ - - ">="
234
241
  - !ruby/object:Gem::Version
235
242
  version: '0'
236
243
  required_rubygems_version: !ruby/object:Gem::Requirement
237
244
  requirements:
238
- - - ! '>='
245
+ - - ">="
239
246
  - !ruby/object:Gem::Version
240
247
  version: '0'
241
248
  requirements: []