frodata 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) 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 +150 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +23 -0
  11. data/README.md +427 -0
  12. data/Rakefile +7 -0
  13. data/TODO.md +55 -0
  14. data/frodata.gemspec +34 -0
  15. data/lib/frodata.rb +36 -0
  16. data/lib/frodata/entity.rb +332 -0
  17. data/lib/frodata/entity_container.rb +75 -0
  18. data/lib/frodata/entity_set.rb +161 -0
  19. data/lib/frodata/errors.rb +68 -0
  20. data/lib/frodata/navigation_property.rb +29 -0
  21. data/lib/frodata/navigation_property/proxy.rb +80 -0
  22. data/lib/frodata/properties.rb +32 -0
  23. data/lib/frodata/properties/binary.rb +50 -0
  24. data/lib/frodata/properties/boolean.rb +37 -0
  25. data/lib/frodata/properties/collection.rb +50 -0
  26. data/lib/frodata/properties/complex.rb +114 -0
  27. data/lib/frodata/properties/date.rb +27 -0
  28. data/lib/frodata/properties/date_time.rb +83 -0
  29. data/lib/frodata/properties/date_time_offset.rb +17 -0
  30. data/lib/frodata/properties/decimal.rb +50 -0
  31. data/lib/frodata/properties/enum.rb +62 -0
  32. data/lib/frodata/properties/float.rb +67 -0
  33. data/lib/frodata/properties/geography.rb +13 -0
  34. data/lib/frodata/properties/geography/base.rb +162 -0
  35. data/lib/frodata/properties/geography/line_string.rb +33 -0
  36. data/lib/frodata/properties/geography/point.rb +31 -0
  37. data/lib/frodata/properties/geography/polygon.rb +38 -0
  38. data/lib/frodata/properties/guid.rb +17 -0
  39. data/lib/frodata/properties/integer.rb +107 -0
  40. data/lib/frodata/properties/number.rb +14 -0
  41. data/lib/frodata/properties/string.rb +72 -0
  42. data/lib/frodata/properties/time.rb +40 -0
  43. data/lib/frodata/properties/time_of_day.rb +27 -0
  44. data/lib/frodata/property.rb +139 -0
  45. data/lib/frodata/property_registry.rb +41 -0
  46. data/lib/frodata/query.rb +233 -0
  47. data/lib/frodata/query/criteria.rb +92 -0
  48. data/lib/frodata/query/criteria/comparison_operators.rb +49 -0
  49. data/lib/frodata/query/criteria/date_functions.rb +61 -0
  50. data/lib/frodata/query/criteria/geography_functions.rb +21 -0
  51. data/lib/frodata/query/criteria/lambda_operators.rb +27 -0
  52. data/lib/frodata/query/criteria/string_functions.rb +40 -0
  53. data/lib/frodata/query/in_batches.rb +58 -0
  54. data/lib/frodata/railtie.rb +19 -0
  55. data/lib/frodata/schema.rb +155 -0
  56. data/lib/frodata/schema/complex_type.rb +79 -0
  57. data/lib/frodata/schema/enum_type.rb +95 -0
  58. data/lib/frodata/service.rb +254 -0
  59. data/lib/frodata/service/request.rb +85 -0
  60. data/lib/frodata/service/response.rb +162 -0
  61. data/lib/frodata/service/response/atom.rb +40 -0
  62. data/lib/frodata/service/response/json.rb +41 -0
  63. data/lib/frodata/service/response/plain.rb +36 -0
  64. data/lib/frodata/service/response/xml.rb +40 -0
  65. data/lib/frodata/service_registry.rb +52 -0
  66. data/lib/frodata/version.rb +3 -0
  67. data/spec/fixtures/files/entity_to_xml.xml +17 -0
  68. data/spec/fixtures/files/error.xml +5 -0
  69. data/spec/fixtures/files/metadata.xml +150 -0
  70. data/spec/fixtures/files/product_0.json +10 -0
  71. data/spec/fixtures/files/product_0.xml +28 -0
  72. data/spec/fixtures/files/products.json +106 -0
  73. data/spec/fixtures/files/products.xml +308 -0
  74. data/spec/fixtures/files/supplier_0.json +26 -0
  75. data/spec/fixtures/files/supplier_0.xml +32 -0
  76. data/spec/fixtures/vcr_cassettes/entity_set_specs.yml +1635 -0
  77. data/spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml +183 -0
  78. data/spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml +256 -0
  79. data/spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml +185 -0
  80. data/spec/fixtures/vcr_cassettes/entity_specs.yml +285 -0
  81. data/spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml +346 -0
  82. data/spec/fixtures/vcr_cassettes/query/result_specs.yml +189 -0
  83. data/spec/fixtures/vcr_cassettes/query_specs.yml +1060 -0
  84. data/spec/fixtures/vcr_cassettes/schema/complex_type_specs.yml +127 -0
  85. data/spec/fixtures/vcr_cassettes/service/request_specs.yml +193 -0
  86. data/spec/fixtures/vcr_cassettes/service_registry_specs.yml +129 -0
  87. data/spec/fixtures/vcr_cassettes/service_specs.yml +127 -0
  88. data/spec/fixtures/vcr_cassettes/usage_example_specs.yml +1330 -0
  89. data/spec/frodata/entity/shared_examples.rb +82 -0
  90. data/spec/frodata/entity_container_spec.rb +38 -0
  91. data/spec/frodata/entity_set_spec.rb +168 -0
  92. data/spec/frodata/entity_spec.rb +151 -0
  93. data/spec/frodata/errors_spec.rb +48 -0
  94. data/spec/frodata/navigation_property/proxy_spec.rb +44 -0
  95. data/spec/frodata/navigation_property_spec.rb +55 -0
  96. data/spec/frodata/properties/binary_spec.rb +50 -0
  97. data/spec/frodata/properties/boolean_spec.rb +72 -0
  98. data/spec/frodata/properties/collection_spec.rb +44 -0
  99. data/spec/frodata/properties/date_spec.rb +23 -0
  100. data/spec/frodata/properties/date_time_offset_spec.rb +30 -0
  101. data/spec/frodata/properties/date_time_spec.rb +23 -0
  102. data/spec/frodata/properties/decimal_spec.rb +51 -0
  103. data/spec/frodata/properties/float_spec.rb +45 -0
  104. data/spec/frodata/properties/geography/line_string_spec.rb +33 -0
  105. data/spec/frodata/properties/geography/point_spec.rb +29 -0
  106. data/spec/frodata/properties/geography/polygon_spec.rb +55 -0
  107. data/spec/frodata/properties/geography/shared_examples.rb +72 -0
  108. data/spec/frodata/properties/guid_spec.rb +17 -0
  109. data/spec/frodata/properties/integer_spec.rb +58 -0
  110. data/spec/frodata/properties/string_spec.rb +46 -0
  111. data/spec/frodata/properties/time_of_day_spec.rb +23 -0
  112. data/spec/frodata/properties/time_spec.rb +15 -0
  113. data/spec/frodata/property_registry_spec.rb +16 -0
  114. data/spec/frodata/property_spec.rb +71 -0
  115. data/spec/frodata/query/criteria_spec.rb +229 -0
  116. data/spec/frodata/query_spec.rb +199 -0
  117. data/spec/frodata/schema/complex_type_spec.rb +96 -0
  118. data/spec/frodata/schema/enum_type_spec.rb +112 -0
  119. data/spec/frodata/schema_spec.rb +97 -0
  120. data/spec/frodata/service/request_spec.rb +49 -0
  121. data/spec/frodata/service/response_spec.rb +85 -0
  122. data/spec/frodata/service_registry_spec.rb +18 -0
  123. data/spec/frodata/service_spec.rb +191 -0
  124. data/spec/frodata/usage_example_spec.rb +188 -0
  125. data/spec/spec_helper.rb +32 -0
  126. data/spec/support/coverage.rb +2 -0
  127. data/spec/support/vcr.rb +9 -0
  128. metadata +401 -0
@@ -0,0 +1,188 @@
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) { FrOData::Service.new(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(%w[
18
+ ODataDemo.Product
19
+ ODataDemo.FeaturedProduct
20
+ ODataDemo.ProductDetail
21
+ ODataDemo.Category
22
+ ODataDemo.Supplier
23
+ ODataDemo.Person
24
+ ODataDemo.Customer
25
+ ODataDemo.Employee
26
+ ODataDemo.PersonDetail
27
+ ODataDemo.Advertisement
28
+ ])
29
+ end
30
+
31
+ it 'lists entity sets' do
32
+ expect(service.entity_sets).to eq({
33
+ "Products" => "ODataDemo.Product",
34
+ "ProductDetails" => "ODataDemo.ProductDetail",
35
+ "Categories" => "ODataDemo.Category",
36
+ "Suppliers" => "ODataDemo.Supplier",
37
+ "Persons" => "ODataDemo.Person",
38
+ "PersonDetails" => "ODataDemo.PersonDetail",
39
+ "Advertisements" => "ODataDemo.Advertisement"
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_set_name, entity_name|
47
+ entity_set = service[entity_set_name]
48
+
49
+ expect(entity_set).to be_a(FrOData::EntitySet)
50
+ expect(entity_set.name).to eq(entity_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(FrOData::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(FrOData::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(FrOData::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(FrOData::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(FrOData::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(FrOData::Entity)
147
+ expect(entity.type).to eq('ODataDemo.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
+
177
+ describe 'headers and authorization' do
178
+ it 'using HTTP Basic auth' do
179
+ service.connection.basic_auth('username', 'password')
180
+ expect(service['Products'][2]).to be_a(FrOData::Entity)
181
+ end
182
+
183
+ it 'using token auth' do
184
+ service.connection.authorization(:Bearer, 'token')
185
+ expect(service['Products'][3]).to be_a(FrOData::Entity)
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,32 @@
1
+ require 'frodata'
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
+ FrOData::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 :faraday
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,401 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: frodata
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
+ platform: ruby
6
+ authors:
7
+ - Christoph Wagner
8
+ - James Thompson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-05-16 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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
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'
154
+ - !ruby/object:Gem::Dependency
155
+ name: faraday
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '0.15'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '0.15'
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'
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'
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
+ - frodata.gemspec
203
+ - lib/frodata.rb
204
+ - lib/frodata/entity.rb
205
+ - lib/frodata/entity_container.rb
206
+ - lib/frodata/entity_set.rb
207
+ - lib/frodata/errors.rb
208
+ - lib/frodata/navigation_property.rb
209
+ - lib/frodata/navigation_property/proxy.rb
210
+ - lib/frodata/properties.rb
211
+ - lib/frodata/properties/binary.rb
212
+ - lib/frodata/properties/boolean.rb
213
+ - lib/frodata/properties/collection.rb
214
+ - lib/frodata/properties/complex.rb
215
+ - lib/frodata/properties/date.rb
216
+ - lib/frodata/properties/date_time.rb
217
+ - lib/frodata/properties/date_time_offset.rb
218
+ - lib/frodata/properties/decimal.rb
219
+ - lib/frodata/properties/enum.rb
220
+ - lib/frodata/properties/float.rb
221
+ - lib/frodata/properties/geography.rb
222
+ - lib/frodata/properties/geography/base.rb
223
+ - lib/frodata/properties/geography/line_string.rb
224
+ - lib/frodata/properties/geography/point.rb
225
+ - lib/frodata/properties/geography/polygon.rb
226
+ - lib/frodata/properties/guid.rb
227
+ - lib/frodata/properties/integer.rb
228
+ - lib/frodata/properties/number.rb
229
+ - lib/frodata/properties/string.rb
230
+ - lib/frodata/properties/time.rb
231
+ - lib/frodata/properties/time_of_day.rb
232
+ - lib/frodata/property.rb
233
+ - lib/frodata/property_registry.rb
234
+ - lib/frodata/query.rb
235
+ - lib/frodata/query/criteria.rb
236
+ - lib/frodata/query/criteria/comparison_operators.rb
237
+ - lib/frodata/query/criteria/date_functions.rb
238
+ - lib/frodata/query/criteria/geography_functions.rb
239
+ - lib/frodata/query/criteria/lambda_operators.rb
240
+ - lib/frodata/query/criteria/string_functions.rb
241
+ - lib/frodata/query/in_batches.rb
242
+ - lib/frodata/railtie.rb
243
+ - lib/frodata/schema.rb
244
+ - lib/frodata/schema/complex_type.rb
245
+ - lib/frodata/schema/enum_type.rb
246
+ - lib/frodata/service.rb
247
+ - lib/frodata/service/request.rb
248
+ - lib/frodata/service/response.rb
249
+ - lib/frodata/service/response/atom.rb
250
+ - lib/frodata/service/response/json.rb
251
+ - lib/frodata/service/response/plain.rb
252
+ - lib/frodata/service/response/xml.rb
253
+ - lib/frodata/service_registry.rb
254
+ - lib/frodata/version.rb
255
+ - spec/fixtures/files/entity_to_xml.xml
256
+ - spec/fixtures/files/error.xml
257
+ - spec/fixtures/files/metadata.xml
258
+ - spec/fixtures/files/product_0.json
259
+ - spec/fixtures/files/product_0.xml
260
+ - spec/fixtures/files/products.json
261
+ - spec/fixtures/files/products.xml
262
+ - spec/fixtures/files/supplier_0.json
263
+ - spec/fixtures/files/supplier_0.xml
264
+ - spec/fixtures/vcr_cassettes/entity_set_specs.yml
265
+ - spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml
266
+ - spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml
267
+ - spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml
268
+ - spec/fixtures/vcr_cassettes/entity_specs.yml
269
+ - spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
270
+ - spec/fixtures/vcr_cassettes/query/result_specs.yml
271
+ - spec/fixtures/vcr_cassettes/query_specs.yml
272
+ - spec/fixtures/vcr_cassettes/schema/complex_type_specs.yml
273
+ - spec/fixtures/vcr_cassettes/service/request_specs.yml
274
+ - spec/fixtures/vcr_cassettes/service_registry_specs.yml
275
+ - spec/fixtures/vcr_cassettes/service_specs.yml
276
+ - spec/fixtures/vcr_cassettes/usage_example_specs.yml
277
+ - spec/frodata/entity/shared_examples.rb
278
+ - spec/frodata/entity_container_spec.rb
279
+ - spec/frodata/entity_set_spec.rb
280
+ - spec/frodata/entity_spec.rb
281
+ - spec/frodata/errors_spec.rb
282
+ - spec/frodata/navigation_property/proxy_spec.rb
283
+ - spec/frodata/navigation_property_spec.rb
284
+ - spec/frodata/properties/binary_spec.rb
285
+ - spec/frodata/properties/boolean_spec.rb
286
+ - spec/frodata/properties/collection_spec.rb
287
+ - spec/frodata/properties/date_spec.rb
288
+ - spec/frodata/properties/date_time_offset_spec.rb
289
+ - spec/frodata/properties/date_time_spec.rb
290
+ - spec/frodata/properties/decimal_spec.rb
291
+ - spec/frodata/properties/float_spec.rb
292
+ - spec/frodata/properties/geography/line_string_spec.rb
293
+ - spec/frodata/properties/geography/point_spec.rb
294
+ - spec/frodata/properties/geography/polygon_spec.rb
295
+ - spec/frodata/properties/geography/shared_examples.rb
296
+ - spec/frodata/properties/guid_spec.rb
297
+ - spec/frodata/properties/integer_spec.rb
298
+ - spec/frodata/properties/string_spec.rb
299
+ - spec/frodata/properties/time_of_day_spec.rb
300
+ - spec/frodata/properties/time_spec.rb
301
+ - spec/frodata/property_registry_spec.rb
302
+ - spec/frodata/property_spec.rb
303
+ - spec/frodata/query/criteria_spec.rb
304
+ - spec/frodata/query_spec.rb
305
+ - spec/frodata/schema/complex_type_spec.rb
306
+ - spec/frodata/schema/enum_type_spec.rb
307
+ - spec/frodata/schema_spec.rb
308
+ - spec/frodata/service/request_spec.rb
309
+ - spec/frodata/service/response_spec.rb
310
+ - spec/frodata/service_registry_spec.rb
311
+ - spec/frodata/service_spec.rb
312
+ - spec/frodata/usage_example_spec.rb
313
+ - spec/spec_helper.rb
314
+ - spec/support/coverage.rb
315
+ - spec/support/vcr.rb
316
+ homepage: https://github.com/wrstudios/frodata
317
+ licenses:
318
+ - MIT
319
+ metadata: {}
320
+ post_install_message:
321
+ rdoc_options: []
322
+ require_paths:
323
+ - lib
324
+ required_ruby_version: !ruby/object:Gem::Requirement
325
+ requirements:
326
+ - - ">="
327
+ - !ruby/object:Gem::Version
328
+ version: '0'
329
+ required_rubygems_version: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - ">="
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ requirements: []
335
+ rubyforge_project:
336
+ rubygems_version: 2.6.14
337
+ signing_key:
338
+ specification_version: 4
339
+ summary: Simple OData library
340
+ test_files:
341
+ - spec/fixtures/files/entity_to_xml.xml
342
+ - spec/fixtures/files/error.xml
343
+ - spec/fixtures/files/metadata.xml
344
+ - spec/fixtures/files/product_0.json
345
+ - spec/fixtures/files/product_0.xml
346
+ - spec/fixtures/files/products.json
347
+ - spec/fixtures/files/products.xml
348
+ - spec/fixtures/files/supplier_0.json
349
+ - spec/fixtures/files/supplier_0.xml
350
+ - spec/fixtures/vcr_cassettes/entity_set_specs.yml
351
+ - spec/fixtures/vcr_cassettes/entity_set_specs/bad_entry.yml
352
+ - spec/fixtures/vcr_cassettes/entity_set_specs/existing_entry.yml
353
+ - spec/fixtures/vcr_cassettes/entity_set_specs/new_entry.yml
354
+ - spec/fixtures/vcr_cassettes/entity_specs.yml
355
+ - spec/fixtures/vcr_cassettes/navigation_property_proxy_specs.yml
356
+ - spec/fixtures/vcr_cassettes/query/result_specs.yml
357
+ - spec/fixtures/vcr_cassettes/query_specs.yml
358
+ - spec/fixtures/vcr_cassettes/schema/complex_type_specs.yml
359
+ - spec/fixtures/vcr_cassettes/service/request_specs.yml
360
+ - spec/fixtures/vcr_cassettes/service_registry_specs.yml
361
+ - spec/fixtures/vcr_cassettes/service_specs.yml
362
+ - spec/fixtures/vcr_cassettes/usage_example_specs.yml
363
+ - spec/frodata/entity/shared_examples.rb
364
+ - spec/frodata/entity_container_spec.rb
365
+ - spec/frodata/entity_set_spec.rb
366
+ - spec/frodata/entity_spec.rb
367
+ - spec/frodata/errors_spec.rb
368
+ - spec/frodata/navigation_property/proxy_spec.rb
369
+ - spec/frodata/navigation_property_spec.rb
370
+ - spec/frodata/properties/binary_spec.rb
371
+ - spec/frodata/properties/boolean_spec.rb
372
+ - spec/frodata/properties/collection_spec.rb
373
+ - spec/frodata/properties/date_spec.rb
374
+ - spec/frodata/properties/date_time_offset_spec.rb
375
+ - spec/frodata/properties/date_time_spec.rb
376
+ - spec/frodata/properties/decimal_spec.rb
377
+ - spec/frodata/properties/float_spec.rb
378
+ - spec/frodata/properties/geography/line_string_spec.rb
379
+ - spec/frodata/properties/geography/point_spec.rb
380
+ - spec/frodata/properties/geography/polygon_spec.rb
381
+ - spec/frodata/properties/geography/shared_examples.rb
382
+ - spec/frodata/properties/guid_spec.rb
383
+ - spec/frodata/properties/integer_spec.rb
384
+ - spec/frodata/properties/string_spec.rb
385
+ - spec/frodata/properties/time_of_day_spec.rb
386
+ - spec/frodata/properties/time_spec.rb
387
+ - spec/frodata/property_registry_spec.rb
388
+ - spec/frodata/property_spec.rb
389
+ - spec/frodata/query/criteria_spec.rb
390
+ - spec/frodata/query_spec.rb
391
+ - spec/frodata/schema/complex_type_spec.rb
392
+ - spec/frodata/schema/enum_type_spec.rb
393
+ - spec/frodata/schema_spec.rb
394
+ - spec/frodata/service/request_spec.rb
395
+ - spec/frodata/service/response_spec.rb
396
+ - spec/frodata/service_registry_spec.rb
397
+ - spec/frodata/service_spec.rb
398
+ - spec/frodata/usage_example_spec.rb
399
+ - spec/spec_helper.rb
400
+ - spec/support/coverage.rb
401
+ - spec/support/vcr.rb