odata 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5222186af73a13b4382caef7005ce6e559de9ca7
4
- data.tar.gz: d64b6b28802f4dce330111603ee2f79690e1c77f
3
+ metadata.gz: d911a37f1ddabb81a5436e902be0eb9d9d04e1e8
4
+ data.tar.gz: 5d824862ef9be51ebf937d6504e08d6a778581a9
5
5
  SHA512:
6
- metadata.gz: c767f57d37c80d68bd9c61d9186d1e3660cd62e0aeea4325b3c731b43e1d0c223fed8f03365012b3fa567355af8d55ff5ba41ac4fbc60f7d3e3aa47e7d616155
7
- data.tar.gz: d868c25cc93edde95dfe2a6989b8c081983ef94f1da33a2bedd07829413d4a99c9a2ffcab3617558e79a879959563e0c3ec93f06744f4da6a76ecb0e18015513
6
+ metadata.gz: 86c8c16380794a64e35e0395b306c5d07d1debe05e4f5c227d934aa62720f8945f04f0282e4d0c40ef0b69c3279850336ede3967d9d3d9aafd8fd118da795026
7
+ data.tar.gz: b72b3b5176ddbc539477a549d185a63a44aa872beb8ede934b3c3f8dc174560b6c2b856cb0d7d0d090f152ab6a47a6661a638acc2704b5538010c37b31e5cb9d
data/.travis.yml ADDED
@@ -0,0 +1,51 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ - 2.1.1
7
+ - 2.1.2
8
+ - jruby
9
+ jdk:
10
+ - openjdk6
11
+ - openjdk7
12
+ - oraclejdk7
13
+ - oraclejdk8
14
+ branches:
15
+ only:
16
+ - master
17
+ matrix:
18
+ exclude:
19
+ - rvm: 1.9.3
20
+ jdk: openjdk6
21
+ - rvm: 1.9.3
22
+ jdk: oraclejdk7
23
+ - rvm: 1.9.3
24
+ jdk: oraclejdk8
25
+ - rvm: 2.0.0
26
+ jdk: openjdk6
27
+ - rvm: 2.0.0
28
+ jdk: oraclejdk7
29
+ - rvm: 2.0.0
30
+ jdk: oraclejdk8
31
+ - rvm: 2.1.0
32
+ jdk: openjdk6
33
+ - rvm: 2.1.0
34
+ jdk: oraclejdk7
35
+ - rvm: 2.1.0
36
+ jdk: oraclejdk8
37
+ - rvm: 2.1.1
38
+ jdk: openjdk6
39
+ - rvm: 2.1.1
40
+ jdk: oraclejdk7
41
+ - rvm: 2.1.1
42
+ jdk: oraclejdk8
43
+ - rvm: 2.1.2
44
+ jdk: openjdk6
45
+ - rvm: 2.1.2
46
+ jdk: oraclejdk7
47
+ - rvm: 2.1.2
48
+ jdk: oraclejdk8
49
+ addons:
50
+ code_climate:
51
+ repo_token: 323644d852f6ba54213f25446d6f4276dbec0adb74fefce770b083cd3e83ea1e
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # OData
2
2
 
3
+ [![Build Status](https://travis-ci.org/plainprogrammer/odata.svg?branch=master)](https://travis-ci.org/plainprogrammer/odata)
4
+ [![Code Climate](https://codeclimate.com/github/plainprogrammer/odata.png)](https://codeclimate.com/github/plainprogrammer/odata)
5
+ [![Coverage](https://codeclimate.com/github/plainprogrammer/odata/coverage.png)](https://codeclimate.com/github/plainprogrammer/odata)
6
+
3
7
  The OData gem provides a simple wrapper around the OData API protocol. It has
4
8
  the ability to automatically inspect compliant APIs and expose the relevant
5
9
  Ruby objects dynamically. It also provides a set of code generation tools for
data/lib/odata.rb CHANGED
@@ -3,6 +3,7 @@ require 'open-uri'
3
3
 
4
4
  require 'odata/version'
5
5
  require 'odata/service'
6
+ require 'odata/service_registry'
6
7
 
7
8
  require 'odata/railtie' if defined?(Rails)
8
9
 
data/lib/odata/service.rb CHANGED
@@ -4,6 +4,7 @@ module OData
4
4
 
5
5
  def initialize(service_url)
6
6
  @service_url = service_url
7
+ OData::ServiceRegistry.add(self)
7
8
  self
8
9
  end
9
10
 
@@ -23,6 +24,10 @@ module OData
23
24
  @namespace ||= metadata.xpath('//Schema').first.attributes['Namespace'].value
24
25
  end
25
26
 
27
+ def inspect
28
+ "#<#{self.class.name}:#{self.object_id} namespace='#{self.namespace}' service_url='#{self.service_url}'>"
29
+ end
30
+
26
31
  private
27
32
 
28
33
  def metadata
@@ -0,0 +1,42 @@
1
+ require 'singleton'
2
+
3
+ module OData
4
+ class ServiceRegistry
5
+ include Singleton
6
+
7
+ def add(service)
8
+ initialize_instance_variables
9
+ @services << service if service.is_a?(OData::Service) && !@services.include?(service)
10
+ @services_by_namespace[service.namespace] = @services.find_index(service)
11
+ @services_by_url[service.service_url] = @services.find_index(service)
12
+ end
13
+
14
+ def [](lookup_key)
15
+ initialize_instance_variables
16
+ index = @services_by_namespace[lookup_key] || @services_by_url[lookup_key]
17
+ index.nil? ? nil : @services[index]
18
+ end
19
+
20
+ def self.add(service)
21
+ OData::ServiceRegistry.instance.add(service)
22
+ end
23
+
24
+ def self.[](lookup_key)
25
+ OData::ServiceRegistry.instance[lookup_key]
26
+ end
27
+
28
+ private
29
+
30
+ def initialize_instance_variables
31
+ @services ||= []
32
+ @services_by_namespace ||= {}
33
+ @services_by_url ||= {}
34
+ end
35
+
36
+ def flush
37
+ @services = []
38
+ @services_by_namespace = {}
39
+ @services_by_url = {}
40
+ end
41
+ end
42
+ end
data/lib/odata/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OData
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
data/odata.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'bundler', '~> 1.6'
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'simplecov', '~> 0.8.2'
24
+ spec.add_development_dependency 'codeclimate-test-reporter'
24
25
  spec.add_development_dependency 'rspec', '~> 3.0.0'
25
26
  spec.add_development_dependency 'webmock', '~> 1.18.0'
26
27
 
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::ServiceRegistry do
4
+ let(:subject) { OData::ServiceRegistry }
5
+ let(:sample_service) { OData::Service.open('http://services.odata.org/OData/OData.svc') }
6
+
7
+ # We're calling this as a private method because there should not be any
8
+ # reasons to have to flush the service registry except in testing.
9
+ after :each do
10
+ OData::ServiceRegistry.instance.send(:flush)
11
+ end
12
+
13
+ it { expect(subject).to respond_to(:add) }
14
+ it { expect(subject).to respond_to(:[]) }
15
+
16
+ describe '#add' do
17
+ before :each do
18
+ subject.add(sample_service)
19
+ end
20
+
21
+ it { expect(subject[sample_service.namespace]).to eq(sample_service) }
22
+ it { expect(subject[sample_service.service_url]).to eq(sample_service) }
23
+ end
24
+ end
@@ -5,6 +5,12 @@ describe OData::Service do
5
5
  let(:entity_types) { %w{Product FeaturedProduct ProductDetail Category Supplier Person Customer Employee PersonDetail Advertisement} }
6
6
  let(:complex_types) { %w{Address} }
7
7
 
8
+ # We're calling this as a private method because there should not be any
9
+ # reasons to have to flush the service registry except in testing.
10
+ after :each do
11
+ OData::ServiceRegistry.instance.send(:flush)
12
+ end
13
+
8
14
  describe 'class methods' do
9
15
  it { expect(OData::Service).to respond_to(:open) }
10
16
  end
@@ -33,4 +39,14 @@ describe OData::Service do
33
39
  describe '#namespace' do
34
40
  it { expect(subject.namespace).to eq('ODataDemo') }
35
41
  end
42
+
43
+ it 'adds itself to OData::ServiceRegistry on creation' do
44
+ expect(OData::ServiceRegistry['ODataDemo']).to be_nil
45
+ expect(OData::ServiceRegistry['http://services.odata.org/OData/OData.svc']).to be_nil
46
+
47
+ service = OData::Service.open('http://services.odata.org/OData/OData.svc')
48
+
49
+ expect(OData::ServiceRegistry['ODataDemo']).to eq(service)
50
+ expect(OData::ServiceRegistry['http://services.odata.org/OData/OData.svc']).to eq(service)
51
+ end
36
52
  end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,17 @@
1
- require 'simplecov'
2
- SimpleCov.start do
3
- add_filter '/spec/'
1
+ if ENV['CI']
2
+ require 'codeclimate-test-reporter'
3
+ CodeClimate::TestReporter.start
4
+ else
5
+ require 'simplecov'
6
+ SimpleCov.start do
7
+ add_filter '/spec/'
8
+ end
4
9
  end
5
10
 
6
11
  require 'odata'
7
12
 
8
13
  require 'webmock/rspec'
9
- WebMock.disable_net_connect!(allow_localhost: true)
14
+ WebMock.disable_net_connect!(allow_localhost: true, allow: 'codeclimate.com')
10
15
 
11
16
  RSpec.configure do |config|
12
17
  if config.files_to_run.one?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.8.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: codeclimate-test-reporter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +117,7 @@ extra_rdoc_files: []
103
117
  files:
104
118
  - ".gitignore"
105
119
  - ".rspec"
120
+ - ".travis.yml"
106
121
  - Gemfile
107
122
  - LICENSE.txt
108
123
  - README.md
@@ -110,9 +125,11 @@ files:
110
125
  - lib/odata.rb
111
126
  - lib/odata/railtie.rb
112
127
  - lib/odata/service.rb
128
+ - lib/odata/service_registry.rb
113
129
  - lib/odata/version.rb
114
130
  - odata.gemspec
115
131
  - spec/fixtures/sample_service/metadata.xml
132
+ - spec/odata/service_registry_spec.rb
116
133
  - spec/odata/service_spec.rb
117
134
  - spec/spec_helper.rb
118
135
  homepage: https://github.com/plainprogrammer/odata
@@ -141,5 +158,6 @@ specification_version: 4
141
158
  summary: Simple OData library
142
159
  test_files:
143
160
  - spec/fixtures/sample_service/metadata.xml
161
+ - spec/odata/service_registry_spec.rb
144
162
  - spec/odata/service_spec.rb
145
163
  - spec/spec_helper.rb