capistrano-payload 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/README.md CHANGED
@@ -20,25 +20,40 @@ Then configure URL:
20
20
  To test if it works type:
21
21
 
22
22
  cap payload:deploy
23
+
24
+ The best way to test out is to use http://www.postbin.org/.
25
+
26
+ ## Options
27
+
28
+ - payload_url — Primary URL where the data would be sent (required)
29
+ - payload_format — Payload format. Must be one of :json (default), :form, :yaml, :xml
30
+ - payload_params — Extra parameters to the request (api_key, etc.). *Note: extra parameters wont be added to the payload.*
31
+ - payload_message — Ask for deployment comment. (default: true)
23
32
 
24
33
  ## Payload structure
25
34
 
26
- Plugin will sent JSON-encoded data via POST method.
35
+ Plugin will sent a payload in one of the formats (FORM, JSON, YAML, XML) data via POST method.
27
36
 
28
- Here is the sample payload:
37
+ Here is an example data:
29
38
 
30
39
  {
31
40
  "capistrano": {
41
+ "version": "2.6.0",
32
42
  "application": "APP_NAME",
33
- "deployer": "sosedoff",
43
+ "deployer": {
44
+ "user": "sosedoff",
45
+ "hostname": "localhost",
46
+ }
34
47
  "timestamp": "2011-07-21 19:09:52 -0500",
48
+ "message": "Release 1.0.0",
35
49
  "source": {
36
50
  "branch": "master",
37
51
  "revision": "b18ffa822c16c028765800d0c4d22bfd5e4f3bf9",
38
52
  "repository": "git@github.com:repository.git"
39
53
  },
40
54
  "action": "deploy"
41
- }
55
+ },
56
+ "payload_version": "0.2.0"
42
57
  }
43
58
 
44
59
  That's it. Ready to roll.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require "bundler"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/*_spec.rb'
8
+ end
9
+
10
+ task :default => :spec
11
+ task :test => :spec
@@ -15,9 +15,12 @@ Gem::Specification.new do |gem|
15
15
  gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
16
16
  gem.require_paths = ['lib']
17
17
 
18
- gem.add_development_dependency 'rspec', '~> 2.6'
18
+ gem.add_development_dependency 'rspec', '~> 2.6'
19
+ gem.add_development_dependency 'xml-simple', '~> 1.1'
20
+ gem.add_development_dependency 'webmock', '~> 1.6'
19
21
 
20
- gem.add_runtime_dependency 'capistrano', '~> 2.6'
21
- gem.add_runtime_dependency 'rest-client', '~> 1.6'
22
- gem.add_runtime_dependency 'multi_json', '~> 1.0'
22
+ gem.add_runtime_dependency 'capistrano', '~> 2.6'
23
+ gem.add_runtime_dependency 'rest-client', '~> 1.6'
24
+ gem.add_runtime_dependency 'multi_json', '~> 1.0'
25
+ gem.add_runtime_dependency 'builder', '~> 3.0'
23
26
  end
@@ -1,4 +1,6 @@
1
1
  require 'capistrano'
2
+ require 'capistrano/version'
3
+ require 'socket'
2
4
 
3
5
  module CapistranoPayload
4
6
  class CapistranoIntegration
@@ -8,12 +10,18 @@ module CapistranoPayload
8
10
  abort 'Payload URL required! set :payload_url'
9
11
  }
10
12
 
11
- _cset(:payload_format) { :json }
13
+ _cset(:payload_message) { true }
14
+ _cset(:payload_format) { :json }
15
+ _cset(:payload_params) { Hash.new }
12
16
 
13
17
  _cset(:payload_data) {
14
18
  {
19
+ :version => Capistrano::Version.to_s.strip,
15
20
  :application => fetch(:application),
16
- :deployer => ENV['USER'] || ENV['USERNAME'] || 'n/a',
21
+ :deployer => {
22
+ :user => ENV['USER'] || ENV['USERNAME'] || 'n/a',
23
+ :hostname => ENV['HOSTNAME'] || Socket.gethostname
24
+ },
17
25
  :timestamp => Time.now,
18
26
  :source => {
19
27
  :branch => fetch(:branch),
@@ -26,19 +34,25 @@ module CapistranoPayload
26
34
  namespace :payload do
27
35
  task :deploy, :roles => :app do
28
36
  logger.debug("Sending deployment notification to #{fetch(:payload_url)}")
37
+ message = payload_message == true ? Capistrano::CLI.ui.ask("Deployment message (none): ", nil) : ''
29
38
  begin
30
- CapistranoPayload::Payload.new('deploy', payload_data).deliver(fetch(:payload_url))
39
+ CapistranoPayload::Payload.new('deploy', message, payload_data, payload_format, payload_params).deliver(payload_url)
31
40
  rescue DeliveryError => err
32
41
  logger.debug("Payload delivery error: #{err.message}")
42
+ rescue ConfigurationError => err
43
+ logger.debug("Payload configuration error: #{err.message}")
33
44
  end
34
45
  end
35
46
 
36
47
  task :rollback, :roles => :app do
37
48
  logger.debug("Sending rollback notification to #{fetch(:payload_url)}")
49
+ message = payload_message == true ? Capistrano::CLI.ui.ask("Rollback message (none): ", nil) : ''
38
50
  begin
39
- CapistranoPayload::Payload.new('rollback', payload_data).deliver(fetch(:payload_url))
51
+ CapistranoPayload::Payload.new('rollback', message, payload_data, payload_format, payload_params).deliver(payload_url)
40
52
  rescue DeliveryError => err
41
53
  logger.debug("Payload delivery error: #{err.message}")
54
+ rescue ConfigurationError => err
55
+ logger.debug("Payload configuration error: #{err.message}")
42
56
  end
43
57
  end
44
58
  end
@@ -0,0 +1,66 @@
1
+ require 'multi_json'
2
+ require 'yaml'
3
+ require 'builder'
4
+ require 'time'
5
+
6
+ module CapistranoPayload
7
+ module Format
8
+ # Allowed formats
9
+ FORMATS = [:form, :json, :yaml, :xml]
10
+
11
+ # Method processing assignment
12
+ FORMAT_METHODS = {
13
+ :form => :to_hash,
14
+ :json => :to_json,
15
+ :yaml => :to_yaml,
16
+ :xml => :to_xml
17
+ }
18
+
19
+ # Returns a payload as HASH
20
+ #
21
+ def to_hash
22
+ {
23
+ :capistrano => @data,
24
+ :payload_version => CapistranoPayload::VERSION
25
+ }
26
+ end
27
+
28
+ # Returns a payload as JSON
29
+ #
30
+ def to_json
31
+ MultiJson.encode(self.to_hash)
32
+ end
33
+
34
+ # Returns a payload as YAML
35
+ #
36
+ def to_yaml
37
+ YAML.dump(self.to_hash)
38
+ end
39
+
40
+ # Returns a payload as XML
41
+ #
42
+ def to_xml
43
+ xml = Builder::XmlMarkup.new(:indent => 2)
44
+ xml.instruct!(:xml, :version => '1.0', :encoding => 'UTF-8')
45
+ xml.payload do |p|
46
+ p.capistrano do |c|
47
+ c.action @data[:action]
48
+ c.message @data[:message]
49
+ c.version @data[:version]
50
+ c.application @data[:application]
51
+ c.deployer do |d|
52
+ c.user @data[:deployer][:user]
53
+ c.hostname @data[:deployer][:hostname]
54
+ end
55
+ c.timestamp @data[:timestamp].iso8601
56
+ c.source do |s|
57
+ c.branch @data[:source][:branch]
58
+ c.revision @data[:source][:revision]
59
+ c.repository @data[:source][:repository]
60
+ end
61
+ end
62
+ p.payload_version CapistranoPayload::VERSION
63
+ end.to_s
64
+ end
65
+ end
66
+ end
@@ -1,30 +1,50 @@
1
- require 'rest-client'
2
- require 'multi_json'
3
-
4
1
  module CapistranoPayload
5
- class DeliveryError < StandardError ; end
2
+ class ConfigurationError < StandardError ; end
3
+ class DeliveryError < StandardError ; end
6
4
 
7
5
  class Payload
6
+ include CapistranoPayload::Format
7
+ include CapistranoPayload::Request
8
+
9
+ # Allowed actions
10
+ ACTIONS = ['deploy', 'rollback']
11
+
8
12
  attr_reader :action
13
+ attr_reader :message
9
14
  attr_reader :data
15
+ attr_reader :format
10
16
  attr_reader :params
11
17
 
12
18
  # Initialize a new Payload object
13
19
  #
14
- # action - Deployment action (deploy, rollback)
15
- # data - Deployment parameters
16
- # params - Extra parameters to payload (api_key, etc.), default: {}
17
- # Could not contain 'capistrano' key. Will be removed if present.
20
+ # action - Deployment action (deploy, rollback)
21
+ # message - Deployment message (optional)
22
+ # data - Payload data
23
+ # format - Payload format (:json, :form). Default: json
24
+ # params - Extra parameters to payload (api_key, etc.), default: {}
25
+ # Could not contain 'capistrano' key. Will be removed if present.
26
+ # Should be a hash
18
27
  #
19
- def initialize(action, data, params={})
20
- @action = action
21
- @data = data.merge(:action => action)
22
- @params = params
28
+ def initialize(action, message, data, format=:json, params={})
29
+ @action = action
30
+ @message = message.strip
31
+ @data = data.merge(:action => @action, :message => @message)
32
+ @format = format.to_sym
33
+ @params = params.kind_of?(Hash) ? params : {}
34
+
35
+ unless ACTIONS.include?(@action)
36
+ raise ConfigurationError, "Invalid payload action: #{action}."
37
+ end
38
+
39
+ # Check if we have an invalid format
40
+ unless FORMATS.include?(@format)
41
+ raise ConfigurationError, "Invalid payload format: #{format}."
42
+ end
23
43
 
24
- # Check if we have 'capistrano' keys (string or symbolic)
44
+ # Check if we have 'payload' keys (string or symbolic)
25
45
  unless @params.empty?
26
- @params.delete(:capistrano)
27
- @params.delete('capistrano')
46
+ @params.delete(:payload)
47
+ @params.delete('payload')
28
48
  end
29
49
  end
30
50
 
@@ -33,9 +53,9 @@ module CapistranoPayload
33
53
  # url - Target url
34
54
  #
35
55
  def deliver(url)
36
- payload = MultiJson.encode({:capistrano => @data}.merge(@params))
56
+ payload = self.send(FORMAT_METHODS[@format])
37
57
  begin
38
- RestClient.post(url, payload, :content_type => :json)
58
+ request(:post, url, {:payload => payload}.merge(@params), format)
39
59
  rescue Exception => ex
40
60
  raise DeliveryError, ex.message
41
61
  end
@@ -0,0 +1,35 @@
1
+ require 'rest-client'
2
+
3
+ module CapistranoPayload
4
+ module Request
5
+ TIMEOUT = 4
6
+ OPEN_TIMEOUT = 4
7
+
8
+ CONTENT_TYPES = {
9
+ :form => 'application/x-www-form-urlencoded',
10
+ :json => 'application/json',
11
+ :yaml => 'application/x-yaml',
12
+ :xml => 'application/xml'
13
+ }.freeze
14
+
15
+ # Performs a HTTP request
16
+ #
17
+ # method - Request method (:get, :post, :put, :delete)
18
+ # url - Target URL
19
+ # payload - Delivery content
20
+ # format - Delivery format
21
+ #
22
+ def request(method, url, payload, format)
23
+ opts = {
24
+ :method => method,
25
+ :url => url,
26
+ :payload => payload,
27
+ :headers => {:content_type => CONTENT_TYPES[format]},
28
+ :timeout => TIMEOUT,
29
+ :open_timeout => OPEN_TIMEOUT
30
+ }
31
+
32
+ RestClient::Request.execute(opts)
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module CapistranoPayload
2
- VERSION = "0.1.0".freeze unless defined? ::CapistranoPayload::VERSION
2
+ VERSION = "0.3.0".freeze unless defined? ::CapistranoPayload::VERSION
3
3
  end
@@ -1,2 +1,5 @@
1
+ require 'capistrano-payload/version'
2
+ require 'capistrano-payload/request'
3
+ require 'capistrano-payload/format'
1
4
  require 'capistrano-payload/payload'
2
5
  require 'capistrano-payload/capistrano_integration'
@@ -0,0 +1 @@
1
+ payload[capistrano][version]=2.6.0&payload[capistrano][application]=foobar&payload[capistrano][deployer][user]=username&payload[capistrano][deployer][hostname]=localhost&payload[capistrano][timestamp]=2011-01-01%2000%3A00%3A00%20-0600&payload[capistrano][source][branch]=master&payload[capistrano][source][revision]=abcdef&payload[capistrano][source][repository]=git%40github.com%3Ausername%2Frepo.git&payload[capistrano][action]=deploy&payload[capistrano][message]=Comment&payload[payload_version]=0.3.0
@@ -0,0 +1,19 @@
1
+ {
2
+ "capistrano": {
3
+ "version": "2.6.0",
4
+ "application": "foobar",
5
+ "deployer": {
6
+ "user": "username",
7
+ "hostname": "localhost"
8
+ },
9
+ "timestamp": "2011-01-01 00:00:00 -0600",
10
+ "source": {
11
+ "branch": "master",
12
+ "revision": "abcdef",
13
+ "repository": "git@github.com:username/repo.git"
14
+ },
15
+ "action": "deploy",
16
+ "message": "Comment"
17
+ },
18
+ "payload_version": "0.3.0"
19
+ }
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <payload>
3
+ <capistrano>
4
+ <action>deploy</action>
5
+ <message>Comment</message>
6
+ <version>2.6.0</version>
7
+ <application>foobar</application>
8
+ <deployer>
9
+ <user>username</user>
10
+ <hostname>localhost</hostname>
11
+ </deployer>
12
+ <timestamp>2011-01-01T00:00:00-06:00</timestamp>
13
+ <source>
14
+ <branch>master</branch>
15
+ <revision>abcdef</revision>
16
+ <repository>git@github.com:username/repo.git</repository>
17
+ </source>
18
+ </capistrano>
19
+ <payload_version>0.3.0</payload_version>
20
+ </payload>
@@ -0,0 +1,15 @@
1
+ ---
2
+ :capistrano:
3
+ :version: 2.6.0
4
+ :application: foobar
5
+ :deployer:
6
+ :user: username
7
+ :hostname: localhost
8
+ :timestamp: 2011-01-01 00:00:00 -06:00
9
+ :source:
10
+ :branch: master
11
+ :revision: abcdef
12
+ :repository: git@github.com:username/repo.git
13
+ :action: deploy
14
+ :message: Comment
15
+ :payload_version: 0.3.0
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CapistranoPayload::Format' do
4
+ include CapistranoPayload
5
+
6
+ before :all do
7
+ @payload = Payload.new('deploy', 'Comment', PAYLOAD)
8
+ end
9
+
10
+ it 'renders HASH' do
11
+ data = @payload.to_hash
12
+ data.key?(:capistrano).should == true
13
+ data.key?(:payload_version).should == true
14
+ data[:payload_version].should == CapistranoPayload::VERSION
15
+ end
16
+
17
+ it 'renders JSON' do
18
+ @payload.to_json == json_fixture('payload.json')
19
+ end
20
+
21
+ it 'renders YAML' do
22
+ @payload.to_yaml.should == fixture('payload.yml')
23
+ @payload.to_hash.should == yaml_fixture('payload.yml')
24
+ end
25
+
26
+ it 'renders XML' do
27
+ f = xml_fixture_from_string(@payload.to_xml)
28
+
29
+
30
+ f.keys.should == xml_fixture('payload.xml').keys
31
+ f.keys.should == @payload.to_hash.keys
32
+ f[:capistrano].keys.should == xml_fixture('payload.xml')[:capistrano].keys
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CapistranoPayload::Payload' do
4
+ include CapistranoPayload
5
+
6
+ it 'raises ConfigurationError on invalid action' do
7
+ proc { Payload.new('foo', '', {}) }.
8
+ should raise_error ConfigurationError, "Invalid payload action: foo."
9
+ end
10
+
11
+ it 'raises ConfigurationError on invalid format' do
12
+ proc { Payload.new('deploy', '', {}, :foo) }.
13
+ should raise_error ConfigurationError, "Invalid payload format: foo."
14
+ end
15
+
16
+ it 'assigns data fields' do
17
+ p = Payload.new('deploy', 'Comment', PAYLOAD)
18
+ p.action.should == 'deploy'
19
+ p.message.should == 'Comment'
20
+ end
21
+
22
+ it 'discards an invalid extra parameters container' do
23
+ p = Payload.new('deploy', 'Comment', PAYLOAD, :json, 'Invalid params')
24
+ p.params.should be_a Hash
25
+ p.params.empty?.should == true
26
+ end
27
+
28
+ it 'deletes an invalid extra parameters' do
29
+ p = Payload.new('deploy', 'Comment', PAYLOAD, :json, {'payload' => 'test', :payload => 'test', :api_key => 'test'})
30
+ p.params.size.should == 1
31
+ p.params.key?(:payload).should == false
32
+ p.params.key?('payload').should == false
33
+ p.params[:api_key].should == 'test'
34
+ end
35
+
36
+ it 'responds to format renderers' do
37
+ p = Payload.new('deploy', 'Comment', PAYLOAD)
38
+ Format::FORMAT_METHODS.each_pair do |f, method|
39
+ p.respond_to?(method).should == true
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CapistranoPayload::Request' do
4
+ include CapistranoPayload
5
+
6
+ it 'raises DeliveryError on failed request' do
7
+ stub_request(:post, "http://localhost:4567/fail").
8
+ with(:body => fixture('payload.form'), :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
9
+ to_return(:status => 404, :headers => {})
10
+
11
+ p = Payload.new('deploy', 'Comment', PAYLOAD, :form)
12
+ proc { p.deliver('http://localhost:4567/fail') }.
13
+ should raise_error DeliveryError, "404 Resource Not Found"
14
+ end
15
+
16
+ it 'delivers a payload' do
17
+ stub_request(:post, "http://foo.bar.com/payload").
18
+ with(:body => fixture('payload.form'), :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
19
+ to_return(:status => 200, :headers => {})
20
+
21
+ p = Payload.new('deploy', 'Comment', PAYLOAD, :form)
22
+ p.deliver('http://foo.bar.com/payload')
23
+ end
24
+ end
@@ -0,0 +1,52 @@
1
+ $:.unshift File.expand_path("../..", __FILE__)
2
+
3
+ require 'spec_utils'
4
+ require 'xmlsimple'
5
+ require 'webmock'
6
+ require 'webmock/rspec'
7
+ require 'capistrano-payload'
8
+
9
+ def fixture_path(file=nil)
10
+ path = File.expand_path("../fixtures", __FILE__)
11
+ path = File.join(path, file) unless file.nil?
12
+ path
13
+ end
14
+
15
+ def fixture(file)
16
+ File.read(File.join(fixture_path, file))
17
+ end
18
+
19
+ def json_fixture(file)
20
+ MultiJson.decode(fixture(file))
21
+ end
22
+
23
+ def yaml_fixture(file)
24
+ YAML.load(fixture(file))
25
+ end
26
+
27
+ def xml_fixture(file)
28
+ hash = XmlSimple.xml_in(fixture(file), 'ForceArray' => false, 'KeepRoot' => false)
29
+ hash.recursive_symbolize_keys!
30
+ hash
31
+ end
32
+
33
+ def xml_fixture_from_string(data)
34
+ hash = XmlSimple.xml_in(data, 'ForceArray' => false, 'KeepRoot' => false)
35
+ hash.recursive_symbolize_keys!
36
+ hash
37
+ end
38
+
39
+ PAYLOAD = {
40
+ :version => "2.6.0",
41
+ :application => "foobar",
42
+ :deployer => {
43
+ :user => "username",
44
+ :hostname => "localhost"
45
+ },
46
+ :timestamp => Time.mktime(2011, 1, 1, 0, 0, 0),
47
+ :source => {
48
+ :branch => 'master',
49
+ :revision => 'abcdef',
50
+ :repository => 'git@github.com:username/repo.git'
51
+ }
52
+ }
@@ -0,0 +1,17 @@
1
+ class Hash
2
+ def symbolize_keys!
3
+ keys.each do |key|
4
+ self[(key.to_sym rescue key) || key] = delete(key)
5
+ end
6
+ self
7
+ end
8
+
9
+ def recursive_symbolize_keys!
10
+ symbolize_keys!
11
+ # symbolize each hash in .values
12
+ values.each{|h| h.recursive_symbolize_keys! if h.is_a?(Hash) }
13
+ # symbolize each hash inside an array in .values
14
+ values.select{|v| v.is_a?(Array) }.flatten.each{|h| h.recursive_symbolize_keys! if h.is_a?(Hash) }
15
+ self
16
+ end
17
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: capistrano-payload
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dan Sosedoff
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-21 00:00:00 -05:00
13
+ date: 2011-07-22 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -25,38 +25,71 @@ dependencies:
25
25
  type: :development
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
28
- name: capistrano
28
+ name: xml-simple
29
29
  prerelease: false
30
30
  requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "1.1"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: webmock
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: "1.6"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: capistrano
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
31
53
  none: false
32
54
  requirements:
33
55
  - - ~>
34
56
  - !ruby/object:Gem::Version
35
57
  version: "2.6"
36
58
  type: :runtime
37
- version_requirements: *id002
59
+ version_requirements: *id004
38
60
  - !ruby/object:Gem::Dependency
39
61
  name: rest-client
40
62
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
63
+ requirement: &id005 !ruby/object:Gem::Requirement
42
64
  none: false
43
65
  requirements:
44
66
  - - ~>
45
67
  - !ruby/object:Gem::Version
46
68
  version: "1.6"
47
69
  type: :runtime
48
- version_requirements: *id003
70
+ version_requirements: *id005
49
71
  - !ruby/object:Gem::Dependency
50
72
  name: multi_json
51
73
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
74
+ requirement: &id006 !ruby/object:Gem::Requirement
53
75
  none: false
54
76
  requirements:
55
77
  - - ~>
56
78
  - !ruby/object:Gem::Version
57
79
  version: "1.0"
58
80
  type: :runtime
59
- version_requirements: *id004
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: builder
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: "3.0"
91
+ type: :runtime
92
+ version_requirements: *id007
60
93
  description: Capistrano plugin that delivers JSON payload to the specified URL
61
94
  email: dan.sosedoff@gmail.com
62
95
  executables: []
@@ -67,12 +100,26 @@ extra_rdoc_files: []
67
100
 
68
101
  files:
69
102
  - .gitignore
103
+ - .rspec
104
+ - Gemfile
70
105
  - README.md
106
+ - Rakefile
71
107
  - capistrano-payload.gemspec
72
108
  - lib/capistrano-payload.rb
73
109
  - lib/capistrano-payload/capistrano_integration.rb
110
+ - lib/capistrano-payload/format.rb
74
111
  - lib/capistrano-payload/payload.rb
112
+ - lib/capistrano-payload/request.rb
75
113
  - lib/capistrano-payload/version.rb
114
+ - spec/fixtures/payload.form
115
+ - spec/fixtures/payload.json
116
+ - spec/fixtures/payload.xml
117
+ - spec/fixtures/payload.yml
118
+ - spec/format_spec.rb
119
+ - spec/payload_spec.rb
120
+ - spec/request_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/spec_utils.rb
76
123
  has_rdoc: true
77
124
  homepage: https://github.com/sosedoff/capistrano-payload
78
125
  licenses: []
@@ -101,5 +148,13 @@ rubygems_version: 1.6.2
101
148
  signing_key:
102
149
  specification_version: 3
103
150
  summary: JSON webhook on capistrano deployments
104
- test_files: []
105
-
151
+ test_files:
152
+ - spec/fixtures/payload.form
153
+ - spec/fixtures/payload.json
154
+ - spec/fixtures/payload.xml
155
+ - spec/fixtures/payload.yml
156
+ - spec/format_spec.rb
157
+ - spec/payload_spec.rb
158
+ - spec/request_spec.rb
159
+ - spec/spec_helper.rb
160
+ - spec/spec_utils.rb