stathat-json 0.0.2

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: 3e11e1f213f0fb5a8e8d1cdcd6debf99483e4505
4
+ data.tar.gz: 5001f7d597113e1648b43980720e2d8d1a00d0a8
5
+ SHA512:
6
+ metadata.gz: f1061139f95edfc6167badb8f376fd253075978ece70895fd5dd3516dfc09e79971a70d7beca7d5adeefe3a2db7627018bf0eb462b5b276182ddeca0aa9b7e6b
7
+ data.tar.gz: f69b067199d963d6d3da1dd8f02cd0454db8fece10c1f48bab5ba19f5323e6f88398c12ac9b6ea29985854ade6854cad2e8f054cc5df93aea16131ce6f2c8785
data/.gitignore ADDED
@@ -0,0 +1,18 @@
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
+ .idea
16
+ .ruby-version
17
+ .ruby-gemset
18
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format=progress
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ install:
3
+ - gem install bundler --version '1.7'
4
+ - bundle install
5
+ rvm:
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1.0
9
+ - rbx-2.2.10
10
+ - jruby-19mode
11
+ - ruby-head
12
+ - jruby-head
13
+ script:
14
+ - bundle exec rspec
15
+ addons:
16
+ code_climate:
17
+ repo_token:
18
+ secure: KNVmRK+hN1XzayNTlZIdA8jpkeExMjnSdQwH/eZsJe/7BfHJz5+2t0j7M0iwM+xaN5r2XXoy/fJiqG+DBeUcOIzj5vGaKC9BCjzVoDc81A/lIrYpSd33VN3AeMfltq6eAJYLu66ZgqDhka7fTpJwQ7dPE/sH7S/baYL58oo3FEk=
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in stathat-json.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Nathan Keyes
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # StatHat::Json
2
+
3
+ StatHat JSON API Client.
4
+
5
+ [![Build Status](https://travis-ci.org/nkeyes/stathat-json.png?branch=master)](https://travis-ci.org/nkeyes/stathat-json)
6
+ [![Gem Version](https://badge.fury.io/rb/stathat-json.png)](http://badge.fury.io/rb/stathat-json)
7
+ [![Dependency Status](https://gemnasium.com/nkeyes/stathat-json.svg)](https://gemnasium.com/nkeyes/stathat-json)
8
+ [![Code Climate](https://codeclimate.com/github/nkeyes/stathat-json/badges/gpa.svg)](https://codeclimate.com/github/nkeyes/stathat-json)
9
+ [![Test Coverage](https://codeclimate.com/github/nkeyes/stathat-json/badges/coverage.svg)](https://codeclimate.com/github/nkeyes/stathat-json)
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'stathat-json'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install stathat-json
26
+
27
+ ## Usage
28
+
29
+ TODO: Write usage instructions here
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it ( https://github.com/[my-github-username]/stathat-json/fork )
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup :default, :test, :development
4
+
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ require 'rspec/core/rake_task'
8
+
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
10
+ spec.pattern = 'spec/**/*_spec.rb'
11
+ end
12
+
13
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
14
+ spec.pattern = 'spec/**/*_spec.rb'
15
+ spec.rcov = true
16
+ end
17
+
18
+ Dir["tasks/**/*.rake"].each { |ext| load ext }
19
+
20
+ task :spec
21
+ task default: :spec
22
+
@@ -0,0 +1,6 @@
1
+ Dir["#{File.dirname(__FILE__)}/#{File.basename(__FILE__, '.rb')}/*.rb"].each {|file| require file }
2
+
3
+ module StatHat
4
+ module Json
5
+ end
6
+ end
@@ -0,0 +1,36 @@
1
+ require 'stathat/json/publisher'
2
+ require 'stathat/json/sync_api'
3
+ require 'stathat/json/response'
4
+
5
+ module StatHat
6
+ module Json
7
+ module Api
8
+ class << self
9
+ extend Forwardable
10
+
11
+ def sync_api
12
+ StatHat::Json::SyncApi
13
+ end
14
+
15
+ def future
16
+ @pool ||= StatHat::Json::Publisher.pool(size: ENV['STATHAT_PUBLISHER_POOL_SIZE'] || 10)
17
+ @pool.future
18
+ end
19
+
20
+ def post_stats(stats)
21
+ StatHat::Json::Response.new(future.post_stats(stats))
22
+ end
23
+
24
+ def post_count(stat, count=1, t=nil)
25
+ StatHat::Json::Response.new(future.post_count(stat, count, t))
26
+ end
27
+
28
+ def post_value(stat, value, t=nil)
29
+ StatHat::Json::Response.new(future.post_value(stat, value, t))
30
+ end
31
+
32
+ def_delegators :sync_api, *(StatHat::Json::SyncApi.public_instance_methods(false) - [:post_stats, :post_count, :post_value])
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ require 'stathat/json/sync_api'
2
+ require 'celluloid/io'
3
+
4
+ module StatHat
5
+ module Json
6
+ class Publisher
7
+ include StatHat::Json::SyncApi
8
+ include Celluloid::IO
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,64 @@
1
+ require 'multi_json'
2
+ require 'celluloid/future'
3
+
4
+ module StatHat
5
+ module Json
6
+ class Response
7
+
8
+ attr_accessor :future, :body, :status, :message, :multiple
9
+
10
+ alias_method :msg, :message
11
+ alias_method :msg=, :message=
12
+
13
+ def initialize(response)
14
+ @parsed = false
15
+ case response
16
+ when Celluloid::Future
17
+ @future = response
18
+ when Faraday::Response
19
+ @body = response.body
20
+ else
21
+ @body = response
22
+ end
23
+ end
24
+
25
+ def body
26
+ @body ||= future.value.body if future
27
+ @body
28
+ end
29
+
30
+ def status
31
+ _parse
32
+ @status
33
+ end
34
+
35
+ def message
36
+ _parse
37
+ @message
38
+ end
39
+
40
+ def multiple
41
+ _parse
42
+ @multiple
43
+ end
44
+
45
+ def valid?
46
+ status == 200
47
+ end
48
+
49
+ private
50
+ def _parse
51
+ return if @parsed
52
+
53
+ parsed_body = MultiJson.load(body)
54
+
55
+ parsed_body.each_pair do |k, v|
56
+ setter = "#{k}="
57
+ public_send(setter, v) if respond_to? setter
58
+ end
59
+
60
+ @parsed = true
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,55 @@
1
+ require 'faraday'
2
+ require 'multi_json'
3
+ require 'stathat/json/response'
4
+
5
+ module StatHat
6
+ module Json
7
+ module SyncApi
8
+ extend self
9
+
10
+ EZ_URL = 'https://api.stathat.com'.freeze
11
+ EZ_URI = '/ez'.freeze
12
+
13
+ def ez_key
14
+ @@ez_key ||= ENV['STATHAT_EZKEY']
15
+ end
16
+
17
+ def ez_key=(val)
18
+ @@ez_key = val
19
+ end
20
+
21
+ def connection
22
+ @connection ||= initialize_connection
23
+ end
24
+
25
+ def initialize_connection
26
+ Faraday.new EZ_URL do |conn|
27
+ conn.adapter :net_http_persistent
28
+ end
29
+ end
30
+
31
+ def post_stats(stats)
32
+ response = connection.post do |req|
33
+ req.url(EZ_URI)
34
+ req.headers['Content-Type'] = 'application/json'
35
+ req.body = build_post_data(stats)
36
+ end
37
+
38
+ StatHat::Json::Response.new response
39
+ end
40
+
41
+ def post_count(stat, count=1, t=nil)
42
+ post_stats(stat: stat, count: count, t: t)
43
+ end
44
+
45
+ def post_value(stat, value, t=nil)
46
+ post_stats(stat: stat, value: value, t: t)
47
+ end
48
+
49
+ def build_post_data(stats)
50
+ stats = [stats].flatten
51
+ MultiJson.dump({ ezkey: ez_key, data: stats })
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,5 @@
1
+ module StatHat
2
+ module Json
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'config'))
5
+
6
+ require 'simplecov'
7
+ require 'codeclimate-test-reporter'
8
+ SimpleCov.start do
9
+ formatter SimpleCov::Formatter::MultiFormatter[
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ CodeClimate::TestReporter::Formatter
12
+ ]
13
+ end
14
+
15
+ require 'bundler/setup'
16
+
17
+ Bundler.require(:default, :test)
18
+
19
+ RSpec.configure do |config|
20
+ #Run any specs tagged with focus: true or all specs if none tagged
21
+ config.filter_run focus: true
22
+ config.run_all_when_everything_filtered = true
23
+
24
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'stathat/json/api'
3
+
4
+ module StatHat
5
+ module Json
6
+ describe Api do
7
+
8
+ describe '.future' do
9
+ let(:pool) {double}
10
+ it 'uses StatHat::Json::Publisher.pool' do
11
+ expect(StatHat::Json::Publisher).to receive(:pool).and_return(pool)
12
+ expect(pool).to receive(:future)
13
+ subject.future
14
+ end
15
+ end
16
+
17
+ describe '.post_stats' do
18
+ let(:future) { double }
19
+ it 'uses the celluloid thread pool' do
20
+ expect(subject).to receive(:future).and_return(future)
21
+ expect(future).to receive(:post_stats).with(stat: 'stat', count: 1)
22
+ subject.post_stats(stat: 'stat', count: 1)
23
+ end
24
+ end
25
+
26
+ describe '.post_count' do
27
+ let(:future) { double }
28
+ it 'uses the celluloid thread pool' do
29
+ expect(subject).to receive(:future).and_return(future)
30
+ expect(future).to receive(:post_count).with('stat', 1, 12345)
31
+ subject.post_count('stat', 1, 12345)
32
+ end
33
+ end
34
+
35
+ describe '.post_value' do
36
+ let(:future) { double }
37
+ it 'uses the celluloid thread pool' do
38
+ expect(subject).to receive(:future).and_return(future)
39
+ expect(future).to receive(:post_value).with('stat', 3.14159, 12345)
40
+ subject.post_value('stat', 3.14159, 12345)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'stathat/json/response'
3
+ require 'multi_json'
4
+ module StatHat
5
+ module Json
6
+ describe Response do
7
+ let(:ok_200) { MultiJson.dump({status: 200, msg: 'ok', multiple: 10}) }
8
+ let(:error_500) { MultiJson.dump({status: 500, msg: 'no stat'}) }
9
+
10
+ it 'parses a 200 response' do
11
+
12
+ response = Response.new(ok_200)
13
+
14
+ expect(response.status).to eq 200
15
+ expect(response.message).to eq 'ok'
16
+ expect(response.multiple).to eq 10
17
+
18
+ end
19
+
20
+ it 'parses a 500 response' do
21
+ response = Response.new(error_500)
22
+
23
+ expect(response.status).to eq 500
24
+ expect(response.message).to eq 'no stat'
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'stathat/json/sync_api'
3
+
4
+ module StatHat
5
+ module Json
6
+ describe SyncApi do
7
+ describe '.initialize_connection' do
8
+ it 'should use net_http_persistent' do
9
+ expect_any_instance_of(Faraday::Connection).to receive(:adapter).with(:net_http_persistent)
10
+ subject.connection
11
+ end
12
+ end
13
+
14
+ describe '.post_stats' do
15
+ let(:json_string) { '{"ezkey":"EZ_KEY","data":[{"stat":"stat","count":1}]}' }
16
+ specify do
17
+ expect_any_instance_of(Faraday::Request).to receive(:url).with subject::EZ_URI
18
+ expect_any_instance_of(Faraday::Request).to receive(:headers).at_least(1).times.and_call_original
19
+ expect_any_instance_of(Faraday::Request).to receive(:body=).with(json_string)
20
+
21
+ subject.ez_key = 'EZ_KEY'
22
+ subject.post_stats(stat: 'stat', count: 1)
23
+ end
24
+ end
25
+
26
+ describe '.post_count' do
27
+ let(:stat) { {stat: 'count_stat', count: 2, t: nil} }
28
+ it 'should proxy to .post_stats' do
29
+ expect(subject).to receive(:post_stats).with(stat)
30
+
31
+ subject.post_count('count_stat', 2)
32
+ end
33
+ end
34
+
35
+ describe '.post_count' do
36
+ let(:stat) { {stat: 'value_stat', value: 3.14159, t: 12345} }
37
+ it 'should proxy to .post_stats' do
38
+ expect(subject).to receive(:post_stats).with(stat)
39
+
40
+ subject.post_value('value_stat', 3.14159, 12345)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'stathat/json/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'stathat-json'
8
+ spec.version = StatHat::Json::VERSION
9
+ spec.authors = ['Nathan Keyes']
10
+ spec.email = ['nkeyes@gmail.com']
11
+ spec.summary = %q{StatHat JSON API Client.}
12
+ spec.description = %q{StatHat JSON API Client.}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec', '~> 3.1'
25
+ spec.add_development_dependency 'simplecov', '~> 0.9'
26
+
27
+
28
+ spec.add_dependency 'celluloid-io', '~> 0.16'
29
+ spec.add_dependency 'faraday', '~> 0.9'
30
+ spec.add_dependency 'multi_json', '~> 1.10'
31
+ spec.add_dependency 'net-http-persistent', '~> 2.9'
32
+ end
data/tasks/bump.rake ADDED
@@ -0,0 +1,30 @@
1
+ desc 'shortcut for bump:patch'
2
+ task bump: 'bump:patch'
3
+
4
+ namespace :bump do
5
+ desc 'Bump x.y.Z'
6
+ task :patch
7
+
8
+ desc 'Bump x.Y.z'
9
+ task :minor
10
+
11
+ desc 'Bump X.y.z'
12
+ task :major
13
+ end
14
+
15
+ # extracted and modified from https://github.com/grosser/project_template
16
+ rule /^bump:.*/ do |t|
17
+ sh "git status | grep 'nothing to commit'" # ensure we are not dirty
18
+ index = ['major', 'minor', 'patch'].index(t.name.split(':').last)
19
+ file = 'lib/stathat/json/version.rb'
20
+
21
+ version_file = File.read(file)
22
+ old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
23
+ version_parts[index] = version_parts[index].to_i + 1
24
+ version_parts[2] = 0 if index < 2
25
+ version_parts[1] = 0 if index < 1
26
+ new_version = version_parts * '.'
27
+ File.open(file, 'w') { |f| f.write(version_file.sub(old_version, new_version)) }
28
+
29
+ sh "bundle && git add #{file} && git commit -m 'bump version to #{new_version}'"
30
+ end
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stathat-json
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Nathan Keyes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: codeclimate-test-reporter
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
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
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.9'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: celluloid-io
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.16'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.16'
97
+ - !ruby/object:Gem::Dependency
98
+ name: faraday
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.9'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: multi_json
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.10'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.10'
125
+ - !ruby/object:Gem::Dependency
126
+ name: net-http-persistent
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.9'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.9'
139
+ description: StatHat JSON API Client.
140
+ email:
141
+ - nkeyes@gmail.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".travis.yml"
149
+ - Gemfile
150
+ - LICENSE.txt
151
+ - README.md
152
+ - Rakefile
153
+ - lib/stathat/json.rb
154
+ - lib/stathat/json/api.rb
155
+ - lib/stathat/json/publisher.rb
156
+ - lib/stathat/json/response.rb
157
+ - lib/stathat/json/sync_api.rb
158
+ - lib/stathat/json/version.rb
159
+ - spec/spec_helper.rb
160
+ - spec/stathat/json/api_spec.rb
161
+ - spec/stathat/json/response_spec.rb
162
+ - spec/stathat/json/sync_api_spec.rb
163
+ - stathat-json.gemspec
164
+ - tasks/bump.rake
165
+ homepage: ''
166
+ licenses:
167
+ - MIT
168
+ metadata: {}
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ requirements: []
184
+ rubyforge_project:
185
+ rubygems_version: 2.2.2
186
+ signing_key:
187
+ specification_version: 4
188
+ summary: StatHat JSON API Client.
189
+ test_files:
190
+ - spec/spec_helper.rb
191
+ - spec/stathat/json/api_spec.rb
192
+ - spec/stathat/json/response_spec.rb
193
+ - spec/stathat/json/sync_api_spec.rb