obix 0.0.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 +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
|