foto 0.0.1 → 0.0.2
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.
- data/.gitignore +3 -0
- data/README.md +34 -2
- data/foto.gemspec +8 -3
- data/lib/foto.rb +9 -2
- data/lib/foto/client.rb +15 -0
- data/lib/foto/config.rb +28 -0
- data/lib/foto/consumer.rb +24 -0
- data/lib/foto/json_date.rb +12 -0
- data/lib/foto/patient.rb +30 -0
- data/lib/foto/requests/put.rb +16 -0
- data/lib/foto/requests/request.rb +68 -0
- data/lib/foto/requests/response.rb +21 -0
- data/lib/foto/version.rb +1 -1
- data/spec/foto/client_spec.rb +17 -0
- data/spec/foto/config_spec.rb +53 -0
- data/spec/foto/foto_spec.rb +8 -0
- data/spec/foto/patient_spec.rb +61 -0
- data/spec/foto/requests/put_spec.rb +66 -0
- data/spec/foto/requests/response_spec.rb +46 -0
- data/spec/spec_helper.rb +26 -0
- metadata +121 -24
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Foto
|
2
2
|
|
3
|
-
|
3
|
+
A gem for communicating with the FOTO Patient Inquiry API http://share.patient-inquiry.com.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,39 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
### Configure the gem:
|
22
|
+
```ruby
|
23
|
+
Foto.configure do |config|
|
24
|
+
config.api_key = '41B4333G-FF2E-41B9-2M24-2G31381D237T'
|
25
|
+
config.base_uri = 'http://devs.patient-inquiry.com'
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
29
|
+
### Update or create a patient:
|
30
|
+
```ruby
|
31
|
+
foto_patient = Foto::Patient.new({
|
32
|
+
:first_name => patient.first_name,
|
33
|
+
:last_name => patient.last_name,
|
34
|
+
:date_of_birth => patient.birth_date,
|
35
|
+
:email => patient.email,
|
36
|
+
:gender => patient.gender,
|
37
|
+
:language => 'en',
|
38
|
+
:external_id => patient.id
|
39
|
+
})
|
40
|
+
foto_patient.save
|
41
|
+
```
|
42
|
+
|
43
|
+
### You can also specify an api key per request:
|
44
|
+
```ruby
|
45
|
+
foto_patient = Foto::Patient.new({
|
46
|
+
:api_key => '41B4333G-FF2E-41B9-2M24-2G31381D237T',
|
47
|
+
:first_name => patient.first_name,
|
48
|
+
:last_name => patient.last_name,
|
49
|
+
...
|
50
|
+
})
|
51
|
+
foto_patient.save
|
52
|
+
```
|
53
|
+
|
22
54
|
|
23
55
|
## Contributing
|
24
56
|
|
data/foto.gemspec
CHANGED
@@ -8,9 +8,14 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = Foto::VERSION
|
9
9
|
gem.authors = ["Peter Tran"]
|
10
10
|
gem.email = ["Peter Tran <ptran@optimiscorp.com>"]
|
11
|
-
gem.description = %q{
|
12
|
-
gem.summary = %q{
|
13
|
-
gem.homepage = ""
|
11
|
+
gem.description = %q{Provides an interface for communicating with FOTO Patient Inquiry API}
|
12
|
+
gem.summary = %q{Provides an interface for communicating with FOTO Patient Inquiry API}
|
13
|
+
gem.homepage = "https://github.com/optimis/foto"
|
14
|
+
|
15
|
+
gem.add_dependency "yajl-ruby"
|
16
|
+
gem.add_dependency "nokogiri"
|
17
|
+
gem.add_development_dependency "rspec"
|
18
|
+
gem.add_development_dependency "webmock"
|
14
19
|
|
15
20
|
gem.files = `git ls-files`.split($/)
|
16
21
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/foto.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'foto/version'
|
2
2
|
|
3
3
|
module Foto
|
4
|
-
|
4
|
+
require 'foto/client'
|
5
|
+
require 'foto/config'
|
6
|
+
require 'foto/consumer'
|
7
|
+
require 'foto/patient'
|
8
|
+
require 'foto/requests/request'
|
9
|
+
require 'foto/requests/response'
|
10
|
+
require 'foto/requests/put'
|
11
|
+
require 'foto/json_date'
|
5
12
|
end
|
data/lib/foto/client.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'foto/config'
|
2
|
+
|
3
|
+
module Foto
|
4
|
+
class Client
|
5
|
+
attr_accessor *Foto::Config::VALID_OPTIONS
|
6
|
+
|
7
|
+
def initialize(options={})
|
8
|
+
settings = Foto::Config.options.merge(options)
|
9
|
+
|
10
|
+
Config::VALID_OPTIONS.each do |option|
|
11
|
+
send("#{option}=", settings[option])
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/foto/config.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Foto
|
2
|
+
|
3
|
+
def self.configure
|
4
|
+
yield Config
|
5
|
+
end
|
6
|
+
|
7
|
+
module Config
|
8
|
+
module Defaults
|
9
|
+
API_KEY = 'placeholder'
|
10
|
+
BASE_URI = 'http://devs.patient-inquiry.com'
|
11
|
+
end
|
12
|
+
|
13
|
+
extend self
|
14
|
+
|
15
|
+
VALID_OPTIONS = [:api_key, :base_uri]
|
16
|
+
|
17
|
+
attr_accessor *VALID_OPTIONS
|
18
|
+
|
19
|
+
def reset!
|
20
|
+
self.api_key = Defaults::API_KEY
|
21
|
+
self.base_uri = Defaults::BASE_URI
|
22
|
+
end
|
23
|
+
|
24
|
+
def options
|
25
|
+
Hash[ *VALID_OPTIONS.map {|option| [option, send(option)]}.flatten ]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Foto
|
2
|
+
class Consumer
|
3
|
+
attr_accessor :api_key
|
4
|
+
|
5
|
+
def self.url
|
6
|
+
raise NotImplementedError.new('You must implement self.url')
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(attributes={})
|
10
|
+
attributes.each do |k, v|
|
11
|
+
send("#{k}=", v)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def as_json
|
16
|
+
raise NotImplementedError.new('You must implement as_json')
|
17
|
+
end
|
18
|
+
|
19
|
+
def save
|
20
|
+
put = Foto::Requests::Put.new(self, as_json)
|
21
|
+
put.run
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/foto/patient.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Foto
|
2
|
+
class Patient < Foto::Consumer
|
3
|
+
ATTRIBUTES = [ :external_id, :first_name, :last_name,
|
4
|
+
:email, :date_of_birth, :gender, :language ]
|
5
|
+
|
6
|
+
attr_accessor *ATTRIBUTES
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def attributes
|
10
|
+
ATTRIBUTES
|
11
|
+
end
|
12
|
+
|
13
|
+
def url
|
14
|
+
'patient'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def as_json
|
19
|
+
Yajl::Encoder.encode({
|
20
|
+
'FirstName' => first_name,
|
21
|
+
'LastName' => last_name,
|
22
|
+
'DateOfBirth' => Foto::JsonDate.new(date_of_birth),
|
23
|
+
'Email' => email,
|
24
|
+
'Gender' => gender,
|
25
|
+
'Language' => language || 'en',
|
26
|
+
'ExternalId' => external_id
|
27
|
+
})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'foto/requests/request'
|
2
|
+
|
3
|
+
module Foto
|
4
|
+
module Requests
|
5
|
+
class Put < Foto::Requests::Request
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def build_http_request
|
10
|
+
request = Net::HTTP::Put.new(url.request_uri)
|
11
|
+
request.body = body
|
12
|
+
request
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Foto
|
2
|
+
module Requests
|
3
|
+
class Request
|
4
|
+
attr_accessor :relative_url, :body, :consumer
|
5
|
+
|
6
|
+
def initialize(consumer, body = {})
|
7
|
+
@consumer = consumer
|
8
|
+
@relative_url = consumer.class.url
|
9
|
+
@body = body
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
send_http_request
|
14
|
+
end
|
15
|
+
|
16
|
+
def url
|
17
|
+
@url ||= build_url
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def build_http_request
|
23
|
+
raise NotImplementedError.new('You must implement build_request')
|
24
|
+
end
|
25
|
+
|
26
|
+
def http_request
|
27
|
+
@http_request ||= add_headers(build_http_request)
|
28
|
+
end
|
29
|
+
|
30
|
+
def protocol
|
31
|
+
url.scheme
|
32
|
+
end
|
33
|
+
|
34
|
+
def content_length
|
35
|
+
body.length
|
36
|
+
end
|
37
|
+
|
38
|
+
def content_type
|
39
|
+
'text/json'
|
40
|
+
end
|
41
|
+
|
42
|
+
def api_key
|
43
|
+
consumer.api_key || Foto::Config.api_key
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_headers(http_request)
|
47
|
+
http_request.add_field('User-Agent', 'Foto')
|
48
|
+
http_request.add_field('Content-Length', content_length)
|
49
|
+
http_request.add_field('Content-Type', content_type)
|
50
|
+
http_request
|
51
|
+
end
|
52
|
+
|
53
|
+
def send_http_request
|
54
|
+
base_uri = URI(Foto::Config.base_uri)
|
55
|
+
http = Net::HTTP.new(base_uri.host, base_uri.port)
|
56
|
+
http.use_ssl = (protocol === 'https')
|
57
|
+
http.start do |http|
|
58
|
+
Response.new(http.request(http_request))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def build_url
|
63
|
+
format = 'json'
|
64
|
+
URI("#{Foto::Config.base_uri}/#{relative_url}/#{format}/?Api-Key=#{api_key}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Foto
|
2
|
+
module Requests
|
3
|
+
class Response
|
4
|
+
attr_reader :body, :code
|
5
|
+
|
6
|
+
def initialize(http_response)
|
7
|
+
@body = http_response.body
|
8
|
+
@code = http_response.code
|
9
|
+
end
|
10
|
+
|
11
|
+
def message
|
12
|
+
doc = Nokogiri::HTML(@body)
|
13
|
+
doc.xpath('/html/body/p').first.content
|
14
|
+
end
|
15
|
+
|
16
|
+
def successful?
|
17
|
+
code == '200'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/foto/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foto::Client do
|
4
|
+
describe '#initialize' do
|
5
|
+
let(:default_options) do
|
6
|
+
{ :api_key => 'AAABBBCCC', :base_uri => 'http://a.b.com' }
|
7
|
+
end
|
8
|
+
let(:foto) { Foto::Client.new(default_options) }
|
9
|
+
|
10
|
+
it 'can accept a default options hash' do
|
11
|
+
foto.api_key.should eql(default_options[:api_key])
|
12
|
+
foto.base_uri.should eql(default_options[:base_uri])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foto::Config do
|
4
|
+
let(:config) { Foto::Config }
|
5
|
+
let(:defaults) { Foto::Config::Defaults }
|
6
|
+
|
7
|
+
before do
|
8
|
+
config.reset!
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.api_key' do
|
12
|
+
it 'has a default' do
|
13
|
+
config.api_key.should eql(defaults::API_KEY)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.base_uri' do
|
18
|
+
it 'has a default' do
|
19
|
+
config.base_uri.should eql(defaults::BASE_URI)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.reset!' do
|
24
|
+
it 'resets the configuration to their default values' do
|
25
|
+
config.api_key = 'somethingelse'
|
26
|
+
config.api_key.should eql('somethingelse')
|
27
|
+
config.base_uri = 'http://other.com'
|
28
|
+
config.base_uri.should eql('http://other.com')
|
29
|
+
config.reset!
|
30
|
+
config.api_key.should eql(defaults::API_KEY)
|
31
|
+
config.base_uri.should eql(defaults::BASE_URI)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '.options' do
|
36
|
+
it 'returns a hash of current options' do
|
37
|
+
config.options.keys.should =~ Foto::Config::VALID_OPTIONS
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe Foto do
|
43
|
+
describe '.configure' do
|
44
|
+
Foto::Config::VALID_OPTIONS.each do |option|
|
45
|
+
it "#{option} should be configurable" do
|
46
|
+
Foto.configure do |configuration|
|
47
|
+
configuration.send("#{option}=", option)
|
48
|
+
configuration.send(option).should eql(option)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foto::Patient do
|
4
|
+
let(:patient) { Foto::Patient.new }
|
5
|
+
let(:initialized_patient) { Foto::Patient.new(patient_attributes) }
|
6
|
+
let(:patient_attributes) do
|
7
|
+
{
|
8
|
+
:external_id => 'external_id_test',
|
9
|
+
:first_name => 'Bob',
|
10
|
+
:last_name => 'Bobson',
|
11
|
+
:email => 'bob.bobson@bobbobson.com',
|
12
|
+
:date_of_birth => Time.parse('03/07/1983'),
|
13
|
+
:gender => 'M',
|
14
|
+
:language => 'en'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should have accessors for each attribute' do
|
19
|
+
Foto::Patient.attributes.each do |attribute|
|
20
|
+
patient.should respond_to(attribute)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'accepts an initial hash of attributes' do
|
25
|
+
patient_attributes.each do |k, v|
|
26
|
+
v.should_not be_nil
|
27
|
+
initialized_patient.send(k).should eql(v)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#as_json' do
|
32
|
+
let(:date_of_birth) { Foto::JsonDate.new(initialized_patient.date_of_birth).to_json }
|
33
|
+
it 'returns a JSON hash of attributes' do
|
34
|
+
Yajl::Parser.parse(initialized_patient.as_json).should == {
|
35
|
+
'FirstName' => initialized_patient.first_name,
|
36
|
+
'LastName' => initialized_patient.last_name,
|
37
|
+
'DateOfBirth' => Yajl::Parser.parse(date_of_birth),
|
38
|
+
'Email' => initialized_patient.email,
|
39
|
+
'Gender' => initialized_patient.gender,
|
40
|
+
'Language' => initialized_patient.language,
|
41
|
+
'ExternalId' => initialized_patient.external_id
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#save' do
|
47
|
+
let(:request) { mock :request }
|
48
|
+
it 'makes a request to FOTO' do
|
49
|
+
Foto::Requests::Put.should_receive(:new).and_return(request)
|
50
|
+
request.should_receive(:run)
|
51
|
+
initialized_patient.save
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '.url' do
|
56
|
+
it 'returns a partial URL' do
|
57
|
+
patient.class.url.should_not be_nil
|
58
|
+
patient.class.url.should be_an_instance_of(String)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foto::Requests::Put do
|
4
|
+
let(:patient) { Foto::Patient.new }
|
5
|
+
let(:url) { Foto::Requests::Put.new(patient).send(:build_url).to_s }
|
6
|
+
let(:body) do
|
7
|
+
{
|
8
|
+
:a => 'a',
|
9
|
+
:b => 'b',
|
10
|
+
:c => 'c'
|
11
|
+
}
|
12
|
+
end
|
13
|
+
let(:error) do
|
14
|
+
%q{
|
15
|
+
<html>
|
16
|
+
<head>
|
17
|
+
<title>Request Error - No API Key</title>
|
18
|
+
<style type="text/css">
|
19
|
+
body
|
20
|
+
{
|
21
|
+
font-family: Verdana;
|
22
|
+
font-size: x-large;
|
23
|
+
}
|
24
|
+
</style>
|
25
|
+
</head>
|
26
|
+
<body>
|
27
|
+
<h1>Request Error</h1>
|
28
|
+
<p>A valid API key needs to be included using the Api-Key query string parameter</p>
|
29
|
+
</body>
|
30
|
+
</html>}
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#run' do
|
34
|
+
describe 'On success' do
|
35
|
+
it 'makes an HTTP Put request to the correct URL' do
|
36
|
+
stub_request(:put, url)
|
37
|
+
Foto::Requests::Put.new(patient, body).run
|
38
|
+
assert_requested(:put, url)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'On error' do
|
43
|
+
it 'returns an instance of Foto::Requests::Response' do
|
44
|
+
stub_request(:put, url).to_return(:body => error, :status => 401)
|
45
|
+
response = Foto::Requests::Put.new(patient, body).run
|
46
|
+
assert_requested(:put, url)
|
47
|
+
response.message.should eql('A valid API key needs to be included using the Api-Key query string parameter')
|
48
|
+
response.code.should eql('401')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#url' do
|
54
|
+
let(:api_key) { Foto::Config.api_key }
|
55
|
+
let(:base_uri) { Foto::Config.base_uri }
|
56
|
+
let(:uri) { Foto::Requests::Put.new(patient).send(:build_url) }
|
57
|
+
|
58
|
+
it 'returns a URI::HTTP' do
|
59
|
+
uri.class.should eql(URI::HTTP)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'has the correct url' do
|
63
|
+
uri.to_s.should eql("#{base_uri}/#{patient.class.url}/json/?Api-Key=#{api_key}")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foto::Requests::Response do
|
4
|
+
let(:http_response) do
|
5
|
+
mock :http_response, :body => html, :code => '401'
|
6
|
+
end
|
7
|
+
let(:html) do
|
8
|
+
%q{
|
9
|
+
<html>
|
10
|
+
<head>
|
11
|
+
<title>Request Error - No API Key</title>
|
12
|
+
<style type="text/css">
|
13
|
+
body
|
14
|
+
{
|
15
|
+
font-family: Verdana;
|
16
|
+
font-size: x-large;
|
17
|
+
}
|
18
|
+
</style>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<h1>Request Error</h1>
|
22
|
+
<p>A valid API key needs to be included using the Api-Key query string parameter</p>
|
23
|
+
</body>
|
24
|
+
</html>}
|
25
|
+
end
|
26
|
+
let!(:response) { Foto::Requests::Response.new(http_response) }
|
27
|
+
|
28
|
+
describe '#initialize' do
|
29
|
+
it 'sets the appropriate instance variables' do
|
30
|
+
response.body.should eql(html)
|
31
|
+
response.code.should eql('401')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#message' do
|
36
|
+
it 'returns the correct response message' do
|
37
|
+
response.message.should eql('A valid API key needs to be included using the Api-Key query string parameter')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'successful?' do
|
42
|
+
it 'returns true if the request was successful' do
|
43
|
+
response.should_not be_successful
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
require 'yajl'
|
8
|
+
require 'nokogiri'
|
9
|
+
require 'foto'
|
10
|
+
require 'webmock/rspec'
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
14
|
+
config.run_all_when_everything_filtered = true
|
15
|
+
config.filter_run :focus
|
16
|
+
|
17
|
+
# Run specs in random order to surface order dependencies. If you find an
|
18
|
+
# order dependency and want to debug it, you can fix the order by providing
|
19
|
+
# the seed, which is printed after each run.
|
20
|
+
# --seed 1234
|
21
|
+
config.order = 'random'
|
22
|
+
|
23
|
+
config.before(:each) do
|
24
|
+
Foto::Config.reset!
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,23 +1,88 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: foto
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Peter Tran
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
17
|
+
|
18
|
+
date: 2012-12-06 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: yajl-ruby
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: nokogiri
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: webmock
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
description: Provides an interface for communicating with FOTO Patient Inquiry API
|
77
|
+
email:
|
16
78
|
- Peter Tran <ptran@optimiscorp.com>
|
17
79
|
executables: []
|
80
|
+
|
18
81
|
extensions: []
|
82
|
+
|
19
83
|
extra_rdoc_files: []
|
20
|
-
|
84
|
+
|
85
|
+
files:
|
21
86
|
- .gitignore
|
22
87
|
- Gemfile
|
23
88
|
- LICENSE.txt
|
@@ -25,29 +90,61 @@ files:
|
|
25
90
|
- Rakefile
|
26
91
|
- foto.gemspec
|
27
92
|
- lib/foto.rb
|
93
|
+
- lib/foto/client.rb
|
94
|
+
- lib/foto/config.rb
|
95
|
+
- lib/foto/consumer.rb
|
96
|
+
- lib/foto/json_date.rb
|
97
|
+
- lib/foto/patient.rb
|
98
|
+
- lib/foto/requests/put.rb
|
99
|
+
- lib/foto/requests/request.rb
|
100
|
+
- lib/foto/requests/response.rb
|
28
101
|
- lib/foto/version.rb
|
29
|
-
|
102
|
+
- spec/foto/client_spec.rb
|
103
|
+
- spec/foto/config_spec.rb
|
104
|
+
- spec/foto/foto_spec.rb
|
105
|
+
- spec/foto/patient_spec.rb
|
106
|
+
- spec/foto/requests/put_spec.rb
|
107
|
+
- spec/foto/requests/response_spec.rb
|
108
|
+
- spec/spec_helper.rb
|
109
|
+
homepage: https://github.com/optimis/foto
|
30
110
|
licenses: []
|
111
|
+
|
31
112
|
post_install_message:
|
32
113
|
rdoc_options: []
|
33
|
-
|
114
|
+
|
115
|
+
require_paths:
|
34
116
|
- lib
|
35
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
118
|
none: false
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
hash: 3
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
version: "0"
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
127
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
hash: 3
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
47
135
|
requirements: []
|
136
|
+
|
48
137
|
rubyforge_project:
|
49
|
-
rubygems_version: 1.8.
|
138
|
+
rubygems_version: 1.8.15
|
50
139
|
signing_key:
|
51
140
|
specification_version: 3
|
52
|
-
summary:
|
53
|
-
test_files:
|
141
|
+
summary: Provides an interface for communicating with FOTO Patient Inquiry API
|
142
|
+
test_files:
|
143
|
+
- spec/foto/client_spec.rb
|
144
|
+
- spec/foto/config_spec.rb
|
145
|
+
- spec/foto/foto_spec.rb
|
146
|
+
- spec/foto/patient_spec.rb
|
147
|
+
- spec/foto/requests/put_spec.rb
|
148
|
+
- spec/foto/requests/response_spec.rb
|
149
|
+
- spec/spec_helper.rb
|
150
|
+
has_rdoc:
|