grape_json_api_streamer 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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