bixby-common 0.4.0 → 0.4.1

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53b5ec30f44a5f248d360a13d02bc46881e64f03
4
- data.tar.gz: 4ad3d8400f6390ce4630a502e15e4fc9ca5d4507
3
+ metadata.gz: d655ba4c5a8200586b435768668f60b2e0a6809e
4
+ data.tar.gz: 5e9d2be246830d38aef93bd079257052145d52e6
5
5
  SHA512:
6
- metadata.gz: db1b6968efb742cf556c6cfdeb4a0836a05869d5088abc126c5360d2e8d8494a209bd261d9bac3b5fdfb18fee17ce775b7d123bdd7a02149bd037970877726ef
7
- data.tar.gz: 0ca4ee9520635bc97adea27f4c293b4a4797958a296eaf87d3d9d016618ff43c5db197522e99baf506cec46861001f4f5ec1233cc42787c9d79407084024fb2b
6
+ metadata.gz: 3ff9e4a9b966d0a40701ec04d8fcec8125b0d523126e6da6dcae414f5e72fc84b0a92d48e70b255e7f1c76723e45c1ea4f212cff4aa26f2e4f57c347e353b963
7
+ data.tar.gz: e53209d266c816916f4841a82f267494aaf3d115694eb730188d523697ab3280c450cb1a5458ffd5719b840ea6620dd4962acc67ee37c7c136ad3c8381587349
data/Gemfile CHANGED
@@ -1,13 +1,12 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gem "faye-websocket"
4
- gem "api-auth", :git => "https://github.com/chetan/api_auth.git", :branch => "bixby"
5
4
  gem "multi_json"
6
- gem "httpi", :git => "https://github.com/chetan/httpi.git",
7
- :branch => "chunked_responses"
8
-
5
+ gem "httpi"
9
6
  gem "logging"
10
7
 
8
+ gem "api-auth", :git => "https://github.com/chetan/api_auth.git", :branch => "bixby"
9
+
11
10
  group :development do
12
11
  gem "yard", "~> 0.8"
13
12
  gem "bundler", "~> 1.1"
data/Gemfile.lock CHANGED
@@ -5,17 +5,9 @@ GIT
5
5
  specs:
6
6
  api-auth (1.0.3)
7
7
 
8
- GIT
9
- remote: https://github.com/chetan/httpi.git
10
- revision: f6e49303fee6778c714bcc556fa5f9247bc3a3f3
11
- branch: chunked_responses
12
- specs:
13
- httpi (2.0.0)
14
- rack
15
-
16
8
  GIT
17
9
  remote: https://github.com/chetan/jeweler.git
18
- revision: 9b8b2376c79299b823a5e9aafae3d647df943b6f
10
+ revision: c83ba18b074e82415052e80499a770bff87bf944
19
11
  branch: bixby
20
12
  specs:
21
13
  jeweler (1.8.7)
@@ -98,6 +90,9 @@ GEM
98
90
  hirb (0.7.1)
99
91
  httpauth (0.2.0)
100
92
  httpclient (2.3.4.1)
93
+ httpi (2.1.0)
94
+ rack
95
+ rubyntlm (~> 0.3.2)
101
96
  jruby-openssl (0.8.8)
102
97
  bouncy-castle-java (>= 1.5.0147)
103
98
  json (1.8.0)
@@ -151,6 +146,7 @@ GEM
151
146
  rcov (1.0.0)
152
147
  rdoc (4.0.1)
153
148
  json (~> 1.4)
149
+ rubyntlm (0.3.4)
154
150
  safe_yaml (0.9.5)
155
151
  simplecov-console (0.1.1)
156
152
  colorize
@@ -182,7 +178,7 @@ DEPENDENCIES
182
178
  curb
183
179
  faye-websocket
184
180
  httpclient
185
- httpi!
181
+ httpi
186
182
  jeweler!
187
183
  jruby-openssl
188
184
  json
data/Rakefile CHANGED
@@ -19,6 +19,7 @@ Jeweler::Tasks.new do |gemspec|
19
19
  gemspec.email = "chetan@pixelcop.net"
20
20
  gemspec.homepage = "http://github.com/chetan/bixby-common"
21
21
  gemspec.authors = ["Chetan Sarva"]
22
+ gemspec.license = "MIT"
22
23
  end
23
24
  Jeweler::RubygemsDotOrgTasks.new
24
25
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
data/bixby-common.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "bixby-common"
8
- s.version = "0.4.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chetan Sarva"]
12
- s.date = "2013-08-24"
12
+ s.date = "2013-08-29"
13
13
  s.description = "Bixby Common files/libs"
14
14
  s.email = "chetan@pixelcop.net"
15
15
  s.extra_rdoc_files = [
@@ -45,6 +45,7 @@ Gem::Specification.new do |s|
45
45
  "lib/bixby-common/util/jsonify.rb",
46
46
  "lib/bixby-common/util/log.rb",
47
47
  "lib/bixby-common/util/log/filtering_layout.rb",
48
+ "lib/bixby-common/util/log/logger.rb",
48
49
  "lib/bixby-common/websocket/api_channel.rb",
49
50
  "lib/bixby-common/websocket/async_response.rb",
50
51
  "lib/bixby-common/websocket/client.rb",
@@ -65,6 +66,7 @@ Gem::Specification.new do |s|
65
66
  "test/util/log_test.rb"
66
67
  ]
67
68
  s.homepage = "http://github.com/chetan/bixby-common"
69
+ s.licenses = ["MIT"]
68
70
  s.require_paths = ["lib"]
69
71
  s.rubygems_version = "2.0.3"
70
72
  s.summary = "Bixby Common"
@@ -74,10 +76,10 @@ Gem::Specification.new do |s|
74
76
 
75
77
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
76
78
  s.add_runtime_dependency(%q<faye-websocket>, [">= 0"])
77
- s.add_runtime_dependency(%q<api-auth>, [">= 0"])
78
79
  s.add_runtime_dependency(%q<multi_json>, [">= 0"])
79
80
  s.add_runtime_dependency(%q<httpi>, [">= 0"])
80
81
  s.add_runtime_dependency(%q<logging>, [">= 0"])
82
+ s.add_runtime_dependency(%q<api-auth>, [">= 0"])
81
83
  s.add_development_dependency(%q<yard>, ["~> 0.8"])
82
84
  s.add_development_dependency(%q<bundler>, ["~> 1.1"])
83
85
  s.add_development_dependency(%q<jeweler>, [">= 0"])
@@ -100,10 +102,10 @@ Gem::Specification.new do |s|
100
102
  s.add_development_dependency(%q<jruby-openssl>, [">= 0"])
101
103
  else
102
104
  s.add_dependency(%q<faye-websocket>, [">= 0"])
103
- s.add_dependency(%q<api-auth>, [">= 0"])
104
105
  s.add_dependency(%q<multi_json>, [">= 0"])
105
106
  s.add_dependency(%q<httpi>, [">= 0"])
106
107
  s.add_dependency(%q<logging>, [">= 0"])
108
+ s.add_dependency(%q<api-auth>, [">= 0"])
107
109
  s.add_dependency(%q<yard>, ["~> 0.8"])
108
110
  s.add_dependency(%q<bundler>, ["~> 1.1"])
109
111
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -127,10 +129,10 @@ Gem::Specification.new do |s|
127
129
  end
128
130
  else
129
131
  s.add_dependency(%q<faye-websocket>, [">= 0"])
130
- s.add_dependency(%q<api-auth>, [">= 0"])
131
132
  s.add_dependency(%q<multi_json>, [">= 0"])
132
133
  s.add_dependency(%q<httpi>, [">= 0"])
133
134
  s.add_dependency(%q<logging>, [">= 0"])
135
+ s.add_dependency(%q<api-auth>, [">= 0"])
134
136
  s.add_dependency(%q<yard>, ["~> 0.8"])
135
137
  s.add_dependency(%q<bundler>, ["~> 1.1"])
136
138
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -15,5 +15,31 @@ module Bixby
15
15
  end
16
16
  end # :nocov:
17
17
 
18
+ # Pretty print a hash
19
+ #
20
+ # @example
21
+ # {
22
+ # content-md5 => "Rb0qo2Ae7KGcS5TDulOjYw==",
23
+ # date => "Thu, 29 Aug 2013 13:49:53 GMT",
24
+ # authorization => "APIAuth c61ca57b8d7b3e95fba06a",
25
+ # }
26
+ #
27
+ # @param [Hash] hash
28
+ # @return [String]
29
+ def self.pretty_hash(hash)
30
+ return "{}" if hash.empty?
31
+
32
+ s = [ "\n\t{" ]
33
+ l = hash.keys.max_by{ |k| k.length }.length + 1 # length of longest key so we can align values
34
+ hash.keys.each{ |k| s << (" %s%s=> %s," % [k, " "*(l-k.length), hash[k].inspect]) }
35
+ s << "}"
36
+
37
+ return s.join("\n\t")
38
+ end
39
+
40
+ def self.indent_lines(str, indent="\t")
41
+ str.gsub(/\n/, "\n#{indent}")
42
+ end
43
+
18
44
  end # Debug
19
45
  end # Bixby
@@ -0,0 +1,21 @@
1
+
2
+ # Patch Logging::Logger so that :trace becomes an inherited flag
3
+
4
+ module Logging
5
+ class Logger
6
+
7
+ # Override to pass trace flag from parent to child
8
+ def initialize( name )
9
+ case name
10
+ when String
11
+ raise(ArgumentError, "logger must have a name") if name.empty?
12
+ else raise(ArgumentError, "logger name must be a String") end
13
+
14
+ repo = ::Logging::Repository.instance
15
+ parent = repo.parent(name)
16
+ _setup(name, :parent => parent, :trace => parent.trace)
17
+ end
18
+
19
+ end
20
+ end
21
+
@@ -2,6 +2,7 @@
2
2
  require "logging"
3
3
 
4
4
  require "bixby-common/util/log/filtering_layout"
5
+ require "bixby-common/util/log/logger"
5
6
 
6
7
  module Bixby
7
8
 
@@ -40,7 +41,7 @@ module Bixby
40
41
  opts[:level] = :debug if ENV["BIXBY_DEBUG"]
41
42
  opts[:level] ||= :warn
42
43
 
43
- pattern = opts.delete(:pattern) || '%.1l, [%d] %5l -- %c: %m\n'
44
+ pattern = opts.delete(:pattern) || '%.1l, [%d] %5l -- %c:%L: %m\n'
44
45
  layout = Logging.layouts.pattern(:pattern => pattern)
45
46
 
46
47
  opts[:filename] ||= Bixby.path("var", "bixby-agent.log")
@@ -79,6 +80,7 @@ module Bixby
79
80
 
80
81
  Logging::Logger.root.add_appenders("file")
81
82
  Logging::Logger.root.level = opts[:level]
83
+ Logging::Logger.root.trace = true
82
84
  end
83
85
 
84
86
  end # Log
@@ -36,10 +36,12 @@ module Bixby
36
36
  # @param [JsonRequest] json_request
37
37
  #
38
38
  # @return [String] request id
39
- def execute_async(json_request)
39
+ def execute_async(json_request, &block)
40
+ logger.debug { "execute_async:\n#{json_request.to_s}" }
41
+
40
42
  request = Request.new(json_request)
41
43
  id = request.id
42
- @responses[id] = AsyncResponse.new(id)
44
+ @responses[id] = AsyncResponse.new(id, &block)
43
45
 
44
46
  EM.next_tick {
45
47
  ws.send(request.to_wire)
@@ -67,8 +69,6 @@ module Bixby
67
69
 
68
70
  # Open
69
71
  def open(event)
70
- # TODO extract Agent ID, if Agent
71
- logger.debug "new channel opened"
72
72
  @connected = true
73
73
  end
74
74
 
@@ -77,7 +77,6 @@ module Bixby
77
77
  # Can be fired either due to disconnection or failure to connect
78
78
  def close(event)
79
79
  if @connected then
80
- logger.debug "client disconnected"
81
80
  @connected = false
82
81
  @handler.new(nil).disconnect(self)
83
82
  end
@@ -87,12 +86,14 @@ module Bixby
87
86
  #
88
87
  # Fired whenever a message is received on the channel
89
88
  def message(event)
90
- logger.debug "got a message:\n#{event.data}"
91
89
  req = Message.from_wire(event.data)
90
+ logger.debug { "new '#{req.type}' message" }
92
91
 
93
92
  if req.type == "rpc" then
94
93
  # Execute the requested method and return the result
95
- json_response = @handler.new(req).handle(req.json_request)
94
+ json_req = req.json_request
95
+ logger.debug { json_req.to_s }
96
+ json_response = @handler.new(req).handle(json_req)
96
97
 
97
98
  # result = { :type => "rpc_result", :id => req.id, :data => json_response }
98
99
  # ws.send(MultiJson.dump(result))
@@ -100,7 +101,9 @@ module Bixby
100
101
 
101
102
  elsif req.type == "rpc_result" then
102
103
  # Pass the result back to the caller
103
- @responses[req.id].response = JsonResponse.from_json(req.body)
104
+ res = req.json_response
105
+ logger.debug { res.to_s }
106
+ @responses[req.id].response = res
104
107
 
105
108
  elsif req.type == "connect" then
106
109
  @handler.new(req).connect(req.json_request, self)
@@ -4,20 +4,30 @@ require 'thread'
4
4
  module Bixby
5
5
  module WebSocket
6
6
 
7
- # Asynchronously receive a response via WebSocket channel
7
+ # Asynchronously receive a response via some channel
8
8
  class AsyncResponse
9
9
 
10
10
  attr_reader :id
11
11
 
12
- def initialize(id)
12
+ # Create a new AsyncResponse. Optionally pass a callback block which will
13
+ # be fired when the response is set.
14
+ #
15
+ # @param [String] id
16
+ #
17
+ # @yieldparam [JsonResponse] response
18
+ #
19
+ # @return [AsyncResponse]
20
+ def initialize(id, &block)
13
21
  @id = id
22
+ @block = block
14
23
  @mutex = Mutex.new
15
24
  @cond = ConditionVariable.new
16
25
  @response = nil
17
26
  @completed = false
18
27
  end
19
28
 
20
- # Set the response and signal any blocking threads
29
+ # Set the response and signal any blocking threads. Triggers callback, if
30
+ # one was set.
21
31
  #
22
32
  # @param [Object] obj result of request, usually a JsonResponse
23
33
  def response=(obj)
@@ -26,6 +36,10 @@ module Bixby
26
36
  @response = obj
27
37
  @cond.signal
28
38
  }
39
+
40
+ if not @block.nil? then
41
+ @block.call(@response)
42
+ end
29
43
  end
30
44
 
31
45
  # Has the request completed?
@@ -42,6 +42,19 @@ module Bixby
42
42
  @body
43
43
  end
44
44
 
45
+ # Convert object to String, useful for debugging
46
+ #
47
+ # @return [String]
48
+ def to_s # :nocov:
49
+ s = []
50
+ s << "#{self.class}:#{self.object_id}"
51
+ s << " id: #{self.id}"
52
+ s << " type: #{self.type}"
53
+ s << " headers: " + Debug.pretty_hash(self.headers)
54
+ s << " body: " + Debug.pretty_hash(MultiJson.load(self.body))
55
+ s.join("\n")
56
+ end # :nocov:
57
+
45
58
  end
46
59
 
47
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bixby-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chetan Sarva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-24 00:00:00.000000000 Z
11
+ date: 2013-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: api-auth
28
+ name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: multi_json
42
+ name: httpi
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '>='
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: httpi
56
+ name: logging
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: logging
70
+ name: api-auth
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
@@ -396,6 +396,7 @@ files:
396
396
  - lib/bixby-common/util/jsonify.rb
397
397
  - lib/bixby-common/util/log.rb
398
398
  - lib/bixby-common/util/log/filtering_layout.rb
399
+ - lib/bixby-common/util/log/logger.rb
399
400
  - lib/bixby-common/websocket/api_channel.rb
400
401
  - lib/bixby-common/websocket/async_response.rb
401
402
  - lib/bixby-common/websocket/client.rb
@@ -415,7 +416,8 @@ files:
415
416
  - test/util/jsonify_test.rb
416
417
  - test/util/log_test.rb
417
418
  homepage: http://github.com/chetan/bixby-common
418
- licenses: []
419
+ licenses:
420
+ - MIT
419
421
  metadata: {}
420
422
  post_install_message:
421
423
  rdoc_options: []