obix 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +128 -0
- data/Rakefile +7 -0
- data/lib/obix.rb +55 -0
- data/lib/obix/alarms.rb +48 -0
- data/lib/obix/builder.rb +45 -0
- data/lib/obix/configuration.rb +79 -0
- data/lib/obix/errors.rb +6 -0
- data/lib/obix/history.rb +65 -0
- data/lib/obix/network.rb +76 -0
- data/lib/obix/objects.rb +46 -0
- data/lib/obix/objects/base.rb +97 -0
- data/lib/obix/objects/boolean.rb +13 -0
- data/lib/obix/objects/date.rb +15 -0
- data/lib/obix/objects/duration.rb +14 -0
- data/lib/obix/objects/enumerable.rb +13 -0
- data/lib/obix/objects/error.rb +26 -0
- data/lib/obix/objects/feed.rb +14 -0
- data/lib/obix/objects/float.rb +16 -0
- data/lib/obix/objects/integer.rb +15 -0
- data/lib/obix/objects/list.rb +14 -0
- data/lib/obix/objects/object.rb +20 -0
- data/lib/obix/objects/operation.rb +28 -0
- data/lib/obix/objects/reference.rb +10 -0
- data/lib/obix/objects/string.rb +14 -0
- data/lib/obix/objects/time.rb +15 -0
- data/lib/obix/objects/uri.rb +13 -0
- data/lib/obix/tag.rb +43 -0
- data/lib/obix/types.rb +15 -0
- data/lib/obix/types/boolean.rb +25 -0
- data/lib/obix/types/date.rb +20 -0
- data/lib/obix/types/duration.rb +21 -0
- data/lib/obix/types/float.rb +18 -0
- data/lib/obix/types/integer.rb +18 -0
- data/lib/obix/types/string.rb +18 -0
- data/lib/obix/types/time.rb +20 -0
- data/lib/obix/types/type.rb +17 -0
- data/lib/obix/types/uri.rb +28 -0
- data/lib/obix/version.rb +3 -0
- data/lib/obix/watch.rb +119 -0
- data/obix.gemspec +31 -0
- data/test/fixtures/alarmqueryout.xml +19 -0
- data/test/fixtures/alarmsubject.xml +5 -0
- data/test/fixtures/history.xml +9 -0
- data/test/fixtures/historyqueryout.xml +15 -0
- data/test/fixtures/invalid.xml +1 -0
- data/test/fixtures/objects/boolean.xml +1 -0
- data/test/fixtures/objects/date.xml +1 -0
- data/test/fixtures/objects/duration.xml +1 -0
- data/test/fixtures/objects/enumerable.xml +1 -0
- data/test/fixtures/objects/error.xml +1 -0
- data/test/fixtures/objects/feed.xml +4 -0
- data/test/fixtures/objects/float.xml +1 -0
- data/test/fixtures/objects/integer.xml +1 -0
- data/test/fixtures/objects/list.xml +4 -0
- data/test/fixtures/objects/object.xml +1 -0
- data/test/fixtures/objects/operation.xml +1 -0
- data/test/fixtures/objects/reference.xml +1 -0
- data/test/fixtures/objects/string.xml +1 -0
- data/test/fixtures/objects/time.xml +1 -0
- data/test/fixtures/objects/uri.xml +1 -0
- data/test/fixtures/valid.xml +11 -0
- data/test/fixtures/watch.xml +8 -0
- data/test/fixtures/watchout.xml +5 -0
- data/test/fixtures/watchservice.xml +3 -0
- data/test/obix/alarms_test.rb +36 -0
- data/test/obix/builder_test.rb +32 -0
- data/test/obix/configuration_test.rb +32 -0
- data/test/obix/history_test.rb +54 -0
- data/test/obix/network_test.rb +134 -0
- data/test/obix/objects/base_test.rb +54 -0
- data/test/obix/objects/boolean_test.rb +17 -0
- data/test/obix/objects/date_test.rb +16 -0
- data/test/obix/objects/duration_test.rb +16 -0
- data/test/obix/objects/enumerable_test.rb +17 -0
- data/test/obix/objects/error_test.rb +47 -0
- data/test/obix/objects/feed_test.rb +16 -0
- data/test/obix/objects/float_test.rb +16 -0
- data/test/obix/objects/integer_test.rb +16 -0
- data/test/obix/objects/list_test.rb +17 -0
- data/test/obix/objects/object_test.rb +17 -0
- data/test/obix/objects/operation_test.rb +37 -0
- data/test/obix/objects/reference_test.rb +16 -0
- data/test/obix/objects/string_test.rb +16 -0
- data/test/obix/objects/time_test.rb +16 -0
- data/test/obix/objects/uri_test.rb +16 -0
- data/test/obix/objects_test.rb +13 -0
- data/test/obix/tag_test.rb +42 -0
- data/test/obix/types/boolean_test.rb +18 -0
- data/test/obix/types/date_test.rb +20 -0
- data/test/obix/types/duration_test.rb +18 -0
- data/test/obix/types/float_test.rb +18 -0
- data/test/obix/types/integer_test.rb +18 -0
- data/test/obix/types/string_test.rb +18 -0
- data/test/obix/types/time_test.rb +20 -0
- data/test/obix/types/uri_test.rb +48 -0
- data/test/obix/watch_test.rb +169 -0
- data/test/obix_test.rb +42 -0
- data/test/test_helper.rb +18 -0
- metadata +357 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
module OBIX
|
2
|
+
module Objects
|
3
|
+
|
4
|
+
# Times represent an absolute point in time.
|
5
|
+
class Time < Object
|
6
|
+
tag :abstime
|
7
|
+
|
8
|
+
attribute :val, type: Types::Time, default: nil
|
9
|
+
attribute :min, type: Types::Time
|
10
|
+
attribute :max, type: Types::Time
|
11
|
+
attribute :tz, type: Types::String
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
data/lib/obix/tag.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require "active_support/all"
|
2
|
+
|
3
|
+
module OBIX
|
4
|
+
module Tag
|
5
|
+
|
6
|
+
# Define a method for accessing the name of the tag.
|
7
|
+
#
|
8
|
+
# name - A Symbol or String describing the name of the tag.
|
9
|
+
def tag name
|
10
|
+
define_method :tag do
|
11
|
+
name
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Define a method for accessing the given attribute.
|
16
|
+
#
|
17
|
+
# name - A Symbol describing the name of the attribute.
|
18
|
+
# options - A Hash of query options:
|
19
|
+
# :type - A class describing the type of this attribute (defaults to nil).
|
20
|
+
def attribute name, options = {}
|
21
|
+
klass = options.fetch :type, nil
|
22
|
+
default = options.fetch :default, nil
|
23
|
+
|
24
|
+
name = name.to_s.underscore
|
25
|
+
|
26
|
+
define_method name do
|
27
|
+
value = @attributes[name] || default
|
28
|
+
|
29
|
+
if klass
|
30
|
+
type = klass.new self
|
31
|
+
type.cast value
|
32
|
+
else
|
33
|
+
value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
define_method "#{name}=" do |value|
|
38
|
+
@attributes.store name, value
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/lib/obix/types.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module OBIX
|
2
|
+
|
3
|
+
module Types
|
4
|
+
autoload :Type, "obix/types/type"
|
5
|
+
autoload :String, "obix/types/string"
|
6
|
+
autoload :Float, "obix/types/float"
|
7
|
+
autoload :Boolean, "obix/types/boolean"
|
8
|
+
autoload :Integer, "obix/types/integer"
|
9
|
+
autoload :Time, "obix/types/time"
|
10
|
+
autoload :Date, "obix/types/date"
|
11
|
+
autoload :Duration, "obix/types/duration"
|
12
|
+
autoload :URI, "obix/types/uri"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module OBIX
|
2
|
+
module Types
|
3
|
+
|
4
|
+
class Boolean < Type
|
5
|
+
|
6
|
+
# Cast the given value to a boolean.
|
7
|
+
#
|
8
|
+
# value - A string that is either "true" or "false".
|
9
|
+
#
|
10
|
+
# Returns a boolean.
|
11
|
+
def cast value
|
12
|
+
case value
|
13
|
+
when "true"
|
14
|
+
true
|
15
|
+
when "false"
|
16
|
+
false
|
17
|
+
else
|
18
|
+
raise StandardError, "Could not cast #{value} to a boolean"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "date"
|
2
|
+
|
3
|
+
module OBIX
|
4
|
+
module Types
|
5
|
+
|
6
|
+
class Date < Type
|
7
|
+
|
8
|
+
# Cast the given value to a date.
|
9
|
+
#
|
10
|
+
# value - A string that may be parsed by `Date.parse`.
|
11
|
+
#
|
12
|
+
# Returns a string.
|
13
|
+
def cast value
|
14
|
+
::Date.parse value
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rdf/xsd"
|
2
|
+
|
3
|
+
module OBIX
|
4
|
+
module Types
|
5
|
+
|
6
|
+
class Duration < Type
|
7
|
+
|
8
|
+
# Cast the given value to an integer describing seconds.
|
9
|
+
#
|
10
|
+
# value - A String describing an XSD
|
11
|
+
#
|
12
|
+
# Returns an Integer.
|
13
|
+
def cast value
|
14
|
+
duration = RDF::Literal::Duration.new value
|
15
|
+
duration.to_i
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "date"
|
2
|
+
|
3
|
+
module OBIX
|
4
|
+
module Types
|
5
|
+
|
6
|
+
class Time < Type
|
7
|
+
|
8
|
+
# Cast the given value to a time.
|
9
|
+
#
|
10
|
+
# value - A string that may be parsed by `Time.parse`.
|
11
|
+
#
|
12
|
+
# Returns a string.
|
13
|
+
def cast value
|
14
|
+
::DateTime.parse value
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OBIX
|
2
|
+
module Types
|
3
|
+
|
4
|
+
class Type
|
5
|
+
|
6
|
+
# Initialize the Type.
|
7
|
+
#
|
8
|
+
# element - An Objects::Object instance or derivative thereof describing
|
9
|
+
# the element that this type belongs to.
|
10
|
+
def initialize element
|
11
|
+
@element = element
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "uri"
|
2
|
+
|
3
|
+
module OBIX
|
4
|
+
module Types
|
5
|
+
|
6
|
+
class URI < Type
|
7
|
+
|
8
|
+
# Cast the given value to a URI.
|
9
|
+
#
|
10
|
+
# value - Any object that responds to `to_s`.
|
11
|
+
#
|
12
|
+
# Returns a string.
|
13
|
+
def cast value
|
14
|
+
parent = @element.parent
|
15
|
+
|
16
|
+
if parent
|
17
|
+
url = ::URI.join parent.href, value
|
18
|
+
else
|
19
|
+
url = ::URI.join "#{OBIX.configuration.scheme}://#{OBIX.configuration.host}", value
|
20
|
+
end
|
21
|
+
|
22
|
+
url.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/obix/version.rb
ADDED
data/lib/obix/watch.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
module OBIX
|
2
|
+
|
3
|
+
class Watch
|
4
|
+
|
5
|
+
# Initialize a watch.
|
6
|
+
#
|
7
|
+
# watch - An OBIX object that implements the Watch contract.
|
8
|
+
def initialize watch
|
9
|
+
@watch = watch
|
10
|
+
end
|
11
|
+
|
12
|
+
# Reference the watch.
|
13
|
+
#
|
14
|
+
# Returns a String describing the URL to the watch.
|
15
|
+
def url
|
16
|
+
@watch.href
|
17
|
+
end
|
18
|
+
|
19
|
+
# Reference the lease of the watch.
|
20
|
+
#
|
21
|
+
# Returns an Integer describing the lease in seconds.
|
22
|
+
def lease
|
23
|
+
@watch.objects.find { |o| o.name == "lease" }.val
|
24
|
+
end
|
25
|
+
|
26
|
+
# Add objects to the watch.
|
27
|
+
#
|
28
|
+
# list - An Array of String instances describing objects to add to the watch.
|
29
|
+
def add list
|
30
|
+
add = @watch.objects.find { |obj| obj.name == "add" }
|
31
|
+
|
32
|
+
obix = OBIX::Builder.new do |obix|
|
33
|
+
obix.obj is: "obix:WatchIn" do |obix|
|
34
|
+
obix.list name: "hrefs" do |obix|
|
35
|
+
list.each do |item|
|
36
|
+
obix.uri val: item
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
add.invoke obix.object
|
43
|
+
end
|
44
|
+
|
45
|
+
# Remove objects from the watch.
|
46
|
+
#
|
47
|
+
# list - An Array of String instances describing objects to remove from the watch.
|
48
|
+
def remove list
|
49
|
+
remove = @watch.objects.find { |obj| obj.name == "remove" }
|
50
|
+
|
51
|
+
obix = OBIX::Builder.new do |obix|
|
52
|
+
obix.obj is: "obix:WatchIn" do |obix|
|
53
|
+
obix.list name: "hrefs" do |obix|
|
54
|
+
list.each do |item|
|
55
|
+
obix.uri val: item
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
remove.invoke obix.object
|
62
|
+
end
|
63
|
+
|
64
|
+
# Poll objects that have changed
|
65
|
+
def changes
|
66
|
+
poll = @watch.objects.find { |obj| obj.name == "pollChanges" }
|
67
|
+
|
68
|
+
poll.invoke.objects.find do |object|
|
69
|
+
object.name == "values"
|
70
|
+
end.objects
|
71
|
+
end
|
72
|
+
|
73
|
+
# Poll all objects
|
74
|
+
def all
|
75
|
+
poll = @watch.objects.find { |obj| obj.name == "pollRefresh" }
|
76
|
+
|
77
|
+
poll.invoke.objects.find do |object|
|
78
|
+
object.name == "values"
|
79
|
+
end.objects
|
80
|
+
end
|
81
|
+
|
82
|
+
# Delete the watch.
|
83
|
+
def delete
|
84
|
+
@watch.objects.find do |object|
|
85
|
+
object.name == "delete"
|
86
|
+
end.invoke
|
87
|
+
end
|
88
|
+
|
89
|
+
def to_s
|
90
|
+
@watch.to_s
|
91
|
+
end
|
92
|
+
|
93
|
+
class << self
|
94
|
+
alias make new
|
95
|
+
|
96
|
+
# Create a new watch.
|
97
|
+
#
|
98
|
+
# source - A Hash of options (see OBIX#parse for details).
|
99
|
+
def make source
|
100
|
+
service = OBIX.parse source
|
101
|
+
|
102
|
+
make = service.objects.find do |object|
|
103
|
+
object.name == "make"
|
104
|
+
end
|
105
|
+
|
106
|
+
new make.invoke
|
107
|
+
end
|
108
|
+
|
109
|
+
# Connect to an existing watch.
|
110
|
+
#
|
111
|
+
# source - A Hash of options (see OBIX#parse for details).
|
112
|
+
def connect source
|
113
|
+
new OBIX.parse source
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
data/obix.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'obix/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "obix"
|
8
|
+
gem.version = OBIX::VERSION
|
9
|
+
gem.authors = ["Johannes Gorset"]
|
10
|
+
gem.email = ["jgorset@gmail.com"]
|
11
|
+
gem.description = "oBIX parser"
|
12
|
+
gem.summary = "oBIX parser"
|
13
|
+
gem.homepage = "http://github.com/hyperoslo/ruby-obix"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_development_dependency "rake"
|
21
|
+
gem.add_development_dependency "mocha"
|
22
|
+
gem.add_development_dependency "guard"
|
23
|
+
gem.add_development_dependency "guard-minitest"
|
24
|
+
gem.add_development_dependency "rb-inotify"
|
25
|
+
gem.add_development_dependency "rb-fsevent"
|
26
|
+
gem.add_development_dependency "rb-fchange"
|
27
|
+
gem.add_runtime_dependency "nokogiri"
|
28
|
+
gem.add_runtime_dependency "rdf-xsd"
|
29
|
+
gem.add_runtime_dependency "equivalent-xml"
|
30
|
+
gem.add_runtime_dependency "activesupport"
|
31
|
+
end
|