pangdudu-ruby-dbus 0.2.4.2 → 0.2.4.3
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.
- data/README.rdoc +4 -10
- data/lib/dbus/introspect.rb +69 -9
- data/lib/dbus.rb +1 -0
- metadata +11 -1
    
        data/README.rdoc
    CHANGED
    
    | @@ -3,23 +3,17 @@ | |
| 3 3 | 
             
            Ruby D-Bus provides an implementation of the D-Bus protocol such that the
         | 
| 4 4 | 
             
            D-Bus system can be used in the Ruby programming language.
         | 
| 5 5 |  | 
| 6 | 
            +
            You can switch between REXML and Hpricot as XML parsers!
         | 
| 6 7 |  | 
| 7 | 
            -
             | 
| 8 | 
            +
            Still a little bumpy with multiple threads, but getting there.
         | 
| 8 9 |  | 
| 9 | 
            -
            If you'd like to contrib to this fork, let me know.
         | 
| 10 10 |  | 
| 11 | 
            +
            This is my personal dev-fork of mvidners upstream.
         | 
| 11 12 |  | 
| 13 | 
            +
            If you'd like to contrib to this fork, let me know.
         | 
| 12 14 |  | 
| 13 15 | 
             
            Most of my work here is actually for another project: http://github.com/pangdudu/robots/tree/master
         | 
| 14 16 |  | 
| 15 | 
            -
            I might also start writing a less ugly version of: http://github.com/pangdudu/ruby-dbus-daemon/tree/master 
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            If you know of a nice custom-dbus-daemon let me know. Still thinking about writing
         | 
| 18 | 
            -
            a dbus spec compliant server/daemon implementation in (pure) Ruby, so that I can
         | 
| 19 | 
            -
            play around with the network and authentification more easily.
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            Oki, will clean up a little now. :)
         | 
| 22 | 
            -
             | 
| 23 17 | 
             
            Peace.
         | 
| 24 18 |  | 
| 25 19 | 
             
            == Requirements
         | 
    
        data/lib/dbus/introspect.rb
    CHANGED
    
    | @@ -9,6 +9,7 @@ p# dbus/introspection.rb - module containing a low-level D-Bus introspection imp | |
| 9 9 | 
             
            # See the file "COPYING" for the exact licensing terms.
         | 
| 10 10 |  | 
| 11 11 | 
             
            require 'rexml/document'
         | 
| 12 | 
            +
            require 'hpricot'
         | 
| 12 13 |  | 
| 13 14 | 
             
            module DBus
         | 
| 14 15 | 
             
              # Regular expressions that should match all method names.
         | 
| @@ -199,21 +200,58 @@ module DBus | |
| 199 200 | 
             
                # Creates a new parser for XML data in string _xml_.
         | 
| 200 201 | 
             
                def initialize(xml)
         | 
| 201 202 | 
             
                  @xml = xml
         | 
| 203 | 
            +
                  @hpricot = true
         | 
| 202 204 | 
             
                end
         | 
| 203 205 |  | 
| 204 206 | 
             
                # Recursively parses the subnodes, constructing the tree.
         | 
| 205 207 | 
             
                def parse_subnodes
         | 
| 206 208 | 
             
                  subnodes = Array.new
         | 
| 207 209 | 
             
                  t = Time.now
         | 
| 208 | 
            -
                   | 
| 209 | 
            -
             | 
| 210 | 
            -
                    subnodes << e.attributes[ | 
| 210 | 
            +
                  if @hpricot
         | 
| 211 | 
            +
                    d = Hpricot.XML(@xml)
         | 
| 212 | 
            +
                    (d/"node/node").each { |e| subnodes << e.attributes['name'] }
         | 
| 213 | 
            +
                    return subnodes
         | 
| 214 | 
            +
                  end
         | 
| 215 | 
            +
                  unless @hpricot
         | 
| 216 | 
            +
                    d = REXML::Document.new(@xml)
         | 
| 217 | 
            +
                    d.elements.each("node/node") do |e|
         | 
| 218 | 
            +
                      subnodes << e.attributes["name"]
         | 
| 219 | 
            +
                    end
         | 
| 220 | 
            +
                    return subnodes
         | 
| 211 221 | 
             
                  end
         | 
| 212 | 
            -
                  subnodes
         | 
| 213 222 | 
             
                end
         | 
| 214 | 
            -
             | 
| 215 | 
            -
                #  | 
| 223 | 
            +
                
         | 
| 224 | 
            +
                #make it easy to switch
         | 
| 216 225 | 
             
                def parse
         | 
| 226 | 
            +
                  parse_rexml unless @hpricot
         | 
| 227 | 
            +
                  parse_hpricot if @hpricot      
         | 
| 228 | 
            +
                end
         | 
| 229 | 
            +
                
         | 
| 230 | 
            +
                # Parses the XML, constructing the tree, using hpricot
         | 
| 231 | 
            +
                def parse_hpricot
         | 
| 232 | 
            +
                  ret = Array.new
         | 
| 233 | 
            +
                  subnodes = Array.new
         | 
| 234 | 
            +
                  d = Hpricot.XML(@xml)
         | 
| 235 | 
            +
                  (d/"node/node").each { |e| subnodes << e.attributes['name'] }
         | 
| 236 | 
            +
                  (d/"node/interface").each do |e|
         | 
| 237 | 
            +
                    i = Interface.new(e.attributes['name'])
         | 
| 238 | 
            +
                    (e/"method").each do |me|
         | 
| 239 | 
            +
                      m = Method.new(me.attributes['name'])
         | 
| 240 | 
            +
                      parse_methsig_hpricot(me, m)
         | 
| 241 | 
            +
                      i << m
         | 
| 242 | 
            +
                    end
         | 
| 243 | 
            +
                    (e/"signal").each do |se|
         | 
| 244 | 
            +
                      s = Signal.new(se.attributes['name'])
         | 
| 245 | 
            +
                      parse_methsig_hpricot(se, s)
         | 
| 246 | 
            +
                      i << s
         | 
| 247 | 
            +
                    end
         | 
| 248 | 
            +
                    ret << i
         | 
| 249 | 
            +
                  end
         | 
| 250 | 
            +
                  [ret, subnodes]
         | 
| 251 | 
            +
                end
         | 
| 252 | 
            +
                
         | 
| 253 | 
            +
                # Parses the XML, constructing the tree, using rexml
         | 
| 254 | 
            +
                def parse_rexml
         | 
| 217 255 | 
             
                  ret = Array.new
         | 
| 218 256 | 
             
                  subnodes = Array.new
         | 
| 219 257 | 
             
                  t = Time.now
         | 
| @@ -225,12 +263,12 @@ module DBus | |
| 225 263 | 
             
                    i = Interface.new(e.attributes["name"])
         | 
| 226 264 | 
             
                    e.elements.each("method") do |me|
         | 
| 227 265 | 
             
                      m = Method.new(me.attributes["name"])
         | 
| 228 | 
            -
                       | 
| 266 | 
            +
                      parse_methsig_rexml(me, m)
         | 
| 229 267 | 
             
                      i << m
         | 
| 230 268 | 
             
                    end
         | 
| 231 269 | 
             
                    e.elements.each("signal") do |se|
         | 
| 232 270 | 
             
                      s = Signal.new(se.attributes["name"])
         | 
| 233 | 
            -
                       | 
| 271 | 
            +
                      parse_methsig_rexml(se, s)
         | 
| 234 272 | 
             
                      i << s
         | 
| 235 273 | 
             
                    end
         | 
| 236 274 | 
             
                    ret << i
         | 
| @@ -247,7 +285,29 @@ module DBus | |
| 247 285 |  | 
| 248 286 | 
             
                # Parses a method signature XML element _e_ and initialises
         | 
| 249 287 | 
             
                # method/signal _m_.
         | 
| 250 | 
            -
                def  | 
| 288 | 
            +
                def parse_methsig_hpricot(e, m)
         | 
| 289 | 
            +
                  (e/"arg").each do |ae|
         | 
| 290 | 
            +
                    name = ae.attributes['name']
         | 
| 291 | 
            +
                    dir = ae.attributes['direction']
         | 
| 292 | 
            +
                    sig = ae.attributes['type']
         | 
| 293 | 
            +
            	      if m.is_a?(DBus::Signal)
         | 
| 294 | 
            +
                      m.add_param([name, sig])
         | 
| 295 | 
            +
            	      elsif m.is_a?(DBus::Method)
         | 
| 296 | 
            +
                      case dir
         | 
| 297 | 
            +
                      when "in"
         | 
| 298 | 
            +
                        m.add_param([name, sig])
         | 
| 299 | 
            +
                      when "out"
         | 
| 300 | 
            +
            	          m.add_return([name, sig])
         | 
| 301 | 
            +
            	        end
         | 
| 302 | 
            +
                    else
         | 
| 303 | 
            +
                      raise NotImplementedError, dir
         | 
| 304 | 
            +
                    end
         | 
| 305 | 
            +
                  end
         | 
| 306 | 
            +
                end
         | 
| 307 | 
            +
             | 
| 308 | 
            +
                # Parses a method signature XML element _e_ and initialises
         | 
| 309 | 
            +
                # method/signal _m_.
         | 
| 310 | 
            +
                def parse_methsig_rexml(e, m)
         | 
| 251 311 | 
             
                  e.elements.each("arg") do |ae|
         | 
| 252 312 | 
             
                    name = ae.attributes["name"]
         | 
| 253 313 | 
             
                    dir = ae.attributes["direction"]
         | 
    
        data/lib/dbus.rb
    CHANGED
    
    | @@ -9,6 +9,7 @@ | |
| 9 9 | 
             
            # See the file "COPYING" for the exact licensing terms.
         | 
| 10 10 | 
             
            require 'rubygems'
         | 
| 11 11 | 
             
            require 'rofl' #http://github.com/pangdudu/rofl/tree/master makes the debug/tracing easy
         | 
| 12 | 
            +
            require 'hpricot' #hope this will speed stuff up a little
         | 
| 12 13 | 
             
            require 'dbus/type'
         | 
| 13 14 | 
             
            require 'dbus/introspect'
         | 
| 14 15 | 
             
            require 'dbus/export'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: pangdudu-ruby-dbus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.2.4. | 
| 4 | 
            +
              version: 0.2.4.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Ruby DBUS Team, pangdudu
         | 
| @@ -22,6 +22,16 @@ dependencies: | |
| 22 22 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 23 23 | 
             
                    version: "0"
         | 
| 24 24 | 
             
                version: 
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 26 | 
            +
              name: hpricot
         | 
| 27 | 
            +
              type: :runtime
         | 
| 28 | 
            +
              version_requirement: 
         | 
| 29 | 
            +
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 30 | 
            +
                requirements: 
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 33 | 
            +
                    version: "0"
         | 
| 34 | 
            +
                version: 
         | 
| 25 35 | 
             
            description: Ruby module for interaction with dbus, panda dev fork.
         | 
| 26 36 | 
             
            email: pangdudu@github
         | 
| 27 37 | 
             
            executables: []
         |