grape_json_api_streamer 0.0.3

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: 3947b19e1ad570c1531abc9c18f65265ff142a46
4
+ data.tar.gz: f68ff8b85660052472a4b10f7fad6f4812880fd3
5
+ SHA512:
6
+ metadata.gz: 8d68e245263cc345eb74dcf5215d30d85cbc275b88b2dcf7ce15e5a82fb4e8c02035ff301c9dca64b238fe3c8d872a25e72236f9b97b7a468389cf160ed2638d
7
+ data.tar.gz: 1fe50ea846c4e06fd7fdcea3def08759cc17aa18a212acbcfb275e822fc07c9d766e53e06aa78a8de857b702fe55f08a221146e1a285902b618226e249a9bccb
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ *.gem
16
+ coverage
17
+ dump.rdb
data/.hound.yml ADDED
@@ -0,0 +1,16 @@
1
+ LineLength:
2
+ Description: 'Limit lines to 130 characters.'
3
+ Max: 130
4
+
5
+ StringLiterals:
6
+ EnforcedStyle: single_quotes
7
+
8
+ HashSyntax:
9
+ Description: >
10
+ Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
11
+ { :a => 1, :b => 2 }.
12
+ EnforcedStyle: ruby19
13
+ Enabled: true
14
+
15
+ RedundantBegin:
16
+ Enabled: false
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ inherit_from: .hound.yml
2
+
3
+ Documentation:
4
+ Enabled: false
5
+ NumericLiterals:
6
+ MinDigits: 10
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.0
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in starbuck_core.gemspec
4
+ gemspec
5
+
6
+ gem 'rubocop', require: false
7
+ gem 'simplecov', require: false, group: :test
8
+ gem 'pry', require: false
data/README.md ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ t.pattern = 'test/*_spec.rb'
8
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'grape/json_api/streamer'
5
+ require 'grape/json_api/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'grape_json_api_streamer'
9
+ spec.version = Grape::JSONAPI::Streamer::VERSION
10
+ spec.authors = ['David Roy']
11
+ spec.email = ['david.roy@cabbit.co.uk']
12
+ spec.summary = 'Class for streaming JSON API via Grape stream'
13
+ spec.homepage = 'https://github.com/Cabbit/grape_json_api_streamer'
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(/^(test|spec|features)/)
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_dependency 'grape', '~> 0.16', '>= 0.16.2'
21
+ spec.add_dependency 'jsonapi-serializers', '~> 0.13', '>= 0.13.0'
22
+ spec.add_development_dependency 'minitest-spec-context', '~> 0.0.3'
23
+ spec.add_development_dependency 'mocha', '~> 1.1.0'
24
+ spec.add_development_dependency 'bundler', '~> 1.7'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rack-test', '~> 0.6.3'
27
+ end
@@ -0,0 +1,29 @@
1
+ require 'jsonapi-serializers'
2
+
3
+ module Grape
4
+ module JSONAPI
5
+ class Streamer
6
+ def initialize(collection)
7
+ @collection = collection
8
+ end
9
+
10
+ def each
11
+ yield '{"data":['
12
+ first = true
13
+ @collection.lazy.each do |object|
14
+ buffer = ''
15
+ buffer << ',' unless first
16
+ first = false
17
+ data = serialize(object)
18
+ buffer << JSON.unparse(data)[8..-2].strip
19
+ yield buffer
20
+ end
21
+ yield ']}'
22
+ end
23
+
24
+ def serialize(model)
25
+ ::JSONAPI::Serializer.serialize(model, is_collection: false)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,7 @@
1
+ module Grape
2
+ module JSONAPI
3
+ class Streamer
4
+ VERSION = '0.0.3'
5
+ end
6
+ end
7
+ end
data/test/.keep ADDED
File without changes
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+ require_relative './test_helper'
3
+ require 'grape'
4
+ require 'grape/json_api/streamer'
5
+
6
+ class Model
7
+ def initialize(id)
8
+ @id = id
9
+ end
10
+
11
+ def id
12
+ @id
13
+ end
14
+
15
+ def foo
16
+ 'bar'
17
+ end
18
+ end
19
+
20
+ class ModelSerializer
21
+ include JSONAPI::Serializer
22
+
23
+ attribute :foo
24
+ end
25
+
26
+ class MockAPI < Grape::API
27
+ format :json
28
+ content_type :json, 'application/json;charset=UTF-8'
29
+
30
+ resource :foo do
31
+ get do
32
+ model = Model.new(1)
33
+ model2 = Model.new(2)
34
+ stream Grape::JSONAPI::Streamer.new([model, model2])
35
+ end
36
+ end
37
+ end
38
+
39
+ class StreamerSpec < Minitest::Spec
40
+ include Rack::Test::Methods
41
+
42
+ def app
43
+ MockAPI
44
+ end
45
+
46
+ let(:body) do
47
+ {
48
+ 'data' => [
49
+ {
50
+ 'type' => 'models',
51
+ 'id' => '1',
52
+ 'attributes' => { 'foo' => 'bar' },
53
+ 'links' => { 'self' => '/models/1' }
54
+ }, {
55
+ 'type' => 'models',
56
+ 'id' => '2',
57
+ 'attributes' => { 'foo' => 'bar' },
58
+ 'links' => { 'self' => '/models/2' }
59
+ }
60
+ ]
61
+ }
62
+ end
63
+
64
+ it 'should output json response' do
65
+ get '/foo'
66
+
67
+ assert_equal body, JSON.parse(last_response.body)
68
+ assert_equal 200, last_response.status
69
+ end
70
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_group 'Lib', 'lib'
5
+ end
6
+
7
+ ENV['RACK_ENV'] = 'test'
8
+ $VERBOSE = nil
9
+ require 'pry'
10
+ require 'minitest/autorun'
11
+ Dir.glob('./test/support/*.rb').each { |file| require file }
12
+
13
+ require 'mocha/mini_test'
14
+ require 'minitest-spec-context'
15
+ require 'rack/test'
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grape_json_api_streamer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - David Roy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: grape
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.16'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.16.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.16'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.16.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: jsonapi-serializers
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.13'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.13.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.13'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.13.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: minitest-spec-context
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.0.3
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 0.0.3
67
+ - !ruby/object:Gem::Dependency
68
+ name: mocha
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 1.1.0
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 1.1.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: bundler
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1.7'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '1.7'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rake
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '10.0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '10.0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: rack-test
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.6.3
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.6.3
123
+ description:
124
+ email:
125
+ - david.roy@cabbit.co.uk
126
+ executables: []
127
+ extensions: []
128
+ extra_rdoc_files: []
129
+ files:
130
+ - ".gitignore"
131
+ - ".hound.yml"
132
+ - ".rspec"
133
+ - ".rubocop.yml"
134
+ - ".ruby-version"
135
+ - Gemfile
136
+ - README.md
137
+ - Rakefile
138
+ - grape_json_api_streamer.gemspec
139
+ - lib/grape/json_api/streamer.rb
140
+ - lib/grape/json_api/version.rb
141
+ - test/.keep
142
+ - test/streamer_spec.rb
143
+ - test/test_helper.rb
144
+ homepage: https://github.com/Cabbit/grape_json_api_streamer
145
+ licenses: []
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.5.1
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Class for streaming JSON API via Grape stream
167
+ test_files:
168
+ - test/.keep
169
+ - test/streamer_spec.rb
170
+ - test/test_helper.rb