eipiai 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/features/support/app.rb +5 -0
- data/features/webmachine.feature +7 -0
- data/lib/eipiai/roar/ext/hal.rb +59 -0
- data/lib/eipiai/roar/representers/api.rb +3 -2
- data/lib/eipiai/roar/representers/base.rb +31 -1
- data/lib/eipiai/roar.rb +2 -0
- data/lib/eipiai/version.rb +1 -1
- data/lib/eipiai/webmachine/resources/base.rb +10 -6
- data/lib/eipiai.rb +38 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ae6cef8a01a687e9de4ca1a6cf889b9ce3f476f
|
4
|
+
data.tar.gz: bd8cd1327cb8b859c8b5f09518ccf0700fcbb3c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5971360e6f2b6f1c220dab71e7ecb7cd647406477b25310fdffef98655db324450e930f4018596263fd72099423bf27d8733babf46e1392af8cd36d334ef59d
|
7
|
+
data.tar.gz: cbf9e28a0ce0e4df1eba0465ba4bf18a7ef6f6455a3fda7536c19d9074bb1267b4cd7c05d6e88078c4a7e7038032c71c17737df7c26df48411dd62048970e1fb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## [v0.3.0](https://github.com/blendle/eipiai/tree/v0.3.0) (2015-12-13)
|
4
|
+
[Full Changelog](https://github.com/blendle/eipiai/compare/v0.2.0...v0.3.0)
|
5
|
+
|
6
|
+
**Merged pull requests:**
|
7
|
+
|
8
|
+
- initial Roar representers abstraction [\#4](https://github.com/blendle/eipiai/pull/4) ([JeanMertz](https://github.com/JeanMertz))
|
9
|
+
|
3
10
|
## [v0.2.0](https://github.com/blendle/eipiai/tree/v0.2.0) (2015-12-13)
|
4
11
|
[Full Changelog](https://github.com/blendle/eipiai/compare/v0.1.0...v0.2.0)
|
5
12
|
|
data/features/support/app.rb
CHANGED
data/features/webmachine.feature
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'roar/json'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module Roar
|
5
|
+
module JSON
|
6
|
+
module HAL
|
7
|
+
# @see http://git.io/v085U
|
8
|
+
module Resources
|
9
|
+
# ToHashExt
|
10
|
+
#
|
11
|
+
# Adds a superset of functions on top of the default
|
12
|
+
# `Roar::JSON::HAL::Resources#to_hash`.
|
13
|
+
#
|
14
|
+
module ToHashExt
|
15
|
+
# to_hash
|
16
|
+
#
|
17
|
+
# taps into the default `Roar::JSON::HAL::Resources#to_hash` and adds
|
18
|
+
# `curies` links to the hash, if a curied object is present.
|
19
|
+
#
|
20
|
+
# The configuration value `curie_uris` needs to be defined, and be a
|
21
|
+
# hash of `{ curie => url }`. If your links contains a key `b:items`,
|
22
|
+
# then the curie link will be taken from the `curie_uris` hash, with
|
23
|
+
# key matching `b`:
|
24
|
+
#
|
25
|
+
# Eipiai.configuration.curie_uris = { b: 'https://example.com/' }
|
26
|
+
#
|
27
|
+
# `_links` key `b:items` will result in a curie pointing to the above
|
28
|
+
# address.
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# post('/items', '{ "uid": "hello" }', 'Content-Type': 'application/json')
|
32
|
+
# items = Struct.new(:dataset).new(Item.dataset)
|
33
|
+
# Eipiai.configuration.curie_uris = { b: 'https://example.com/{rel}' }
|
34
|
+
#
|
35
|
+
# ItemsRepresenter.new(items).to_hash['_links']['curies']
|
36
|
+
# # => [{ name: "b", href: "https://example.com/{rel}", templated: true }]
|
37
|
+
#
|
38
|
+
# @return [Hash] hash representation of the represented object
|
39
|
+
#
|
40
|
+
def to_hash(*)
|
41
|
+
super.tap do |hash|
|
42
|
+
curies = Set.new
|
43
|
+
hash.fetch('_links', {}).each do |name, _|
|
44
|
+
next unless (curie = name[/(\S+):/, 1])
|
45
|
+
next unless (curie_href = Eipiai.configuration.curie_uris[curie.to_sym])
|
46
|
+
|
47
|
+
curies.add(name: curie, href: curie_href, templated: true)
|
48
|
+
end
|
49
|
+
|
50
|
+
hash['_links']['curies'] = curies.to_a if curies.any?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
prepend ToHashExt
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -23,8 +23,9 @@ module Eipiai
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.add_route(route, options)
|
26
|
-
link(options) do |
|
27
|
-
|
26
|
+
link(options) do |context|
|
27
|
+
request = context[:request]
|
28
|
+
path = '/' + route.path_spec.map { |e| e.is_a?(Symbol) ? "{#{e}}" : e }.join('/')
|
28
29
|
|
29
30
|
request.present? ? Addressable::URI.parse(request.uri).merge(path: path).to_s : path
|
30
31
|
end
|
@@ -39,6 +39,35 @@ module Eipiai
|
|
39
39
|
File.join(*parts)
|
40
40
|
end
|
41
41
|
|
42
|
+
# url
|
43
|
+
#
|
44
|
+
# The url of the object.
|
45
|
+
#
|
46
|
+
# Based on the input, the result can vary:
|
47
|
+
#
|
48
|
+
# @example as a relative path
|
49
|
+
# user = User.new(uid: 'bartsimpson')
|
50
|
+
# UserRepresenter.new(user).url # => '/user/bartsimpson'
|
51
|
+
#
|
52
|
+
# @example with url given as argument
|
53
|
+
# user = User.new(uid: 'bartsimpson')
|
54
|
+
# UserRepresenter.new(user).url('https://example.org')
|
55
|
+
# # => 'https://example.org/user/bartsimpson'
|
56
|
+
#
|
57
|
+
# @example with url as global configuration
|
58
|
+
# Eipiai.configuration.base_uri = 'https://base.org'
|
59
|
+
# user = User.new(uid: 'bartsimpson')
|
60
|
+
# UserRepresenter.new(user).url # => 'https://base.org/user/bartsimpson'
|
61
|
+
#
|
62
|
+
# @param [String] uri string to prepend to the object path
|
63
|
+
# @return [String] uri with path of object appended
|
64
|
+
#
|
65
|
+
def url(uri = nil)
|
66
|
+
uri ||= Eipiai.configuration.base_uri
|
67
|
+
|
68
|
+
File.join uri.to_s, path
|
69
|
+
end
|
70
|
+
|
42
71
|
private
|
43
72
|
|
44
73
|
# part_path
|
@@ -79,7 +108,8 @@ module Eipiai
|
|
79
108
|
module ClassMethods
|
80
109
|
include Roar::JSON::HAL
|
81
110
|
|
82
|
-
link(:self) do |
|
111
|
+
link(:self) do |context|
|
112
|
+
request = context[:request]
|
83
113
|
request.present? ? Addressable::URI.parse(request.uri).merge(path: path).to_s : path
|
84
114
|
end
|
85
115
|
end
|
data/lib/eipiai/roar.rb
CHANGED
data/lib/eipiai/version.rb
CHANGED
@@ -101,14 +101,18 @@ module Eipiai
|
|
101
101
|
|
102
102
|
# params
|
103
103
|
#
|
104
|
-
#
|
105
|
-
# object.
|
104
|
+
# Given a string in JSON format, returns the hash representation of that
|
105
|
+
# object.
|
106
|
+
#
|
107
|
+
# If the input is invalid JSON, an empty hash is returned.
|
108
|
+
#
|
109
|
+
# If no argument is given, `request.body` is used as the JSON input.
|
106
110
|
#
|
107
111
|
# @example Parse valid JSON request
|
108
|
-
# resource.
|
112
|
+
# resource.params('{ "hello": "world" }') # => { 'hello' => 'world' }
|
109
113
|
#
|
110
114
|
# @example Parse invalid JSON request
|
111
|
-
# resource.
|
115
|
+
# resource.params('invalid') #=> {}
|
112
116
|
#
|
113
117
|
# @param [String] body JSON provided as a string
|
114
118
|
# @return [Hash] JSON string, converted to a hash
|
@@ -124,7 +128,7 @@ module Eipiai
|
|
124
128
|
# Given an object, calls `#to_hash` on that object,
|
125
129
|
#
|
126
130
|
# If the object's `to_hash` implementation accepts any arguments, the
|
127
|
-
# `request`
|
131
|
+
# hash `{ request: request }` is sent as its first argument.
|
128
132
|
#
|
129
133
|
# In practice, this method is used without any parameters, causing the
|
130
134
|
# method to call `represented`, which represents a Roar representer. This in
|
@@ -139,7 +143,7 @@ module Eipiai
|
|
139
143
|
# @return [Hash] hash representation of the object
|
140
144
|
#
|
141
145
|
def to_hash(o = represented)
|
142
|
-
o.method(:to_hash).arity.zero? ? o.to_hash : o.to_hash(request)
|
146
|
+
o.method(:to_hash).arity.zero? ? o.to_hash : o.to_hash(request: request)
|
143
147
|
end
|
144
148
|
|
145
149
|
def to_json
|
data/lib/eipiai.rb
CHANGED
@@ -1,3 +1,41 @@
|
|
1
1
|
require 'eipiai/roar'
|
2
2
|
require 'eipiai/validation'
|
3
3
|
require 'eipiai/webmachine'
|
4
|
+
|
5
|
+
# Eipiai
|
6
|
+
#
|
7
|
+
# The main module for the library.
|
8
|
+
#
|
9
|
+
module Eipiai
|
10
|
+
class << self
|
11
|
+
attr_accessor :configuration
|
12
|
+
|
13
|
+
# configure
|
14
|
+
#
|
15
|
+
# Configure the library using this `configure` method, as follows:
|
16
|
+
#
|
17
|
+
# Eipiai.configure do |config|
|
18
|
+
# config.curie_uris = { b: 'https://api.blendle.com/rel/{rel}' }
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# @return [void]
|
22
|
+
#
|
23
|
+
def configure
|
24
|
+
yield(configuration)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Configuration
|
29
|
+
#
|
30
|
+
# The configuration store for the Eipiai library.
|
31
|
+
#
|
32
|
+
class Configuration
|
33
|
+
attr_accessor :base_uri, :curie_uris
|
34
|
+
|
35
|
+
def initialize
|
36
|
+
@curie_uris = {}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
@configuration = Configuration.new
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eipiai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Mertz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -243,6 +243,7 @@ files:
|
|
243
243
|
- features/webmachine.feature
|
244
244
|
- lib/eipiai.rb
|
245
245
|
- lib/eipiai/roar.rb
|
246
|
+
- lib/eipiai/roar/ext/hal.rb
|
246
247
|
- lib/eipiai/roar/representers/api.rb
|
247
248
|
- lib/eipiai/roar/representers/base.rb
|
248
249
|
- lib/eipiai/validation.rb
|