napa 0.2.1 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/LICENSE +4 -2
- data/README.md +25 -2
- data/docs/quickstart.md +27 -26
- data/lib/napa.rb +6 -2
- data/lib/napa/active_record_extensions/notifications_subscriber.rb +17 -0
- data/lib/napa/active_record_extensions/stats.rb +1 -14
- data/lib/napa/cli.rb +5 -2
- data/lib/napa/generators/api_generator.rb +5 -1
- data/lib/napa/generators/migration_generator.rb +6 -2
- data/lib/napa/generators/scaffold_generator.rb +4 -3
- data/lib/napa/generators/templates/api/app/apis/%name_tableize%_api.rb.tt +4 -5
- data/lib/napa/generators/templates/api/app/models/%name_underscore%.rb.tt +0 -1
- data/lib/napa/generators/templates/api/spec/apis/%name_tableize%_api_spec.rb.tt +16 -0
- data/lib/napa/generators/templates/api/spec/models/%name_underscore%_spec.rb.tt +9 -0
- data/lib/napa/generators/templates/migration/%migration_filename%.rb.tt +1 -1
- data/lib/napa/generators/templates/scaffold/.gitignore.tt +2 -0
- data/lib/napa/generators/templates/scaffold/Gemfile.tt +2 -2
- data/lib/napa/generators/templates/scaffold/app.rb +1 -1
- data/lib/napa/generators/templates/scaffold/config.ru.tt +1 -1
- data/lib/napa/generators/templates/scaffold/config/database.yml.tt +1 -0
- data/lib/napa/generators/templates/scaffold/spec/apis/hello_api_spec.rb.tt +1 -1
- data/lib/napa/generators/templates/scaffold/spec/spec_helper.rb +15 -2
- data/lib/napa/grape_extenders.rb +6 -2
- data/lib/napa/grape_extensions/error_formatter.rb +1 -1
- data/lib/napa/grape_extensions/grape_helpers.rb +8 -1
- data/lib/napa/logger/logger.rb +10 -0
- data/lib/napa/logger/parseable.rb +37 -0
- data/lib/napa/middleware/app_monitor.rb +1 -1
- data/lib/napa/middleware/database_stats.rb +15 -0
- data/lib/napa/middleware/logger.rb +6 -11
- data/lib/napa/middleware/request_stats.rb +7 -5
- data/lib/napa/{grape_extensions → output_formatters}/entity.rb +0 -0
- data/lib/napa/output_formatters/include_nil.rb +16 -0
- data/lib/napa/{grape_extensions → output_formatters}/representer.rb +2 -2
- data/lib/napa/rspec_extensions/response_helpers.rb +17 -0
- data/lib/napa/stats.rb +21 -1
- data/lib/napa/version.rb +1 -1
- data/lib/tasks/db.rake +7 -0
- data/lib/tasks/git.rake +3 -0
- data/napa.gemspec +0 -1
- data/spec/generators/api_generator_spec.rb +63 -0
- data/spec/generators/migration_generator_spec.rb +27 -0
- data/spec/generators/scaffold_generator_spec.rb +90 -0
- data/spec/grape_extensions/error_formatter_spec.rb +8 -0
- data/spec/grape_extensions/include_nil_spec.rb +23 -0
- data/spec/logger/logger_spec.rb +14 -0
- data/spec/logger/parseable_spec.rb +16 -0
- data/spec/middleware/database_stats_spec.rb +64 -0
- data/spec/middleware/request_stats_spec.rb +4 -5
- data/spec/spec_helper.rb +26 -0
- data/spec/stats_spec.rb +25 -1
- metadata +25 -20
- data/spec/active_record_extensions/stats_spec.rb +0 -59
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'napa/generators/scaffold_generator'
|
3
|
+
require 'napa/cli'
|
4
|
+
|
5
|
+
describe Napa::Generators::ScaffoldGenerator do
|
6
|
+
let(:app_name) { 'my_test_app' }
|
7
|
+
let(:app_path) { 'spec/my_different_directory' }
|
8
|
+
let(:options) { {} }
|
9
|
+
|
10
|
+
before do
|
11
|
+
scaffold = Napa::CLI::Base.new(args, options)
|
12
|
+
scaffold.invoke(:new)
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
if args[1] # if app_path exists, delete dir at app_path
|
17
|
+
FileUtils.rm_rf(args[1])
|
18
|
+
else # otherwise delete dir at app_name
|
19
|
+
FileUtils.rm_rf(args[0])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'given only an app name' do
|
24
|
+
let(:args) { [app_name] }
|
25
|
+
|
26
|
+
it 'creates a scaffold app in a directory that mirrors the app name' do
|
27
|
+
args = [app_name]
|
28
|
+
expect(Dir).to exist(app_name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'given an app name and a directory' do
|
33
|
+
let(:args) { [app_name, app_path] }
|
34
|
+
|
35
|
+
it 'creates a scaffold app in a directory of my choosing' do
|
36
|
+
expect(Dir).to exist(app_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'creates a .env file with with a development database name' do
|
40
|
+
expect(File).to exist("#{app_path}/.env")
|
41
|
+
env_file = File.read("#{app_path}/.env")
|
42
|
+
expect(env_file).to match(/#{app_name}_development/)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'creates a .env.test file with a test database name' do
|
46
|
+
expect(File).to exist("#{app_path}/.env.test")
|
47
|
+
env_test_file = File.read("#{app_path}/.env.test")
|
48
|
+
expect(env_test_file).to match(/#{app_name}_test/)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'selects mysql as the default database adapter' do
|
52
|
+
database_config_file = File.read("#{app_path}/config/database.yml")
|
53
|
+
expect(database_config_file).to match(/adapter: mysql2/)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'adds the mysql2 gem in the Gemfile' do
|
57
|
+
gemfile = File.read("#{app_path}/Gemfile")
|
58
|
+
expect(gemfile).to match(/gem 'mysql2'/)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'generates an application api' do
|
62
|
+
expect(File).to exist("#{app_path}/app/apis/application_api.rb")
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'the application API inherits from Grape::API' do
|
66
|
+
application_api_file = File.read("#{app_path}/app/apis/application_api.rb")
|
67
|
+
expect(application_api_file).to match(/class ApplicationApi < Grape::API/)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'generates an example API and spec' do
|
71
|
+
expect(File).to exist("#{app_path}/app/apis/hello_api.rb")
|
72
|
+
expect(File).to exist("#{app_path}/spec/apis/hello_api_spec.rb")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'with the -d=pg option' do
|
77
|
+
let(:args) { [app_name, app_path] }
|
78
|
+
let(:options) { { :database => "pg" } }
|
79
|
+
|
80
|
+
it 'selects postres/pg as the database' do
|
81
|
+
database_config_file = File.read("#{app_path}/config/database.yml")
|
82
|
+
expect(database_config_file).to match(/adapter: postgresql/)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'adds the pg gem in the Gemfile' do
|
86
|
+
gemfile = File.read("#{app_path}/Gemfile")
|
87
|
+
expect(gemfile).to match(/gem 'pg'/)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -17,5 +17,13 @@ describe Grape::ErrorFormatter::Json do
|
|
17
17
|
parsed['error']['code'].should eq('foo')
|
18
18
|
parsed['error']['message'].should eq('bar')
|
19
19
|
end
|
20
|
+
|
21
|
+
it 'adds the backtrace with rescue_option[:backtrace] specified' do
|
22
|
+
error = Grape::ErrorFormatter::Json.call('',
|
23
|
+
'backtrace',
|
24
|
+
rescue_options: {backtrace: true})
|
25
|
+
parsed = JSON.parse(error)
|
26
|
+
parsed['backtrace'].should eq('backtrace')
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'napa/output_formatters/include_nil'
|
3
|
+
require 'napa/grape_extensions/grape_helpers'
|
4
|
+
require 'pry'
|
5
|
+
|
6
|
+
describe Napa::Representable::IncludeNil do
|
7
|
+
class FooRepresenter < Napa::Representer
|
8
|
+
include Napa::Representable::IncludeNil
|
9
|
+
property :foo
|
10
|
+
property :bar
|
11
|
+
end
|
12
|
+
|
13
|
+
class DummyClass
|
14
|
+
include Napa::GrapeHelpers
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'includes nil keys in a represented hash' do
|
18
|
+
input = OpenStruct.new(foo: 1, bar: nil)
|
19
|
+
output = DummyClass.new.represent(input, with: FooRepresenter).to_h
|
20
|
+
expect(output[:data]).to have_key('foo')
|
21
|
+
expect(output[:data]).to have_key('bar')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'napa/logger/logger'
|
3
|
+
|
4
|
+
describe Napa::Logger do
|
5
|
+
context '#response' do
|
6
|
+
it 'returns response in the expected format' do
|
7
|
+
response = Napa::Logger.response('foo', 'bar', 'baz')
|
8
|
+
|
9
|
+
expect(response[:response][:status]).to eq('foo')
|
10
|
+
expect(response[:response][:headers]).to eq('bar')
|
11
|
+
expect(response[:response][:response]).to eq('baz')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'napa/logger/parseable'
|
3
|
+
|
4
|
+
describe Logging::Layouts::Parseable do
|
5
|
+
context '#format_obj' do
|
6
|
+
it 'formats text as an object' do
|
7
|
+
p = Logging::Layouts::Parseable.new
|
8
|
+
expect(p.format_obj('foobar')).to eq({ text: 'foobar' })
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'does not reformat objects' do
|
12
|
+
p = Logging::Layouts::Parseable.new
|
13
|
+
expect(p.format_obj({ foo: :bar })).to eq({ foo: :bar })
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'napa/active_record_extensions/stats'
|
4
|
+
|
5
|
+
# Delete any prevous instantiations of the emitter and set valid statsd env vars
|
6
|
+
Napa::Stats.emitter = nil
|
7
|
+
ENV['STATSD_HOST'] = 'localhost'
|
8
|
+
ENV['STATSD_PORT'] = '8125'
|
9
|
+
|
10
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
11
|
+
|
12
|
+
ActiveRecord::Schema.define(version: 1) do
|
13
|
+
create_table :foos do |t|
|
14
|
+
t.string :word
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Foo < ActiveRecord::Base
|
19
|
+
end
|
20
|
+
|
21
|
+
describe Napa::Middleware::DatabaseStats do
|
22
|
+
before do
|
23
|
+
# Delete any prevous instantiations of the emitter and set valid statsd env vars
|
24
|
+
Napa::Stats.emitter = nil
|
25
|
+
ENV['STATSD_HOST'] = 'localhost'
|
26
|
+
ENV['STATSD_PORT'] = '8125'
|
27
|
+
|
28
|
+
@foo = Foo.create(word: 'bar')
|
29
|
+
end
|
30
|
+
|
31
|
+
after do
|
32
|
+
middleware = Napa::Middleware::DatabaseStats.new(@app)
|
33
|
+
env = Rack::MockRequest.env_for('/test/path')
|
34
|
+
middleware.call(env)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should send a query_time for an insert' do
|
38
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.query_time', an_instance_of(Float))
|
39
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.table.foos.insert.query_time', an_instance_of(Float))
|
40
|
+
|
41
|
+
@app = lambda { |env| [200, { 'Content-Type' => 'application/json' }, Foo.create(word: 'baz')] }
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should send a query_time for a select' do
|
45
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.query_time', an_instance_of(Float))
|
46
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.table.foos.select.query_time', an_instance_of(Float))
|
47
|
+
|
48
|
+
@app = lambda { |env| [200, { 'Content-Type' => 'application/json' }, Foo.first] }
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should send a query_time for a delete' do
|
52
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.query_time', an_instance_of(Float))
|
53
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.table.foos.delete.query_time', an_instance_of(Float))
|
54
|
+
|
55
|
+
@app = lambda { |env| [200, { 'Content-Type' => 'application/json' }, @foo.delete ] }
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should send a query_time for an update' do
|
59
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.query_time', an_instance_of(Float))
|
60
|
+
Napa::Stats.emitter.should_receive(:timing).with('sql.table.foos.update.query_time', an_instance_of(Float))
|
61
|
+
|
62
|
+
@app = lambda { |env| [200, { 'Content-Type' => 'application/json' }, @foo.update_attributes(word: 'baz') ] }
|
63
|
+
end
|
64
|
+
end
|
@@ -10,7 +10,8 @@ describe Napa::Middleware::RequestStats do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should increment api_requests counter' do
|
13
|
-
Napa::Stats.emitter.should_receive(:increment).with(
|
13
|
+
Napa::Stats.emitter.should_receive(:increment).with('request_count')
|
14
|
+
Napa::Stats.emitter.should_receive(:increment).with('path.get.test.path.request_count')
|
14
15
|
app = lambda { |env| [200, { 'Content-Type' => 'application/json' }, Array.new] }
|
15
16
|
middleware = Napa::Middleware::RequestStats.new(app)
|
16
17
|
env = Rack::MockRequest.env_for('/test/path')
|
@@ -18,10 +19,8 @@ describe Napa::Middleware::RequestStats do
|
|
18
19
|
end
|
19
20
|
|
20
21
|
it 'should send the api_response_time' do
|
21
|
-
Napa::Stats.emitter.should_receive(:timing).with(
|
22
|
-
|
23
|
-
an_instance_of(Float)
|
24
|
-
)
|
22
|
+
Napa::Stats.emitter.should_receive(:timing).with('response_time', an_instance_of(Float))
|
23
|
+
Napa::Stats.emitter.should_receive(:timing).with('path.get.test.path.response_time', an_instance_of(Float))
|
25
24
|
app = lambda { |env| [200, { 'Content-Type' => 'application/json'}, Array.new] }
|
26
25
|
middleware = Napa::Middleware::RequestStats.new(app)
|
27
26
|
env = Rack::MockRequest.env_for('/test/path')
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,27 @@
|
|
1
1
|
require 'napa'
|
2
|
+
|
3
|
+
ENV['RACK_ENV'] = 'test'
|
4
|
+
|
5
|
+
# from https://gist.github.com/adamstegman/926858
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.before(:all) { silence_output }
|
8
|
+
config.after(:all) { enable_output }
|
9
|
+
end
|
10
|
+
|
11
|
+
# Redirects stderr and stdout to /dev/null.
|
12
|
+
def silence_output
|
13
|
+
@orig_stderr = $stderr
|
14
|
+
@orig_stdout = $stdout
|
15
|
+
|
16
|
+
# redirect stderr and stdout to /dev/null
|
17
|
+
$stderr = File.new('/dev/null', 'w')
|
18
|
+
$stdout = File.new('/dev/null', 'w')
|
19
|
+
end
|
20
|
+
|
21
|
+
# Replace stdout and stderr so anything else is output correctly.
|
22
|
+
def enable_output
|
23
|
+
$stderr = @orig_stderr
|
24
|
+
$stdout = @orig_stdout
|
25
|
+
@orig_stderr = nil
|
26
|
+
@orig_stdout = nil
|
27
|
+
end
|
data/spec/stats_spec.rb
CHANGED
@@ -30,7 +30,7 @@ describe Napa::Stats do
|
|
30
30
|
|
31
31
|
it 'the namespace of the StatsD client object should equal the service name' do
|
32
32
|
ENV['SERVICE_NAME'] = 'my-service'
|
33
|
-
expect(Napa::Stats.emitter.namespace).to eq(
|
33
|
+
expect(Napa::Stats.emitter.namespace).to eq("my-service.test")
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'should use env variables to set statsd host and port' do
|
@@ -39,4 +39,28 @@ describe Napa::Stats do
|
|
39
39
|
expect(Napa::Stats.emitter.host).to eq('localhost')
|
40
40
|
expect(Napa::Stats.emitter.port).to eq('9000')
|
41
41
|
end
|
42
|
+
|
43
|
+
describe '#namespace' do
|
44
|
+
it 'prepends the namespace with the STATSD_API_KEY if present' do
|
45
|
+
ENV['STATSD_API_KEY'] = 'foo'
|
46
|
+
expect(Napa::Stats.namespace).to eq("#{ENV['STATSD_API_KEY']}.#{Napa::Identity.name}.test")
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'does not include the STATSD_API_KEY if empty' do
|
50
|
+
ENV['STATSD_API_KEY'] = nil
|
51
|
+
expect(Napa::Stats.namespace).to eq("#{Napa::Identity.name}.test")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#path_to_key' do
|
56
|
+
it 'returns the key string with ids removed and parts joined with dots' do
|
57
|
+
method = 'GET'
|
58
|
+
path = '/foo/123/bar'
|
59
|
+
expect(Napa::Stats.path_to_key(method, path)).to eq('get.foo._.bar')
|
60
|
+
|
61
|
+
method = 'POST'
|
62
|
+
path = '/foo'
|
63
|
+
expect(Napa::Stats.path_to_key(method, path)).to eq('post.foo')
|
64
|
+
end
|
65
|
+
end
|
42
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: napa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darby Frey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -136,20 +136,6 @@ dependencies:
|
|
136
136
|
- - '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: unicorn
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - '>='
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - '>='
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: statsd-ruby
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -282,6 +268,7 @@ files:
|
|
282
268
|
- docs/quickstart.md
|
283
269
|
- lib/napa.rb
|
284
270
|
- lib/napa/active_record_extensions/filter_by_hash.rb
|
271
|
+
- lib/napa/active_record_extensions/notifications_subscriber.rb
|
285
272
|
- lib/napa/active_record_extensions/stats.rb
|
286
273
|
- lib/napa/authentication.rb
|
287
274
|
- lib/napa/cli.rb
|
@@ -292,6 +279,8 @@ files:
|
|
292
279
|
- lib/napa/generators/templates/api/app/apis/%name_tableize%_api.rb.tt
|
293
280
|
- lib/napa/generators/templates/api/app/models/%name_underscore%.rb.tt
|
294
281
|
- lib/napa/generators/templates/api/app/representers/%name_underscore%_representer.rb.tt
|
282
|
+
- lib/napa/generators/templates/api/spec/apis/%name_tableize%_api_spec.rb.tt
|
283
|
+
- lib/napa/generators/templates/api/spec/models/%name_underscore%_spec.rb.tt
|
295
284
|
- lib/napa/generators/templates/migration/%migration_filename%.rb.tt
|
296
285
|
- lib/napa/generators/templates/scaffold/.env.test.tt
|
297
286
|
- lib/napa/generators/templates/scaffold/.env.tt
|
@@ -316,18 +305,22 @@ files:
|
|
316
305
|
- lib/napa/generators/templates/scaffold/spec/factories/.gitkeep
|
317
306
|
- lib/napa/generators/templates/scaffold/spec/spec_helper.rb
|
318
307
|
- lib/napa/grape_extenders.rb
|
319
|
-
- lib/napa/grape_extensions/entity.rb
|
320
308
|
- lib/napa/grape_extensions/error_formatter.rb
|
321
309
|
- lib/napa/grape_extensions/grape_helpers.rb
|
322
|
-
- lib/napa/grape_extensions/representer.rb
|
323
310
|
- lib/napa/identity.rb
|
324
311
|
- lib/napa/json_error.rb
|
325
312
|
- lib/napa/logger/log_transaction.rb
|
326
313
|
- lib/napa/logger/logger.rb
|
314
|
+
- lib/napa/logger/parseable.rb
|
327
315
|
- lib/napa/middleware/app_monitor.rb
|
328
316
|
- lib/napa/middleware/authentication.rb
|
317
|
+
- lib/napa/middleware/database_stats.rb
|
329
318
|
- lib/napa/middleware/logger.rb
|
330
319
|
- lib/napa/middleware/request_stats.rb
|
320
|
+
- lib/napa/output_formatters/entity.rb
|
321
|
+
- lib/napa/output_formatters/include_nil.rb
|
322
|
+
- lib/napa/output_formatters/representer.rb
|
323
|
+
- lib/napa/rspec_extensions/response_helpers.rb
|
331
324
|
- lib/napa/setup.rb
|
332
325
|
- lib/napa/stats.rb
|
333
326
|
- lib/napa/stats_d_timer.rb
|
@@ -338,13 +331,19 @@ files:
|
|
338
331
|
- lib/tasks/routes.rake
|
339
332
|
- napa.gemspec
|
340
333
|
- spec/active_record_extensions/filter_by_hash_spec.rb
|
341
|
-
- spec/active_record_extensions/stats_spec.rb
|
342
334
|
- spec/authentication_spec.rb
|
335
|
+
- spec/generators/api_generator_spec.rb
|
336
|
+
- spec/generators/migration_generator_spec.rb
|
337
|
+
- spec/generators/scaffold_generator_spec.rb
|
343
338
|
- spec/grape_extensions/error_formatter_spec.rb
|
339
|
+
- spec/grape_extensions/include_nil_spec.rb
|
344
340
|
- spec/identity_spec.rb
|
345
341
|
- spec/json_error_spec.rb
|
346
342
|
- spec/logger/log_transaction_spec.rb
|
343
|
+
- spec/logger/logger_spec.rb
|
344
|
+
- spec/logger/parseable_spec.rb
|
347
345
|
- spec/middleware/authentication_spec.rb
|
346
|
+
- spec/middleware/database_stats_spec.rb
|
348
347
|
- spec/middleware/request_stats_spec.rb
|
349
348
|
- spec/spec_helper.rb
|
350
349
|
- spec/stats_spec.rb
|
@@ -375,13 +374,19 @@ specification_version: 4
|
|
375
374
|
summary: A simple framework for building APIs with Grape
|
376
375
|
test_files:
|
377
376
|
- spec/active_record_extensions/filter_by_hash_spec.rb
|
378
|
-
- spec/active_record_extensions/stats_spec.rb
|
379
377
|
- spec/authentication_spec.rb
|
378
|
+
- spec/generators/api_generator_spec.rb
|
379
|
+
- spec/generators/migration_generator_spec.rb
|
380
|
+
- spec/generators/scaffold_generator_spec.rb
|
380
381
|
- spec/grape_extensions/error_formatter_spec.rb
|
382
|
+
- spec/grape_extensions/include_nil_spec.rb
|
381
383
|
- spec/identity_spec.rb
|
382
384
|
- spec/json_error_spec.rb
|
383
385
|
- spec/logger/log_transaction_spec.rb
|
386
|
+
- spec/logger/logger_spec.rb
|
387
|
+
- spec/logger/parseable_spec.rb
|
384
388
|
- spec/middleware/authentication_spec.rb
|
389
|
+
- spec/middleware/database_stats_spec.rb
|
385
390
|
- spec/middleware/request_stats_spec.rb
|
386
391
|
- spec/spec_helper.rb
|
387
392
|
- spec/stats_spec.rb
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'napa/active_record_extensions/stats.rb'
|
4
|
-
|
5
|
-
# Delete any prevous instantiations of the emitter and set valid statsd env vars
|
6
|
-
Napa::Stats.emitter = nil
|
7
|
-
ENV['STATSD_HOST'] = 'localhost'
|
8
|
-
ENV['STATSD_PORT'] = '8125'
|
9
|
-
|
10
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
11
|
-
|
12
|
-
ActiveRecord::Schema.define(version: 1) do
|
13
|
-
create_table :foos do |t|
|
14
|
-
t.string :word
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class Foo < ActiveRecord::Base
|
19
|
-
end
|
20
|
-
|
21
|
-
describe Napa::ActiveRecordStats do
|
22
|
-
before(:each) do
|
23
|
-
Foo.delete_all
|
24
|
-
@x = Foo.create(word: 'bar')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should send a query_time for an insert' do
|
28
|
-
Napa::Stats.emitter.should_receive(:timing).with(
|
29
|
-
"#{Napa::Identity.name}.unknown.sql.foos.insert.query_time",
|
30
|
-
an_instance_of(Float)
|
31
|
-
)
|
32
|
-
Foo.create(word: 'baz')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should send a query_time for a select' do
|
36
|
-
Napa::Stats.emitter.should_receive(:timing).with(
|
37
|
-
"#{Napa::Identity.name}.unknown.sql.foos.select.query_time",
|
38
|
-
an_instance_of(Float)
|
39
|
-
)
|
40
|
-
Foo.all
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should send a query_time for a delete' do
|
44
|
-
Napa::Stats.emitter.should_receive(:timing).with(
|
45
|
-
"#{Napa::Identity.name}.unknown.sql.foos.delete.query_time",
|
46
|
-
an_instance_of(Float)
|
47
|
-
)
|
48
|
-
@x.delete
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should send a query_time for an update' do
|
52
|
-
Napa::Stats.emitter.should_receive(:timing).with(
|
53
|
-
"#{Napa::Identity.name}.unknown.sql.foos.update.query_time",
|
54
|
-
an_instance_of(Float)
|
55
|
-
)
|
56
|
-
@x.word = 'baz'
|
57
|
-
@x.save
|
58
|
-
end
|
59
|
-
end
|