dredd_hooks 0.0.1 → 0.1.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: e812ae943d277f3163afe9c084e48aacce110730
4
- data.tar.gz: e6b2557296918b237c4a67ead7267ead330cc1bf
3
+ metadata.gz: 0a973e6c81a178f196919b8b84438a95ba0b7b2d
4
+ data.tar.gz: 448ecde2a65cedf46e9ae08a6233080be172a9b2
5
5
  SHA512:
6
- metadata.gz: b99c296c26c164cd209f597563be725b8d9d7795d646c2d8b7e32f47333daf55c428c7fa4fe4083218f9cfd74d68e68b9ec7346966a02c65bcbfcfa2f946041d
7
- data.tar.gz: 6c601a534be422f7b24e33df2834580e9d854f74ab0b157d62dd4bf07c8fe796920bf1572f6f461236aac1835354b3d7e01a89f571592f623e21851f9eba4eec
6
+ metadata.gz: 2c655cdc6b3b4c974ec79588ce426f5f8e13c65371668712d3516aa3ff6d4730d368cd3465defd56740230ba1fbd0b3519922f3562a264b7a7f7a48f003d4546
7
+ data.tar.gz: c2bd886fad87c7c805687890ee301349a23de809a869f081a17d2dce6fada88efb0076597a933360bef39ca010fa118dfc1af036c73c4a8a2efbeed42e49e2f3
data/CHANGELOG.md ADDED
@@ -0,0 +1,38 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ This project adheres to [Semantic Versioning](http://semver.org/).
5
+
6
+ ## [0.1.0] - 2016-08-06
7
+
8
+ ### Added
9
+
10
+ - This change log : )
11
+ - Possibility to use DreddHooks::Server as a library (see DreddHooks::CLI for an example)
12
+
13
+ ### Changed
14
+
15
+ - Started using the Semantic Versioning convention
16
+
17
+ ### Fixed
18
+
19
+ - The test suite can be used locally (it is a workaround only)
20
+
21
+ ## 0.0.1 - 2015-07-07
22
+
23
+ ### Added
24
+
25
+ - Ability to write Dredd hooks in Ruby
26
+
27
+ ## Previously
28
+
29
+ The original [proof of concept][poc] was written by @netmilk.
30
+
31
+
32
+ [0.1.0]: https://github.com/apiaryio/dredd-hooks-ruby/compare/v0.0.1...v0.1.0
33
+ [poc]: https://github.com/gonzalo-bulnes/dredd-rack/issues/7#issue-70936733
34
+
35
+ ## Inspiration
36
+
37
+ See http://keepachangelog.com and take part of the discussion!
38
+
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
- Copyright (c) 2015 Adam Kliment
2
-
3
- MIT License
1
+ The MIT License
2
+ Copyright (c) 2015, 2016 Adam Kliment
3
+ Copyright (c) 2016 Gonzalo Bulnes Guilpain
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,31 +1,38 @@
1
-
2
- # Ruby Hooks Handler for Dredd API Testing Framework
1
+ Ruby Hooks Handler for Dredd API Testing Framework
2
+ ==================================================
3
3
 
4
4
  [![Build Status](https://travis-ci.org/apiaryio/dredd-hooks-ruby.svg?branch=master)](https://travis-ci.org/apiaryio/dredd-hooks-ruby)
5
+ [![Dependency Status](https://gemnasium.com/badges/github.com/apiaryio/dredd-hooks-ruby.svg)](https://gemnasium.com/github.com/apiaryio/dredd-hooks-ruby)
6
+ [![Code Climate](https://codeclimate.com/github/apiaryio/dredd-hooks-ruby/badges/gpa.svg)](https://codeclimate.com/github/apiaryio/dredd-hooks-ruby)
7
+ [![Inline Docs](http://inch-ci.org/github/apiaryio/dredd-hooks-ruby.svg?branch=master)](http://inch-ci.org/github/apiaryio/dredd-hooks-ruby)
5
8
 
6
- Test your api with [Dredd API testing framework](https://github.com/apiaryio/dredd) and write [hooks](http://dredd.readthedocs.org/en/latest/hooks/) in Ruby to glue together API Blueprint with your Ruby project.
7
-
8
- ## Installation
9
+ Test your API with the [Dredd HTTP API testing framework](https://github.com/apiaryio/dredd) and write [hooks](http://dredd.readthedocs.org/en/latest/hooks/) in Ruby!
9
10
 
10
- Add this line to your application's Gemfile:
11
+ > **DISCLAIMER**: This is an early version of _dred-hooks-ruby_, please be aware that it will not be stable until **v1.0.0**. At any moment, [feedback][issues] is welcome! : )
11
12
 
12
- ```ruby
13
- gem 'dredd_worker'
14
- ```
13
+ [issues]: https://github.com/apiaryio/dredd-hooks-ruby/issues
15
14
 
16
- And then execute:
15
+ Installation
16
+ ------------
17
17
 
18
- $ bundle
18
+ Add the gem to your `Gemfile`:
19
19
 
20
- Or install it yourself as:
20
+ ```ruby
21
+ # Gemfile
21
22
 
22
- $ gem install dredd_hooks
23
+ gem 'dredd_hooks', '0.1.0' # see semver.org
24
+ ```
23
25
 
24
- ## Usage
26
+ Usage
27
+ -----
25
28
 
26
- 1. Create a hook file in `hooks.rb`:
29
+ Create a hook file (the file name is arbitrary):
27
30
 
28
31
  ```ruby
32
+ # ./hooks.rb
33
+
34
+ require 'dredd_hooks/methods'
35
+
29
36
  include DreddHooks::Methods
30
37
 
31
38
  before "Machines > Machines collection > Get Machines" do |transaction|
@@ -33,24 +40,91 @@ before "Machines > Machines collection > Get Machines" do |transaction|
33
40
  end
34
41
  ```
35
42
 
36
- 2. Run it with Dredd
43
+ Run it with Dredd:
37
44
 
45
+ ```bash
46
+ # note that the hooks file was named ./hooks.rb
47
+ dredd apiary.apib localhost:3000 --language ruby --hookfiles ./hooks.rb
38
48
  ```
39
- $ dredd apiary.apib localhost:3000 --language ruby --hookfiles hooks.rb
49
+
50
+ Documentation
51
+ -------------
52
+
53
+ ### API
54
+
55
+ The `DreddHooks::Methods` module provides the following methods to be used with [transaction names][doc-names]:
56
+
57
+ - `before`
58
+ - `after`
59
+ - `before_validation`
60
+
61
+ And these ones to be used without them:
62
+
63
+ - `before_all`
64
+ - `after_all`
65
+ - `before_each`
66
+ - `after_each`
67
+ - `before_each_validation`
68
+
69
+ See also the official [Hooks documentation][doc-hooks].
70
+
71
+ [doc-names]: http://dredd.readthedocs.org/en/latest/hooks/#getting-transaction-names
72
+ [doc-hooks]: https://dredd.readthedocs.org/en/latest/hooks
73
+
74
+ Change log
75
+ ----------
76
+
77
+ Releases are commented to provide a [brief change log][releases], details can be found in the [`CHANGELOG`][changelog] file.
78
+
79
+ [releases]: https://github.com/gonzalo-bulnes/dredd-hooks-ruby/releases
80
+ [changelog]: ./CHANGELOG.md
81
+
82
+ Development
83
+ -----------
84
+
85
+ ### Testing
86
+
87
+ ```bash
88
+ # Run the test suite
89
+ rake
40
90
  ```
41
91
 
42
- ## API
92
+ A few [Cucumber][cucumber] features provide an end-to-end test harness, and a set of [RSpec][rspec] specs provide both a more granular documentation and a unit test harness.
93
+
94
+ RSpec [tags][tags] are used to categorize the spec examples.
95
+
96
+ Spec examples that are tagged as `public` describe aspects of the gem public API, and MAY be considered as its documentation.
43
97
 
44
- Module `DreddHooks::Methods` mixes in following methods `before`, `after`, `before_all`, `after_all`, `before_each`, `after_each`, `before_validation`, `before_each_validation`
98
+ The `private` or `protected` specs are written for development purpose only. Because they describe internal behaviour which may change at any moment without notice, they are only executed as a secondary task by the [continuous integration service][travis] and SHOULD be ignored.
45
99
 
46
- `before`, `before_validation` `after` hooks are identified by [transaction name](http://dredd.readthedocs.org/en/latest/hooks/#getting-transaction-names).
100
+ Run `rake spec:public` to print the gem public documentation.
47
101
 
48
- Usage is very similar to [sync JS hooks API](http://dredd.readthedocs.org/en/latest/hooks/#sync-api)
102
+ [cucumber]: https://github.com/cucumber/cucumber-rails
103
+ [rspec]: https://www.relishapp.com/rspec
104
+ [tags]: https://www.relishapp.com/rspec/rspec-core/v/3-4/docs/command-line/tag-option
105
+ [travis]: https://travis-ci.org/gonzalo-bulnes/simple_token_authentication/builds
49
106
 
50
- ## Contributing
107
+ ### Maintenance
108
+
109
+ Extending the DSL to support new hooks is meant to be easy, see the [maintenance documentation][doc-maintenance] for details. : )
110
+
111
+ [doc-maintenance]: ./doc/README.md
112
+
113
+ > Refactored with [love, internet style](https://www.youtube.com/watch?v=Xe1TZaElTAs).
114
+
115
+ Contributing
116
+ ------------
51
117
 
52
118
  1. Fork it
53
- 2. Create your feature branch (`git checkout -b my-new-feature`)
54
- 3. Commit your changes (`git commit -am 'Add some feature'`)
55
- 4. Push to the branch (`git push origin my-new-feature`)
56
- 5. Create a new Pull Request
119
+ 1. Create your feature branch (`git checkout -b my-new-feature`)
120
+ 1. Commit your changes (`git commit -am 'Add some feature'`)
121
+ 1. Push to the branch (`git push origin my-new-feature`)
122
+ 1. Create a new Pull Request
123
+
124
+ License
125
+ -------
126
+
127
+ See [`LICENSE`][license].
128
+
129
+ [license]: ./LICENSE.txt
130
+
data/Rakefile CHANGED
@@ -1,2 +1,33 @@
1
1
  require "bundler/gem_tasks"
2
+ require "cucumber/rake/task"
3
+
4
+ Cucumber::Rake::Task.new
5
+
6
+ begin
7
+ require 'rspec/core/rake_task'
8
+
9
+ desc 'Provide private interfaces documentation'
10
+ RSpec::Core::RakeTask.new(:spec)
11
+
12
+ namespace :spec do
13
+ desc 'Provide public interfaces documentation'
14
+ RSpec::Core::RakeTask.new(:public) do |t|
15
+ t.rspec_opts = "--tag public"
16
+ end
17
+ end
18
+
19
+ namespace :spec do
20
+ desc 'Provide private interfaces documentation for development purpose'
21
+ RSpec::Core::RakeTask.new(:development) do |t|
22
+ t.rspec_opts = "--tag protected --tag private"
23
+ end
24
+ end
25
+ rescue LoadError
26
+ desc 'RSpec rake task not available'
27
+ task :spec do
28
+ abort 'RSpec rake task is not available. Be sure to install rspec-core as a gem or plugin'
29
+ end
30
+ end
31
+
32
+ task default: ['spec:public', 'spec:development', :cucumber]
2
33
 
data/bin/dredd-hooks-ruby CHANGED
@@ -1,16 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ $LOAD_PATH.push File.join(File.dirname(__FILE__), "/../lib" )
2
3
 
3
- require 'dredd_hooks'
4
+ require 'dredd_hooks/cli'
4
5
 
5
- # Disables stdout buffering. This makes node.js able to capture stdout of this process with no delay
6
- # http://stackoverflow.com/questions/23001033/how-to-live-stream-output-from-ruby-script-using-child-process-spawn
7
- $stdout.sync = true
8
-
9
- # Load all files given on the command-line
10
- DreddHooks::FileLoader.load ARGV
11
-
12
- # Run the server
13
-
14
- puts 'Starting Ruby Dredd Hooks Worker'
15
- server = DreddHooks::Server.new
16
- server.run
6
+ DreddHooks::CLI.start(ARGV)
data/doc/README.md ADDED
@@ -0,0 +1,26 @@
1
+ How to Add New Hooks
2
+ ====================
3
+
4
+ Dredd does support new hooks? It's time to extend the Ruby DSL!
5
+
6
+ In order to enable your new hook:
7
+
8
+ 1. Determine if the hook is specific to a transaction or applies to all of them
9
+ 1. Add the _registration_ and _run_ method to the [runner spec][runner-spec]
10
+ 1. Add the DSL method to the [DSL spec][methods-spec]
11
+ 1. Add the usage example to the [**Execution order** feature][feature]
12
+ 1. Run the entire test suite and watch the tests fail (start worrying if they don't!)
13
+ 1. Add the hook name to the corresponding list in the [definitions file][def]
14
+ 1. Add the corresponding Dredd **event** to the [events definition][def] (be careful, the hooks order does matter!)
15
+ 1. Run the test suite and watch it pass : )
16
+
17
+ Finally, bump the [_minor_][semver] version number, update the `README`, the `CHANGELOG` and do anything you need to do in order to release!
18
+
19
+ [def]: ../lib/dredd_hooks/definitions.rb
20
+ [events-handler]: ../lib/dredd_hooks/server/events_handler.rb
21
+
22
+ [runner-spec]: ../spec/lib/dredd_hooks/runner_spec.rb
23
+ [methods-spec]: ../spec/lib/dredd_hooks/methods_spec.rb
24
+ [feature]: ../features/execution_order.feature
25
+ [semver]: http://semver.org
26
+
@@ -23,47 +23,48 @@ Feature: Execution order
23
23
  Scenario:
24
24
  Given a file named "hookfile.rb" with:
25
25
  """
26
+ require 'dredd_hooks/methods'
26
27
  include DreddHooks::Methods
27
28
 
28
29
  key = 'hooks_modifications'
29
30
 
30
31
  before("/message > GET") do |transaction|
31
- transaction[key] = [] if transaction[key].nil?
32
+ transaction[key] ||= []
32
33
  transaction[key].push "before modification"
33
34
  end
34
35
 
35
36
  after("/message > GET") do |transaction|
36
- transaction[key] = [] if transaction[key].nil?
37
+ transaction[key] ||= []
37
38
  transaction[key].push "after modification"
38
39
  end
39
40
 
40
41
  before_validation("/message > GET") do |transaction|
41
- transaction[key] = [] if transaction[key].nil?
42
+ transaction[key] ||= []
42
43
  transaction[key].push "before validation modification"
43
44
  end
44
45
 
45
46
  before_all do |transaction|
46
- transaction[0][key] = [] if transaction[0][key].nil?
47
+ transaction[0][key] ||= []
47
48
  transaction[0][key].push "before all modification"
48
49
  end
49
50
 
50
51
  after_all do |transaction|
51
- transaction[0][key] = [] if transaction[0][key].nil?
52
+ transaction[0][key] ||= []
52
53
  transaction[0][key].push "after all modification"
53
54
  end
54
55
 
55
56
  before_each do |transaction|
56
- transaction[key] = [] if transaction[key].nil?
57
+ transaction[key] ||= []
57
58
  transaction[key].push "before each modification"
58
59
  end
59
60
 
60
61
  before_each_validation do |transaction|
61
- transaction[key] = [] if transaction[key].nil?
62
+ transaction[key] ||= []
62
63
  transaction[key].push "before each validation modification"
63
64
  end
64
65
 
65
66
  after_each do |transaction|
66
- transaction[key] = [] if transaction[key].nil?
67
+ transaction[key] ||= []
67
68
  transaction[key].push "after each modification"
68
69
  end
69
70
 
@@ -23,6 +23,7 @@ Feature: Failing a transacstion
23
23
  Scenario:
24
24
  Given a file named "hookfile.rb" with:
25
25
  """
26
+ require 'dredd_hooks/methods'
26
27
  include DreddHooks::Methods
27
28
  before("/message > GET") do |transaction|
28
29
  transaction['fail'] = "Yay! Failed in ruby!"
@@ -23,6 +23,7 @@ Feature: Hook handlers
23
23
  Scenario:
24
24
  Given a file named "hookfile.rb" with:
25
25
  """
26
+ require 'dredd_hooks/methods'
26
27
  include DreddHooks::Methods
27
28
 
28
29
  before("/message > GET") do |transaction|
@@ -23,6 +23,7 @@ Feature: Multiple hookfiles with a glob
23
23
  Scenario:
24
24
  Given a file named "hookfile1.rb" with:
25
25
  """
26
+ require 'dredd_hooks/methods'
26
27
  include DreddHooks::Methods
27
28
  before("/message > GET") do |transaction|
28
29
  puts "It's me, File1"
@@ -30,6 +31,7 @@ Feature: Multiple hookfiles with a glob
30
31
  """
31
32
  And a file named "hookfile2.rb" with:
32
33
  """
34
+ require 'dredd_hooks/methods'
33
35
  include DreddHooks::Methods
34
36
  before("/message > GET") do |transaction|
35
37
  puts "It's me, File2"
@@ -37,6 +39,7 @@ Feature: Multiple hookfiles with a glob
37
39
  """
38
40
  And a file named "hookfile_to_be_globed.rb" with:
39
41
  """
42
+ require 'dredd_hooks/methods'
40
43
  include DreddHooks::Methods
41
44
  before("/message > GET") do |transaction|
42
45
  puts "It's me, File3"
@@ -55,4 +58,4 @@ Feature: Multiple hookfiles with a glob
55
58
  And the output should contain:
56
59
  """
57
60
  It's me, File3
58
- """
61
+ """
@@ -4,9 +4,6 @@ require "sinatra/base"
4
4
  Before do
5
5
  puts "Killing server..."
6
6
  system "for i in `ps axu | grep 'server.rb' | grep ruby | awk '{print $2}'`; do kill -9 $i; done > /dev/null 2>&1"
7
- puts "Killing handler..."
8
- system "for i in `ps axu | grep 'dredd-hooks' | grep ruby | awk '{print $2}'`; do kill -9 $i; done > /dev/null 2>&1"
9
- sleep 3
10
7
 
11
- @aruba_timeout_seconds = 10
12
- end
8
+ @aruba_timeout_seconds = 20
9
+ end
data/lib/dredd_hooks.rb CHANGED
@@ -1,6 +1,5 @@
1
- require "dredd_hooks/version"
1
+ require 'dredd_hooks/file_loader'
2
+ require 'dredd_hooks/server'
3
+
4
+ module DreddHooks; end
2
5
 
3
- require File.join(File.dirname(__FILE__), './dredd_hooks/methods.rb')
4
- require File.join(File.dirname(__FILE__), './dredd_hooks/runner.rb')
5
- require File.join(File.dirname(__FILE__), './dredd_hooks/file_loader.rb')
6
- require File.join(File.dirname(__FILE__), './dredd_hooks/server.rb')
@@ -0,0 +1,18 @@
1
+ require 'dredd_hooks'
2
+
3
+ module DreddHooks
4
+ class CLI
5
+
6
+ def self.start(error=STDERR, out=STDOUT, files)
7
+
8
+ # Load all files given on the command-line
9
+ DreddHooks::FileLoader.load(files)
10
+
11
+ # Run the server
12
+ out.puts 'Starting Ruby Dredd Hooks Worker...'
13
+ server = DreddHooks::Server.new(error, out)
14
+ server.run
15
+ end
16
+ end
17
+ end
18
+