transcriptic 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,15 +13,15 @@ module Transcriptic
13
13
  user_pass = ":#{@api_key}"
14
14
  options = {
15
15
  :headers => {},
16
- :host => 'www.transcriptic.com',
16
+ :host => 'transcriptic.com',
17
17
  :scheme => 'https'
18
18
  }.merge(options)
19
19
  options[:headers] = {
20
20
  'Accept' => 'application/json',
21
21
  'Accept-Encoding' => 'gzip',
22
- #'Accept-Language' => 'en-US, en;q=0.8',
23
- 'Authorization' => "Basic #{Base64.encode64(user_pass).gsub("\n", '')}",
24
- 'User-Agent' => "transcriptic-rb/#{Transcriptic::API::VERSION}",
22
+ 'Accept-Language' => 'en-US, en;q=0.8',
23
+ 'Authorization' => "Token token=\"#{@api_key}\"",
24
+ 'User-Agent' => "transcriptic-cli/#{Transcriptic::API::VERSION}",
25
25
  'X-Transcriptic-API-Version' => '3',
26
26
  'X-Ruby-Version' => RUBY_VERSION,
27
27
  'X-Ruby-Platform' => RUBY_PLATFORM
@@ -8,7 +8,7 @@ class Transcriptic::Auth
8
8
 
9
9
  def client
10
10
  @client ||= begin
11
- client = Transcriptic::Client.new(user, password, host)
11
+ client = Transcriptic::Client.new(user, api_key, host)
12
12
  client.on_warning { |msg| self.display("\n#{msg}\n\n") }
13
13
  client
14
14
  end
@@ -52,7 +52,7 @@ class Transcriptic::Auth
52
52
  @credentials[0]
53
53
  end
54
54
 
55
- def password # :nodoc:
55
+ def api_key # :nodoc:
56
56
  get_credentials
57
57
  @credentials[1]
58
58
  end
@@ -94,7 +94,6 @@ class Transcriptic::Auth
94
94
  print "Password: "
95
95
  password = running_on_windows? ? ask_for_password_on_windows : ask_for_password
96
96
  api_key = Transcriptic::Client.auth(user, password, host)['api_key']
97
-
98
97
  [user, api_key]
99
98
  end
100
99
 
@@ -143,7 +142,7 @@ class Transcriptic::Auth
143
142
  end
144
143
 
145
144
  def check_for_associated_ssh_key
146
- return unless client.keys.length.zero?
145
+ return unless client.get_keys.length.zero?
147
146
  associate_or_generate_ssh_key
148
147
  end
149
148
 
@@ -184,7 +183,7 @@ class Transcriptic::Auth
184
183
 
185
184
  def associate_key(key)
186
185
  display "Uploading ssh public key #{key}"
187
- client.add_key(File.read(key))
186
+ client.add_key(File.read(key)).inspect
188
187
  end
189
188
 
190
189
  def available_ssh_public_keys
@@ -28,40 +28,36 @@ class Transcriptic::Client
28
28
  "transcriptic-gem/#{version}"
29
29
  end
30
30
 
31
- attr_accessor :host, :user, :password
31
+ attr_accessor :host, :user, :api_key
32
32
 
33
33
  def self.auth(user, password, host = Transcriptic::Auth.default_host)
34
- client = new(user, password, host)
34
+ client = new(user, nil, host)
35
35
  json_decode client.post('/users/sign_in', { 'user[email]' => user, 'user[password]' => password }, :accept => 'json').to_s
36
36
  end
37
37
 
38
- def initialize(user, password, host=Transcriptic::Auth.default_host)
38
+ def initialize(user, api_key, host = Transcriptic::Auth.default_host)
39
39
  @user = user
40
- @password = password
40
+ @api_key = api_key
41
41
  @host = host
42
42
  end
43
43
 
44
- # Show info such as mode, custom domain, and collaborators on an app.
45
- def status(run_id)
46
- doc = xml(get("/apps/#{name_or_domain}").to_s)
47
- attrs = hash_from_xml_doc(doc)[:app]
48
- attrs.merge!(:collaborators => list_collaborators(attrs[:name]))
49
- attrs.merge!(:addons => installed_addons(attrs[:name]))
44
+ def get_keys
45
+ json_decode get("/api/keys").to_s
50
46
  end
51
47
 
52
48
  # Add an ssh public key to the current user.
53
49
  def add_key(key)
54
- post("/user/keys", key, { 'Content-Type' => 'text/ssh-authkey' }).to_s
50
+ json_decode post("/api/keys", key, { 'Content-Type' => 'text/ssh-authkey' }).to_s
55
51
  end
56
52
 
57
53
  # Remove an existing ssh public key from the current user.
58
54
  def remove_key(key)
59
- delete("/user/keys/#{escape(key)}").to_s
55
+ json_decode delete("/api/keys/#{escape(key)}").to_s
60
56
  end
61
57
 
62
58
  # Clear all keys on the current user.
63
59
  def remove_all_keys
64
- delete("/user/keys").to_s
60
+ json_decode delete("/api/keys").to_s
65
61
  end
66
62
 
67
63
  # Get a list of stacks available to the app, with the current one marked.
@@ -74,16 +70,11 @@ class Transcriptic::Client
74
70
  ).to_s
75
71
  end
76
72
 
77
- class AppCrashed < RuntimeError; end
73
+ class ProtocolException < RuntimeError; end
78
74
 
79
75
  # Show a list of projects which you are a collaborator on.
80
76
  def list
81
- doc = xml(get('/apps').to_s)
82
- doc.elements.to_a("//apps/app").map do |a|
83
- name = a.elements.to_a("name").first
84
- owner = a.elements.to_a("owner").first
85
- [name.text, owner.text]
86
- end
77
+ json_decode get('/api/runs.json').to_s
87
78
  end
88
79
 
89
80
  # Show info such as mode, custom domain, and collaborators on an app.
@@ -126,7 +117,7 @@ class Transcriptic::Client
126
117
  @interval = 0
127
118
  self
128
119
  rescue RestClient::RequestFailed => e
129
- raise AppCrashed, e.http_body if e.http_code == 502
120
+ raise ProtocolException, e.http_body if e.http_code == 502
130
121
  raise
131
122
  end
132
123
 
@@ -175,6 +166,10 @@ class Transcriptic::Client
175
166
  json_decode resource("/runs/#{run_id}/status").get(:accept => 'application/json').to_s
176
167
  end
177
168
 
169
+ def create_run(fd)
170
+ json_decode post("/api/runs", File.open(fd).read, { 'Content-Type' => 'application/zip; charset=UTF-8' }).to_s
171
+ end
172
+
178
173
  # Get a Protocol instance to execute commands against.
179
174
  def protocol(run_id, upid)
180
175
  Protocol.new(self, run_id, upid)
@@ -216,7 +211,7 @@ class Transcriptic::Client
216
211
 
217
212
  def resource(uri, options={})
218
213
  RestClient.proxy = ENV['HTTP_PROXY'] || ENV['http_proxy']
219
- resource = RestClient::Resource.new(realize_full_uri(uri), options.merge(:user => user, :password => password))
214
+ resource = RestClient::Resource.new(realize_full_uri(uri), options)
220
215
  resource
221
216
  end
222
217
 
@@ -249,7 +244,7 @@ class Transcriptic::Client
249
244
  error " ! Unable to connect to #{host}"
250
245
  rescue RestClient::SSLCertificateNotVerified => ex
251
246
  host = URI.parse(realize_full_uri(uri)).host
252
- #error "WARNING: Unable to verify SSL certificate for #{host}\nTo disable SSL verification, run with TRANSCRIPTIC_SSL_VERIFY=disable"
247
+ error "WARNING: Unable to verify SSL certificate for #{host}\nTo disable SSL verification, run with TRANSCRIPTIC_SSL_VERIFY=disable"
253
248
  end
254
249
 
255
250
  extract_warning(response)
@@ -269,12 +264,14 @@ class Transcriptic::Client
269
264
  end
270
265
 
271
266
  def transcriptic_headers # :nodoc:
272
- {
267
+ headers = {
273
268
  'X-Transcriptic-API-Version' => '1',
274
269
  'User-Agent' => self.class.gem_version_string,
275
270
  'X-Ruby-Version' => RUBY_VERSION,
276
271
  'X-Ruby-Platform' => RUBY_PLATFORM
277
272
  }
273
+ headers = headers.merge({'Authorization' => "Token token=\"#{@api_key}\""}) if @api_key
274
+ headers
278
275
  end
279
276
 
280
277
  def xml(raw) # :nodoc:
@@ -308,8 +305,10 @@ class Transcriptic::Client
308
305
  def default_resource_options_for_uri(uri)
309
306
  if ENV["TRANSCRIPTIC_SSL_VERIFY"] == "disable"
310
307
  {}
311
- elsif realize_full_uri(uri) =~ %r|^https://www.transcriptic.com|
312
- { :verify_ssl => OpenSSL::SSL::VERIFY_PEER, :ssl_ca_file => local_ca_file }
308
+ elsif realize_full_uri(uri) =~ %r|^https://transcriptic.com|
309
+ # OpenSSL::SSL::VERIFY_PEER
310
+ { }
311
+ #{ :verify_ssl => OpenSSL::SSL::VERIFY_NONE, :ssl_ca_file => local_ca_file }
313
312
  else
314
313
  {}
315
314
  end
@@ -4,14 +4,6 @@ module Transcriptic::Command
4
4
 
5
5
  # analyze an autoprotocol script or project
6
6
  #
7
- # analyze a
8
- #
9
- #Example:
10
- #
11
- # $ heroku run bash
12
- # Running `bash` attached to terminal... up, run.1
13
- # ~ $
14
- #
15
7
  class Analyze < Base
16
8
 
17
9
  def index; end
@@ -145,44 +145,6 @@ protected
145
145
  options[:confirm] && (options[:confirm] != options[:app])
146
146
  end
147
147
 
148
- def extract_app_in_dir(dir)
149
- return unless remotes = git_remotes(dir)
150
-
151
- if remote = options[:remote]
152
- remotes[remote]
153
- elsif remote = extract_app_from_git_config
154
- remotes[remote]
155
- else
156
- apps = remotes.values.uniq
157
- if apps.size == 1
158
- apps.first
159
- else
160
- raise(Transcriptic::Command::CommandFailed, "Multiple apps in folder and no app specified.\nSpecify which app to use with --app <app name>")
161
- end
162
- end
163
- end
164
-
165
- def extract_app_from_git_config
166
- remote = git("config transcriptic.remote")
167
- remote == "" ? nil : remote
168
- end
169
-
170
- def git_remotes(base_dir=Dir.pwd)
171
- remotes = {}
172
- original_dir = Dir.pwd
173
- Dir.chdir(base_dir)
174
-
175
- git("remote -v").split("\n").each do |remote|
176
- name, url, method = remote.split(/\s/)
177
- if url =~ /^git@#{transcriptic.host}:([\w\d-]+)\.git$/
178
- remotes[name] = $1
179
- end
180
- end
181
-
182
- Dir.chdir(original_dir)
183
- remotes
184
- end
185
-
186
148
  def escape(value)
187
149
  transcriptic.escape(value)
188
150
  end
@@ -0,0 +1,115 @@
1
+ require "transcriptic/command/base"
2
+
3
+ module Transcriptic::Command
4
+
5
+ # manage authentication keys
6
+ #
7
+ class Keys < Base
8
+
9
+ # keys
10
+ #
11
+ # display keys for the current user
12
+ #
13
+ # -l, --long # display extended information for each key
14
+ #
15
+ #Examples:
16
+ #
17
+ # $ transcriptic keys
18
+ # === email@example.com Keys
19
+ # ssh-rsa ABCDEFGHIJK...OPQRSTUV== email@example.com
20
+ #
21
+ # $ transcriptic keys --long
22
+ # === email@example.com Keys
23
+ # ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp9AJD5QABmOcrkHm6SINuQkDefaR0MUrfgZ1Pxir3a4fM1fwa00dsUwbUaRuR7FEFD8n1E9WwDf8SwQTHtyZsJg09G9myNqUzkYXCmydN7oGr5IdVhRyv5ixcdiE0hj7dRnOJg2poSQ3Qi+Ka8SVJzF7nIw1YhuicHPSbNIFKi5s0D5a+nZb/E6MNGvhxoFCQX2IcNxaJMqhzy1ESwlixz45aT72mXYq0LIxTTpoTqma1HuKdRY8HxoREiivjmMQulYP+CxXFcMyV9kxTKIUZ/FXqlC6G5vSm3J4YScSatPOj9ID5HowpdlIx8F6y4p1/28r2tTl4CY40FFyoke4MQ== email@example.com
24
+ #
25
+ def index
26
+ validate_arguments!
27
+ keys = transcriptic.get_keys
28
+ if keys.length > 0
29
+ display("#{Transcriptic::Auth.user} Keys")
30
+ keys = if options[:long]
31
+ keys.map {|key| key["contents"].strip}
32
+ else
33
+ keys.map {|key| format_key_for_display(key["contents"])}
34
+ end
35
+ styled_array(keys)
36
+ else
37
+ display("You have no keys.")
38
+ end
39
+ end
40
+
41
+ # keys:add [KEY]
42
+ #
43
+ # add a key for the current user
44
+ #
45
+ # if no KEY is specified, will try to find ~/.ssh/id_[rd]sa.pub
46
+ #
47
+ #Examples:
48
+ #
49
+ # $ transcriptic keys:add
50
+ # Could not find an existing public key.
51
+ # Would you like to generate one? [Yn] y
52
+ # Generating new SSH public key.
53
+ # Uploading SSH public key /.ssh/id_rsa.pub... done
54
+ #
55
+ # $ transcriptic keys:add /my/key.pub
56
+ # Uploading SSH public key /my/key.pub... done
57
+ #
58
+ def add
59
+ keyfile = shift_argument
60
+ validate_arguments!
61
+
62
+ if keyfile
63
+ Transcriptic::Auth.associate_key(keyfile)
64
+ else
65
+ # make sure we have credentials
66
+ Transcriptic::Auth.get_credentials
67
+ Transcriptic::Auth.associate_or_generate_ssh_key
68
+ end
69
+ end
70
+
71
+ # keys:remove KEY
72
+ #
73
+ # remove a key from the current user
74
+ #
75
+ #Examples:
76
+ #
77
+ # $ transcriptic keys:remove email@example.com
78
+ # Removing email@example.com SSH key... done
79
+ #
80
+ def remove
81
+ key = shift_argument
82
+ if key.nil? || key.empty?
83
+ error("Usage: transcriptic keys:remove KEY\nMust specify KEY to remove.")
84
+ end
85
+ validate_arguments!
86
+
87
+ action("Removing #{key} SSH key") do
88
+ api.delete_key(key)
89
+ end
90
+ end
91
+
92
+ # keys:clear
93
+ #
94
+ # remove all authentication keys from the current user
95
+ #
96
+ #Examples:
97
+ #
98
+ # $ transcriptic keys:cleare
99
+ # Removing all SSH keys... done
100
+ #
101
+ def clear
102
+ validate_arguments!
103
+
104
+ action("Removing all SSH keys") do
105
+ api.delete_keys
106
+ end
107
+ end
108
+
109
+ protected
110
+ def format_key_for_display(key)
111
+ type, hex, local = key.strip.split(/\s/)
112
+ [type, hex[0,10] + '...' + hex[-10,10], local].join(' ')
113
+ end
114
+ end
115
+ end
@@ -13,22 +13,25 @@ module Transcriptic::Command
13
13
  #
14
14
  def index
15
15
  path = args.shift
16
- upload_protocol(path)
16
+ fd = create_protocol_fd_for_path(path)
17
+ display "Uploading `#{path}` to Transcriptic..."
18
+ run_id = transcriptic.create_run(fd)["run_id"]
19
+ display "Run launched (#{run_id})"
17
20
  end
18
21
 
19
- def upload_protocol(path)
22
+ def create_protocol_fd_for_path(path)
20
23
  begin
21
24
  stat = File.stat(path)
22
25
  rescue
23
- puts "No such path: #{path}"
26
+ display "No such path: #{path}"
24
27
  return
25
28
  end
29
+ upfile = Tempfile.new('protocol')
26
30
  if stat.directory?
27
31
  files = Pathname.glob("#{path}/**/**")
28
32
  file_count = files.reject(&:directory?).length
29
33
  dir_count = files.reject(&:file?).length
30
- puts "Package detected, compressing #{file_count} files (#{dir_count} directories)..."
31
- upfile = Tempfile.new('protocol')
34
+ display "Package detected, compressing #{file_count} files (#{dir_count} directories)..."
32
35
  Zip::Archive.open(upfile.path, Zip::CREATE) do |ar|
33
36
  ar.add_dir(path)
34
37
  Dir.glob("#{path}/**/**").each do |path|
@@ -40,20 +43,11 @@ module Transcriptic::Command
40
43
  end
41
44
  end
42
45
  else
43
- upfile = path
44
- end
45
- puts "Uploading `#{path}` to Transcriptic..."
46
- url = URI.parse('http://client.transcriptic.com/receive')
47
- File.open(upfile) do |zf|
48
- req = Net::HTTP::Post::Multipart.new url.path,
49
- "file" => UploadIO.new(zf, "application/zip", "protocol.zip")
50
- res = Net::HTTP.start(url.host, url.port) do |http|
51
- http.request(req)
52
- end
53
- if res.code != 200
54
- puts "HTTP Error: #{res.message} (#{res.code})"
46
+ Zip::Archive.open(upfile.path, Zip::CREATE) do |ar|
47
+ ar.add_file(path, path)
55
48
  end
56
49
  end
50
+ upfile
57
51
  end
58
52
 
59
53
  end
@@ -10,6 +10,9 @@ module Transcriptic::Command
10
10
  #
11
11
  def index
12
12
  run_id = args.shift
13
+ if run_id.nil?
14
+ error("Usage: transcriptic status RUNID\nMust specify RUNID to get run status.")
15
+ end
13
16
  puts run_id
14
17
  end
15
18
 
@@ -40,10 +40,9 @@ module Transcriptic
40
40
  def confirm_billing
41
41
  display
42
42
  display "This action will cause your account to be billed at the end of the month"
43
- display "For more information, see http://devcenter.heroku.com/articles/billing"
44
43
  display "Are you sure you want to do this? (y/n) ", false
45
44
  if ask.downcase == 'y'
46
- heroku.confirm_billing
45
+ transcriptic.confirm_billing
47
46
  return true
48
47
  end
49
48
  end
@@ -84,7 +83,7 @@ module Transcriptic
84
83
  end
85
84
 
86
85
  def ask
87
- gets.strip
86
+ STDIN.gets.strip
88
87
  end
89
88
 
90
89
  def shell(cmd)
@@ -107,17 +106,6 @@ module Transcriptic
107
106
  end
108
107
  end
109
108
 
110
- def has_git?
111
- %x{ git --version }
112
- $?.success?
113
- end
114
-
115
- def git(args)
116
- return "" unless has_git?
117
- flattened_args = [args].flatten.compact.join(" ")
118
- %x{ git #{flattened_args} 2>&1 }.strip
119
- end
120
-
121
109
  def time_ago(elapsed)
122
110
  if elapsed < 60
123
111
  "#{elapsed.floor}s ago"
@@ -152,18 +140,6 @@ module Transcriptic
152
140
  "%d %s" % [ num, num.to_i == 1 ? string : "#{string}s" ]
153
141
  end
154
142
 
155
- def create_git_remote(app, remote)
156
- return unless has_git?
157
- return if git('remote').split("\n").include?(remote)
158
- return unless File.exists?(".git")
159
- git "remote add #{remote} git@#{heroku.host}:#{app}.git"
160
- display "Git remote #{remote} added"
161
- end
162
-
163
- def app_urls(name)
164
- "http://#{name}.heroku.com/ | git@heroku.com:#{name}.git"
165
- end
166
-
167
143
  def longest(items)
168
144
  items.map { |i| i.to_s.length }.sort.last
169
145
  end
@@ -1,3 +1,3 @@
1
1
  module Transcriptic
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -43,7 +43,7 @@ module Transcriptic
43
43
  ts = lex(s)
44
44
  v, ts = textparse(ts)
45
45
  if ts.length > 0
46
- raise Heroku::OkJson::ParserError, 'trailing garbage'
46
+ raise Transcriptic::OkJson::ParserError, 'trailing garbage'
47
47
  end
48
48
  v
49
49
  end
@@ -55,7 +55,7 @@ module Transcriptic
55
55
  # except that it does not accept atomic values.
56
56
  def textparse(ts)
57
57
  if ts.length < 0
58
- raise Heroku::OkJson::ParserError, 'empty'
58
+ raise Transcriptic::OkJson::ParserError, 'empty'
59
59
  end
60
60
 
61
61
  typ, _, val = ts[0]
@@ -71,7 +71,7 @@ module Transcriptic
71
71
  # Returns the parsed value and any trailing tokens.
72
72
  def valparse(ts)
73
73
  if ts.length < 0
74
- raise Heroku::OkJson::ParserError, 'empty'
74
+ raise Transcriptic::OkJson::ParserError, 'empty'
75
75
  end
76
76
 
77
77
  typ, _, val = ts[0]
@@ -80,7 +80,7 @@ module Transcriptic
80
80
  when '[' then arrparse(ts)
81
81
  when :val,:str then [val, ts[1..-1]]
82
82
  else
83
- raise Heroku::OkJson::ParserError, "unexpected #{val.inspect}"
83
+ raise Transcriptic::OkJson::ParserError, "unexpected #{val.inspect}"
84
84
  end
85
85
  end
86
86
 
@@ -120,7 +120,7 @@ module Transcriptic
120
120
  def pairparse(ts)
121
121
  (typ, _, k), ts = ts[0], ts[1..-1]
122
122
  if typ != :str
123
- raise Heroku::OkJson::ParserError, "unexpected #{k.inspect}"
123
+ raise Transcriptic::OkJson::ParserError, "unexpected #{k.inspect}"
124
124
  end
125
125
  ts = eat(':', ts)
126
126
  v, ts = valparse(ts)
@@ -160,7 +160,7 @@ module Transcriptic
160
160
 
161
161
  def eat(typ, ts)
162
162
  if ts[0][0] != typ
163
- raise Heroku::OkJson::ParserError, "expected #{typ} (got #{ts[0].inspect})"
163
+ raise Transcriptic::OkJson::ParserError, "expected #{typ} (got #{ts[0].inspect})"
164
164
  end
165
165
  ts[1..-1]
166
166
  end
@@ -173,7 +173,7 @@ module Transcriptic
173
173
  while s.length > 0
174
174
  typ, lexeme, val = tok(s)
175
175
  if typ == nil
176
- raise Heroku::OkJson::ParserError, "invalid character at #{s[0,10].inspect}"
176
+ raise Transcriptic::OkJson::ParserError, "invalid character at #{s[0,10].inspect}"
177
177
  end
178
178
  if typ != :space
179
179
  ts << [typ, lexeme, val]
@@ -240,7 +240,7 @@ module Transcriptic
240
240
  def strtok(s)
241
241
  m = /"([^"\\]|\\["\/\\bfnrt]|\\u[0-9a-fA-F]{4})*"/.match(s)
242
242
  if ! m
243
- raise Heroku::OkJson::ParserError, "invalid string literal at #{abbrev(s)}"
243
+ raise Transcriptic::OkJson::ParserError, "invalid string literal at #{abbrev(s)}"
244
244
  end
245
245
  [:str, m[0], unquote(m[0])]
246
246
  end
@@ -257,7 +257,7 @@ module Transcriptic
257
257
 
258
258
  # Converts a quoted json string literal q into a UTF-8-encoded string.
259
259
  # The rules are different than for Ruby, so we cannot use eval.
260
- # Unquote will raise Heroku::OkJson::ParserError, an error if q contains control characters.
260
+ # Unquote will raise Transcriptic::OkJson::ParserError, an error if q contains control characters.
261
261
  def unquote(q)
262
262
  q = q[1...-1]
263
263
  a = q.dup # allocate a big enough string
@@ -268,7 +268,7 @@ module Transcriptic
268
268
  when c == ?\\
269
269
  r += 1
270
270
  if r >= q.length
271
- raise Heroku::OkJson::ParserError, "string literal ends with a \"\\\": \"#{q}\""
271
+ raise Transcriptic::OkJson::ParserError, "string literal ends with a \"\\\": \"#{q}\""
272
272
  end
273
273
 
274
274
  case q[r]
@@ -285,7 +285,7 @@ module Transcriptic
285
285
  uchar = begin
286
286
  hexdec4(q[r,4])
287
287
  rescue RuntimeError => e
288
- raise Heroku::OkJson::ParserError, "invalid escape sequence \\u#{q[r,4]}: #{e}"
288
+ raise Transcriptic::OkJson::ParserError, "invalid escape sequence \\u#{q[r,4]}: #{e}"
289
289
  end
290
290
  r += 4
291
291
  if surrogate? uchar
@@ -300,10 +300,10 @@ module Transcriptic
300
300
  end
301
301
  w += ucharenc(a, w, uchar)
302
302
  else
303
- raise Heroku::OkJson::ParserError, "invalid escape char #{q[r]} in \"#{q}\""
303
+ raise Transcriptic::OkJson::ParserError, "invalid escape char #{q[r]} in \"#{q}\""
304
304
  end
305
305
  when c == ?", c < Spc
306
- raise Heroku::OkJson::ParserError, "invalid character in string literal \"#{q}\""
306
+ raise Transcriptic::OkJson::ParserError, "invalid character in string literal \"#{q}\""
307
307
  else
308
308
  # Copy anything else byte-for-byte.
309
309
  # Valid UTF-8 will remain valid UTF-8.
@@ -319,7 +319,7 @@ module Transcriptic
319
319
 
320
320
  def hexdec4(s)
321
321
  if s.length != 4
322
- raise Heroku::OkJson::ParserError, 'short'
322
+ raise Transcriptic::OkJson::ParserError, 'short'
323
323
  end
324
324
  (nibble(s[0])<<12) | (nibble(s[1])<<8) | (nibble(s[2])<<4) | nibble(s[3])
325
325
  end
@@ -353,7 +353,7 @@ module Transcriptic
353
353
  when ?a <= c && c <= ?z then c.ord - ?a.ord + 10
354
354
  when ?A <= c && c <= ?Z then c.ord - ?A.ord + 10
355
355
  else
356
- raise Heroku::OkJson::ParserError, "invalid hex code #{c}"
356
+ raise Transcriptic::OkJson::ParserError, "invalid hex code #{c}"
357
357
  end
358
358
  end
359
359
 
metadata CHANGED
@@ -1,110 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: transcriptic
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Transcriptic
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-10-23 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-10-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: thrift
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
16
+ requirement: &70219859440740 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
25
19
  - - ~>
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- - 8
30
- version: "0.8"
20
+ - !ruby/object:Gem::Version
21
+ version: '0.8'
31
22
  type: :runtime
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: netrc
35
23
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
- requirements:
24
+ version_requirements: *70219859440740
25
+ - !ruby/object:Gem::Dependency
26
+ name: netrc
27
+ requirement: &70219859440240 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
38
30
  - - ~>
39
- - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
- - 7
43
- - 7
31
+ - !ruby/object:Gem::Version
44
32
  version: 0.7.7
45
33
  type: :runtime
46
- version_requirements: *id002
47
- - !ruby/object:Gem::Dependency
48
- name: rest-client
49
34
  prerelease: false
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
- requirements:
35
+ version_requirements: *70219859440240
36
+ - !ruby/object:Gem::Dependency
37
+ name: rest-client
38
+ requirement: &70219859439780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
52
41
  - - ~>
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 1
56
- - 6
57
- - 1
42
+ - !ruby/object:Gem::Version
58
43
  version: 1.6.1
59
44
  type: :runtime
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
62
- name: launchy
63
45
  prerelease: false
64
- requirement: &id004 !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- - 3
71
- - 2
46
+ version_requirements: *70219859439780
47
+ - !ruby/object:Gem::Dependency
48
+ name: launchy
49
+ requirement: &70219859439320 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
72
54
  version: 0.3.2
73
55
  type: :runtime
74
- version_requirements: *id004
75
- - !ruby/object:Gem::Dependency
76
- name: zipruby
77
56
  prerelease: false
78
- requirement: &id005 !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- segments:
83
- - 0
84
- version: "0"
57
+ version_requirements: *70219859439320
58
+ - !ruby/object:Gem::Dependency
59
+ name: zipruby
60
+ requirement: &70219859438940 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
85
66
  type: :runtime
86
- version_requirements: *id005
87
- - !ruby/object:Gem::Dependency
88
- name: multipart-post
89
67
  prerelease: false
90
- requirement: &id006 !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- segments:
95
- - 0
96
- version: "0"
68
+ version_requirements: *70219859438940
69
+ - !ruby/object:Gem::Dependency
70
+ name: multipart-post
71
+ requirement: &70219859438480 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
97
77
  type: :runtime
98
- version_requirements: *id006
78
+ prerelease: false
79
+ version_requirements: *70219859438480
99
80
  description: Client library and command-line tool to work with Transcriptic Platform.
100
81
  email: support@transcriptic.com
101
- executables:
82
+ executables:
102
83
  - transcriptic
103
84
  extensions: []
104
-
105
85
  extra_rdoc_files: []
106
-
107
- files:
86
+ files:
108
87
  - lib/transcriptic.rb
109
88
  - lib/transcriptic/api.rb
110
89
  - lib/transcriptic/api/errors.rb
@@ -120,6 +99,7 @@ files:
120
99
  - lib/transcriptic/command/data.rb
121
100
  - lib/transcriptic/command/help.rb
122
101
  - lib/transcriptic/command/history.rb
102
+ - lib/transcriptic/command/keys.rb
123
103
  - lib/transcriptic/command/login.rb
124
104
  - lib/transcriptic/command/run.rb
125
105
  - lib/transcriptic/command/sequences.rb
@@ -127,35 +107,30 @@ files:
127
107
  - lib/transcriptic/helpers.rb
128
108
  - lib/transcriptic/version.rb
129
109
  - lib/vendor/transcriptic/okjson.rb
130
- has_rdoc: true
110
+ - bin/transcriptic
131
111
  homepage: https://www.transcriptic.com/
132
112
  licenses: []
133
-
134
113
  post_install_message:
135
114
  rdoc_options: []
136
-
137
- require_paths:
115
+ require_paths:
138
116
  - lib
139
- required_ruby_version: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- segments:
144
- - 0
145
- version: "0"
146
- required_rubygems_version: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- segments:
151
- - 0
152
- version: "0"
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
153
129
  requirements: []
154
-
155
130
  rubyforge_project:
156
- rubygems_version: 1.3.6
131
+ rubygems_version: 1.8.6
157
132
  signing_key:
158
133
  specification_version: 3
159
134
  summary: Client library and CLI tool for Transcriptic.
160
135
  test_files: []
161
-
136
+ has_rdoc: