pliny 0.21.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a17e76a1800d179c9271ab0bf1b67dad549e7fed
4
- data.tar.gz: badd208c4a7ad6e3b58735cd3d8edde7b485bab2
3
+ metadata.gz: 07ee81425520e48b9096f3d05164ff1793e6e3e8
4
+ data.tar.gz: dce7f63b5664b66b7ad219d54ed5bb9818a8de9d
5
5
  SHA512:
6
- metadata.gz: cc9b96fad0c7fca0f0ced728dc148cda49ac22b330cb45614b0068ee166ed528ada6d8f331bafbf6be5ac340ac6cd6d569e97b6c83270684b82da814e59cd4a6
7
- data.tar.gz: 6b7f260a8c291e1435920ba61d6ac5aa63246b1efc3dffbbc01b2adb1c2cec8f61954096b71780ed3b0ed1d9fe5b1422dd6d94bb22067c696b38ac9248d5e41b
6
+ metadata.gz: 622a31e59a1124f435b6954036ce1bb0e3692fd7b998409a68460a91e63d815f17bfc211ab9781f61f95f3a6d58234731d32b208e4f9f26a31b87e100d21d897
7
+ data.tar.gz: c53473f9fd7bf1289c799007c132fd2a529d27cbafab745f3cc08bbdc5a0137ed2508f00b37cc15313bb4f30373942c52f9a6dd3529379a5b57b0d35e7dae0f8
@@ -19,7 +19,7 @@ module Pliny
19
19
 
20
20
  def fetch_scope(context:, rack_env:)
21
21
  scope = {}
22
- if rack_env.respond_to?(:body)
22
+ unless rack_env.empty?
23
23
  scope[:request] = proc { extract_request_data_from_rack(rack_env) }
24
24
  end
25
25
  scope
data/lib/pliny/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pliny
2
- VERSION = "0.21.0"
2
+ VERSION = "0.22.0"
3
3
  end
@@ -0,0 +1,29 @@
1
+ require:
2
+ - rubocop-rspec
3
+ AllCops:
4
+ TargetRubyVersion: 2.3
5
+ # Offense count: 8
6
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives.
7
+ # URISchemes: http, https
8
+ Metrics/LineLength:
9
+ Enabled: false
10
+
11
+ # Offense count: 1
12
+ # Configuration parameters: Max.
13
+ RSpec/ExampleLength:
14
+ Enabled: false
15
+
16
+ # Offense count: 1
17
+ Style/ClassVars:
18
+ Enabled: false
19
+
20
+ # Offense count: 6
21
+ Style/Documentation:
22
+ Enabled: false
23
+
24
+ Style/StringLiterals:
25
+ Enabled: true
26
+ EnforcedStyle: double_quotes
27
+
28
+ Style/FrozenStringLiteralComment:
29
+ Enabled: false
data/lib/template/Gemfile CHANGED
@@ -4,7 +4,7 @@ ruby "2.3.3"
4
4
  gem "multi_json"
5
5
  gem "oj"
6
6
  gem "pg"
7
- gem "pliny", "~> 0.21"
7
+ gem "pliny", "~> 0.22"
8
8
  gem "pry"
9
9
  gem "puma", "~> 2.16"
10
10
  gem "rack-ssl"
@@ -21,13 +21,15 @@ gem "sucker_punch"
21
21
 
22
22
  group :development, :test do
23
23
  gem "pry-byebug"
24
+ gem "rubocop", "~> 0.46.0", require: false
25
+ gem "rubocop-rspec", require: false
24
26
  end
25
27
 
26
28
  group :test do
27
- gem "simplecov", require: false
28
29
  gem "committee"
29
30
  gem "database_cleaner"
30
31
  gem "dotenv"
31
32
  gem "rack-test"
32
33
  gem "rspec"
34
+ gem "simplecov", require: false
33
35
  end
@@ -1,6 +1,7 @@
1
+
1
2
  require "pliny/tasks"
2
3
 
3
4
  # Add your rake tasks to lib/tasks!
4
5
  Dir["./lib/tasks/*.rake"].each { |task| load task }
5
6
 
6
- task :default => :spec
7
+ task default: :spec
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/application'
3
+ require_relative "../lib/application"
4
4
 
5
5
  def basic_prompt(target_self, nest_level, pry)
6
6
  # override DEPLOYMENT to identify console sessions (eg: staging/production/etc)
@@ -9,13 +9,13 @@ def basic_prompt(target_self, nest_level, pry)
9
9
  end
10
10
 
11
11
  Pry.prompt = [
12
- proc { |target_self, nest_level, pry|
13
- basic_prompt(target_self, nest_level, pry) + "> "
14
- },
12
+ proc do |target_self, nest_level, pry|
13
+ basic_prompt(target_self, nest_level, pry) + "> "
14
+ end,
15
15
 
16
- proc { |target_self, nest_level, pry|
17
- basic_prompt(target_self, nest_level, pry) + "* "
18
- }
16
+ proc do |target_self, nest_level, pry|
17
+ basic_prompt(target_self, nest_level, pry) + "* "
18
+ end
19
19
  ]
20
20
 
21
21
  Pry.start
data/lib/template/bin/run CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/application'
3
+ # rubocop:disable Lint/Eval
4
+
5
+ require_relative "../lib/application"
4
6
 
5
7
  eval ARGV.join(" ")
@@ -1,4 +1,4 @@
1
- require_relative 'lib/application'
1
+ require_relative "lib/application"
2
2
 
3
3
  $stdout.sync = true
4
4
  $stderr.sync = true
@@ -20,9 +20,9 @@ module Config
20
20
  # Override -- value is returned or the set default.
21
21
  override :database_timeout, 10, int
22
22
  override :db_pool, 5, int
23
- override :deployment, 'production', string
23
+ override :deployment, "production", string
24
24
  override :force_ssl, true, bool
25
- override :app_env, 'production', string
25
+ override :app_env, "production", string
26
26
  override :port, 5000, int
27
27
  override :pretty_json, false, bool
28
28
  override :puma_max_threads, 16, int
@@ -1,10 +1,10 @@
1
1
  database_setup_proc = lambda do |conn|
2
2
  # identify postgres connections coming from this process in pg_stat_activity
3
- process_identifier = ENV["DYNO"] || File.basename($0).gsub(/\W+/, "_")
3
+ process_identifier = ENV["DYNO"] || File.basename($PROGRAM_NAME).gsub(/\W+/, "_")
4
4
  conn.execute "SET statement_timeout = '#{Config.database_timeout}s'"
5
5
  conn.execute "SET application_name = '#{process_identifier}'"
6
6
  end
7
7
 
8
8
  DB = Sequel.connect(Config.database_url,
9
- max_connections: Config.db_pool,
10
- after_connect: database_setup_proc)
9
+ max_connections: Config.db_pool,
10
+ after_connect: database_setup_proc)
@@ -1,13 +1,12 @@
1
- require 'pliny/error_reporters/rollbar'
1
+ require "pliny/error_reporters/rollbar"
2
2
 
3
3
  Pliny::ErrorReporters.error_reporters << Pliny::ErrorReporters::Rollbar
4
4
 
5
5
  Rollbar.configure do |config|
6
- config.enabled = ENV.has_key?('ROLLBAR_ACCESS_TOKEN')
6
+ config.enabled = ENV.key?("ROLLBAR_ACCESS_TOKEN")
7
7
  config.disable_rack_monkey_patch = true
8
8
  config.access_token = ENV["ROLLBAR_ACCESS_TOKEN"]
9
- config.environment = ENV['ROLLBAR_ENV']
9
+ config.environment = ENV["ROLLBAR_ENV"]
10
10
  config.logger = Pliny::RollbarLogger.new
11
11
  config.use_sucker_punch
12
12
  end
13
-
@@ -8,7 +8,7 @@ workers Config.puma_workers
8
8
 
9
9
  on_worker_boot do
10
10
  # force Sequel's thread pool to be refreshed
11
- Sequel::DATABASES.each { |db| db.disconnect }
11
+ Sequel::DATABASES.each(&:disconnect)
12
12
  end
13
13
 
14
14
  preload_app!
@@ -1,4 +1,4 @@
1
- require 'bundler'
1
+ require "bundler"
2
2
  Bundler.require
3
3
 
4
- require_relative 'initializer'
4
+ require_relative "initializer"
@@ -1,11 +1,11 @@
1
1
  module Endpoints
2
2
  class Health < Base
3
- namespace '/health' do
3
+ namespace "/health" do
4
4
  get do
5
5
  encode({})
6
6
  end
7
7
 
8
- get '/db' do
8
+ get "/db" do
9
9
  database?
10
10
  database_available?
11
11
  encode({})
@@ -14,14 +14,14 @@ module Endpoints
14
14
  private
15
15
 
16
16
  def database?
17
- fail Pliny::Errors::NotFound if DB.nil?
17
+ raise Pliny::Errors::NotFound if DB.nil?
18
18
  end
19
19
 
20
20
  def database_available?
21
- fail Pliny::Errors::ServiceUnavailable unless DB.test_connection
21
+ raise Pliny::Errors::ServiceUnavailable unless DB.test_connection
22
22
  rescue Sequel::Error => e
23
23
  message = e.message.strip
24
- Pliny.log(db: true, health: true, at: 'exception', message: message)
24
+ Pliny.log(db: true, health: true, at: "exception", message: message)
25
25
  raise Pliny::Errors::ServiceUnavailable
26
26
  end
27
27
  end
@@ -3,9 +3,9 @@ module Endpoints
3
3
  get "/schema.json" do
4
4
  content_type "application/schema+json"
5
5
  headers["Cache-Control"] = "public, max-age=3600"
6
- unless File.exists?(schema_filename)
6
+ unless File.exist?(schema_filename)
7
7
  message = "This application does not have a schema file."
8
- raise Pliny::Errors::NotFound.new(message)
8
+ raise Pliny::Errors::NotFound, message
9
9
  end
10
10
  File.read(schema_filename)
11
11
  end
@@ -1,6 +1,6 @@
1
1
  module Mediators
2
2
  class Base
3
- def self.run(options={})
3
+ def self.run(options = {})
4
4
  new(options).call
5
5
  end
6
6
  end
@@ -6,11 +6,15 @@ Routes = Rack::Builder.new do
6
6
  use Pliny::Middleware::Metrics
7
7
  use Pliny::Middleware::Instruments
8
8
  use Pliny::Middleware::RescueErrors, raise: Config.raise_errors?
9
- use Rack::Timeout,
10
- service_timeout: Config.timeout if Config.timeout > 0
11
- use Pliny::Middleware::Versioning,
12
- default: Config.versioning_default,
13
- app_name: Config.versioning_app_name if Config.versioning?
9
+ if Config.timeout.positive?
10
+ use Rack::Timeout,
11
+ service_timeout: Config.timeout
12
+ end
13
+ if Config.versioning?
14
+ use Pliny::Middleware::Versioning,
15
+ default: Config.versioning_default,
16
+ app_name: Config.versioning_app_name
17
+ end
14
18
  use Rack::Deflater
15
19
  use Rack::MethodOverride
16
20
  use Rack::SSL if Config.force_ssl?
@@ -3,7 +3,7 @@ module Serializers
3
3
  @@structures = {}
4
4
 
5
5
  def self.structure(type, &blk)
6
- @@structures["#{self.name}::#{type}"] = blk
6
+ @@structures["#{name}::#{type}"] = blk
7
7
  end
8
8
 
9
9
  def initialize(type)
@@ -11,7 +11,7 @@ module Serializers
11
11
  end
12
12
 
13
13
  def serialize(object)
14
- object.respond_to?(:map) ? object.map{|item| serializer.call(item)} : serializer.call(object)
14
+ object.respond_to?(:map) ? object.map { |item| serializer.call(item) } : serializer.call(object)
15
15
  end
16
16
 
17
17
  private
@@ -19,6 +19,5 @@ module Serializers
19
19
  def serializer
20
20
  @@structures["#{self.class.name}::#{@type}"]
21
21
  end
22
-
23
22
  end
24
23
  end
@@ -0,0 +1,6 @@
1
+
2
+ require "rubocop/rake_task"
3
+
4
+ RuboCop::RakeTask.new do |task|
5
+ task.requires << "rubocop-rspec"
6
+ end
@@ -1,3 +1,4 @@
1
+
1
2
  # define our own version of the spec task because rspec might not be available
2
3
  # in the production environment, so we can't rely on RSpec::Core::RakeTask
3
4
  desc "Run all app specs"
@@ -5,6 +6,7 @@ task :spec do
5
6
  require "rspec/core"
6
7
  code = RSpec::Core::Runner.run(
7
8
  ["./spec"],
8
- $stderr, $stdout)
9
- exit(code) unless code == 0
9
+ $stderr, $stdout
10
+ )
11
+ exit(code) unless code.zero?
10
12
  end
@@ -7,48 +7,48 @@ RSpec.describe Endpoints::Health do
7
7
  Endpoints::Health
8
8
  end
9
9
 
10
- describe 'GET /health' do
11
- it 'returns a 200' do
12
- get '/health'
10
+ describe "GET /health" do
11
+ it "returns a 200" do
12
+ get "/health"
13
13
  assert_equal(200, last_response.status)
14
- assert_equal('application/json;charset=utf-8', last_response.headers['Content-Type'])
15
- assert_equal(2, last_response.headers['Content-Length'].to_i)
14
+ assert_equal("application/json;charset=utf-8", last_response.headers["Content-Type"])
15
+ assert_equal(2, last_response.headers["Content-Length"].to_i)
16
16
  assert_equal({}, MultiJson.decode(last_response.body))
17
17
  end
18
18
  end
19
19
 
20
- describe 'GET /health/db' do
21
- it 'raises a 404 when no database is available' do
20
+ describe "GET /health/db" do
21
+ it "raises a 404 when no database is available" do
22
22
  allow(DB).to receive(:nil?).and_return(true)
23
23
 
24
24
  assert_raises Pliny::Errors::NotFound do
25
- get '/health/db'
25
+ get "/health/db"
26
26
  end
27
27
  end
28
28
 
29
- it 'raises a 503 on Sequel exceptions' do
29
+ it "raises a 503 on Sequel exceptions" do
30
30
  allow(DB).to receive(:test_connection).and_raise(Sequel::Error)
31
31
 
32
32
  assert_raises Pliny::Errors::ServiceUnavailable do
33
- get '/health/db'
33
+ get "/health/db"
34
34
  end
35
35
  end
36
36
 
37
- it 'raises a 503 when connection testing fails' do
37
+ it "raises a 503 when connection testing fails" do
38
38
  allow(DB).to receive(:test_connection).and_return(false)
39
39
 
40
40
  assert_raises Pliny::Errors::ServiceUnavailable do
41
- get '/health/db'
41
+ get "/health/db"
42
42
  end
43
43
  end
44
44
 
45
- it 'returns a 200' do
45
+ it "returns a 200" do
46
46
  allow(DB).to receive(:test_connection).and_return(true)
47
47
 
48
- get '/health/db'
48
+ get "/health/db"
49
49
  assert_equal(200, last_response.status)
50
- assert_equal('application/json;charset=utf-8', last_response.headers['Content-Type'])
51
- assert_equal(2, last_response.headers['Content-Length'].to_i)
50
+ assert_equal("application/json;charset=utf-8", last_response.headers["Content-Type"])
51
+ assert_equal(2, last_response.headers["Content-Length"].to_i)
52
52
  assert_equal({}, MultiJson.decode(last_response.body))
53
53
  end
54
54
  end
@@ -3,10 +3,10 @@ require "spec_helper"
3
3
  RSpec.describe Endpoints::Schema do
4
4
  include Rack::Test::Methods
5
5
 
6
- let(:schema_filename) { "#{Config.root}/schema/schema.json" }
7
-
8
6
  subject(:get_schema) { get "/schema.json" }
9
7
 
8
+ let(:schema_filename) { "#{Config.root}/schema/schema.json" }
9
+
10
10
  context "without a schema.json" do
11
11
  before do
12
12
  allow(File).to receive(:exists?).and_return(false)
@@ -10,7 +10,7 @@ ENV["RACK_ENV"] = "test"
10
10
  require "bundler"
11
11
  require "dotenv"
12
12
  Bundler.require(:default, :test)
13
- Dotenv.load('.env.test')
13
+ Dotenv.load(".env.test")
14
14
 
15
15
  # Get only App Config first, to avoid pulling in libraries until
16
16
  # spec_support has a chance to run, which is important for at least
@@ -29,7 +29,7 @@ RSpec.configure do |config|
29
29
  end
30
30
 
31
31
  config.before :all do
32
- load('db/seeds.rb') if File.exist?('db/seeds.rb')
32
+ load("db/seeds.rb") if File.exist?("db/seeds.rb")
33
33
  end
34
34
 
35
35
  config.before :each do
@@ -49,10 +49,10 @@ RSpec.configure do |config|
49
49
  # order dependency and want to debug it, you can fix the order by providing
50
50
  # the seed, which is printed after each run.
51
51
  # --seed 1234
52
- config.order = 'random'
52
+ config.order = "random"
53
53
 
54
54
  # the rack app to be tested with rack-test:
55
55
  def app
56
- @rack_app || fail("Missing @rack_app")
56
+ @rack_app || raise("Missing @rack_app")
57
57
  end
58
58
  end
@@ -1,7 +1,9 @@
1
1
  unless ENV["TEST_LOGS"] == "true"
2
- module Pliny::Log
3
- def log(data, &block)
4
- block.call if block
2
+ module Pliny
3
+ module Log
4
+ def log(_data, &block)
5
+ yield if block
6
+ end
5
7
  end
6
8
  end
7
9
  end
@@ -8,7 +8,7 @@ describe Pliny::ErrorReporters::Rollbar do
8
8
  describe "#notify" do
9
9
  let(:exception) { StandardError.new("Something went wrong") }
10
10
  let(:context) { {} }
11
- let(:rack_env) { double(:rack_env, body: StringIO.new) }
11
+ let(:rack_env) { { "rack.input" => StringIO.new } }
12
12
 
13
13
  subject(:notify) do
14
14
  reporter.notify(exception, context: context, rack_env: rack_env)
@@ -41,6 +41,10 @@ describe Pliny::ErrorReporters::Rollbar do
41
41
  context "given an empty rack_env" do
42
42
  let(:rack_env) { {} }
43
43
 
44
+ it "expects rack_env to be a hash" do
45
+ assert_kind_of(Hash, rack_env)
46
+ end
47
+
44
48
  it "reports to Rollbar with an empty scope" do
45
49
  notify
46
50
  expect(Rollbar).to have_received(:scoped).once.with({})
@@ -7,34 +7,36 @@ describe "Pliny integration test" do
7
7
  Dir.chdir("/tmp/plinytest")
8
8
 
9
9
  bash "pliny-new myapp"
10
- bash_app "bin/setup"
10
+
11
+ Dir.chdir("/tmp/plinytest/myapp")
12
+ bash "bin/setup"
11
13
  end
12
14
 
13
15
  describe "bin/setup" do
14
16
  it "generates .env" do
15
- assert File.exists?("./myapp/.env")
17
+ assert File.exists?("./.env")
16
18
  end
17
19
  end
18
20
 
19
21
  describe "pliny-generate scaffold" do
20
22
  before(:all) do
21
- bash_app "pliny-generate scaffold artist"
23
+ bash "pliny-generate scaffold artist"
22
24
  end
23
25
 
24
26
  it "creates the model file" do
25
- assert File.exists?("./myapp/lib/models/artist.rb")
27
+ assert File.exists?("./lib/models/artist.rb")
26
28
  end
27
29
 
28
30
  it "creates the endpoint file" do
29
- assert File.exists?("./myapp/lib/endpoints/artists.rb")
31
+ assert File.exists?("./lib/endpoints/artists.rb")
30
32
  end
31
33
 
32
34
  it "creates the serializer file" do
33
- assert File.exists?("./myapp/lib/serializers/artist.rb")
35
+ assert File.exists?("./lib/serializers/artist.rb")
34
36
  end
35
37
 
36
38
  it "creates the schema file" do
37
- assert File.exists?("./myapp/schema/schemata/artist.yaml")
39
+ assert File.exists?("./schema/schemata/artist.yaml")
38
40
  end
39
41
  end
40
42
 
@@ -46,8 +48,4 @@ describe "Pliny integration test" do
46
48
  raise "Failed to run #{cmd}"
47
49
  end
48
50
  end
49
-
50
- def bash_app(cmd)
51
- bash "cd myapp && #{cmd}"
52
- end
53
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pliny
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandur Leach
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-12-13 00:00:00.000000000 Z
12
+ date: 2017-01-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -339,6 +339,26 @@ dependencies:
339
339
  - - ">="
340
340
  - !ruby/object:Gem::Version
341
341
  version: 4.9.0
342
+ - !ruby/object:Gem::Dependency
343
+ name: rubocop
344
+ requirement: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - "~>"
347
+ - !ruby/object:Gem::Version
348
+ version: '0.46'
349
+ - - ">="
350
+ - !ruby/object:Gem::Version
351
+ version: 0.46.0
352
+ type: :development
353
+ prerelease: false
354
+ version_requirements: !ruby/object:Gem::Requirement
355
+ requirements:
356
+ - - "~>"
357
+ - !ruby/object:Gem::Version
358
+ version: '0.46'
359
+ - - ">="
360
+ - !ruby/object:Gem::Version
361
+ version: 0.46.0
342
362
  description: Pliny is a set of base classes and helpers to help developers write excellent
343
363
  APIs in Sinatra
344
364
  email:
@@ -410,6 +430,7 @@ files:
410
430
  - lib/template/.env.test.erb
411
431
  - lib/template/.gitignore
412
432
  - lib/template/.rspec
433
+ - lib/template/.rubocop.yml
413
434
  - lib/template/.ruby-version
414
435
  - lib/template/Gemfile
415
436
  - lib/template/LICENSE
@@ -438,6 +459,7 @@ files:
438
459
  - lib/template/lib/mediators/base.rb
439
460
  - lib/template/lib/routes.rb
440
461
  - lib/template/lib/serializers/base.rb
462
+ - lib/template/lib/tasks/rubocop.rake
441
463
  - lib/template/lib/tasks/spec.rake
442
464
  - lib/template/schema/meta.json
443
465
  - lib/template/schema/schemata/.gitkeep