reuters 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +23 -0
- data/.rubocop.enabled.yml +23 -0
- data/.rubocop.yml +15 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +28 -0
- data/CONTRIBUTING.md +37 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +209 -0
- data/Rakefile +5 -0
- data/lib/reuters.rb +98 -0
- data/lib/reuters/builder.rb +117 -0
- data/lib/reuters/client.rb +12 -0
- data/lib/reuters/client/base.rb +132 -0
- data/lib/reuters/client/fundamentals.rb +20 -0
- data/lib/reuters/client/search.rb +19 -0
- data/lib/reuters/client/search/base.rb +26 -0
- data/lib/reuters/client/search/equity.rb +64 -0
- data/lib/reuters/client/token.rb +101 -0
- data/lib/reuters/credentials.rb +79 -0
- data/lib/reuters/namespaces.rb +25 -0
- data/lib/reuters/namespaces/base.rb +47 -0
- data/lib/reuters/namespaces/common.rb +30 -0
- data/lib/reuters/namespaces/fundamentals.rb +31 -0
- data/lib/reuters/namespaces/search.rb +48 -0
- data/lib/reuters/namespaces/search/equity.rb +32 -0
- data/lib/reuters/namespaces/token.rb +30 -0
- data/lib/reuters/response.rb +32 -0
- data/lib/reuters/version.rb +6 -0
- data/lib/reuters/wsdls.rb +25 -0
- data/lib/reuters/wsdls/base.rb +44 -0
- data/lib/reuters/wsdls/fundamentals.rb +21 -0
- data/lib/reuters/wsdls/search.rb +13 -0
- data/lib/reuters/wsdls/search/equity.rb +25 -0
- data/lib/reuters/wsdls/token.rb +22 -0
- data/reuters.gemspec +41 -0
- data/spec/fixtures/responses/token.xml +11 -0
- data/spec/reuters/builder_spec.rb +189 -0
- data/spec/reuters/client/fundamentals_spec.rb +11 -0
- data/spec/reuters/client/search/equity_spec.rb +46 -0
- data/spec/reuters/client/token_spec.rb +91 -0
- data/spec/reuters/client_spec.rb +0 -0
- data/spec/reuters/credentials_spec.rb +68 -0
- data/spec/reuters/namespaces/common_spec.rb +5 -0
- data/spec/reuters/namespaces/fundamentals_spec.rb +5 -0
- data/spec/reuters/namespaces/search/equity_spec.rb +5 -0
- data/spec/reuters/namespaces/search_spec.rb +31 -0
- data/spec/reuters/namespaces/token_spec.rb +5 -0
- data/spec/reuters/namespaces_spec.rb +31 -0
- data/spec/reuters/response_spec.rb +54 -0
- data/spec/reuters/version_spec.rb +9 -0
- data/spec/reuters/wsdls/fundamentals_spec.rb +5 -0
- data/spec/reuters/wsdls/search/equity_spec.rb +5 -0
- data/spec/reuters/wsdls/token_spec.rb +5 -0
- data/spec/reuters/wsdls_spec.rb +31 -0
- data/spec/reuters_spec.rb +10 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/client/search_shared.rb +5 -0
- data/spec/support/client_shared.rb +70 -0
- data/spec/support/configurable_shared.rb +9 -0
- data/spec/support/namespaces_actions_shared.rb +36 -0
- data/spec/support/namespaces_shared.rb +42 -0
- data/spec/support/wsdls_actions_shared.rb +36 -0
- data/spec/support/wsdls_shared.rb +53 -0
- metadata +333 -0
File without changes
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reuters::Credentials do
|
4
|
+
|
5
|
+
it { should respond_to(:username) }
|
6
|
+
it { should respond_to(:username=) }
|
7
|
+
it { should respond_to(:password) }
|
8
|
+
it { should respond_to(:password=) }
|
9
|
+
it { should respond_to(:app_id) }
|
10
|
+
it { should respond_to(:app_id=) }
|
11
|
+
|
12
|
+
it { should respond_to(:details) }
|
13
|
+
|
14
|
+
it_behaves_like "a configurable class"
|
15
|
+
|
16
|
+
describe "when credentials are set" do
|
17
|
+
|
18
|
+
let(:test_username) { "david" }
|
19
|
+
let(:test_password) { "1234" }
|
20
|
+
let(:test_app_id) { "123" }
|
21
|
+
|
22
|
+
before do
|
23
|
+
subject.configure do |c|
|
24
|
+
c.username = test_username
|
25
|
+
c.password = test_password
|
26
|
+
c.app_id = test_app_id
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return the correct username" do
|
31
|
+
expect(subject.username).to eq test_username
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return the correct password" do
|
35
|
+
expect(subject.password).to eq test_password
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return the correct app_id" do
|
39
|
+
expect(subject.app_id).to eq test_app_id
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "when #details is called" do
|
43
|
+
|
44
|
+
it "should yield a block once" do
|
45
|
+
expect { |b| subject.details &b }.to yield_control.once
|
46
|
+
end
|
47
|
+
|
48
|
+
it "shoud yield the correct arguments" do
|
49
|
+
expect { |b| subject.details &b }.to yield_with_args(test_username, test_password, test_app_id)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "return value of #to_h" do
|
57
|
+
|
58
|
+
it "should be a hash" do
|
59
|
+
expect(subject.to_h).to be_a(Hash)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should include credentials" do
|
63
|
+
expect(subject.to_h).to include(:username, :password, :app_id)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reuters::Namespaces::Search do
|
4
|
+
|
5
|
+
it { should respond_to(:define) }
|
6
|
+
|
7
|
+
it_behaves_like "a namespace module"
|
8
|
+
|
9
|
+
describe "return value of #define" do
|
10
|
+
|
11
|
+
it "should resolve the full endpoint" do
|
12
|
+
expect(subject.define(:test)).to include Reuters.namespaces_endpoint
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should camelize strings" do
|
16
|
+
expect(subject.define(:test_spec)).to include "TestSpec"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should camelize multiple strings" do
|
20
|
+
response = subject.define(:test, :hello)
|
21
|
+
expect(response).to include("Test", "Hello")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should separate multiple strings with underscores" do
|
25
|
+
response = subject.define(:test, :hello)
|
26
|
+
expect(response).to include("Test_Hello")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reuters::Namespaces do
|
4
|
+
|
5
|
+
it { should respond_to(:configure) }
|
6
|
+
|
7
|
+
describe "when a namespace is defined" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
module Reuters::Namespaces
|
11
|
+
module TestNamespace
|
12
|
+
include Base
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should enable configuration of a namespace" do
|
18
|
+
expect { |b| subject.configure("TestNamespace", &b) }.to yield_with_args Reuters::Namespaces::TestNamespace
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when a namespace is not defined" do
|
24
|
+
|
25
|
+
it "should raise an error" do
|
26
|
+
expect { |b| subject.configure("FuddyWsdl", &b) }.to raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reuters::Response do
|
4
|
+
|
5
|
+
let(:test_hash) {
|
6
|
+
{
|
7
|
+
info: {
|
8
|
+
ticker: "ABC",
|
9
|
+
name: {
|
10
|
+
full_name: "ABC Solutions Ltd.",
|
11
|
+
short_name: "ABC Ltd."
|
12
|
+
}
|
13
|
+
},
|
14
|
+
:@type => "ORD"
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
before do
|
19
|
+
@response = Reuters::Response.new(test_hash)
|
20
|
+
end
|
21
|
+
|
22
|
+
subject { @response }
|
23
|
+
|
24
|
+
it { should respond_to(:attributes) }
|
25
|
+
|
26
|
+
describe "a nested response object" do
|
27
|
+
|
28
|
+
it "should return a nested response object" do
|
29
|
+
expect(@response.info).to be_an_instance_of Reuters::Response
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should include a nested key" do
|
33
|
+
expect(@response.info.keys).to include :ticker
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return the correct value for #full_name" do
|
37
|
+
expect(@response.info.name.full_name).to eq "ABC Solutions Ltd."
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "when attributes are accessed" do
|
43
|
+
|
44
|
+
it "should return a hash" do
|
45
|
+
expect(@response.attributes).to be_a Hash
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return the attribute value" do
|
49
|
+
expect(@response.attributes.type).to eq "ORD"
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Reuters::Wsdls do
|
4
|
+
|
5
|
+
it { should respond_to(:configure) }
|
6
|
+
|
7
|
+
describe "when a wsdl is defined" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
module Reuters::Wsdls
|
11
|
+
module TestWsdl
|
12
|
+
include Base
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should enable configuration of a wsdl" do
|
18
|
+
expect { |b| subject.configure("TestWsdl", &b) }.to yield_with_args Reuters::Wsdls::TestWsdl
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when a wsdl is not defined" do
|
24
|
+
|
25
|
+
it "should raise an error" do
|
26
|
+
expect { |b| subject.configure("FuddyWsdl", &b) }.to raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "codeclimate-test-reporter"
|
2
|
+
CodeClimate::TestReporter.start
|
3
|
+
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
|
7
|
+
require "savon/mock/spec_helper"
|
8
|
+
require 'factory_girl'
|
9
|
+
require 'reuters'
|
10
|
+
|
11
|
+
Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
|
12
|
+
|
13
|
+
FactoryGirl.find_definitions
|
14
|
+
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.include FactoryGirl::Syntax::Methods
|
17
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
shared_examples "a client class" do
|
2
|
+
|
3
|
+
include Savon::SpecHelper
|
4
|
+
|
5
|
+
before(:all) { savon.mock! }
|
6
|
+
after(:all) { savon.unmock! }
|
7
|
+
|
8
|
+
it { should respond_to(:request) }
|
9
|
+
it { should respond_to(:client) }
|
10
|
+
it { should respond_to(:operations) }
|
11
|
+
|
12
|
+
it { should respond_to(:before_request) }
|
13
|
+
it { should respond_to(:after_request) }
|
14
|
+
|
15
|
+
describe "return value of #client.operations" do
|
16
|
+
it "should be an Array" do
|
17
|
+
expect(subject.client.operations).to be_a(Array)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not be empty" do
|
21
|
+
expect(subject.client.operations).to_not be_empty
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "when an operation is called" do
|
26
|
+
|
27
|
+
describe "when the operation does not exist" do
|
28
|
+
it "should raise a no method error" do
|
29
|
+
expect { subject.not_a_valid_op }.to raise_error(NoMethodError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "when the operation exists" do
|
34
|
+
|
35
|
+
let(:test_op) { :test }
|
36
|
+
let(:message) { Reuters::Builder.new }
|
37
|
+
|
38
|
+
before do
|
39
|
+
subject.stub_chain(:client, :operations).and_return([test_op])
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should attempt a request" do
|
43
|
+
subject.should_receive(:request).with(test_op, message)
|
44
|
+
subject.test(message)
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "when additional request attributes are passed" do
|
48
|
+
|
49
|
+
let(:attribs) { {:a => 1, :b => true} }
|
50
|
+
|
51
|
+
it "should pass attributes to the request" do
|
52
|
+
subject.should_receive(:request).with(test_op, message, attribs)
|
53
|
+
subject.test(message, attribs)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "return value of #client" do
|
63
|
+
|
64
|
+
it "should be a Savon Client" do
|
65
|
+
expect(subject.client).to be_a(Savon::Client)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
shared_examples "a namespace with actions" do
|
2
|
+
|
3
|
+
it "should include namespace actions" do
|
4
|
+
expect(subject.constants).to include(:Actions)
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "the shared Actions of a Namespace" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
module subject::Actions
|
11
|
+
def self.test
|
12
|
+
@@test
|
13
|
+
end
|
14
|
+
def self.test=(val)
|
15
|
+
@@test=val
|
16
|
+
end
|
17
|
+
@@test = nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
specify { expect(subject::Actions).to respond_to(:test) }
|
22
|
+
specify { expect(subject::Actions).to respond_to(:test=) }
|
23
|
+
|
24
|
+
it "should modify the value" do
|
25
|
+
expect { subject::Actions.test = 1 }.to change { subject::Actions.test }
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should include the action in the endpoint" do
|
29
|
+
test_action = "foobar"
|
30
|
+
subject::Actions.test = test_action
|
31
|
+
expect(subject.endpoint(:test)).to include(test_action)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|