grape-hypertext_application_language 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b245bf5afb49fb907aad0b188ab89afee06abda
4
+ data.tar.gz: dd47cc9a8a73b730f6ab26fcf07c3af905b51c65
5
+ SHA512:
6
+ metadata.gz: 5145c5bb772a3a1d9067a8416c651b6e463249ee3a0170256642033a5917ade612b91f551b57c5785a064499d807dd3dcbb493742acb72d9f4d8df7f38b1514d
7
+ data.tar.gz: 1635e2f63cb76132bed732fbd73e788d792063e381e0a840b27b45e8fcbd5fec0f7385e363ece17a63ad9020198e451156b2b2783c03d2ec5c1fd5a6f4eafed3
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,74 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ grape-hypertext_application_language (0.0.0)
5
+ addressable
6
+ grape
7
+ hypertext_application_language
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (4.2.4)
13
+ i18n (~> 0.7)
14
+ json (~> 1.7, >= 1.7.7)
15
+ minitest (~> 5.1)
16
+ thread_safe (~> 0.3, >= 0.3.4)
17
+ tzinfo (~> 1.1)
18
+ addressable (2.3.8)
19
+ axiom-types (0.1.1)
20
+ descendants_tracker (~> 0.0.4)
21
+ ice_nine (~> 0.11.0)
22
+ thread_safe (~> 0.3, >= 0.3.1)
23
+ builder (3.2.2)
24
+ coercible (1.0.0)
25
+ descendants_tracker (~> 0.0.1)
26
+ descendants_tracker (0.0.4)
27
+ thread_safe (~> 0.3, >= 0.3.1)
28
+ equalizer (0.0.11)
29
+ grape (0.13.0)
30
+ activesupport
31
+ builder
32
+ hashie (>= 2.1.0)
33
+ multi_json (>= 1.3.2)
34
+ multi_xml (>= 0.5.2)
35
+ rack (>= 1.3.0)
36
+ rack-accept
37
+ rack-mount
38
+ virtus (>= 1.0.0)
39
+ hashie (3.4.3)
40
+ hypertext_application_language (0.0.1)
41
+ i18n (0.7.0)
42
+ ice_nine (0.11.1)
43
+ json (1.8.3)
44
+ json (1.8.3-java)
45
+ minitest (5.8.2)
46
+ multi_json (1.11.2)
47
+ multi_xml (0.5.5)
48
+ rack (1.6.4)
49
+ rack-accept (0.4.5)
50
+ rack (>= 0.4)
51
+ rack-mount (0.8.3)
52
+ rack (>= 1.0.0)
53
+ rake (10.4.2)
54
+ thread_safe (0.3.5)
55
+ thread_safe (0.3.5-java)
56
+ tzinfo (1.2.2)
57
+ thread_safe (~> 0.1)
58
+ virtus (1.0.5)
59
+ axiom-types (~> 0.1)
60
+ coercible (~> 1.0)
61
+ descendants_tracker (~> 0.0, >= 0.0.3)
62
+ equalizer (~> 0.0, >= 0.0.9)
63
+
64
+ PLATFORMS
65
+ java
66
+ ruby
67
+
68
+ DEPENDENCIES
69
+ bundler
70
+ grape-hypertext_application_language!
71
+ rake
72
+
73
+ BUNDLED WITH
74
+ 1.10.6
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'grape-hypertext_application_language'
3
+ spec.version = '0.0.0'
4
+ spec.summary = %q{Grape extensions for Hypertext Application Language}
5
+ spec.description = %q{}
6
+ spec.homepage = 'http://stateless.co/hal_specification.html'
7
+ spec.authors = ['Roy Ratcliffe']
8
+ spec.email = ['roy@pioneeringsoftware.co.uk']
9
+ spec.files = `git ls-files -z`.split("\x0")
10
+ spec.license = 'MIT'
11
+
12
+ spec.add_dependency 'grape'
13
+ spec.add_dependency 'hypertext_application_language'
14
+ spec.add_dependency 'addressable'
15
+
16
+ spec.add_development_dependency 'bundler'
17
+ spec.add_development_dependency 'rake'
18
+ end
@@ -0,0 +1,2 @@
1
+ require 'grape/hal/content_types'
2
+ require 'grape/hal/formatter'
@@ -0,0 +1,45 @@
1
+ require 'grape'
2
+ require 'hypertext_application_language'
3
+ require 'addressable/uri'
4
+ require 'json'
5
+
6
+ module Grape::Formatter::Hal
7
+ class Json
8
+ # Formats a Grape end-point body using JSON-formatted hypertext application
9
+ # language. Assumes that the body is a hypertext-application-language
10
+ # representation, either a resource or collection of resources.
11
+ #
12
+ # Derives the end-point's request URL using only the plain Rack environment
13
+ # if necessary; doing so assumes nothing about any higher-level framework,
14
+ # e.g. Grape or Sinatra. Uses the base URL to adjust all the relative
15
+ # hypertext references. They become absolute references; meaning not
16
+ # relative, i.e. the reference does not include a scheme. Applies this
17
+ # adjustment to the representation itself as well as all the embedded
18
+ # representations if any.
19
+ #
20
+ # Automatically converts the body to a hypertext-application-language
21
+ # representation unless the body is already such a HAL
22
+ # representation. Passes the Rack environment to the HAL
23
+ # converter. Converters can use the environment to extract addressing
24
+ # information for the representation's links, including the self link.
25
+ def self.call(body, env)
26
+ unless body.is_a?(HypertextApplicationLanguage::Representation)
27
+ return body unless body.respond_to?(:to_hal)
28
+ body = body.to_hal(env: env)
29
+ end
30
+
31
+ endpoint = env['api.endpoint']
32
+ request = endpoint ? endpoint.request : Rack::Request.new(env)
33
+ base_uri = Addressable::URI.parse(request.base_url + request.script_name + '/')
34
+
35
+ representations = [body] + body.representations
36
+ representations.map(&:links).flatten.each do |link|
37
+ uri = Addressable::URI.parse(link.href)
38
+ link.href = base_uri.join(uri).to_s unless uri.absolute?
39
+ end
40
+
41
+ renderer = HypertextApplicationLanguage::HashRepresentationRenderer.new
42
+ JSON.pretty_generate(renderer.render(body))
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ require 'grape'
2
+
3
+ Grape::ContentTypes::CONTENT_TYPES.merge! hal_json: 'application/hal+json'
@@ -0,0 +1,3 @@
1
+ require 'grape/formatter/hal/json'
2
+
3
+ Grape::Formatter::Base.singleton_class.const_get(:FORMATTERS).merge! hal_json: Grape::Formatter::Hal::Json
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grape-hypertext_application_language
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Roy Ratcliffe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ name: grape
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ name: hypertext_application_language
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ name: addressable
48
+ prerelease: false
49
+ type: :runtime
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ name: bundler
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ name: rake
76
+ prerelease: false
77
+ type: :development
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: ''
84
+ email:
85
+ - roy@pioneeringsoftware.co.uk
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - Gemfile.lock
93
+ - Rakefile
94
+ - grape-hypertext_application_language.gemspec
95
+ - lib/grape-hypertext_application_language.rb
96
+ - lib/grape/formatter/hal/json.rb
97
+ - lib/grape/hal/content_types.rb
98
+ - lib/grape/hal/formatter.rb
99
+ homepage: http://stateless.co/hal_specification.html
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.4.8
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Grape extensions for Hypertext Application Language
123
+ test_files: []