microsoft_graph 0.1.0
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 +11 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +10 -0
- data/README.md +97 -0
- data/Rakefile +7 -0
- data/data/metadata_v1.0.xml +1687 -0
- data/integration_spec/integration_spec_helper.rb +18 -0
- data/integration_spec/live_spec.rb +180 -0
- data/lib/microsoft_graph.rb +35 -0
- data/lib/microsoft_graph/base.rb +110 -0
- data/lib/microsoft_graph/base_entity.rb +152 -0
- data/lib/microsoft_graph/cached_metadata_directory.rb +3 -0
- data/lib/microsoft_graph/class_builder.rb +217 -0
- data/lib/microsoft_graph/collection.rb +95 -0
- data/lib/microsoft_graph/collection_association.rb +230 -0
- data/lib/microsoft_graph/errors.rb +6 -0
- data/lib/microsoft_graph/version.rb +3 -0
- data/lib/odata.rb +49 -0
- data/lib/odata/entity_set.rb +20 -0
- data/lib/odata/errors.rb +18 -0
- data/lib/odata/navigation_property.rb +30 -0
- data/lib/odata/operation.rb +17 -0
- data/lib/odata/property.rb +38 -0
- data/lib/odata/request.rb +48 -0
- data/lib/odata/service.rb +280 -0
- data/lib/odata/singleton.rb +20 -0
- data/lib/odata/type.rb +25 -0
- data/lib/odata/types/collection_type.rb +30 -0
- data/lib/odata/types/complex_type.rb +19 -0
- data/lib/odata/types/entity_type.rb +33 -0
- data/lib/odata/types/enum_type.rb +37 -0
- data/lib/odata/types/primitive_type.rb +12 -0
- data/lib/odata/types/primitive_types/binary_type.rb +15 -0
- data/lib/odata/types/primitive_types/boolean_type.rb +15 -0
- data/lib/odata/types/primitive_types/date_time_offset_type.rb +15 -0
- data/lib/odata/types/primitive_types/date_type.rb +23 -0
- data/lib/odata/types/primitive_types/double_type.rb +16 -0
- data/lib/odata/types/primitive_types/guid_type.rb +24 -0
- data/lib/odata/types/primitive_types/int_16_type.rb +19 -0
- data/lib/odata/types/primitive_types/int_32_type.rb +15 -0
- data/lib/odata/types/primitive_types/int_64_type.rb +15 -0
- data/lib/odata/types/primitive_types/stream_type.rb +15 -0
- data/lib/odata/types/primitive_types/string_type.rb +15 -0
- data/microsoft_graph.gemspec +31 -0
- data/tasks/update_metadata.rb +17 -0
- metadata +232 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module OData
|
2
|
+
class Singleton
|
3
|
+
attr_reader :name
|
4
|
+
attr_reader :type_name
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
@name = options[:name]
|
8
|
+
@type_name = options[:type]
|
9
|
+
@service = options[:service]
|
10
|
+
end
|
11
|
+
|
12
|
+
def collection?
|
13
|
+
false
|
14
|
+
end
|
15
|
+
|
16
|
+
def type
|
17
|
+
@service.get_type_by_name(type_name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/odata/type.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module OData
|
2
|
+
class Type
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@name = options[:name]
|
7
|
+
end
|
8
|
+
|
9
|
+
def coerce(value)
|
10
|
+
value
|
11
|
+
end
|
12
|
+
|
13
|
+
def collection?
|
14
|
+
false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Dir[
|
20
|
+
File.join(
|
21
|
+
File.dirname(__FILE__),
|
22
|
+
'types',
|
23
|
+
'*.rb'
|
24
|
+
)
|
25
|
+
].each { |f| require f }
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module OData
|
2
|
+
class CollectionType < Type
|
3
|
+
attr_reader :member_type
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
super
|
7
|
+
@member_type = options[:member_type]
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid_value?(value)
|
11
|
+
member_type.valid_value?(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def primitive_type?
|
15
|
+
OData::PrimitiveType === member_type
|
16
|
+
end
|
17
|
+
|
18
|
+
def enum_type?
|
19
|
+
OData::EnumType === member_type
|
20
|
+
end
|
21
|
+
|
22
|
+
def collection?
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def properties
|
27
|
+
member_type.properties
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module OData
|
2
|
+
class ComplexType < Type
|
3
|
+
attr_reader :base_type
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
super
|
7
|
+
@base_type = options[:base_type]
|
8
|
+
@service = options[:service]
|
9
|
+
end
|
10
|
+
|
11
|
+
def properties
|
12
|
+
@properties ||= @service.properties_for_type(name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def valid_value?(value)
|
16
|
+
value.respond_to?(:odata_type) && self.name == value.odata_type
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module OData
|
2
|
+
class EntityType < Type
|
3
|
+
attr_reader :base_type
|
4
|
+
attr_reader :abstract
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
super
|
8
|
+
@abstract = options[:abstract]
|
9
|
+
@base_type = options[:base_type]
|
10
|
+
@open_type = options[:open_type]
|
11
|
+
@has_stream = options[:has_stream]
|
12
|
+
@service = options[:service]
|
13
|
+
end
|
14
|
+
|
15
|
+
def properties
|
16
|
+
@properties ||= @service.properties_for_type(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def navigation_properties
|
20
|
+
@navigation_properties ||= @service.navigation_properties_for_type(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def navigation_property_by_name(name)
|
24
|
+
navigation_properties.find do |navigation_property|
|
25
|
+
navigation_property.name == name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def valid_value?(value)
|
30
|
+
value.respond_to?(:odata_type) && (name == value.odata_type || name == value.class.superclass.odata_type.name)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module OData
|
2
|
+
class EnumType < Type
|
3
|
+
attr_reader :members
|
4
|
+
|
5
|
+
def initialize(options={})
|
6
|
+
super
|
7
|
+
@members = options[:members]
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid_value?(value)
|
11
|
+
member_names.include?(value) || member_values.include?(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def type
|
15
|
+
name
|
16
|
+
end
|
17
|
+
|
18
|
+
def coerce(value)
|
19
|
+
if value && value.is_a?(Integer)
|
20
|
+
member = @members.find { |m| m[:value] == value }
|
21
|
+
member && member[:name]
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def member_names
|
30
|
+
members.map { |m| m[:name] }
|
31
|
+
end
|
32
|
+
|
33
|
+
def member_values
|
34
|
+
members.map { |m| m[:value] }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module OData
|
2
|
+
class DateType < PrimitiveType
|
3
|
+
def valid_value?(value)
|
4
|
+
Date === value
|
5
|
+
end
|
6
|
+
|
7
|
+
def coerce(value)
|
8
|
+
begin
|
9
|
+
if Date === value
|
10
|
+
value
|
11
|
+
else
|
12
|
+
Date.parse(value.to_s)
|
13
|
+
end
|
14
|
+
rescue ArgumentError
|
15
|
+
raise TypeError.new("Cannot convert #{value.inspect} into a date")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def name
|
20
|
+
"Edm.Date"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module OData
|
2
|
+
class DoubleType < PrimitiveType
|
3
|
+
def valid_value?(value)
|
4
|
+
Numeric === value
|
5
|
+
end
|
6
|
+
|
7
|
+
def coerce(value)
|
8
|
+
raise TypeError.new("Cannot convert #{value.inspect} into a float") unless value.respond_to? :to_f
|
9
|
+
value.to_f
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
"Edm.Double"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module OData
|
2
|
+
class GuidType < PrimitiveType
|
3
|
+
def valid_value?(value)
|
4
|
+
String === value
|
5
|
+
end
|
6
|
+
|
7
|
+
def coerce(value)
|
8
|
+
case value
|
9
|
+
when Symbol
|
10
|
+
value.to_s
|
11
|
+
when Numeric
|
12
|
+
value.to_s
|
13
|
+
when String
|
14
|
+
value
|
15
|
+
else
|
16
|
+
raise TypeError, "Cannot convert #{value.inspect} into a Guid"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def name
|
21
|
+
"Edm.Guid"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module OData
|
2
|
+
class Int16Type < PrimitiveType
|
3
|
+
def valid_value?(value)
|
4
|
+
Integer === value &&
|
5
|
+
value <= 2**15 &&
|
6
|
+
value > -(2**15)
|
7
|
+
end
|
8
|
+
|
9
|
+
def coerce(value)
|
10
|
+
val = value.respond_to?(:to_i) ? value.to_i : value
|
11
|
+
raise TypeError, "Cannot convert #{value.inspect} into an Int16" unless valid_value?(val)
|
12
|
+
val
|
13
|
+
end
|
14
|
+
|
15
|
+
def name
|
16
|
+
"Edm.Int16"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'microsoft_graph/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "microsoft_graph"
|
8
|
+
spec.version = MicrosoftGraph::VERSION
|
9
|
+
spec.authors = ["Katie Miller", "Neal Lindsay"]
|
10
|
+
spec.email = ["katie@testdouble.com", "neal@testdouble.com"]
|
11
|
+
|
12
|
+
spec.summary = "Ruby SDK for Microsoft Graph"
|
13
|
+
spec.homepage = "https://graph.microsoft.io"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
21
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
23
|
+
spec.add_development_dependency "rspec-given", "~> 3.5.0"
|
24
|
+
spec.add_development_dependency "adal", "~> 1.0"
|
25
|
+
spec.add_development_dependency "dotenv", "~> 2.0.2"
|
26
|
+
spec.add_development_dependency "pry", "~> 0.10.3"
|
27
|
+
spec.add_development_dependency "simplecov", "~> 0.11.1"
|
28
|
+
spec.add_development_dependency "webmock", "~> 1.22.6"
|
29
|
+
|
30
|
+
spec.add_dependency "nokogiri", "~> 1.6.7.1"
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
desc "Update Graph API description file (optionally specify VERSION environment variable - defaults to \"v1.0\")"
|
4
|
+
task :update_metadata do
|
5
|
+
version = ENV['VERSION'] || "v1.0"
|
6
|
+
file_name = File.absolute_path File.join(__FILE__, "../../data/metadata_#{version}.xml")
|
7
|
+
uri = URI("https://graph.microsoft.com/#{version}/$metadata?detailed=true")
|
8
|
+
xml = Net::HTTP
|
9
|
+
.new(uri.hostname, uri.port)
|
10
|
+
.tap { |h| h.use_ssl = uri.scheme == "https" }
|
11
|
+
.get(uri).body
|
12
|
+
doc = REXML::Document.new(xml)
|
13
|
+
File.open(file_name, 'w') do |f|
|
14
|
+
puts "writing to #{file_name}"
|
15
|
+
doc.write f, 2
|
16
|
+
end
|
17
|
+
end
|