Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…-buffers into service_rpc
  • Loading branch information
bufdev committed Aug 7, 2013
2 parents fb84df3 + 4800c38 commit 79d606b
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 2 deletions.
1 change: 1 addition & 0 deletions lib/protocol_buffers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ def self.bin_sio(*args)
require 'protocol_buffers/version'
require 'protocol_buffers/runtime/message'
require 'protocol_buffers/runtime/enum'
require 'protocol_buffers/runtime/service'
32 changes: 31 additions & 1 deletion lib/protocol_buffers/compiler/file_descriptor_to_ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ def write(io)
descriptor.message_type.each do |message|
dump_message(descriptor.package, message)
end

descriptor.service.each do |service|
dump_service(descriptor.package, service)
end
end

end
Expand Down Expand Up @@ -166,8 +170,23 @@ def dump_enum(package, enum)
line
end

def dump_service(package, service)
in_namespace("class", service.name, " < ::ProtocolBuffers::Service") do
fully_qualified_name = fully_qualified_name(package, service.name)
line %{set_fully_qualified_name "#{fully_qualified_name}"}
line
service.method.each do |method|
line %{rpc :#{underscore(method.name)}, "#{method.name}", #{service_typename(method.input_type)}, #{service_typename(method.output_type)}}
end
end
end

def field_typename(field)
TYPE_MAPPING[field.type] || field.type_name.split(".").map { |t| camelize(t) }.join("::")
TYPE_MAPPING[field.type] || service_typename(field.type_name)
end

def service_typename(type_name)
type_name.split(".").map { |t| camelize(t) }.join("::")
end

# TODO: this probably doesn't work for all default values, expand
Expand Down Expand Up @@ -197,4 +216,15 @@ def camelize(lower_case_and_underscored_word)
lower_case_and_underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }
end

def underscore(camelized_word)
word = camelized_word.to_s.dup
word.gsub!(/::/, '/')
word.gsub!(/(?:([A-Za-z\d])|^)((?=\a)\b)(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
word.tr!("-", "_")
word.downcase!
word
end

end
22 changes: 22 additions & 0 deletions lib/protocol_buffers/runtime/rpc.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module ProtocolBuffers
class Rpc
attr_reader :name, :proto_name, :request_class, :response_class

def initialize(name, proto_name, request_class, response_class)
@name = name
@proto_name = proto_name.dup.freeze
@request_class = request_class
@response_class = response_class
@hash = {
:name => name,
:proto_name => proto_name,
:request_class => request_class,
:response_class => response_class
}.freeze
end

def to_s
@hash.to_s
end
end
end
28 changes: 27 additions & 1 deletion lib/protocol_buffers/runtime/service.rb
Original file line number Diff line number Diff line change
@@ -1 +1,27 @@
# TODO
require 'protocol_buffers/runtime/rpc'

module ProtocolBuffers
class Service

private_class_method :new

def self.set_fully_qualified_name(name)
@fully_qualified_name = name.dup.freeze
end

def self.fully_qualified_name
@fully_qualified_name
end

def self.rpcs
@rpcs
end

def self.rpc(name, proto_name, request_type, response_type)
@rpcs ||= Array.new
@rpcs = @rpcs.dup
@rpcs << Rpc.new(name.to_sym, proto_name, request_type, response_type)
@rpcs.freeze
end
end
end

0 comments on commit 79d606b

Please sign in to comment.