sjs 0.2.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.
@@ -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: