sjs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8337d80fb2627d78d0c24335a8c45c63198ddb3e
4
+ data.tar.gz: af746bdb58ff0d56e00f3e5af978e90390ad5215
5
+ SHA512:
6
+ metadata.gz: da8839aa4938507cba30e2ee7102d88fd87040121abbcdc0cf45cdce2633a7d0957ed4951dcabf25f39bd5ab918779cb119f76170bd50fd78983f71b7fdaa04f
7
+ data.tar.gz: 3e67dc1da4b199d7225dd334677286f03205b7224d43664cd2d91cfaeeb6c360b907ceab71bf5d3e3da5b1b02c109b55a7ea5e6c4d1f88cc90075805ab83b708
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1 @@
1
+ jruby-9.0.5.0
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sjs.gemspec
4
+ gemspec
5
+
6
+ @@check ||= at_exit do
7
+ require 'lock_jar/bundler'
8
+ LockJar::Bundler.lock!
9
+ end
data/Jarfile ADDED
@@ -0,0 +1,2 @@
1
+ jar 'com.tobedevoured.json:simplestream:0.0.10'
2
+ jar 'org.slf4j:slf4j-simple:jar:1.7.18'
@@ -0,0 +1,28 @@
1
+ ---
2
+ version: 0.15.0
3
+ merged:
4
+ - gem:sjs:Jarfile.lock
5
+ groups:
6
+ default:
7
+ dependencies:
8
+ - com.googlecode.json-simple:json-simple:jar:1.1.1
9
+ - com.tobedevoured.json:simplestream:jar:0.0.10
10
+ - commons-codec:commons-codec:jar:1.9
11
+ - commons-logging:commons-logging:jar:1.2
12
+ - org.apache.httpcomponents:httpclient:jar:4.5.2
13
+ - org.apache.httpcomponents:httpcore:jar:4.4.4
14
+ - org.slf4j:slf4j-api:jar:1.7.18
15
+ - org.slf4j:slf4j-simple:jar:1.7.18
16
+ artifacts:
17
+ - jar:com.tobedevoured.json:simplestream:jar:0.0.10:
18
+ transitive:
19
+ com.googlecode.json-simple:json-simple:jar:1.1.1: {}
20
+ org.slf4j:slf4j-api:jar:1.7.18: {}
21
+ org.apache.httpcomponents:httpclient:jar:4.5.2:
22
+ commons-codec:commons-codec:jar:1.9: {}
23
+ org.apache.httpcomponents:httpcore:jar:4.4.4: {}
24
+ commons-logging:commons-logging:jar:1.2: {}
25
+ - jar:org.slf4j:slf4j-simple:jar:1.7.18:
26
+ transitive: {}
27
+ remote_repositories:
28
+ - http://repo1.maven.org/maven2/
@@ -0,0 +1,61 @@
1
+ # Simple JSON Streaming for JRuby and friends.
2
+
3
+ ## Installation
4
+
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'sjs'
9
+ ```
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install sjs
18
+
19
+ ## Usage
20
+
21
+ Uses https://github.com/mguymon/simple_stream to parse a stream of JSON.
22
+
23
+ Stream json fragments to `Sjs::Simplestream`, which returns an array of entities
24
+ and optional will execute a callback. `Sjs::Simplestream` will buffer fragments for
25
+ 8092 characters by default than parse it into entities. The stream
26
+ can also be flushed earlier with `flush!`
27
+
28
+ ### Examples
29
+
30
+ #### Basic
31
+
32
+ handler = Sjs::SimpleStream
33
+ entities = handler.stream(json_fragment)
34
+ entities += handler.flush!
35
+
36
+ #### With callback
37
+
38
+ handler = Sjs::SimpleStream
39
+ handler.apply_callback do |entities|
40
+ puts entities
41
+ end
42
+ handler.stream(json_fragment) # entities are still returned as well in the callback
43
+ handler.flush!
44
+
45
+ #### Stream from URL with callback
46
+
47
+ handler = Sjs::SimpleStream
48
+ # runs until the request finishes
49
+ handler.stream_from_url('http://localhost/sample') do
50
+ puts entities
51
+ end
52
+
53
+ ## Development
54
+
55
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
56
+
57
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
58
+
59
+ ## Contributing
60
+
61
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/sjs.
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require 'yard'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ YARD::Rake::YardocTask.new
8
+
9
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "sjs"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,5 @@
1
+ require "sjs/version"
2
+
3
+ module Sjs
4
+
5
+ end
@@ -0,0 +1,87 @@
1
+ require 'sjs'
2
+ require 'lock_jar'
3
+ LockJar.load(resolve: true)
4
+
5
+ java_import 'com.tobedevoured.json.SimpleStream'
6
+ java_import 'java.util.Map'
7
+ java_import 'java.util.List'
8
+
9
+ module Sjs
10
+ class SimpleStream
11
+ StreamError = Class.new(::StandardError)
12
+
13
+ attr_reader :parser
14
+
15
+ # @param buffer [Integer] buffer amount until json is parsed
16
+ def initialize(buffer = 8092)
17
+ @parser = ::SimpleStream.new(buffer)
18
+ end
19
+
20
+ # @param raw_json [String] raw_json
21
+ def stream(raw_json)
22
+ begin
23
+ entities = parser.stream(raw_json.to_s)
24
+ transform_to_ruby(entities)
25
+ rescue => ex
26
+ raise StreamError.new(ex)
27
+ end
28
+ end
29
+
30
+ # @param callback [Block] Block that will yield the parsed entities
31
+ def apply_callback(&callback)
32
+ parser_callback = proc do |data|
33
+ callback.call(transform_to_ruby(entities))
34
+ end
35
+
36
+ parser.setCallback(parser_callback)
37
+ end
38
+
39
+ # @param url [String]
40
+ # @param timeout [Integer] seconds of inactivitiy until connection times out, defaults to 10.
41
+ # @param callback [Block] Block that will yield the parsed entities
42
+ def stream_from_url(url, timeout = 10, &callback)
43
+ apply_callback(&callback)
44
+ parser.streamFromUrl(url, timeout)
45
+ rescue => ex
46
+ raise StreamError.new(ex)
47
+ end
48
+
49
+ def reset!
50
+ parser.reset
51
+ rescue => ex
52
+ raise StreamError.new(ex)
53
+ end
54
+
55
+ def flush!
56
+ transform_to_ruby(parser.flush)
57
+ rescue => ex
58
+ raise StreamError.new(ex)
59
+ end
60
+
61
+ private
62
+
63
+ # Converts Java Maps and Lists to Ruby
64
+ def transform_to_ruby(data)
65
+ case data
66
+ when Array, List
67
+ transformed_data = data.to_a.map do |v|
68
+ transform_to_ruby(v)
69
+ end
70
+ when Map
71
+ transformed_data = Naether::Java.convert_to_ruby_hash(data)
72
+ transformed_data.each do |k, v|
73
+ transformed_data[k] = transform_to_ruby(v)
74
+ end
75
+ when Hash
76
+ transformed_data = data
77
+ transformed_data.each do |k, v|
78
+ transformed_data[k] = transform_to_ruby(v)
79
+ end
80
+ else
81
+ transformed_data = data
82
+ end
83
+
84
+ transformed_data
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ module Sjs
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sjs/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sjs"
8
+ spec.version = Sjs::VERSION
9
+ spec.authors = ["Michael Guymon"]
10
+ spec.email = ["michael@tobedevoured.com"]
11
+
12
+ spec.summary = %q{Simple JSON Streaming}
13
+ spec.description = %q{Simple JSON Streaming}
14
+ spec.homepage = "https://github.com/mguymon/sjs"
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "bin"
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency 'lock_jar', '~> 0.15'
21
+ spec.add_development_dependency "bundler", "~> 1.11"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.0"
24
+ spec.add_development_dependency "yard"
25
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sjs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Guymon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-02 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.15'
19
+ name: lock_jar
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.15'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.11'
33
+ name: bundler
34
+ prerelease: false
35
+ type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '10.0'
47
+ name: rake
48
+ prerelease: false
49
+ type: :development
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
61
+ name: rspec
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.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: yard
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: Simple JSON Streaming
84
+ email:
85
+ - michael@tobedevoured.com
86
+ executables:
87
+ - console
88
+ - setup
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - ".rspec"
94
+ - ".ruby-version"
95
+ - ".travis.yml"
96
+ - Gemfile
97
+ - Jarfile
98
+ - Jarfile.lock
99
+ - README.md
100
+ - Rakefile
101
+ - bin/console
102
+ - bin/setup
103
+ - lib/sjs.rb
104
+ - lib/sjs/simple_stream.rb
105
+ - lib/sjs/version.rb
106
+ - sjs.gemspec
107
+ homepage: https://github.com/mguymon/sjs
108
+ licenses: []
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.4.8
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Simple JSON Streaming
130
+ test_files: []
131
+ has_rdoc: