odata4 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +2 -0
  3. data/.gitignore +24 -0
  4. data/.rspec +2 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +75 -0
  8. data/CHANGELOG.md +120 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +23 -0
  11. data/README.md +287 -0
  12. data/Rakefile +7 -0
  13. data/TODO.md +55 -0
  14. data/lib/odata4.rb +37 -0
  15. data/lib/odata4/complex_type.rb +76 -0
  16. data/lib/odata4/complex_type/property.rb +114 -0
  17. data/lib/odata4/entity.rb +319 -0
  18. data/lib/odata4/entity_set.rb +162 -0
  19. data/lib/odata4/enum_type.rb +95 -0
  20. data/lib/odata4/enum_type/property.rb +62 -0
  21. data/lib/odata4/navigation_property.rb +29 -0
  22. data/lib/odata4/navigation_property/proxy.rb +76 -0
  23. data/lib/odata4/properties.rb +25 -0
  24. data/lib/odata4/properties/binary.rb +50 -0
  25. data/lib/odata4/properties/boolean.rb +37 -0
  26. data/lib/odata4/properties/date.rb +27 -0
  27. data/lib/odata4/properties/date_time.rb +83 -0
  28. data/lib/odata4/properties/date_time_offset.rb +17 -0
  29. data/lib/odata4/properties/decimal.rb +50 -0
  30. data/lib/odata4/properties/float.rb +67 -0
  31. data/lib/odata4/properties/geography.rb +13 -0
  32. data/lib/odata4/properties/geography/base.rb +162 -0
  33. data/lib/odata4/properties/geography/line_string.rb +33 -0
  34. data/lib/odata4/properties/geography/point.rb +31 -0
  35. data/lib/odata4/properties/geography/polygon.rb +38 -0
  36. data/lib/odata4/properties/guid.rb +17 -0
  37. data/lib/odata4/properties/integer.rb +107 -0
  38. data/lib/odata4/properties/number.rb +14 -0
  39. data/lib/odata4/properties/string.rb +72 -0
  40. data/lib/odata4/properties/time.rb +40 -0
  41. data/lib/odata4/properties/time_of_day.rb +27 -0
  42. data/lib/odata4/property.rb +118 -0
  43. data/lib/odata4/property_registry.rb +41 -0
  44. data/lib/odata4/query.rb +231 -0
  45. data/lib/odata4/query/criteria.rb +92 -0
  46. data/lib/odata4/query/criteria/comparison_operators.rb +49 -0
  47. data/lib/odata4/query/criteria/date_functions.rb +61 -0
  48. data/lib/odata4/query/criteria/geography_functions.rb +21 -0
  49. data/lib/odata4/query/criteria/lambda_operators.rb +27 -0
  50. data/lib/odata4/query/criteria/string_functions.rb +40 -0
  51. data/lib/odata4/query/in_batches.rb +58 -0
  52. data/lib/odata4/query/result.rb +84 -0
  53. data/lib/odata4/query/result/atom.rb +41 -0
  54. data/lib/odata4/query/result/json.rb +42 -0
  55. data/lib/odata4/railtie.rb +19 -0
  56. data/lib/odata4/service.rb +344 -0
  57. data/lib/odata4/service_registry.rb +52 -0
  58. data/lib/odata4/version.rb +3 -0
  59. data/odata4.gemspec +34 -0
  60. data/spec/fixtures/files/entity_to_xml.xml +17 -0
  61. data/spec/fixtures/files/metadata.xml +150 -0
  62. data/spec/fixtures/files/product_0.json +10 -0
  63. data/spec/fixtures/files/product_0.xml +28 -0
  64. data/spec/fixtures/files/products.json +106 -0
  65. data/spec/fixtures/files/products.xml +308 -0
  66. data/spec/fixtures/files/supplier_0.json +26 -0
  67. data/spec/fixtures/files/supplier_0.xml +32 -0
  68. data/spec/fixtures/vcr_cassettes/complex_type_specs.yml +127 -0
  69. data/spec/fixtures/vcr_cassettes/entity_set_specs.yml +1348 -0
  70. data/spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml +183 -0
  71. data/spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml +256 -0
  72. data/spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml +185 -0
  73. data/spec/fixtures/vcr_cassettes/entity_specs.yml +285 -0
  74. data/spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml +346 -0
  75. data/spec/fixtures/vcr_cassettes/query/result_specs.yml +189 -0
  76. data/spec/fixtures/vcr_cassettes/query_specs.yml +663 -0
  77. data/spec/fixtures/vcr_cassettes/service_registry_specs.yml +129 -0
  78. data/spec/fixtures/vcr_cassettes/service_specs.yml +127 -0
  79. data/spec/fixtures/vcr_cassettes/usage_example_specs.yml +749 -0
  80. data/spec/odata4/complex_type_spec.rb +116 -0
  81. data/spec/odata4/entity/shared_examples.rb +82 -0
  82. data/spec/odata4/entity_set_spec.rb +168 -0
  83. data/spec/odata4/entity_spec.rb +151 -0
  84. data/spec/odata4/enum_type_spec.rb +134 -0
  85. data/spec/odata4/navigation_property/proxy_spec.rb +44 -0
  86. data/spec/odata4/navigation_property_spec.rb +55 -0
  87. data/spec/odata4/properties/binary_spec.rb +50 -0
  88. data/spec/odata4/properties/boolean_spec.rb +72 -0
  89. data/spec/odata4/properties/date_spec.rb +23 -0
  90. data/spec/odata4/properties/date_time_offset_spec.rb +30 -0
  91. data/spec/odata4/properties/date_time_spec.rb +23 -0
  92. data/spec/odata4/properties/decimal_spec.rb +24 -0
  93. data/spec/odata4/properties/float_spec.rb +45 -0
  94. data/spec/odata4/properties/geography/line_string_spec.rb +33 -0
  95. data/spec/odata4/properties/geography/point_spec.rb +29 -0
  96. data/spec/odata4/properties/geography/polygon_spec.rb +55 -0
  97. data/spec/odata4/properties/geography/shared_examples.rb +72 -0
  98. data/spec/odata4/properties/guid_spec.rb +17 -0
  99. data/spec/odata4/properties/integer_spec.rb +58 -0
  100. data/spec/odata4/properties/string_spec.rb +46 -0
  101. data/spec/odata4/properties/time_of_day_spec.rb +23 -0
  102. data/spec/odata4/properties/time_spec.rb +15 -0
  103. data/spec/odata4/property_registry_spec.rb +16 -0
  104. data/spec/odata4/property_spec.rb +32 -0
  105. data/spec/odata4/query/criteria_spec.rb +229 -0
  106. data/spec/odata4/query/result_spec.rb +53 -0
  107. data/spec/odata4/query_spec.rb +196 -0
  108. data/spec/odata4/service_registry_spec.rb +18 -0
  109. data/spec/odata4/service_spec.rb +80 -0
  110. data/spec/odata4/usage_example_spec.rb +176 -0
  111. data/spec/spec_helper.rb +32 -0
  112. data/spec/support/coverage.rb +2 -0
  113. data/spec/support/vcr.rb +9 -0
  114. metadata +380 -0
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData4::ServiceRegistry, vcr: {cassette_name: 'service_registry_specs'} do
4
+ let(:subject) { OData4::ServiceRegistry }
5
+ let(:sample_service) { OData4::Service.open('http://services.odata.org/V4/OData/OData.svc', name: 'demoService') }
6
+
7
+ it { expect(subject).to respond_to(:add) }
8
+ it { expect(subject).to respond_to(:[]) }
9
+
10
+ describe '#add' do
11
+ before(:example) do
12
+ subject.add(sample_service)
13
+ end
14
+
15
+ it { expect(subject['demoService']).to eq(sample_service) }
16
+ it { expect(subject['http://services.odata.org/V4/OData/OData.svc']).to eq(sample_service) }
17
+ end
18
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData4::Service, vcr: {cassette_name: 'service_specs'} do
4
+ let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
5
+ let(:metadata_file) { 'spec/fixtures/files/metadata.xml' }
6
+ let(:subject) { OData4::Service.open(service_url, name: 'ODataDemo', metadata_file: metadata_file) }
7
+ let(:entity_types) { %w{Product FeaturedProduct ProductDetail Category Supplier Person Customer Employee PersonDetail Advertisement} }
8
+ let(:entity_sets) { %w{Products ProductDetails Categories Suppliers Persons PersonDetails Advertisements} }
9
+ let(:entity_set_types) { %w{Product ProductDetail Category Supplier Person PersonDetail Advertisement} }
10
+ let(:complex_types) { %w{Address} }
11
+ let(:enum_types) { %w{ProductStatus} }
12
+ let(:associations) { %w{Product_Categories_Category_Products
13
+ Product_Supplier_Supplier_Products
14
+ Product_ProductDetail_ProductDetail_Product
15
+ FeaturedProduct_Advertisement_Advertisement_FeaturedProduct
16
+ Person_PersonDetail_PersonDetail_Person} }
17
+
18
+ describe '.open' do
19
+ it { expect(OData4::Service).to respond_to(:open) }
20
+ end
21
+
22
+ it 'adds itself to OData4::ServiceRegistry on creation' do
23
+ expect(OData4::ServiceRegistry['ODataDemo']).to be_nil
24
+ expect(OData4::ServiceRegistry[service_url]).to be_nil
25
+
26
+ service = OData4::Service.open(service_url, name: 'ODataDemo')
27
+
28
+ expect(OData4::ServiceRegistry['ODataDemo']).to eq(service)
29
+ expect(OData4::ServiceRegistry[service_url]).to eq(service)
30
+ end
31
+
32
+ describe 'instance methods' do
33
+ it { expect(subject).to respond_to(:service_url) }
34
+ it { expect(subject).to respond_to(:entity_types) }
35
+ it { expect(subject).to respond_to(:entity_sets) }
36
+ it { expect(subject).to respond_to(:complex_types) }
37
+ it { expect(subject).to respond_to(:enum_types) }
38
+ it { expect(subject).to respond_to(:namespace) }
39
+ end
40
+
41
+ describe '#service_url' do
42
+ it { expect(subject.service_url).to eq(service_url) }
43
+ end
44
+
45
+ describe '#entity_types' do
46
+ it { expect(subject.entity_types.size).to eq(10) }
47
+ it { expect(subject.entity_types).to eq(entity_types) }
48
+ end
49
+
50
+ describe '#entity_sets' do
51
+ it { expect(subject.entity_sets.size).to eq(7) }
52
+ it { expect(subject.entity_sets.keys).to eq(entity_set_types) }
53
+ it { expect(subject.entity_sets.values).to eq(entity_sets) }
54
+ end
55
+
56
+ describe '#complex_types' do
57
+ it { expect(subject.complex_types.size).to eq(1) }
58
+ it { expect(subject.complex_types.keys).to eq(complex_types) }
59
+ end
60
+
61
+ describe '#enum_types' do
62
+ it { expect(subject.enum_types.size).to eq(1) }
63
+ it { expect(subject.enum_types.keys).to eq(enum_types)}
64
+ end
65
+
66
+ describe '#navigation_properties' do
67
+ it { expect(subject).to respond_to(:navigation_properties) }
68
+ it { expect(subject.navigation_properties['Product'].size).to eq(3) }
69
+ it { expect(subject.navigation_properties['Product']['Categories']).to be_a(OData4::NavigationProperty) }
70
+ end
71
+
72
+ describe '#namespace' do
73
+ it { expect(subject.namespace).to eq('ODataDemo') }
74
+ end
75
+
76
+ describe '#[]' do
77
+ it { expect(subject['Products']).to be_a(OData4::EntitySet) }
78
+ it { expect {subject['Nonexistant']}.to raise_error(ArgumentError) }
79
+ end
80
+ end
@@ -0,0 +1,176 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Usage examples', vcr: { cassette_name: 'usage_example_specs' } do
4
+ let(:service_url) { 'http://services.odata.org/V4/OData/OData.svc' }
5
+ let(:service) { OData4::Service.open(service_url, name: 'ODataDemo') }
6
+
7
+ describe 'getting information' do
8
+ it 'returns the service URL' do
9
+ expect(service.service_url).to eq(service_url)
10
+ end
11
+
12
+ it 'returns the service namespace' do
13
+ expect(service.namespace).to eq('ODataDemo')
14
+ end
15
+
16
+ it 'lists entity types' do
17
+ expect(service.entity_types).to eq([
18
+ "Product",
19
+ "FeaturedProduct",
20
+ "ProductDetail",
21
+ "Category",
22
+ "Supplier",
23
+ "Person",
24
+ "Customer",
25
+ "Employee",
26
+ "PersonDetail",
27
+ "Advertisement"
28
+ ])
29
+ end
30
+
31
+ it 'lists entity sets' do
32
+ expect(service.entity_sets).to eq({
33
+ "Product" => "Products",
34
+ "ProductDetail" => "ProductDetails",
35
+ "Category" => "Categories",
36
+ "Supplier" => "Suppliers",
37
+ "Person" => "Persons",
38
+ "PersonDetail" => "PersonDetails",
39
+ "Advertisement" => "Advertisements"
40
+ })
41
+ end
42
+ end
43
+
44
+ describe 'working with entity sets' do
45
+ it 'accessing entity sets' do
46
+ service.entity_sets.each do |entity_name, set_name|
47
+ entity_set = service[set_name]
48
+
49
+ expect(entity_set).to be_a(OData4::EntitySet)
50
+ expect(entity_set.name).to eq(set_name)
51
+ expect(entity_set.type).to eq(entity_name)
52
+ expect(entity_set.namespace).to eq(service.namespace)
53
+ end
54
+ end
55
+
56
+ describe 'accessing entities' do
57
+ let(:products) { service['Products'] }
58
+
59
+ it 'getting the first entity in a set' do
60
+ expect(products.first).to be_a(OData4::Entity)
61
+ expect(products.first.name).to eq('Product')
62
+ end
63
+
64
+ it 'iterating over the entire set' do
65
+ products.each do |product|
66
+ expect(product).to be_a(OData4::Entity)
67
+ expect(product.name).to eq('Product')
68
+ end
69
+ end
70
+
71
+ it 'counting entities' do
72
+ expect(products.count).to eq(11)
73
+ end
74
+
75
+ it 'creating a new entity' do
76
+ new_product = products.new_entity
77
+
78
+ expect(new_product).to be_a(OData4::Entity)
79
+ expect(new_product.name).to eq('Product')
80
+ end
81
+ end
82
+
83
+ describe 'querying' do
84
+ let(:products) { service['Products'] }
85
+ let(:query) { products.query }
86
+
87
+ it 'obtain a query object using #query' do
88
+ expect(products.query).to be_a(OData4::Query)
89
+ end
90
+
91
+ it 'executing query' do
92
+ results = query.execute
93
+
94
+ expect(results.map { |p| p['Name']}).to eq([
95
+ "Bread",
96
+ "Milk",
97
+ "Vint soda",
98
+ "Havina Cola",
99
+ "Fruit Punch",
100
+ "Cranberry Juice",
101
+ "Pink Lemonade",
102
+ "DVD Player",
103
+ "LCD HDTV",
104
+ "Lemonade",
105
+ "Coffee"
106
+ ])
107
+ end
108
+
109
+ it 'adding criteria' do
110
+ query.where(query['Name'].eq('Milk'))
111
+ results = query.execute
112
+
113
+ expect(query.to_s).to eq("Products?$filter=Name eq 'Milk'")
114
+ results.each do |product|
115
+ expect(product).to be_a(OData4::Entity)
116
+ expect(product.name).to eq('Product')
117
+ expect(product['Name']).to eq('Milk')
118
+ end
119
+ end
120
+
121
+ it 'ordering results' do
122
+ results = query.order_by('Name').execute
123
+
124
+ expect(results.map { |p| p['Name'] }).to eq([
125
+ "Bread",
126
+ "Coffee",
127
+ "Cranberry Juice",
128
+ "DVD Player",
129
+ "Fruit Punch",
130
+ "Havina Cola",
131
+ "LCD HDTV",
132
+ "Lemonade",
133
+ "Milk",
134
+ "Pink Lemonade",
135
+ "Vint soda"
136
+ ])
137
+ end
138
+
139
+ it 'returning query results in batches' do
140
+ batch_count = 0
141
+
142
+ query.in_batches(of: 5) do |batch|
143
+ expect(batch.count).to eq(5) unless batch_count == 2
144
+
145
+ batch.each do |entity|
146
+ expect(entity).to be_a(OData4::Entity)
147
+ expect(entity.type).to eq('Product')
148
+ end
149
+ batch_count += 1
150
+ end
151
+
152
+ expect(batch_count).to eq(3)
153
+ end
154
+ end
155
+ end
156
+
157
+ describe 'working with entities' do
158
+ let(:product) { service['Products'][1] }
159
+
160
+ it 'getting a list of property names' do
161
+ expect(product.property_names).to eq([
162
+ "ID", "Name", "Description", "ReleaseDate", "DiscontinuedDate", "Rating", "Price"
163
+ ])
164
+ end
165
+
166
+ it 'accessing entity properties' do
167
+ expect(product["ID"]).to eq(1)
168
+ expect(product["Name"]).to eq("Milk")
169
+ expect(product["Description"]).to eq("Low fat milk")
170
+ expect(product["ReleaseDate"]).to eq(DateTime.parse("1995-10-01T00:00:00Z"))
171
+ expect(product["DiscontinuedDate"]).to be_nil
172
+ expect(product["Rating"]).to eq(3)
173
+ expect(product["Price"]).to eq(3.5)
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,32 @@
1
+ require 'odata4'
2
+ require 'rspec/matchers' # required for 'equivalent-xml'
3
+ require 'equivalent-xml'
4
+ require 'securerandom'
5
+ require 'timecop'
6
+
7
+ # Load all files from `spec/support`
8
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }
9
+
10
+ RSpec.configure do |config|
11
+ if config.files_to_run.one?
12
+ config.default_formatter = 'doc'
13
+ end
14
+
15
+ config.profile_examples = 3
16
+ config.order = :random
17
+
18
+ config.expect_with :rspec do |expectations|
19
+ expectations.syntax = :expect
20
+ end
21
+
22
+ config.mock_with :rspec do |mocks|
23
+ mocks.syntax = :expect
24
+ mocks.verify_partial_doubles = true
25
+ end
26
+
27
+ config.after(:example) do
28
+ # We're calling this as a private method because there should not be any
29
+ # reasons to have to flush the service registry except in testing.
30
+ OData4::ServiceRegistry.instance.send(:flush)
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
@@ -0,0 +1,9 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
5
+ c.hook_into :typhoeus
6
+ c.default_cassette_options = { record: :new_episodes }
7
+ c.debug_logger = File.open(ENV['VCR_LOG'], 'w') if ENV['VCR_LOG']
8
+ c.configure_rspec_metadata!
9
+ end
metadata ADDED
@@ -0,0 +1,380 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: odata4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Christoph Wagner
8
+ - James Thompson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-01-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.6'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: simplecov
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.15.1
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.15.1
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 3.7.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 3.7.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec-autotest
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.0.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 1.0.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: autotest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 4.4.6
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 4.4.6
98
+ - !ruby/object:Gem::Dependency
99
+ name: vcr
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 4.0.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 4.0.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: timecop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: 0.9.1
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: 0.9.1
126
+ - !ruby/object:Gem::Dependency
127
+ name: equivalent-xml
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.6.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.6.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: nokogiri
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 1.8.1
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 1.8.1
154
+ - !ruby/object:Gem::Dependency
155
+ name: typhoeus
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 1.3.0
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: 1.3.0
168
+ - !ruby/object:Gem::Dependency
169
+ name: andand
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 1.3.3
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: 1.3.3
182
+ description: Provides a simple interface for working with OData V4 APIs.
183
+ email:
184
+ - christoph@wrstudios.com
185
+ - james@plainprograms.com
186
+ executables: []
187
+ extensions: []
188
+ extra_rdoc_files: []
189
+ files:
190
+ - ".autotest"
191
+ - ".gitignore"
192
+ - ".rspec"
193
+ - ".ruby-gemset"
194
+ - ".ruby-version"
195
+ - ".travis.yml"
196
+ - CHANGELOG.md
197
+ - Gemfile
198
+ - LICENSE.txt
199
+ - README.md
200
+ - Rakefile
201
+ - TODO.md
202
+ - lib/odata4.rb
203
+ - lib/odata4/complex_type.rb
204
+ - lib/odata4/complex_type/property.rb
205
+ - lib/odata4/entity.rb
206
+ - lib/odata4/entity_set.rb
207
+ - lib/odata4/enum_type.rb
208
+ - lib/odata4/enum_type/property.rb
209
+ - lib/odata4/navigation_property.rb
210
+ - lib/odata4/navigation_property/proxy.rb
211
+ - lib/odata4/properties.rb
212
+ - lib/odata4/properties/binary.rb
213
+ - lib/odata4/properties/boolean.rb
214
+ - lib/odata4/properties/date.rb
215
+ - lib/odata4/properties/date_time.rb
216
+ - lib/odata4/properties/date_time_offset.rb
217
+ - lib/odata4/properties/decimal.rb
218
+ - lib/odata4/properties/float.rb
219
+ - lib/odata4/properties/geography.rb
220
+ - lib/odata4/properties/geography/base.rb
221
+ - lib/odata4/properties/geography/line_string.rb
222
+ - lib/odata4/properties/geography/point.rb
223
+ - lib/odata4/properties/geography/polygon.rb
224
+ - lib/odata4/properties/guid.rb
225
+ - lib/odata4/properties/integer.rb
226
+ - lib/odata4/properties/number.rb
227
+ - lib/odata4/properties/string.rb
228
+ - lib/odata4/properties/time.rb
229
+ - lib/odata4/properties/time_of_day.rb
230
+ - lib/odata4/property.rb
231
+ - lib/odata4/property_registry.rb
232
+ - lib/odata4/query.rb
233
+ - lib/odata4/query/criteria.rb
234
+ - lib/odata4/query/criteria/comparison_operators.rb
235
+ - lib/odata4/query/criteria/date_functions.rb
236
+ - lib/odata4/query/criteria/geography_functions.rb
237
+ - lib/odata4/query/criteria/lambda_operators.rb
238
+ - lib/odata4/query/criteria/string_functions.rb
239
+ - lib/odata4/query/in_batches.rb
240
+ - lib/odata4/query/result.rb
241
+ - lib/odata4/query/result/atom.rb
242
+ - lib/odata4/query/result/json.rb
243
+ - lib/odata4/railtie.rb
244
+ - lib/odata4/service.rb
245
+ - lib/odata4/service_registry.rb
246
+ - lib/odata4/version.rb
247
+ - odata4.gemspec
248
+ - spec/fixtures/files/entity_to_xml.xml
249
+ - spec/fixtures/files/metadata.xml
250
+ - spec/fixtures/files/product_0.json
251
+ - spec/fixtures/files/product_0.xml
252
+ - spec/fixtures/files/products.json
253
+ - spec/fixtures/files/products.xml
254
+ - spec/fixtures/files/supplier_0.json
255
+ - spec/fixtures/files/supplier_0.xml
256
+ - spec/fixtures/vcr_cassettes/complex_type_specs.yml
257
+ - spec/fixtures/vcr_cassettes/entity_set_specs.yml
258
+ - spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml
259
+ - spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml
260
+ - spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml
261
+ - spec/fixtures/vcr_cassettes/entity_specs.yml
262
+ - spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
263
+ - spec/fixtures/vcr_cassettes/query/result_specs.yml
264
+ - spec/fixtures/vcr_cassettes/query_specs.yml
265
+ - spec/fixtures/vcr_cassettes/service_registry_specs.yml
266
+ - spec/fixtures/vcr_cassettes/service_specs.yml
267
+ - spec/fixtures/vcr_cassettes/usage_example_specs.yml
268
+ - spec/odata4/complex_type_spec.rb
269
+ - spec/odata4/entity/shared_examples.rb
270
+ - spec/odata4/entity_set_spec.rb
271
+ - spec/odata4/entity_spec.rb
272
+ - spec/odata4/enum_type_spec.rb
273
+ - spec/odata4/navigation_property/proxy_spec.rb
274
+ - spec/odata4/navigation_property_spec.rb
275
+ - spec/odata4/properties/binary_spec.rb
276
+ - spec/odata4/properties/boolean_spec.rb
277
+ - spec/odata4/properties/date_spec.rb
278
+ - spec/odata4/properties/date_time_offset_spec.rb
279
+ - spec/odata4/properties/date_time_spec.rb
280
+ - spec/odata4/properties/decimal_spec.rb
281
+ - spec/odata4/properties/float_spec.rb
282
+ - spec/odata4/properties/geography/line_string_spec.rb
283
+ - spec/odata4/properties/geography/point_spec.rb
284
+ - spec/odata4/properties/geography/polygon_spec.rb
285
+ - spec/odata4/properties/geography/shared_examples.rb
286
+ - spec/odata4/properties/guid_spec.rb
287
+ - spec/odata4/properties/integer_spec.rb
288
+ - spec/odata4/properties/string_spec.rb
289
+ - spec/odata4/properties/time_of_day_spec.rb
290
+ - spec/odata4/properties/time_spec.rb
291
+ - spec/odata4/property_registry_spec.rb
292
+ - spec/odata4/property_spec.rb
293
+ - spec/odata4/query/criteria_spec.rb
294
+ - spec/odata4/query/result_spec.rb
295
+ - spec/odata4/query_spec.rb
296
+ - spec/odata4/service_registry_spec.rb
297
+ - spec/odata4/service_spec.rb
298
+ - spec/odata4/usage_example_spec.rb
299
+ - spec/spec_helper.rb
300
+ - spec/support/coverage.rb
301
+ - spec/support/vcr.rb
302
+ homepage: https://github.com/wrstudios/odata4
303
+ licenses:
304
+ - MIT
305
+ metadata: {}
306
+ post_install_message:
307
+ rdoc_options: []
308
+ require_paths:
309
+ - lib
310
+ required_ruby_version: !ruby/object:Gem::Requirement
311
+ requirements:
312
+ - - ">="
313
+ - !ruby/object:Gem::Version
314
+ version: '0'
315
+ required_rubygems_version: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
320
+ requirements: []
321
+ rubyforge_project:
322
+ rubygems_version: 2.6.14
323
+ signing_key:
324
+ specification_version: 4
325
+ summary: Simple OData library
326
+ test_files:
327
+ - spec/fixtures/files/entity_to_xml.xml
328
+ - spec/fixtures/files/metadata.xml
329
+ - spec/fixtures/files/product_0.json
330
+ - spec/fixtures/files/product_0.xml
331
+ - spec/fixtures/files/products.json
332
+ - spec/fixtures/files/products.xml
333
+ - spec/fixtures/files/supplier_0.json
334
+ - spec/fixtures/files/supplier_0.xml
335
+ - spec/fixtures/vcr_cassettes/complex_type_specs.yml
336
+ - spec/fixtures/vcr_cassettes/entity_set_specs.yml
337
+ - spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml
338
+ - spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml
339
+ - spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml
340
+ - spec/fixtures/vcr_cassettes/entity_specs.yml
341
+ - spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
342
+ - spec/fixtures/vcr_cassettes/query/result_specs.yml
343
+ - spec/fixtures/vcr_cassettes/query_specs.yml
344
+ - spec/fixtures/vcr_cassettes/service_registry_specs.yml
345
+ - spec/fixtures/vcr_cassettes/service_specs.yml
346
+ - spec/fixtures/vcr_cassettes/usage_example_specs.yml
347
+ - spec/odata4/complex_type_spec.rb
348
+ - spec/odata4/entity/shared_examples.rb
349
+ - spec/odata4/entity_set_spec.rb
350
+ - spec/odata4/entity_spec.rb
351
+ - spec/odata4/enum_type_spec.rb
352
+ - spec/odata4/navigation_property/proxy_spec.rb
353
+ - spec/odata4/navigation_property_spec.rb
354
+ - spec/odata4/properties/binary_spec.rb
355
+ - spec/odata4/properties/boolean_spec.rb
356
+ - spec/odata4/properties/date_spec.rb
357
+ - spec/odata4/properties/date_time_offset_spec.rb
358
+ - spec/odata4/properties/date_time_spec.rb
359
+ - spec/odata4/properties/decimal_spec.rb
360
+ - spec/odata4/properties/float_spec.rb
361
+ - spec/odata4/properties/geography/line_string_spec.rb
362
+ - spec/odata4/properties/geography/point_spec.rb
363
+ - spec/odata4/properties/geography/polygon_spec.rb
364
+ - spec/odata4/properties/geography/shared_examples.rb
365
+ - spec/odata4/properties/guid_spec.rb
366
+ - spec/odata4/properties/integer_spec.rb
367
+ - spec/odata4/properties/string_spec.rb
368
+ - spec/odata4/properties/time_of_day_spec.rb
369
+ - spec/odata4/properties/time_spec.rb
370
+ - spec/odata4/property_registry_spec.rb
371
+ - spec/odata4/property_spec.rb
372
+ - spec/odata4/query/criteria_spec.rb
373
+ - spec/odata4/query/result_spec.rb
374
+ - spec/odata4/query_spec.rb
375
+ - spec/odata4/service_registry_spec.rb
376
+ - spec/odata4/service_spec.rb
377
+ - spec/odata4/usage_example_spec.rb
378
+ - spec/spec_helper.rb
379
+ - spec/support/coverage.rb
380
+ - spec/support/vcr.rb