pokey 0.1.0 → 0.2.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/README.md +22 -15
- data/lib/generators/rails/hook/hook_generator.rb +16 -0
- data/lib/generators/rails/hook/templates/hook.rb +13 -0
- data/lib/generators/rails/install/install_generator.rb +13 -0
- data/lib/generators/rails/install/templates/initializer.rb.erb +17 -0
- data/lib/pokey.rb +17 -0
- data/lib/pokey/configuration.rb +2 -1
- data/lib/pokey/hooks.rb +0 -8
- data/lib/pokey/logger.rb +12 -0
- data/lib/pokey/request.rb +5 -0
- data/lib/pokey/scheduler.rb +1 -1
- data/lib/pokey/version.rb +1 -1
- data/pokey.gemspec +1 -0
- data/spec/pokey/configure_spec.rb +34 -0
- data/spec/pokey/hooks_spec.rb +0 -12
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fdaf56b0fdd1c671eb53bfc977869c3e2d69bd0
|
4
|
+
data.tar.gz: d44fe9670c6768ecdb1243324984f7133b337c53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82fcb403c1bd62b1a9d58dfb87a188ff1a01215f7fd4a1a7072e197590c1b8e3ee4c53ccfa7a2b9c9b942e2de451702389fbceca4a7691df0ccc0080a75ed137
|
7
|
+
data.tar.gz: dc43a6c15adca297a6a676cfe5a549824d261d71aaa3f2214edc9dedbaad5972261ef417099a40d801c7ef435c813bb26bc7016f65c0d264f9a3f41145976cf1
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Pokey
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/pokey) [](https://codeclimate.com/github/ccallebs/pokey)
|
4
|
+
|
3
5
|
Pokey is a Ruby gem designed to easily simulate webhooks / other HTTP requests common
|
4
6
|
to a production environment.
|
5
7
|
|
@@ -21,35 +23,40 @@ Or install it yourself as:
|
|
21
23
|
|
22
24
|
## Usage
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
+
If you're using Rails, create the initializer by running:
|
27
|
+
|
28
|
+
$ rails g pokey:install
|
29
|
+
|
30
|
+
Otherwise, create a new file in your initializers directory named `pokey.rb`. You'll be
|
31
|
+
setting the default hook directory and (optionally) defining custom hooks here.
|
26
32
|
|
27
33
|
``` RUBY
|
28
34
|
Pokey.configure do |config|
|
35
|
+
config.hook_dir = "app/pokey" # Defaults to app/pokey
|
36
|
+
config.run_on = [:development, :qa] # Only set environments you want pokey to
|
37
|
+
# simulate requests for. If not using Rails,
|
38
|
+
# this currently has no effect
|
39
|
+
|
29
40
|
config.add_hook do |hook|
|
30
41
|
hook.destination = "/my/webhook/endpoint"
|
31
42
|
hook.data = {
|
32
43
|
name: "Test endpoint",
|
33
44
|
endpoint_id: 1
|
34
45
|
}
|
46
|
+
hook.interval = 20 # in seconds
|
47
|
+
hook.http_method = :post # supports GET and POST for right now
|
35
48
|
end
|
36
|
-
|
37
|
-
Pokey::Scheduler.commit! # This isn't necessary in the config block
|
38
|
-
# but is a decent enough place to put it. This
|
39
|
-
# signifies that all endpoints have been added
|
40
|
-
# and Rufus will begin to schedule hooks.
|
41
49
|
end
|
42
50
|
```
|
43
51
|
|
44
|
-
|
45
|
-
|
52
|
+
If you would like to add many hooks to your project, you can place them in the `hook_dir`
|
53
|
+
you specified in the initializer. If you're using Rails, you can run
|
46
54
|
|
47
|
-
|
48
|
-
|
49
|
-
Pokey.
|
50
|
-
config.hook_dir = "app/pokey" # Defaults to app/pokey
|
51
|
-
end
|
55
|
+
$ rails g pokey:hook sendgrid_event
|
56
|
+
|
57
|
+
to create a new `Pokey::Hook` template. Otherwise, create a file like the following:
|
52
58
|
|
59
|
+
``` RUBY
|
53
60
|
# app/pokey/sendgrid_event_hook.rb
|
54
61
|
class SendgridEventHook < Pokey::Hook
|
55
62
|
def destination
|
@@ -111,7 +118,7 @@ end
|
|
111
118
|
```
|
112
119
|
|
113
120
|
As your data will inevitably get more complex to simulate actual events,
|
114
|
-
Pokey::Hook
|
121
|
+
`Pokey::Hook` subclasses are preferred over ad-hoc hook definitions.
|
115
122
|
|
116
123
|
|
117
124
|
## Contributing
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Pokey
|
4
|
+
module Generators
|
5
|
+
class HookGenerator < Rails::Generators::NamedBase
|
6
|
+
desc "Generates a Pokey hook"
|
7
|
+
check_class_collision suffix: "Hook"
|
8
|
+
|
9
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
|
+
|
11
|
+
def create_hook_file
|
12
|
+
template "hook.rb", "#{Pokey.hook_dir}/#{file_path.tr('/', '_')}_hook.rb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Pokey
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
|
8
|
+
def copy_initializer
|
9
|
+
template "initializer.rb.erb", "config/initializers/pokey.rb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Pokey.configure do |config|
|
2
|
+
config.hook_dir = "app/hooks"
|
3
|
+
|
4
|
+
config.run_on = [:development, :qa] # Only set environments you want pokey
|
5
|
+
# to simulate requests for
|
6
|
+
|
7
|
+
# Add some hooks on-the-fly here. If your data is somewhat complicated, add
|
8
|
+
# a hook instead with `rails g pokey:hook hook_name`
|
9
|
+
# config.add_hook do |hook|
|
10
|
+
# hook.destination = "/my/webhook/endpoint"
|
11
|
+
# hook.data = {
|
12
|
+
# name: "Test endpoint"
|
13
|
+
# }
|
14
|
+
# hook.interval = 120 # in seconds
|
15
|
+
# hook.http_method = :post
|
16
|
+
# end
|
17
|
+
end
|
data/lib/pokey.rb
CHANGED
@@ -2,15 +2,22 @@ require "pokey/version"
|
|
2
2
|
require "pokey/configuration"
|
3
3
|
require "pokey/hook"
|
4
4
|
require "pokey/hooks"
|
5
|
+
require "pokey/logger"
|
5
6
|
require "pokey/request"
|
6
7
|
require "pokey/scheduler"
|
7
8
|
|
9
|
+
if defined?(Rails)
|
10
|
+
require "generators/rails/install/install_generator"
|
11
|
+
require "generators/rails/hook/hook_generator"
|
12
|
+
end
|
13
|
+
|
8
14
|
module Pokey
|
9
15
|
class << self
|
10
16
|
attr_writer :configuration
|
11
17
|
|
12
18
|
def configure
|
13
19
|
yield(configuration)
|
20
|
+
Pokey::Scheduler.run! if should_run?
|
14
21
|
end
|
15
22
|
|
16
23
|
def configuration
|
@@ -24,5 +31,15 @@ module Pokey
|
|
24
31
|
def hook_dir
|
25
32
|
configuration.hook_dir
|
26
33
|
end
|
34
|
+
|
35
|
+
def should_run?
|
36
|
+
current_env.nil? || configuration.run_on.map(&:to_s).include?(current_env)
|
37
|
+
end
|
38
|
+
|
39
|
+
def current_env
|
40
|
+
if defined?(Rails)
|
41
|
+
Rails.env
|
42
|
+
end
|
43
|
+
end
|
27
44
|
end
|
28
45
|
end
|
data/lib/pokey/configuration.rb
CHANGED
data/lib/pokey/hooks.rb
CHANGED
@@ -26,14 +26,6 @@ class Pokey::Hooks
|
|
26
26
|
@@hooks << klass.new
|
27
27
|
end
|
28
28
|
|
29
|
-
def self.add_from_file(file_path)
|
30
|
-
require file_path
|
31
|
-
|
32
|
-
base_name = File.basename(file_path, ".rb")
|
33
|
-
klass = Helpers::Inflector.constantize(base_name.split('_').collect(&:capitalize).join)
|
34
|
-
add_from_class(klass)
|
35
|
-
end
|
36
|
-
|
37
29
|
def self.add_from_dir(directory)
|
38
30
|
directory += "/" if directory[-1] != "/"
|
39
31
|
|
data/lib/pokey/logger.rb
ADDED
data/lib/pokey/request.rb
CHANGED
@@ -7,6 +7,7 @@ class Pokey::Request
|
|
7
7
|
|
8
8
|
def initialize(destination, http_method = :post, data = {})
|
9
9
|
@destination, @http_method, @data = destination, http_method, data
|
10
|
+
@log = Pokey::Logger.new.log
|
10
11
|
end
|
11
12
|
|
12
13
|
def raw_request
|
@@ -22,6 +23,10 @@ class Pokey::Request
|
|
22
23
|
end
|
23
24
|
|
24
25
|
response = http.request(request)
|
26
|
+
|
27
|
+
if response
|
28
|
+
@log.info "Made request to #{uri.host}:#{uri.port} with following data: #{@data}"
|
29
|
+
end
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
data/lib/pokey/scheduler.rb
CHANGED
data/lib/pokey/version.rb
CHANGED
data/pokey.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
|
18
18
|
spec.add_runtime_dependency 'rufus-scheduler', '~> 3.1.2'
|
19
|
+
spec.add_runtime_dependency 'logging'
|
19
20
|
|
20
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
21
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -35,4 +35,38 @@ describe Pokey do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
describe "#should_run?" do
|
40
|
+
context "when configured for current Rails.env" do
|
41
|
+
before do
|
42
|
+
allow(Pokey).to receive(:current_env).and_return("development")
|
43
|
+
|
44
|
+
Pokey.configure do |config|
|
45
|
+
config.run_on = [:development, :qa]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
subject { Pokey.should_run? }
|
50
|
+
|
51
|
+
it "returns true" do
|
52
|
+
expect(subject).to eq true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "when not configured for current Rails.env" do
|
57
|
+
before do
|
58
|
+
allow(Pokey).to receive(:current_env).and_return("production")
|
59
|
+
|
60
|
+
Pokey.configure do |config|
|
61
|
+
config.run_on = [:development, :qa]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
subject { Pokey.should_run? }
|
66
|
+
|
67
|
+
it "returns false" do
|
68
|
+
expect(subject).to eq false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
38
72
|
end
|
data/spec/pokey/hooks_spec.rb
CHANGED
@@ -31,18 +31,6 @@ RSpec.describe Pokey::Hooks do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe '.add_from_file' do
|
35
|
-
let(:file) { './spec/pokey/sample_hooks/sample_hook.rb' }
|
36
|
-
|
37
|
-
let(:subject) do
|
38
|
-
Pokey::Hooks.add_from_file(file)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'successfully adds hook to list' do
|
42
|
-
expect { subject }.to change { Pokey::Hooks.all.length }.by(1)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
34
|
describe '.add_from_dir' do
|
47
35
|
let(:dir) { './spec/pokey/sample_hooks/' }
|
48
36
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pokey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chuck Callebs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rufus-scheduler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: logging
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,11 +125,16 @@ files:
|
|
111
125
|
- LICENSE.txt
|
112
126
|
- README.md
|
113
127
|
- Rakefile
|
128
|
+
- lib/generators/rails/hook/hook_generator.rb
|
129
|
+
- lib/generators/rails/hook/templates/hook.rb
|
130
|
+
- lib/generators/rails/install/install_generator.rb
|
131
|
+
- lib/generators/rails/install/templates/initializer.rb.erb
|
114
132
|
- lib/pokey.rb
|
115
133
|
- lib/pokey/configuration.rb
|
116
134
|
- lib/pokey/helpers/inflector.rb
|
117
135
|
- lib/pokey/hook.rb
|
118
136
|
- lib/pokey/hooks.rb
|
137
|
+
- lib/pokey/logger.rb
|
119
138
|
- lib/pokey/request.rb
|
120
139
|
- lib/pokey/scheduler.rb
|
121
140
|
- lib/pokey/version.rb
|