loginator 0.0.2
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.
- 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:
|