odata-model 0.5.19 → 0.6.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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/odata/model.rb +2 -0
- data/lib/odata/model/associations.rb +74 -0
- data/lib/odata/model/query_proxy.rb +3 -3
- data/lib/odata/model/version.rb +1 -1
- data/odata-model.gemspec +1 -1
- data/spec/example_models/odatademo_category.rb +6 -0
- data/spec/example_models/odatademo_product.rb +3 -0
- data/spec/example_models/odatademo_supplier.rb +6 -0
- data/spec/model/associations_spec.rb +20 -0
- data/spec/model/query_proxy_spec.rb +3 -3
- data/spec/spec_helper.rb +2 -0
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1c27d269a3d790289f1ddc47105ac90a2cc624a
|
4
|
+
data.tar.gz: e792cdd4714423a0547a55325240544d3de93131
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 684aa848b09892f94f7280dc8417f72f646ad4461c17232895e0302f49e3d96ab83873bdd4ce3642f523fd946910cde11f24abaeeb983f975797ccd331076155
|
7
|
+
data.tar.gz: 543ad9a2ef1ec7c142475eb96dc284d5db067a6efd4454ab5f2d8f98f281ca7afd6a1839bad2d159f1be9d907561f33b4660fd8050965e3e858a9755b4bf4825
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.6.0
|
4
|
+
|
5
|
+
* Updated to work with OData gem version 0.6.0
|
6
|
+
* Integrated support for OData gem's support for associations
|
7
|
+
|
8
|
+
## 0.5.x
|
9
|
+
|
10
|
+
* Lots of changes
|
11
|
+
|
3
12
|
## 0.4.1
|
4
13
|
|
5
14
|
* Added validation a property exists for an Entity when setting up its mapping.
|
data/lib/odata/model.rb
CHANGED
@@ -8,6 +8,7 @@ require 'odata/model/version'
|
|
8
8
|
require 'odata/model/active_model' if defined?(::ActiveModel)
|
9
9
|
require 'odata/model/configuration'
|
10
10
|
require 'odata/model/attributes'
|
11
|
+
require 'odata/model/associations'
|
11
12
|
require 'odata/model/persistence'
|
12
13
|
require 'odata/model/query'
|
13
14
|
require 'odata/model/query_proxy'
|
@@ -25,6 +26,7 @@ module OData
|
|
25
26
|
include OData::Model::ActiveModel if defined?(::ActiveModel)
|
26
27
|
include OData::Model::Configuration
|
27
28
|
include OData::Model::Attributes
|
29
|
+
include OData::Model::Associations
|
28
30
|
include OData::Model::Persistence
|
29
31
|
include OData::Model::Query
|
30
32
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module OData
|
2
|
+
module Model
|
3
|
+
# The OData::Model::Associations module encapsulates all the functionality
|
4
|
+
# specifically needed for OData::Model to support the mapping of
|
5
|
+
# OData::Entity associations in a convenient way.
|
6
|
+
module Associations
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
# ...
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def associated_with(association_name, options = {})
|
15
|
+
validate_association(association_name)
|
16
|
+
register_association(association_name, options)
|
17
|
+
create_association_accessors(association_name)
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the configuration for working with OData associations.
|
22
|
+
# @return [Hash]
|
23
|
+
# @api private
|
24
|
+
def odata_associations
|
25
|
+
if class_variable_defined?(:@@odata_associations)
|
26
|
+
class_variable_get(:@@odata_associations)
|
27
|
+
else
|
28
|
+
class_variable_set(:@@odata_associations, {})
|
29
|
+
class_variable_get(:@@odata_associations)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate_association(association_name)
|
34
|
+
raise ArgumentError unless odata_service.navigation_properties[odata_entity_set.type][association_name]
|
35
|
+
end
|
36
|
+
|
37
|
+
def register_association(association_name, options)
|
38
|
+
odata_associations[association_name] = options
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_association_accessors(association_name)
|
42
|
+
accessor_name = odata_associations[association_name][:as] ||
|
43
|
+
association_name.downcase.to_sym
|
44
|
+
|
45
|
+
class_eval do
|
46
|
+
define_method(accessor_name) do
|
47
|
+
association_entities = odata_entity.associations[association_name]
|
48
|
+
if association_entities.is_a?(Enumerable)
|
49
|
+
association_entities.collect do |entity|
|
50
|
+
model = self.class.odata_associations[association_name][:class_name].new
|
51
|
+
model.instance_variable_set(:@odata_entity, entity)
|
52
|
+
model
|
53
|
+
end
|
54
|
+
else
|
55
|
+
return nil if association_entities.nil?
|
56
|
+
model = self.class.odata_associations[association_name][:class_name].new
|
57
|
+
model.instance_variable_set(:@odata_entity, association_entities)
|
58
|
+
model
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
#define_method("#{attribute_name}=") do |value|
|
63
|
+
# unless entity[property_map[attribute_name]] == value
|
64
|
+
# send("#{attribute_name}_will_change!") if defined?(::ActiveModel)
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# odata_entity[property_map[attribute_name]] = value
|
68
|
+
#end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -42,10 +42,10 @@ module OData
|
|
42
42
|
# @return [self]
|
43
43
|
def is(arguments)
|
44
44
|
raise ArgumentError 'can only accept Hash argument' unless arguments.is_a?(Hash)
|
45
|
-
|
45
|
+
property = last_criteria.property
|
46
46
|
arguments.each do |operator, value|
|
47
|
-
@last_criteria = query[
|
48
|
-
query.where(
|
47
|
+
@last_criteria = query[property.name].send(operator.to_sym, value)
|
48
|
+
query.where(last_criteria)
|
49
49
|
end
|
50
50
|
self
|
51
51
|
end
|
data/lib/odata/model/version.rb
CHANGED
data/odata-model.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rspec', '~> 3.0.0'
|
26
26
|
spec.add_development_dependency 'activemodel', '>= 3.0.0'
|
27
27
|
|
28
|
-
spec.add_dependency 'odata', '~> 0.
|
28
|
+
spec.add_dependency 'odata', '~> 0.6.0'
|
29
29
|
spec.add_dependency 'activesupport', '>= 3.0.0'
|
30
30
|
|
31
31
|
spec.add_dependency 'slop', '~> 3.6.0'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OData::Model do
|
4
|
+
let(:subject) { Product[0] }
|
5
|
+
|
6
|
+
describe 'associated_with' do
|
7
|
+
context 'for zero to one associations' do
|
8
|
+
it { expect(subject.supplier).to be_a(Supplier) }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'for one association' do
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'for many associations' do
|
16
|
+
it { expect(subject.categories).to be_a(Enumerable) }
|
17
|
+
it { expect(subject.categories.first).to be_a(Category) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -20,7 +20,7 @@ describe OData::Model::QueryProxy do
|
|
20
20
|
|
21
21
|
it 'sets up last criteria properly' do
|
22
22
|
expect(subject.last_criteria).to be_a(OData::Query::Criteria)
|
23
|
-
expect(subject.last_criteria.property).to eq(Product.property_map[:name])
|
23
|
+
expect(subject.last_criteria.property.name).to eq(Product.property_map[:name])
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -31,7 +31,7 @@ describe OData::Model::QueryProxy do
|
|
31
31
|
|
32
32
|
it 'sets up last criteria properly' do
|
33
33
|
expect(subject.last_criteria).to be_a(OData::Query::Criteria)
|
34
|
-
expect(subject.last_criteria.property).to eq(Product.property_map[:name])
|
34
|
+
#expect(subject.last_criteria.property.name).to eq(Product.property_map[:name])
|
35
35
|
expect(subject.last_criteria.operator).to eq(:eq)
|
36
36
|
expect(subject.last_criteria.value).to eq('Bread')
|
37
37
|
end
|
@@ -48,7 +48,7 @@ describe OData::Model::QueryProxy do
|
|
48
48
|
|
49
49
|
it 'sets up last criteria properly' do
|
50
50
|
expect(subject.last_criteria).to be_a(OData::Query::Criteria)
|
51
|
-
expect(subject.last_criteria.property).to eq(Product.property_map[:rating])
|
51
|
+
#expect(subject.last_criteria.property.name).to eq(Product.property_map[:rating])
|
52
52
|
expect(subject.last_criteria.operator).to eq(operator.to_sym)
|
53
53
|
expect(subject.last_criteria.value).to eq(4)
|
54
54
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,8 @@ I18n.enforce_available_locales = false
|
|
19
19
|
OData::Service.open('http://services.odata.org/OData/OData.svc', name: 'ODataDemo')
|
20
20
|
|
21
21
|
require 'example_models/bare_model'
|
22
|
+
require 'example_models/odatademo_category'
|
23
|
+
require 'example_models/odatademo_supplier'
|
22
24
|
require 'example_models/odatademo_product'
|
23
25
|
require 'example_models/odatademo_limited_product'
|
24
26
|
require 'example_models/odatademo_person'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odata-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.6.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.6.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: activesupport
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- bin/odata-model
|
157
157
|
- lib/odata/model.rb
|
158
158
|
- lib/odata/model/active_model.rb
|
159
|
+
- lib/odata/model/associations.rb
|
159
160
|
- lib/odata/model/attributes.rb
|
160
161
|
- lib/odata/model/cli/generator_configuration.rb
|
161
162
|
- lib/odata/model/cli/model_template.rb
|
@@ -167,10 +168,13 @@ files:
|
|
167
168
|
- lib/odata/model/version.rb
|
168
169
|
- odata-model.gemspec
|
169
170
|
- spec/example_models/bare_model.rb
|
171
|
+
- spec/example_models/odatademo_category.rb
|
170
172
|
- spec/example_models/odatademo_limited_product.rb
|
171
173
|
- spec/example_models/odatademo_person.rb
|
172
174
|
- spec/example_models/odatademo_product.rb
|
175
|
+
- spec/example_models/odatademo_supplier.rb
|
173
176
|
- spec/model/active_model_lint_spec.rb
|
177
|
+
- spec/model/associations_spec.rb
|
174
178
|
- spec/model/entity_set_identification_spec.rb
|
175
179
|
- spec/model/property_defaults_spec.rb
|
176
180
|
- spec/model/query_interface_spec.rb
|
@@ -203,10 +207,13 @@ specification_version: 4
|
|
203
207
|
summary: A basic mapping layer for the OData gem
|
204
208
|
test_files:
|
205
209
|
- spec/example_models/bare_model.rb
|
210
|
+
- spec/example_models/odatademo_category.rb
|
206
211
|
- spec/example_models/odatademo_limited_product.rb
|
207
212
|
- spec/example_models/odatademo_person.rb
|
208
213
|
- spec/example_models/odatademo_product.rb
|
214
|
+
- spec/example_models/odatademo_supplier.rb
|
209
215
|
- spec/model/active_model_lint_spec.rb
|
216
|
+
- spec/model/associations_spec.rb
|
210
217
|
- spec/model/entity_set_identification_spec.rb
|
211
218
|
- spec/model/property_defaults_spec.rb
|
212
219
|
- spec/model/query_interface_spec.rb
|