microsoft_graph 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +10 -0
  7. data/README.md +97 -0
  8. data/Rakefile +7 -0
  9. data/data/metadata_v1.0.xml +1687 -0
  10. data/integration_spec/integration_spec_helper.rb +18 -0
  11. data/integration_spec/live_spec.rb +180 -0
  12. data/lib/microsoft_graph.rb +35 -0
  13. data/lib/microsoft_graph/base.rb +110 -0
  14. data/lib/microsoft_graph/base_entity.rb +152 -0
  15. data/lib/microsoft_graph/cached_metadata_directory.rb +3 -0
  16. data/lib/microsoft_graph/class_builder.rb +217 -0
  17. data/lib/microsoft_graph/collection.rb +95 -0
  18. data/lib/microsoft_graph/collection_association.rb +230 -0
  19. data/lib/microsoft_graph/errors.rb +6 -0
  20. data/lib/microsoft_graph/version.rb +3 -0
  21. data/lib/odata.rb +49 -0
  22. data/lib/odata/entity_set.rb +20 -0
  23. data/lib/odata/errors.rb +18 -0
  24. data/lib/odata/navigation_property.rb +30 -0
  25. data/lib/odata/operation.rb +17 -0
  26. data/lib/odata/property.rb +38 -0
  27. data/lib/odata/request.rb +48 -0
  28. data/lib/odata/service.rb +280 -0
  29. data/lib/odata/singleton.rb +20 -0
  30. data/lib/odata/type.rb +25 -0
  31. data/lib/odata/types/collection_type.rb +30 -0
  32. data/lib/odata/types/complex_type.rb +19 -0
  33. data/lib/odata/types/entity_type.rb +33 -0
  34. data/lib/odata/types/enum_type.rb +37 -0
  35. data/lib/odata/types/primitive_type.rb +12 -0
  36. data/lib/odata/types/primitive_types/binary_type.rb +15 -0
  37. data/lib/odata/types/primitive_types/boolean_type.rb +15 -0
  38. data/lib/odata/types/primitive_types/date_time_offset_type.rb +15 -0
  39. data/lib/odata/types/primitive_types/date_type.rb +23 -0
  40. data/lib/odata/types/primitive_types/double_type.rb +16 -0
  41. data/lib/odata/types/primitive_types/guid_type.rb +24 -0
  42. data/lib/odata/types/primitive_types/int_16_type.rb +19 -0
  43. data/lib/odata/types/primitive_types/int_32_type.rb +15 -0
  44. data/lib/odata/types/primitive_types/int_64_type.rb +15 -0
  45. data/lib/odata/types/primitive_types/stream_type.rb +15 -0
  46. data/lib/odata/types/primitive_types/string_type.rb +15 -0
  47. data/microsoft_graph.gemspec +31 -0
  48. data/tasks/update_metadata.rb +17 -0
  49. 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,12 @@
1
+ module OData
2
+ class PrimitiveType < Type
3
+ end
4
+ end
5
+
6
+ Dir[
7
+ File.join(
8
+ File.dirname(__FILE__),
9
+ 'primitive_types',
10
+ '*.rb'
11
+ )
12
+ ].each { |f| require f }
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class BinaryType < PrimitiveType
3
+ def valid_value?(value)
4
+ String === value
5
+ end
6
+
7
+ def coerce(value)
8
+ raise RuntimeError
9
+ end
10
+
11
+ def name
12
+ "Edm.Binary"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class BooleanType < PrimitiveType
3
+ def valid_value?(value)
4
+ TrueClass === value || FalseClass === value
5
+ end
6
+
7
+ def coerce(value)
8
+ value
9
+ end
10
+
11
+ def name
12
+ "Edm.Boolean"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class DateTimeOffsetType < PrimitiveType
3
+ def valid_value?(value)
4
+ DateTime === value || Time === value
5
+ end
6
+
7
+ def coerce(value)
8
+ DateTime.parse(value)
9
+ end
10
+
11
+ def name
12
+ "Edm.DateTimeOffset"
13
+ end
14
+ end
15
+ 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,15 @@
1
+ module OData
2
+ class Int32Type < PrimitiveType
3
+ def valid_value?(value)
4
+ Integer === value
5
+ end
6
+
7
+ def coerce(value)
8
+ value.to_i
9
+ end
10
+
11
+ def name
12
+ "Edm.Int32"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class Int64Type < PrimitiveType
3
+ def valid_value?(value)
4
+ Integer === value
5
+ end
6
+
7
+ def coerce(value)
8
+ value.to_i
9
+ end
10
+
11
+ def name
12
+ "Edm.Int64"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class StreamType < PrimitiveType
3
+ def valid_value?(value)
4
+ true
5
+ end
6
+
7
+ def coerce(value)
8
+ raise RuntimeError
9
+ end
10
+
11
+ def name
12
+ "Edm.Stream"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module OData
2
+ class StringType < PrimitiveType
3
+ def valid_value?(value)
4
+ String === value
5
+ end
6
+
7
+ def coerce(value)
8
+ value.to_s
9
+ end
10
+
11
+ def name
12
+ "Edm.String"
13
+ end
14
+ end
15
+ 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