Skip to content
This repository has been archived by the owner on Jan 25, 2022. It is now read-only.

Commit

Permalink
Merge pull request #75 from drnic/trigger
Browse files Browse the repository at this point in the history
Added Trigger & TriggerDescriptor classes; plus `jpi generate trigger` generator
  • Loading branch information
drnic committed Apr 19, 2013
2 parents 0675b36 + 730971e commit 2a42905
Show file tree
Hide file tree
Showing 10 changed files with 142 additions and 0 deletions.
1 change: 1 addition & 0 deletions ruby-runtime/lib/jenkins/plugin/runtime.rb
Expand Up @@ -9,5 +9,6 @@
require 'jenkins/cli'
require 'jenkins/model'
require 'jenkins/tasks'
require 'jenkins/triggers'
require 'jenkins/launcher'
require 'jenkins/listeners'
5 changes: 5 additions & 0 deletions ruby-runtime/lib/jenkins/triggers.rb
@@ -0,0 +1,5 @@
module Jenkins::Triggers
require 'jenkins/triggers/trigger_descriptor'
require 'jenkins/triggers/trigger'
require 'jenkins/triggers/trigger_proxy'
end
29 changes: 29 additions & 0 deletions ruby-runtime/lib/jenkins/triggers/trigger.rb
@@ -0,0 +1,29 @@
require 'jenkins/model'

module Jenkins
module Triggers
# Triggers a Build.
# {http://javadoc.jenkins-ci.org/hudson/triggers/Trigger.html}
class Trigger
include Jenkins::Model
include Jenkins::Model::Describable
describe_as Java.hudson.triggers.Trigger, :with => Jenkins::Triggers::TriggerDescriptor

# Executes the triggered task.
#
# This method is invoked when Trigger.new(String) is used
# to create an instance, and the crontab matches the current time.
def run
end

# Called before a Trigger is removed.
# Under some circumstances, this may be invoked more than once for
# a given Trigger, so be prepared for that.
#
# When the configuration is changed for a project, all triggers
# are removed once and then added back.
def stop
end
end
end
end
14 changes: 14 additions & 0 deletions ruby-runtime/lib/jenkins/triggers/trigger_descriptor.rb
@@ -0,0 +1,14 @@
module Jenkins::Triggers
# Descriptor for Trigger
class TriggerDescriptor < Java.hudson.triggers.TriggerDescriptor
include Jenkins::Model::Descriptor

# Returns true if this trigger is applicable to the given Item
#
# @param [Boolean] true to allow user to configure a trigger for this item
def isApplicable(targetType)
# @impl refers to the Ruby class implementing this descriptor
@impl.respond_to?(:applicable?) ? @impl.applicable?(targetType) : true
end
end
end
14 changes: 14 additions & 0 deletions ruby-runtime/lib/jenkins/triggers/trigger_proxy.rb
@@ -0,0 +1,14 @@
module Jenkins::Triggers
class TriggerProxy < Java.hudson.triggers.Trigger
include Jenkins::Model::DescribableProxy
proxy_for Jenkins::Triggers::Trigger

def run
@object.run
end

def stop
@object.stop
end
end
end
24 changes: 24 additions & 0 deletions ruby-runtime/spec/jenkins/triggers/trigger_proxy_spec.rb
@@ -0,0 +1,24 @@
require 'spec_helper'

describe Jenkins::Triggers::TriggerProxy do
include ProxyHelper

before do
@object = mock(Jenkins::Triggers::Trigger)
@builder = Jenkins::Triggers::TriggerProxy.new(@plugin, @object)
end

describe "run" do
it "calls through to its implementation" do
@object.should_receive(:run)
@builder.run
end
end

describe "stop" do
it "calls through to its implementation" do
@object.should_receive(:stop)
@builder.stop
end
end
end
7 changes: 7 additions & 0 deletions ruby-runtime/spec/jenkins/triggers/trigger_spec.rb
@@ -0,0 +1,7 @@
require 'spec_helper'

describe Jenkins::Triggers::Trigger do
it "lives" do
subject.should_not be_nil
end
end
7 changes: 7 additions & 0 deletions ruby-tools/jpi/lib/jenkins/plugin/cli/generate.rb
Expand Up @@ -60,6 +60,13 @@ def computer_listener(name)
@name = name
template('templates/computer_listener.tt', "models/#{name.downcase}_listener.rb")
end

desc "trigger", "trigger NAME", :desc => "receive notification of computers events"
def trigger(name)
@name = name
template('templates/trigger.tt', "models/#{name.downcase}_trigger.rb")
template('templates/project_config.erb.tt', "views/#{name.downcase}/config.erb")
end
end
end
end
Expand Down
@@ -0,0 +1,6 @@
<%%
f = taglib("/lib/form")
f.entry(:title => 'Some field', :field => 'some_field', :description => "An excellent field for this project/job") do
f.textbox
end
%>
35 changes: 35 additions & 0 deletions ruby-tools/jpi/lib/jenkins/plugin/cli/templates/trigger.tt
@@ -0,0 +1,35 @@
java_import Java.java.util.logging.Logger

# Triggers a Build.
# {http://javadoc.jenkins-ci.org/hudson/triggers/Trigger.html}
class <%= name.capitalize %>Trigger < Jenkins::Triggers::Trigger
display_name "<%= name.capitalize %> trigger"

def self.applicable?(type)
type.is_a? Java::HudsonModel::Project
end

attr_accessor :some_field

# Invoked with the form parameters when this extension point
# is created from a configuration screen.
def initialize(attrs = {})
@some_field = attrs['some_field']
end

# Executes the triggered task.
#
# This method is invoked when Trigger.new(String) is used
# to create an instance, and the crontab matches the current time.
def run
end

# Called before a Trigger is removed.
# Under some circumstances, this may be invoked more than once for
# a given Trigger, so be prepared for that.
#
# When the configuration is changed for a project, all triggers
# are removed once and then added back.
def stop
end
end

0 comments on commit 2a42905

Please sign in to comment.