lib/jira4r/jira_tool.rb in jira4r-1.1.0 vs lib/jira4r/jira_tool.rb in jira4r-1.2.0

- old
+ new

@@ -1,96 +1,95 @@ require 'logger' -require 'rubygems' -gem 'soap4r' +require 'soap/rpc/standaloneServer' module Jira4R - + class JiraTool attr_accessor :enhanced - + # Create a new JiraTool - # + # # where: # version ... the version of the SOAP API you wish to use - currently supported versions [ 2 ] # base_url ... the base URL of the JIRA instance - eg. http://confluence.atlassian.com def initialize(version, base_url) @version = version - @base_url = base_url + @base_url = base_url @logger = Logger.new(STDERR) @endpoint_url = "#{@base_url}/rpc/soap/jirasoapservice-v#{version}" end - + #Assign a new logger to the tool. By default a STDERR logger is used. def logger=(logger) @logger = logger end - + #Retrieve the driver, creating as required. def driver() if not @driver @logger.info( "Connecting driver to #{@endpoint_url}" ) require "jira4r/v#{@version}/jiraService.rb" require "jira4r/v#{@version}/JiraSoapServiceDriver.rb" require "jira4r/v#{@version}/jiraServiceMappingRegistry.rb" - + service_classname = "Jira4R::V#{@version}::JiraSoapService" puts "Service: #{service_classname}" service = eval(service_classname) @driver = service.send(:new, @endpoint_url) end @driver end - + #Assign a wiredump file prefix to the driver. def wiredump_file_base=(base) driver().wiredump_file_base = base end - - - #Login to the JIRA instance, storing the token for later calls. - # + + + #Login to the JIRA instance, storing the token for later calls. + # #This is typically the first call that is made on the JiraTool. def login(username, password) @token = driver().login(username, password) end - #Clients should avoid using the authentication token directly. + #Clients should avoid using the authentication token directly. def token() @token end - + #Call a method on the driver, adding in the authentication token previously determined using login() def call_driver(method_name, *args) @logger.debug("Finding method #{method_name}") - method = driver().method(method_name) - + method = driver().method(method_name) + if args.length > 0 - method.call(@token, *args) + method.call(@token, *args) else method.call(@token) end end - + #Retrieve a project without the associated PermissionScheme. #This will be significantly faster for larger Jira installations. #See: JRA-10660 def getProjectNoScheme(key) puts "getProjectNoScheme is deprecated. Please call getProjectNoSchemes." getProjectNoSchemes(key) end - + def getProjectNoSchemes(key) self.getProjectsNoSchemes().find { |project| project.key == key } end - + def getProject(key) #Jira > 3.10 has been patched to support this method directly as getProjectByKey puts "Using deprecated JIRA4R API call getProject(key); replace with getProjectByKey(key)" return getProjectByKey(key) end - + def getProjectByKey( projectKey ) begin return call_driver( "getProjectByKey", projectKey ) rescue SOAP::FaultError => soap_error #XXX surely there is a better way to detect this kind of condition in the JIRA server @@ -99,11 +98,11 @@ else raise soap_error end end end - + def getGroup( groupName ) begin return call_driver( "getGroup", groupName ) rescue SOAP::FaultError => soap_error #XXX surely there is a better way to detect this kind of condition in the JIRA server @@ -112,82 +111,82 @@ else raise soap_error end end end - + def getProjectRoleByName( projectRoleName ) getProjectRoles.each{ |projectRole| return projectRole if projectRole.name == projectRoleName } end - + def getPermissionScheme( permissionSchemeName ) - self.getPermissionSchemes().each { |permission_scheme| + self.getPermissionSchemes().each { |permission_scheme| return permission_scheme if permission_scheme.name == permissionSchemeName } return nil end - + def getNotificationScheme( notificationSchemeName ) - self.getNotificationSchemes().each { |notification_scheme| + self.getNotificationSchemes().each { |notification_scheme| return notification_scheme if notification_scheme.name == notificationSchemeName } return nil end - + def getPermission( permissionName ) if not @permissions @permissions = self.getAllPermissions() end - + @permissions.each { |permission| return permission if permission.name.downcase == permissionName.downcase } - + @logger.warn("No permission #{permissionName} found") return nil end - + def findPermission(allowedPermissions, permissionName) allowedPermissions.each { |allowedPermission| #puts "Checking #{allowedPermission.name} against #{permissionName} " return allowedPermission if allowedPermission.name == permissionName } - return nil + return nil end - + def findEntityInPermissionMapping(permissionMapping, entityName) permissionMapping.remoteEntities.each { |entity| return entity if entity.name == entityName } return nil end - + #Removes entity def setPermissions( permissionScheme, allowedPermissions, entity) allowedPermissions = [ allowedPermissions ].flatten.compact #Remove permissions that are no longer allowed permissionScheme.permissionMappings.each { |mapping| next unless findEntityInPermissionMapping(mapping, entity.name) - + allowedPermission = findPermission(allowedPermissions, mapping.permission.name) if allowedPermission puts "Already has #{allowedPermission.name} in #{permissionScheme.name} for #{entity.name}" allowedPermissions.delete(allowedPermission) next end puts "Deleting #{mapping.permission.name} from #{permissionScheme.name} for #{entity.name}" deletePermissionFrom( permissionScheme, mapping.permission, entity) } - + puts allowedPermissions.inspect allowedPermissions.each { |allowedPermission| puts "Granting #{allowedPermission.name} to #{permissionScheme.name} for #{entity.name}" - addPermissionTo(permissionScheme, allowedPermission, entity) - } + addPermissionTo(permissionScheme, allowedPermission, entity) + } end private def fix_args(args) args.collect { |arg| @@ -196,16 +195,16 @@ else arg end } end - + def method_missing(method_name, *args) args = fix_args(args) call_driver(method_name, *args) end - - - - end + + + + end end