
    Vh(                         d dl mZmZmZ eZdZdZd dlZd dl	m
Z
 d Zd Zd Zdd	Zd
 Zd Zd Zd Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona
  
module: gem
short_description: Manage Ruby gems
description:
  - Manage installation and uninstallation of Ruby gems.
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  name:
    type: str
    description:
      - The name of the gem to be managed.
    required: true
  state:
    type: str
    description:
      - The desired state of the gem. V(latest) ensures that the latest version is installed.
    required: false
    choices: [present, absent, latest]
    default: present
  gem_source:
    type: path
    description:
      - The path to a local gem used as installation source.
    required: false
  include_dependencies:
    description:
      - Whether to include dependencies or not.
    required: false
    type: bool
    default: true
  repository:
    type: str
    description:
      - The repository from which the gem will be installed.
    required: false
    aliases: [source]
  user_install:
    description:
      - Install gem in user's local gems cache or for all users.
    required: false
    type: bool
    default: true
  executable:
    type: path
    description:
      - Override the path to the gem executable.
    required: false
  install_dir:
    type: path
    description:
      - Install the gems into a specific directory. These gems will be independent from the global installed ones. Specifying
        this requires user_install to be false.
    required: false
  bindir:
    type: path
    description:
      - Install executables into a specific directory.
    version_added: 3.3.0
  norc:
    type: bool
    default: true
    description:
      - Avoid loading any C(.gemrc) file. Ignored for RubyGems prior to 2.5.2.
      - The default changed from V(false) to V(true) in community.general 6.0.0.
    version_added: 3.3.0
  env_shebang:
    description:
      - Rewrite the shebang line on installed scripts to use /usr/bin/env.
    required: false
    default: false
    type: bool
  version:
    type: str
    description:
      - Version of the gem to be installed/removed.
    required: false
  pre_release:
    description:
      - Allow installation of pre-release versions of the gem.
    required: false
    default: false
    type: bool
  include_doc:
    description:
      - Install with or without docs.
    required: false
    default: false
    type: bool
  build_flags:
    type: str
    description:
      - Allow adding build flags for gem compilation.
    required: false
  force:
    description:
      - Force gem to (un-)install, bypassing dependency checks.
    required: false
    default: false
    type: bool
author:
  - "Ansible Core Team"
  - "Johan Wiren (@johanwiren)"
a  
- name: Install version 1.0 of vagrant
  community.general.gem:
    name: vagrant
    version: 1.0
    state: present

- name: Install latest available version of rake
  community.general.gem:
    name: rake
    state: latest

- name: Install rake version 1.0 from a local gem on disk
  community.general.gem:
    name: rake
    gem_source: /path/to/gems/rake-1.0.gem
    state: present
N)AnsibleModulec                     | j                   d   r | j                   d   j                  d      }|S | j                  dd      g}|S )N
executable gemT)paramssplitget_bin_path)moduleresults     i/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/gem.pyget_rubygems_pathr      sJ    }}\"|,2237 M %%eT23M    c                    t        t        d      rt        j                  S t        |       dgz   }| j	                  |d      \  }}}t        j                  d|      }|sy t        d |j                         D              }|t        _        |S )Nver	--versionTcheck_rcz^(\d+)\.(\d+)\.(\d+)c              3   2   K   | ]  }t        |        y w)N)int).0xs     r   	<genexpr>z'get_rubygems_version.<locals>.<genexpr>   s     /1A/s   )	hasattrget_rubygems_versionr   r   run_commandrematchtuplegroups)r   cmdrcouterrr!   r   s          r   r   r      s    #U+#'''
F
#{m
3C''d';NRcHH,c2E
//
/C"Jr   c                 D    | j                   d   rd| j                   d   iS y )Ninstall_dirGEM_HOME)r   )r   s    r   get_rubygems_environr+      s%    }}]#FMM-899r   c                    t        |       }|j                  d       |j                  t        |              |r@|j                  d       | j                  d   r |j                  d| j                  d   g       |j                  d       |j                  d| j                  d   z         t        |       }| j                  ||d	      \  }}}g }|j                         D ]d  }t        j                  d
|      }	|	s|	j                  d      }
|
j                  d      D ]$  }|j                  |j                         d          & f |S )Nqueryz--remote
repository--sourcez-nz^%s$nameTenviron_updater   z\S+\s+\((?:default: )?(.+)\)   z, r   )r   appendextendcommon_optsr   r+   r   
splitlinesr    r!   groupr   )r   remoter$   environr%   r&   r'   installed_versionsliner!   versionsversions               r   get_installed_versionsr?      s!   
F
#CJJwJJ{6"#

:==&JJ
FMM,$?@AJJtJJvf--."6*G''Gd'SNRc  >8$?{{1~H#>>$/ >"))'--/!*<=>	> r   c                     | j                   d   dk(  r!t        | d      }|r|d   | j                   d<   t        |       }| j                   d   r| j                   d   |v ryy|ryy)NstatelatestT)r9   r   r>   F)r   r?   )r   remoteversionsr;   s      r   existsrD      sq    }}W)/tD'5a'8FMM)$/7}}Y==#'99  r   c                 n    g }t        |       }| j                  d   r|r|dk\  r|j                  d       |S )Nnorc)      rG   z--norc)r   r   r4   )r   optsr   s      r   r6   r6      s7    D
v
&C}}V	)9HKr   c                    | j                   ry t        |       }t        |       }|j                  d       |j	                  t        |              | j                  d   r |j	                  d| j                  d   g       | j                  d   r |j	                  d| j                  d   g       | j                  d   r!|j	                  d| j                  d   g       n|j                  d       |j                  d	       | j                  d
   r|j                  d       |j                  | j                  d          | j                  ||d       y )N	uninstallr)   --install-dirbindir--bindirr>   r   z--allz--executableforce--forcer0   Tr1   )
check_moder   r+   r4   r5   r6   r   r   )r   r$   r:   s      r   rK   rK      s   
F
#C"6*GJJ{JJ{6"#}}]#

OV]]=%ABC}}X

Jh 789}}Y

Ky!9:;

7JJ~}}W

9JJv}}V$%
s7TBr   c                    | j                   ry t        |       }t        |       }|j                  d       |j	                  t        |              | j                  d   r |j	                  d| j                  d   g       | j                  d   r |j	                  d| j                  d   g       | j                  d   s|j                  d       n|r|dk  r|j                  d	       | j                  d
   r|j                  d       n|j                  d       | j                  d   r |j	                  d| j                  d   g       | j                  d   r |j	                  d| j                  d   g       | j                  d   r|j                  d       | j                  d   s;|r(|dk  r#|j                  d       |j                  d       n|j                  d       | j                  d   r|j                  d       |j                  | j                  d          | j                  d   r |j	                  d| j                  d   g       | j                  d   r|j                  d       | j                  |d       y ) Ninstallr>   r   r.   r/   include_dependenciesz--ignore-dependencies)rG   r   r   z--include-dependenciesuser_installz--user-installz--no-user-installr)   rL   rM   rN   pre_releasez--preinclude_docz	--no-rdocz--no-riz--no-documentenv_shebangz--env-shebang
gem_sourcebuild_flagsz--rO   rP   Tr   )rQ   r   r   r4   r5   r6   r   r   )r   r   r$   s      r   rS   rS      s   
v
&C
F
#CJJyJJ{6"#}}Y

Ky!9:;}}\"

Jl ;<===/0

*+3?JJ/0}}^$

#$

&'}}]#

OV]]=%ABC}}X

Jh 789}}]#

7=='3?JJ{#JJy!JJ'}}]#

?#JJv}}\*+}}]#

D&--678}}W

9
sT*r   c                     t        t        d(i dt        dd      dt        dd      dt        ddd	      d
t        dd      dt        ddgd      dt        ddg dd      dt        ddd	      dt        dd      dt        d      dt        dd      dt        ddd	      dt        ddd	      dt        ddd	      dt        dd      dt        dd      dt        ddd	      dddgddgg      } | j                  d   r$| j                  d   d k(  r| j                  d!"       | j                  d   r$| j                  d   d k(  r| j                  d#"       | j                  d   r!| j                  d   r| j                  d$"       | j                  d   s| j                  d
   | j                  d<   d}| j                  d   d%v rt	        |       s8t        |        d}n*| j                  d   d&k(  rt	        |       rt        |        d}i }| j                  d
   |d
<   | j                  d   |d<   | j                  d   r| j                  d   |d<   ||d'<    | j                  d(i | y ))Nr   Fpath)requiredtyperY   rT   Tbool)r]   defaultr^   r0   strr.   source)r]   aliasesr^   rA   present)rd   absentrB   )r]   r`   choicesr^   rU   r)   rM   )r^   rF   )r^   r`   rV   rW   rX   r>   rZ   rO   )argument_specsupports_check_modemutually_exclusiverB   z(Cannot specify version when state=latest)msgz>Cannot maintain state=latest when installing from local sourcez'install_dir requires user_install=false)rd   rB   re   changed )r   dictr   	fail_jsonrD   rS   rK   	exit_json)r   rk   r   s      r   mainrp   &  s    
U8
U8
 "&ud!P
 t%0	

 UXJUK
 yBahmn
 udH
 e&9
 V$
 640
 eUH
 eUH
 eUH
 %e4
 e%8
  u6B!
$ !)<8<:ST)F. }}YFMM'$:h$FGH}}\"v}}W'='I]^}}^$})EFG==&&,mmF&;l#G}}W!66f~FOG	w	8	+&>fGF]]6*F6NmmG,F7O}}Y"MM)4yF9Fvr   __main__)F)
__future__r   r   r   r^   __metaclass__DOCUMENTATIONEXAMPLESr    ansible.module_utils.basicr   r   r   r+   r?   rD   r6   rK   rS   rp   __name__rl   r   r   <module>rx      so    A @l\& 
 4"0C2*+Z5p zF r   