proxima 1.1.1 → 2.0.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/lib/proxima/api.rb +7 -35
- data/lib/proxima/{rest.rb → http_methods.rb} +5 -3
- data/lib/proxima/model.rb +1 -9
- data/lib/proxima/request.rb +45 -0
- data/lib/proxima/response.rb +36 -0
- data/lib/proxima/types.rb +76 -0
- data/lib/proxima/version.rb +1 -1
- data/lib/proxima.rb +14 -78
- metadata +6 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d40a3e470e452d37b6d587e7925763a1ccf6424
|
|
4
|
+
data.tar.gz: 2c7a02576f7b706b24f5bfc1e7925259eff5cde6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0f6f84e8d906a2db653c068db1bbe46a35ae61d2c873b6f1dc10070ca7fa8e31f60924b179802d708b5ce0b37af04a1afb9ed1908a5b250187ff37567896379d
|
|
7
|
+
data.tar.gz: f0bb3bd5cb94e2193bb8d706e87b87659719fd648d97b81756823ced4f2f34f26820afeaf283f1b4d3200d3be70c20e8c555924a919bb2c801e705feffedb022
|
data/lib/proxima/api.rb
CHANGED
|
@@ -1,50 +1,22 @@
|
|
|
1
|
-
require 'rest-client'
|
|
2
|
-
|
|
3
1
|
|
|
4
2
|
module Proxima
|
|
5
|
-
|
|
6
3
|
class Api
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
attr_reader :base_uri, :headers
|
|
9
6
|
|
|
10
7
|
def initialize(base_url, opts = {})
|
|
11
|
-
@
|
|
8
|
+
@base_uri = URI.parse base_url
|
|
12
9
|
@headers = opts[:headers] || {}
|
|
13
10
|
end
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def get(path, opts = {}, &block)
|
|
20
|
-
self.request(:get, path, opts, &block)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def put(path, opts = {}, &block)
|
|
24
|
-
self.request(:put, path, opts, &block)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def delete(path, opts = {}, &block)
|
|
28
|
-
self.request(:delete, path, opts, &block)
|
|
12
|
+
HTTP_METHODS.each do |http_method|
|
|
13
|
+
define_method http_method do |path, opts = {}, &block|
|
|
14
|
+
self.request http_method, path, opts, &block
|
|
15
|
+
end
|
|
29
16
|
end
|
|
30
17
|
|
|
31
18
|
def request(method, path, opts = {}, &block)
|
|
32
|
-
|
|
33
|
-
headers.merge!(opts[:headers]) if opts[:headers]
|
|
34
|
-
headers[:params] = opts[:query] if opts[:query]
|
|
35
|
-
headers[:content_type] = :json if opts[:json]
|
|
36
|
-
payload = opts[:json].to_json if opts[:json]
|
|
37
|
-
|
|
38
|
-
begin
|
|
39
|
-
RestClient::Request.execute({
|
|
40
|
-
method: method,
|
|
41
|
-
url: @base_url + path,
|
|
42
|
-
headers: headers,
|
|
43
|
-
payload: payload
|
|
44
|
-
}, &block)
|
|
45
|
-
rescue RestClient::Exception => e
|
|
46
|
-
e.response
|
|
47
|
-
end
|
|
19
|
+
Proxima::Request.new(self, method, path, opts, &block).response
|
|
48
20
|
end
|
|
49
21
|
end
|
|
50
22
|
end
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module Proxima
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
HTTP_METHODS = [:head, :post, :get, :put, :delete]
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
module HTTPMethods
|
|
8
|
+
|
|
9
|
+
HTTP_METHODS.each do |http_method|
|
|
8
10
|
define_method :"#{http_method}" do |path, opts = {}, &block|
|
|
9
11
|
@response = self.class.api.public_send(:"#{http_method}", path, opts, &block)
|
|
10
12
|
@response
|
|
@@ -13,7 +15,7 @@ module Proxima
|
|
|
13
15
|
|
|
14
16
|
module ClassMethods
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
HTTP_METHODS.each do |http_method|
|
|
17
19
|
define_method :"#{http_method}" do |path, opts = {}, &block|
|
|
18
20
|
@response = self.api.public_send(:"#{http_method}", path, opts, &block)
|
|
19
21
|
@response
|
data/lib/proxima/model.rb
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
require 'active_model'
|
|
2
|
-
require 'proxima/watch'
|
|
3
|
-
require 'proxima/rest'
|
|
4
|
-
require 'proxima/attributes'
|
|
5
|
-
require 'proxima/paths'
|
|
6
|
-
require 'proxima/serialization'
|
|
7
|
-
require 'proxima/validation'
|
|
8
|
-
|
|
9
1
|
|
|
10
2
|
module Proxima
|
|
11
3
|
|
|
@@ -19,7 +11,7 @@ module Proxima
|
|
|
19
11
|
include ActiveModel::Serializers::JSON
|
|
20
12
|
include ActiveModel::Validations
|
|
21
13
|
|
|
22
|
-
include Proxima::
|
|
14
|
+
include Proxima::HTTPMethods
|
|
23
15
|
include Proxima::Attributes
|
|
24
16
|
include Proxima::Paths
|
|
25
17
|
include Proxima::Serialization
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
module Proxima
|
|
3
|
+
class Request
|
|
4
|
+
|
|
5
|
+
attr_reader :response
|
|
6
|
+
attr_reader :method
|
|
7
|
+
attr_reader :uri
|
|
8
|
+
attr_reader :headers
|
|
9
|
+
attr_reader :body
|
|
10
|
+
|
|
11
|
+
def initialize(api, method, path, opts = {})
|
|
12
|
+
@api = api
|
|
13
|
+
@method = method.to_s.upcase
|
|
14
|
+
|
|
15
|
+
headers = opts[:headers] || {}
|
|
16
|
+
|
|
17
|
+
@body = if opts[:json]
|
|
18
|
+
headers[:content_type] = 'application/json'
|
|
19
|
+
opts[:json].to_json
|
|
20
|
+
elsif opts[:body]
|
|
21
|
+
opts[:body]
|
|
22
|
+
else
|
|
23
|
+
''
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
headers.merge! @api.headers
|
|
27
|
+
|
|
28
|
+
@headers = headers.map{ |name, val| [to_header(name), val.to_s] }.to_h
|
|
29
|
+
query_str = opts[:query] ? "?#{opts[:query].to_query}" : ''
|
|
30
|
+
@uri = URI.join @api.base_uri, path, query_str
|
|
31
|
+
@http = Net::HTTP.new(@uri.host, @uri.port)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def response
|
|
35
|
+
raw_response = @http.send_request @method, @uri, @body, @headers
|
|
36
|
+
Response.new self, raw_response
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def to_header symbol_or_string
|
|
42
|
+
symbol_or_string.to_s.split(/[_ -]/).map!{ |w| w.downcase.capitalize }.join '-'
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
module Proxima
|
|
3
|
+
class Response
|
|
4
|
+
|
|
5
|
+
attr_reader :request
|
|
6
|
+
|
|
7
|
+
def initialize(request, raw_response)
|
|
8
|
+
@request = request
|
|
9
|
+
@raw_response = raw_response
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def json
|
|
13
|
+
begin
|
|
14
|
+
JSON.parse @raw_response.body if @raw_response.body
|
|
15
|
+
rescue => e
|
|
16
|
+
raise "Failed to parse response body as JSON string: #{e.message}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def body
|
|
21
|
+
@raw_response.body
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def code
|
|
25
|
+
@raw_response.code.to_i
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def message
|
|
29
|
+
@raw_response.message
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def http_version
|
|
33
|
+
@raw_response.http_version
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
|
|
2
|
+
module Proxima
|
|
3
|
+
TYPES = [
|
|
4
|
+
{
|
|
5
|
+
klass: String,
|
|
6
|
+
from_json: -> v { v.to_s },
|
|
7
|
+
to_json: -> v { v.to_s }
|
|
8
|
+
}, {
|
|
9
|
+
klass: Integer,
|
|
10
|
+
from_json: -> v { v.to_i },
|
|
11
|
+
to_json: -> v { v.to_i }
|
|
12
|
+
}, {
|
|
13
|
+
klass: Float,
|
|
14
|
+
from_json: -> v { v.to_f },
|
|
15
|
+
to_json: -> v { v.to_f }
|
|
16
|
+
}, {
|
|
17
|
+
klass: Rational,
|
|
18
|
+
from_json: -> v { v.to_r },
|
|
19
|
+
to_json: -> v { v.to_r }
|
|
20
|
+
}, {
|
|
21
|
+
klass: Complex,
|
|
22
|
+
from_json: -> v { v.to_c },
|
|
23
|
+
to_json: -> v { v.to_c }
|
|
24
|
+
}, {
|
|
25
|
+
klass: TrueClass,
|
|
26
|
+
from_json: -> v { v.to_s == 'true' },
|
|
27
|
+
to_json: -> v { v.to_s == 'true' }
|
|
28
|
+
}, {
|
|
29
|
+
klass: Array,
|
|
30
|
+
from_json: -> v { v.to_a },
|
|
31
|
+
to_json: -> v { v.to_a }
|
|
32
|
+
}, {
|
|
33
|
+
klass: Hash,
|
|
34
|
+
from_json: -> v { v.to_h },
|
|
35
|
+
to_json: -> v { v.to_h }
|
|
36
|
+
}, {
|
|
37
|
+
klass: DateTime,
|
|
38
|
+
from_json: -> v { DateTime.iso8601 v },
|
|
39
|
+
to_json: -> v { v.iso8601 3 }
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
def self.add_type(klass, from = nil, to = nil)
|
|
44
|
+
TYPES.push({
|
|
45
|
+
klass: klass,
|
|
46
|
+
from: from,
|
|
47
|
+
to: to
|
|
48
|
+
})
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.remove_type(klass)
|
|
52
|
+
TYPES.delete_if({
|
|
53
|
+
klass: klass,
|
|
54
|
+
from: from,
|
|
55
|
+
to: to
|
|
56
|
+
})
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.type_from_json(klass, value)
|
|
60
|
+
type = TYPES.find { |t| t[:klass] == klass }
|
|
61
|
+
if type
|
|
62
|
+
type[:from_json].call(value)
|
|
63
|
+
else
|
|
64
|
+
value
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.type_to_json(klass, value)
|
|
69
|
+
type = TYPES.find { |t| t[:klass] == klass }
|
|
70
|
+
if type
|
|
71
|
+
type[:to_json].call(value)
|
|
72
|
+
else
|
|
73
|
+
value
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
data/lib/proxima/version.rb
CHANGED
data/lib/proxima.rb
CHANGED
|
@@ -1,81 +1,17 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'active_model'
|
|
3
|
+
require 'proxima/version'
|
|
4
|
+
require 'proxima/types'
|
|
5
|
+
require 'proxima/request'
|
|
6
|
+
require 'proxima/response'
|
|
7
|
+
require 'proxima/http_methods'
|
|
8
|
+
require 'proxima/api'
|
|
9
|
+
require 'proxima/attributes'
|
|
10
|
+
require 'proxima/serialization'
|
|
11
|
+
require 'proxima/paths'
|
|
12
|
+
require 'proxima/validation'
|
|
13
|
+
require 'proxima/watch'
|
|
14
|
+
require 'proxima/model'
|
|
5
15
|
|
|
6
16
|
module Proxima
|
|
7
|
-
|
|
8
|
-
@types = [
|
|
9
|
-
{
|
|
10
|
-
klass: String,
|
|
11
|
-
from_json: -> v { v.to_s },
|
|
12
|
-
to_json: -> v { v.to_s }
|
|
13
|
-
}, {
|
|
14
|
-
klass: Integer,
|
|
15
|
-
from_json: -> v { v.to_i },
|
|
16
|
-
to_json: -> v { v.to_i }
|
|
17
|
-
}, {
|
|
18
|
-
klass: Float,
|
|
19
|
-
from_json: -> v { v.to_f },
|
|
20
|
-
to_json: -> v { v.to_f }
|
|
21
|
-
}, {
|
|
22
|
-
klass: Rational,
|
|
23
|
-
from_json: -> v { v.to_r },
|
|
24
|
-
to_json: -> v { v.to_r }
|
|
25
|
-
}, {
|
|
26
|
-
klass: Complex,
|
|
27
|
-
from_json: -> v { v.to_c },
|
|
28
|
-
to_json: -> v { v.to_c }
|
|
29
|
-
}, {
|
|
30
|
-
klass: TrueClass,
|
|
31
|
-
from_json: -> v { v.to_s == 'true' },
|
|
32
|
-
to_json: -> v { v.to_s == 'true' }
|
|
33
|
-
}, {
|
|
34
|
-
klass: Array,
|
|
35
|
-
from_json: -> v { v.to_a },
|
|
36
|
-
to_json: -> v { v.to_a }
|
|
37
|
-
}, {
|
|
38
|
-
klass: Hash,
|
|
39
|
-
from_json: -> v { v.to_h },
|
|
40
|
-
to_json: -> v { v.to_h }
|
|
41
|
-
}, {
|
|
42
|
-
klass: DateTime,
|
|
43
|
-
from_json: -> v { DateTime.iso8601 v },
|
|
44
|
-
to_json: -> v { v.iso8601 3 }
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
|
|
48
|
-
def self.add_type(klass, from = nil, to = nil)
|
|
49
|
-
@types.push({
|
|
50
|
-
klass: klass,
|
|
51
|
-
from: from,
|
|
52
|
-
to: to
|
|
53
|
-
})
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def self.remove_type(klass)
|
|
57
|
-
@types.delete_if({
|
|
58
|
-
klass: klass,
|
|
59
|
-
from: from,
|
|
60
|
-
to: to
|
|
61
|
-
})
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def self.type_from_json(klass, value)
|
|
65
|
-
type = @types.find { |t| t[:klass] == klass }
|
|
66
|
-
if type
|
|
67
|
-
type[:from_json].call(value)
|
|
68
|
-
else
|
|
69
|
-
value
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def self.type_to_json(klass, value)
|
|
74
|
-
type = @types.find { |t| t[:klass] == klass }
|
|
75
|
-
if type
|
|
76
|
-
type[:to_json].call(value)
|
|
77
|
-
else
|
|
78
|
-
value
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
17
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: proxima
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Robert Hurst
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-06-
|
|
11
|
+
date: 2017-06-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -72,26 +72,6 @@ dependencies:
|
|
|
72
72
|
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: 4.0.0
|
|
75
|
-
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: rest-client
|
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - "~>"
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '2.0'
|
|
82
|
-
- - ">="
|
|
83
|
-
- !ruby/object:Gem::Version
|
|
84
|
-
version: 2.0.0
|
|
85
|
-
type: :runtime
|
|
86
|
-
prerelease: false
|
|
87
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
88
|
-
requirements:
|
|
89
|
-
- - "~>"
|
|
90
|
-
- !ruby/object:Gem::Version
|
|
91
|
-
version: '2.0'
|
|
92
|
-
- - ">="
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
94
|
-
version: 2.0.0
|
|
95
75
|
description: Proxima is a gem the provides models for use with REST endpoints. These
|
|
96
76
|
models are based upon the Active Model interface
|
|
97
77
|
email:
|
|
@@ -103,10 +83,13 @@ files:
|
|
|
103
83
|
- lib/proxima.rb
|
|
104
84
|
- lib/proxima/api.rb
|
|
105
85
|
- lib/proxima/attributes.rb
|
|
86
|
+
- lib/proxima/http_methods.rb
|
|
106
87
|
- lib/proxima/model.rb
|
|
107
88
|
- lib/proxima/paths.rb
|
|
108
|
-
- lib/proxima/
|
|
89
|
+
- lib/proxima/request.rb
|
|
90
|
+
- lib/proxima/response.rb
|
|
109
91
|
- lib/proxima/serialization.rb
|
|
92
|
+
- lib/proxima/types.rb
|
|
110
93
|
- lib/proxima/validation.rb
|
|
111
94
|
- lib/proxima/version.rb
|
|
112
95
|
- lib/proxima/watch.rb
|