loginator 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.metrics +4 -0
- data/.rspec +1 -0
- data/.rubocop.yml +15 -0
- data/Gemfile +3 -0
- data/Guardfile +23 -0
- data/README.md +43 -0
- data/Rakefile +23 -0
- data/examples/rack/logging.rb +26 -0
- data/examples/rack/uuid.rb +13 -0
- data/lib/loginator/jsonable_struct.rb +33 -0
- data/lib/loginator/request.rb +23 -0
- data/lib/loginator/response.rb +25 -0
- data/lib/loginator/version.rb +4 -0
- data/lib/loginator.rb +5 -0
- data/loginator.gemspec +39 -0
- data/loginator.reek +0 -0
- data/spec/acceptance/lib/loginator/.gitignore +0 -0
- data/spec/fixtures/.gitignore +0 -0
- data/spec/fixtures.rb +12 -0
- data/spec/integration/lib/loginator/.gitignore +0 -0
- data/spec/integration/lib/loginator/request_spec.rb +13 -0
- data/spec/integration/lib/loginator/response_spec.rb +13 -0
- data/spec/resources/.gitignore +0 -0
- data/spec/resources.rb +16 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/shared/lib/loginator/jsonable_struct_spec.rb +13 -0
- data/spec/support/shared/lib/loginator/struct_with_defaults_spec.rb +39 -0
- data/spec/unit/lib/loginator/.gitignore +0 -0
- metadata +323 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4579d7d89bec5884c7cdee42ae1abdc70b5ef2ff
|
4
|
+
data.tar.gz: 85ad6d2d9da2a039caac07fd85dddfee2b238dbf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8223b4590399f9ac81f20bdf63ebc28efa118dd20397c83ae65cb649577504967f59b6e2967c0f94f801553f8b32d98888f6b74e1c8173932692495dc2181f7
|
7
|
+
data.tar.gz: 60c7cb9407284a7eeedeadb9e3c6c1fed232d29b1b4dfbe19511888e3e3c169ab10645beefb1e89ab645e8ff5dfc77e50021b6d5a1b943841e7dbdf042407078
|
data/.gitignore
ADDED
data/.metrics
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# vim: ft=ruby
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
#
|
4
|
+
# More info also at https://github.com/guard/guard-rspec -- this one in
|
5
|
+
# particular details configuration options such as whether to run all tests
|
6
|
+
# after a failing test starts passing
|
7
|
+
|
8
|
+
guard :rspec, cli: '--tag ~slow' do
|
9
|
+
watch(/^spec\/.+_spec\.rb/)
|
10
|
+
watch(/^lib\/(.+)\.rb$/) do |match|
|
11
|
+
%w(unit integration acceptance).map do |kind|
|
12
|
+
"spec/#{kind}/lib/#{match[1]}_spec.rb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
16
|
+
watch(%r{^spec/(fixtures|resources)(/|.rb)}) { 'spec' }
|
17
|
+
end
|
18
|
+
|
19
|
+
guard :rubocop, all_on_start: false do
|
20
|
+
watch('Guardfile')
|
21
|
+
watch(/.+\.rb$/)
|
22
|
+
watch(/(?:.+\/)?\.rubocop\.yml$/) { |m| File.dirname(m[0]) }
|
23
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Loginator
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'loginator'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install loginator
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
30
|
+
|
31
|
+
|
32
|
+
## Testing
|
33
|
+
|
34
|
+
TODO: Add information specific to your gem's test suite.
|
35
|
+
|
36
|
+
The Rakefile comes with several convenience tasks for running tests as well. By rake task:
|
37
|
+
|
38
|
+
+ `spec`: Runs all rspec tests in the spec directory.
|
39
|
+
+ `yard`: Generates yard documentation.
|
40
|
+
+ `rubocop`: Runs rubocop.
|
41
|
+
+ `run_guards`: Runs all guards.
|
42
|
+
|
43
|
+
`run_guards` is the one you're most likely to want to run, since it runs all the other test-related tasks.
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#! /usr/bin/env rake
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'yard'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
|
+
|
7
|
+
task default: :build
|
8
|
+
|
9
|
+
# If there are test failures, you'll need to write code to address them.
|
10
|
+
# So no point in continuing to run the style tests.
|
11
|
+
desc 'Runs all spec tests'
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
13
|
+
|
14
|
+
desc 'Runs yard'
|
15
|
+
YARD::Rake::YardocTask.new(:yard)
|
16
|
+
|
17
|
+
desc 'runs Rubocop'
|
18
|
+
RuboCop::RakeTask.new
|
19
|
+
|
20
|
+
desc 'Runs test and code cleanliness suite: RuboCop, rspec, and yard'
|
21
|
+
task run_guards: [:spec, :yard, :rubocop]
|
22
|
+
|
23
|
+
task build: :run_guards
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Rack
|
2
|
+
module Loginator
|
3
|
+
# Log all the things.
|
4
|
+
class Logging
|
5
|
+
attr_reader :app, :level
|
6
|
+
|
7
|
+
# @param app [Rack::App] #{Rack::App} being passed through middleware chain
|
8
|
+
# @option opts [Symbol] :level (:info) Default logging level
|
9
|
+
def initialize(app, level: :info)
|
10
|
+
@app = app
|
11
|
+
@level = level
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
req = Rack::Request.new(env)
|
16
|
+
request = Loginator::Request.new(env['X-REQUEST-UUID'], Time.now.utc.to_s, env['REQUEST_PATH'], req.body.read)
|
17
|
+
logger.send(level, request)
|
18
|
+
req.body.rewind
|
19
|
+
@app.call(env).tap do |status, _headers, body|
|
20
|
+
response = Loginator::Response.new(env['X-REQUEST-UUID'], Time.now.utc.to_s, env['REQUEST_PATH'], status, body)
|
21
|
+
logger.send(level, response)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
3
|
+
module Loginator
|
4
|
+
# Makes a Struct easily serializable and deserializable. Adds the
|
5
|
+
# from_hash class method and to_json instance method to Struct
|
6
|
+
# classes.
|
7
|
+
module JsonableStruct
|
8
|
+
def self.included(base)
|
9
|
+
base.extend ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
# class level mixins
|
13
|
+
module ClassMethods #:nodoc
|
14
|
+
def from_hash(hsh)
|
15
|
+
fail(ArgumentError, format('Hash must contain keys: %s', members.join(', '))) unless valid_hash?(hsh)
|
16
|
+
new(*hsh.values)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def valid_hash?(hsh)
|
22
|
+
# Loosely validate that all necessary keys are present...
|
23
|
+
# This does mean that we could potentially create a Response from a hash
|
24
|
+
# representing an object _like_ a response.... Feature or... ? ^_^
|
25
|
+
members & hsh.keys.map(&:to_sym) == members
|
26
|
+
end
|
27
|
+
end #:rubocop:enable documentation
|
28
|
+
|
29
|
+
def to_json
|
30
|
+
MultiJson.dump(to_h)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
require 'loginator/jsonable_struct'
|
3
|
+
|
4
|
+
# Loginator::Request
|
5
|
+
module Loginator
|
6
|
+
# A request is a tuple of a (UUID, Timestamp, Path, Parameters). Requests parameters are defined subjectively by the
|
7
|
+
# user. For example, in the example Rack middleware ({#Rack::Loginator::Logging}), we define params as the request
|
8
|
+
# body (our HTTP APIs tend to accept JSON bodies as opposed to parameters attached to the URL). You may also wish
|
9
|
+
# to consider part of the HTTP headers as a request parameter.
|
10
|
+
#
|
11
|
+
Request = Struct.new(:request_id, :timestamp, :path, :params) do
|
12
|
+
include Loginator::JsonableStruct
|
13
|
+
|
14
|
+
# Create a new Loginator::Request
|
15
|
+
# @param request_id [String] (SecureRandom.uuid) Unique identifier for the request
|
16
|
+
# @param timestamp [Integer] (Time.now.utc.to_i) Time of the request
|
17
|
+
# @param path [String] (nil) Path associated with the request
|
18
|
+
# @param params [String] ({}) Parameters of the request
|
19
|
+
def initialize(request_id = SecureRandom.uuid, timestamp = Time.now.utc.to_i, path = nil, params = {})
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
require 'loginator/jsonable_struct'
|
3
|
+
|
4
|
+
# Loginator::Response
|
5
|
+
module Loginator
|
6
|
+
# A {#Loginator::Response} is a response to a {#Loginator::Request}. It should include the same elements as a
|
7
|
+
# request, plus the status of the response (an indicator if the API request was successful or not) as well
|
8
|
+
# as an optional response body. Whether or not to log the response is entirely left up to implementation
|
9
|
+
# decisions and production log volume considerations. It is trivial to log response bodies in development,
|
10
|
+
# but not in production.
|
11
|
+
#
|
12
|
+
Response = Struct.new(:request_id, :timestamp, :path, :status, :body) do
|
13
|
+
include Loginator::JsonableStruct
|
14
|
+
|
15
|
+
# Create a new Loginator::Response
|
16
|
+
# @param [String] request_id (SecureRandom.uuid) Unique identifier for the request
|
17
|
+
# @param [Integer] timestamp (Time.now.utc.to_i) Time of the request
|
18
|
+
# @param [String] path (nil) Path associated with the request
|
19
|
+
# @param [Integer] status (0) Status returned to the requester
|
20
|
+
# @param [String] body ({}) Parameters of the request
|
21
|
+
def initialize(request_id = SecureRandom.uuid, timestamp = Time.now.utc.to_i, path = nil, status = 0, body = '')
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/loginator.rb
ADDED
data/loginator.gemspec
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# vim: ft=ruby
|
3
|
+
|
4
|
+
require File.expand_path('../lib/loginator/version', __FILE__)
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.authors = ['SET ME']
|
8
|
+
gem.email = ['SET ME']
|
9
|
+
gem.description = 'I am an application stub'
|
10
|
+
gem.summary = 'app stub'
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
13
|
+
gem.executables = gem.files.grep(/^bin\//).map { |f| File.basename(f) }
|
14
|
+
gem.test_files = gem.files.grep(/^(test|spec|features)\//)
|
15
|
+
gem.name = 'loginator'
|
16
|
+
gem.require_paths = %w(lib)
|
17
|
+
gem.version = Loginator::VERSION
|
18
|
+
|
19
|
+
# dependencies...
|
20
|
+
gem.add_dependency('thor', '0.19.1')
|
21
|
+
gem.add_dependency('sysexits', '1.0.2')
|
22
|
+
gem.add_dependency('awesome_print', '~> 1.1.0')
|
23
|
+
gem.add_dependency('abstract_type', '~> 0.0.7')
|
24
|
+
gem.add_dependency('multi_json', '~> 1.10.1')
|
25
|
+
|
26
|
+
# development dependencies.
|
27
|
+
gem.add_development_dependency('rspec', '~> 3.2')
|
28
|
+
gem.add_development_dependency('simplecov', '~> 0.9')
|
29
|
+
gem.add_development_dependency('guard', '~> 2.12')
|
30
|
+
gem.add_development_dependency('guard-rspec', '~> 4.5')
|
31
|
+
gem.add_development_dependency('rubocop', '~> 0.29')
|
32
|
+
gem.add_development_dependency('guard-rubocop', '~> 1.2')
|
33
|
+
gem.add_development_dependency('rainbow', '2.0')
|
34
|
+
gem.add_development_dependency('metric_fu', '~> 4.11')
|
35
|
+
gem.add_development_dependency('rake', '~> 10.3')
|
36
|
+
gem.add_development_dependency('yard', '~> 0.8.7')
|
37
|
+
gem.add_development_dependency('redcarpet', '~> 3.2')
|
38
|
+
gem.add_development_dependency('pry-nav')
|
39
|
+
end
|
data/loginator.reek
ADDED
File without changes
|
File without changes
|
File without changes
|
data/spec/fixtures.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
def fixture(filename)
|
2
|
+
File.expand_path("../fixtures/#{filename}", __FILE__)
|
3
|
+
end
|
4
|
+
|
5
|
+
module Loginator
|
6
|
+
module Test
|
7
|
+
# Fixtures are static content required for testing. This may include JSON bodies
|
8
|
+
# returned from RESTful APIs, text files that need to be parsed, etc.
|
9
|
+
module Fixtures
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'loginator/request'
|
2
|
+
require 'support/shared/lib/loginator/jsonable_struct_spec'
|
3
|
+
require 'support/shared/lib/loginator/struct_with_defaults_spec'
|
4
|
+
|
5
|
+
RSpec.describe Loginator::Request do
|
6
|
+
describe '#new' do
|
7
|
+
it_behaves_like 'struct_with_defaults'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'serializability' do
|
11
|
+
it_behaves_like 'jsonable_struct'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'loginator/response'
|
2
|
+
require 'support/shared/lib/loginator/jsonable_struct_spec'
|
3
|
+
require 'support/shared/lib/loginator/struct_with_defaults_spec'
|
4
|
+
|
5
|
+
RSpec.describe Loginator::Response do
|
6
|
+
describe '#new' do
|
7
|
+
it_behaves_like 'struct_with_defaults'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'serializability' do
|
11
|
+
it_behaves_like 'jsonable_struct'
|
12
|
+
end
|
13
|
+
end
|
File without changes
|
data/spec/resources.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
def resource(filename)
|
2
|
+
File.expand_path("../resources/#{filename}", __FILE__)
|
3
|
+
end
|
4
|
+
|
5
|
+
module Loginator
|
6
|
+
module Test
|
7
|
+
# This should include test-specific resources (i.e. pre-built uniform objects)
|
8
|
+
# that are required in order to run your specs. It is largely an object
|
9
|
+
# factory for building objects for testing.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# Loginator::Test::Resources::LoggedInUser
|
13
|
+
module Resources
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
4
|
+
pid = Process.pid
|
5
|
+
SimpleCov.at_exit do
|
6
|
+
SimpleCov.result.format! if Process.pid == pid
|
7
|
+
end
|
8
|
+
|
9
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
10
|
+
|
11
|
+
require File.expand_path('../fixtures.rb', __FILE__)
|
12
|
+
require File.expand_path('../resources.rb', __FILE__)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
shared_examples_for 'jsonable_struct' do
|
2
|
+
describe '#to_json' do
|
3
|
+
it 'faithfully serializes' do
|
4
|
+
expect(subject.to_json).to eq(MultiJson.dump(subject.to_h))
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '.from_hash' do
|
9
|
+
it 'faithfully deserializes' do
|
10
|
+
expect(described_class.from_hash(MultiJson.load(subject.to_json))).to eq(subject)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
shared_examples_for 'struct_with_defaults' do
|
2
|
+
describe '#new' do
|
3
|
+
context 'using defaults' do
|
4
|
+
it 'creates a valid object' do
|
5
|
+
expect(subject).to be_a_kind_of(described_class)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'sets default request id' do
|
9
|
+
expect(subject.request_id).to be_a_kind_of(String)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'sets default timestamp' do
|
13
|
+
expect(subject.timestamp).to be_a_kind_of(Integer)
|
14
|
+
expect(subject.timestamp).to be <= Time.now.utc.to_i
|
15
|
+
expect(subject.timestamp).to be > 0
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'overriding defaults' do
|
20
|
+
let(:request_id) { 'uuid' }
|
21
|
+
let(:timestamp) { 42 }
|
22
|
+
let(:path) { '/' }
|
23
|
+
|
24
|
+
subject { described_class.new(request_id, timestamp, path) }
|
25
|
+
|
26
|
+
[:request_id, :timestamp, :path].each do |field|
|
27
|
+
it 'overrides defaults' do
|
28
|
+
expect(subject.send(field)).to eq(send(field))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.from_hash' do
|
33
|
+
it 'faithfully deserializes' do
|
34
|
+
expect(described_class.from_hash(MultiJson.load(subject.to_json))).to eq(subject)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,323 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: loginator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- SET ME
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sysexits
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: awesome_print
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: abstract_type
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.7
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.7
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: multi_json
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.10.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.10.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
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: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.12'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.12'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '4.5'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '4.5'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.29'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.29'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: guard-rubocop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.2'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.2'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rainbow
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '2.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: metric_fu
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '4.11'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '4.11'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rake
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '10.3'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '10.3'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: yard
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: 0.8.7
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 0.8.7
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: redcarpet
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '3.2'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '3.2'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: pry-nav
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
description: I am an application stub
|
252
|
+
email:
|
253
|
+
- SET ME
|
254
|
+
executables: []
|
255
|
+
extensions: []
|
256
|
+
extra_rdoc_files: []
|
257
|
+
files:
|
258
|
+
- ".gitignore"
|
259
|
+
- ".metrics"
|
260
|
+
- ".rspec"
|
261
|
+
- ".rubocop.yml"
|
262
|
+
- Gemfile
|
263
|
+
- Guardfile
|
264
|
+
- README.md
|
265
|
+
- Rakefile
|
266
|
+
- examples/rack/logging.rb
|
267
|
+
- examples/rack/uuid.rb
|
268
|
+
- lib/loginator.rb
|
269
|
+
- lib/loginator/jsonable_struct.rb
|
270
|
+
- lib/loginator/request.rb
|
271
|
+
- lib/loginator/response.rb
|
272
|
+
- lib/loginator/version.rb
|
273
|
+
- loginator.gemspec
|
274
|
+
- loginator.reek
|
275
|
+
- spec/acceptance/lib/loginator/.gitignore
|
276
|
+
- spec/fixtures.rb
|
277
|
+
- spec/fixtures/.gitignore
|
278
|
+
- spec/integration/lib/loginator/.gitignore
|
279
|
+
- spec/integration/lib/loginator/request_spec.rb
|
280
|
+
- spec/integration/lib/loginator/response_spec.rb
|
281
|
+
- spec/resources.rb
|
282
|
+
- spec/resources/.gitignore
|
283
|
+
- spec/spec_helper.rb
|
284
|
+
- spec/support/shared/lib/loginator/jsonable_struct_spec.rb
|
285
|
+
- spec/support/shared/lib/loginator/struct_with_defaults_spec.rb
|
286
|
+
- spec/unit/lib/loginator/.gitignore
|
287
|
+
homepage:
|
288
|
+
licenses: []
|
289
|
+
metadata: {}
|
290
|
+
post_install_message:
|
291
|
+
rdoc_options: []
|
292
|
+
require_paths:
|
293
|
+
- lib
|
294
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
295
|
+
requirements:
|
296
|
+
- - ">="
|
297
|
+
- !ruby/object:Gem::Version
|
298
|
+
version: '0'
|
299
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
300
|
+
requirements:
|
301
|
+
- - ">="
|
302
|
+
- !ruby/object:Gem::Version
|
303
|
+
version: '0'
|
304
|
+
requirements: []
|
305
|
+
rubyforge_project:
|
306
|
+
rubygems_version: 2.2.2
|
307
|
+
signing_key:
|
308
|
+
specification_version: 4
|
309
|
+
summary: app stub
|
310
|
+
test_files:
|
311
|
+
- spec/acceptance/lib/loginator/.gitignore
|
312
|
+
- spec/fixtures.rb
|
313
|
+
- spec/fixtures/.gitignore
|
314
|
+
- spec/integration/lib/loginator/.gitignore
|
315
|
+
- spec/integration/lib/loginator/request_spec.rb
|
316
|
+
- spec/integration/lib/loginator/response_spec.rb
|
317
|
+
- spec/resources.rb
|
318
|
+
- spec/resources/.gitignore
|
319
|
+
- spec/spec_helper.rb
|
320
|
+
- spec/support/shared/lib/loginator/jsonable_struct_spec.rb
|
321
|
+
- spec/support/shared/lib/loginator/struct_with_defaults_spec.rb
|
322
|
+
- spec/unit/lib/loginator/.gitignore
|
323
|
+
has_rdoc:
|