wright 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +7 -0
  3. data/README.md +60 -54
  4. data/lib/wright/cli.rb +44 -18
  5. data/lib/wright/dry_run.rb +7 -0
  6. data/lib/wright/provider/directory.rb +26 -30
  7. data/lib/wright/provider/file.rb +34 -34
  8. data/lib/wright/provider/group/darwin_directory_service.rb +8 -7
  9. data/lib/wright/provider/group/gnu_passwd.rb +5 -5
  10. data/lib/wright/provider/group.rb +53 -36
  11. data/lib/wright/provider/package/apt.rb +32 -8
  12. data/lib/wright/provider/package/homebrew.rb +6 -5
  13. data/lib/wright/provider/package/yum.rb +39 -0
  14. data/lib/wright/provider/package.rb +30 -16
  15. data/lib/wright/provider/symlink.rb +32 -33
  16. data/lib/wright/provider/user/darwin_directory_service.rb +14 -17
  17. data/lib/wright/provider/user/gnu_passwd.rb +20 -21
  18. data/lib/wright/provider/user.rb +58 -41
  19. data/lib/wright/resource/group.rb +1 -0
  20. data/lib/wright/resource/package.rb +16 -3
  21. data/lib/wright/resource/user.rb +1 -0
  22. data/lib/wright/resource.rb +4 -2
  23. data/lib/wright/util/user.rb +34 -2
  24. data/lib/wright/version.rb +1 -1
  25. data/man/wright.1 +15 -11
  26. data/spec/cli_spec.rb +18 -0
  27. data/spec/provider/group/darwin_directory_service_spec.rb +76 -220
  28. data/spec/provider/group/gnu_passwd_spec.rb +36 -189
  29. data/spec/provider/group_spec.rb +180 -27
  30. data/spec/provider/package/apt/apt-cache_policy_dmenu.return +1 -0
  31. data/spec/provider/package/apt/apt-cache_policy_dmenu.stderr +0 -0
  32. data/spec/provider/package/apt/apt-cache_policy_dmenu.stdout +4 -0
  33. data/spec/provider/package/apt/apt-cache_policy_htop.stdout +3 -3
  34. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.return +1 -0
  35. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stderr +0 -0
  36. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stdout +6 -0
  37. data/spec/provider/package/apt/apt-cache_policy_linux-image.return +1 -0
  38. data/spec/provider/package/apt/apt-cache_policy_linux-image.stderr +0 -0
  39. data/spec/provider/package/apt/apt-cache_policy_linux-image.stdout +4 -0
  40. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.return +1 -0
  41. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stderr +0 -0
  42. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stdout +6 -0
  43. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.return +1 -0
  44. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stderr +0 -0
  45. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stdout +9 -0
  46. data/spec/provider/package/apt/apt-cache_showpkg_htop.return +1 -0
  47. data/spec/provider/package/apt/apt-cache_showpkg_htop.stderr +0 -0
  48. data/spec/provider/package/apt/apt-cache_showpkg_htop.stdout +20 -0
  49. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.return +1 -0
  50. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stderr +0 -0
  51. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stdout +11 -0
  52. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.return +1 -0
  53. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stderr +0 -0
  54. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stdout +1 -0
  55. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.return +1 -0
  56. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stderr +0 -0
  57. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stdout +26 -0
  58. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.return +1 -0
  59. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stderr +0 -0
  60. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stdout +15 -0
  61. data/spec/provider/package/apt_spec.rb +82 -14
  62. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.return +1 -0
  63. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stderr +0 -0
  64. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stdout +7 -0
  65. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.return +1 -0
  66. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stderr +0 -0
  67. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stdout +1 -0
  68. data/spec/provider/package/homebrew_spec.rb +33 -6
  69. data/spec/provider/package/yum/rpm_-q_httpd.return +1 -0
  70. data/spec/provider/package/yum/rpm_-q_httpd.stderr +0 -0
  71. data/spec/provider/package/yum/rpm_-q_httpd.stdout +1 -0
  72. data/spec/provider/package/yum/rpm_-q_zsh.return +1 -0
  73. data/spec/provider/package/yum/rpm_-q_zsh.stderr +0 -0
  74. data/spec/provider/package/yum/rpm_-q_zsh.stdout +1 -0
  75. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.return +1 -0
  76. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stderr +0 -0
  77. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stdout +37 -0
  78. data/spec/provider/package/yum/yum_install_-y_nano.return +1 -0
  79. data/spec/provider/package/yum/yum_install_-y_nano.stderr +0 -0
  80. data/spec/provider/package/yum/yum_install_-y_nano.stdout +36 -0
  81. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.return +1 -0
  82. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stderr +1 -0
  83. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stdout +6 -0
  84. data/spec/provider/package/yum/yum_install_with_options.return +1 -0
  85. data/spec/provider/package/yum/yum_install_with_options.stderr +0 -0
  86. data/spec/provider/package/yum/yum_install_with_options.stdout +53 -0
  87. data/spec/provider/package/yum/yum_remove_-y_screen.return +1 -0
  88. data/spec/provider/package/yum/yum_remove_-y_screen.stderr +0 -0
  89. data/spec/provider/package/yum/yum_remove_-y_screen.stdout +31 -0
  90. data/spec/provider/package/yum/yum_remove_with_options.return +1 -0
  91. data/spec/provider/package/yum/yum_remove_with_options.stderr +0 -0
  92. data/spec/provider/package/yum/yum_remove_with_options.stdout +30 -0
  93. data/spec/provider/package/yum_spec.rb +130 -0
  94. data/spec/provider/user/darwin_directory_service_spec.rb +12 -10
  95. data/spec/provider/user/gnu_passwd_spec.rb +9 -9
  96. data/spec/provider/user_spec.rb +26 -18
  97. data/spec/resource/package_spec.rb +8 -0
  98. data/spec/resource_spec.rb +17 -9
  99. metadata +153 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a0cff940afe911d53174b8b173b8da4bcadb20b
4
- data.tar.gz: 0e2dcf9ded68e473d56dc7c9bf261f6be674b932
3
+ metadata.gz: 47536c6118c669e09c7e4d7c0310c68f2374abdc
4
+ data.tar.gz: 3fec1bac94bc0b78d8aa88a8803787ea1411b71e
5
5
  SHA512:
6
- metadata.gz: b2eb2f9487c34f0d55cbca65effdcab1946e4169c956c668de29408076f4ada2bfe1a6b076cb371e7709dada23d538c01ace02221bea7b2edf57727497b29f41
7
- data.tar.gz: c2729f48749672ddb2e4bee3cc675d1dfb6d39bb1e2d1b69d6c1b58652c3dcffea712acf6ae8ea853d01016343095fd5441a3736c03e0a188192c9e581607680
6
+ metadata.gz: 32ea02f6ac0f991cb76a22c72bfad585fc1500a91d9a6ea0070954d62a4c5ae7063e17d19093987ee3b600422b319b98fe7fb984435fa3ba7c5f7a22b80dec67
7
+ data.tar.gz: dd1df84d7f344d0e2388c4f3e58be1e5bf4397939ad6be6396258e6126dec8d805ba3fc2891f7e05015521af22a8cf5f7f36db3d8793f662edd0a1c21f477544
data/NEWS.md CHANGED
@@ -1,4 +1,11 @@
1
1
  # wright NEWS
2
+ ## 0.4.0 (2015-06-11)
3
+ - Add --dry-run option
4
+ - Add support for virtual packages to apt provider
5
+ - Add yum support to package provider
6
+ - Use GNU passwd group and user providers on CentOS/RHEL
7
+ - Add options attribute to package resource
8
+
2
9
  ## 0.3.2 (2015-06-01)
3
10
  - Expand script file path (#11)
4
11
 
data/README.md CHANGED
@@ -1,80 +1,85 @@
1
1
  wright
2
2
  ======
3
-
4
3
  [![Gem Version](https://img.shields.io/gem/v/wright.svg?style=flat-square)][gem]
5
4
  [![Build Status](https://img.shields.io/travis/sometimesfood/wright.svg?style=flat-square)][travis]
6
5
  [![Code Climate](https://img.shields.io/codeclimate/github/sometimesfood/wright.svg?style=flat-square)][codeclimate]
7
6
  [![Test Coverage](https://img.shields.io/codeclimate/coverage/github/sometimesfood/wright.svg?style=flat-square)][codeclimate]
8
7
  [![Gem Dependencies](https://img.shields.io/gemnasium/sometimesfood/wright.svg?style=flat-square)][gemnasium]
9
8
 
10
- [gem]: https://rubygems.org/gems/wright
11
- [travis]: https://travis-ci.org/sometimesfood/wright
12
- [codeclimate]: https://codeclimate.com/github/sometimesfood/wright
13
- [gemnasium]: https://gemnasium.com/sometimesfood/wright
14
-
15
9
  Lightweight configuration management.
16
10
 
17
- Requirements
18
- ------------
19
-
20
- - Ruby ≥1.9
21
-
22
11
  Getting Started
23
12
  ---------------
13
+ Performing simple administrative tasks with wright is easy.
24
14
 
25
- To start a wright IRB session, simply run:
15
+ ```ruby
16
+ #!/usr/bin/env wright
26
17
 
27
- $ bundle console
18
+ package 'sudo'
28
19
 
29
- In order to create some resources using the wright DSL:
20
+ file '/etc/sudoers.d/env_keep-editor' do |f|
21
+ f.content = "Defaults env_keep += EDITOR\n"
22
+ f.owner = 'root:root'
23
+ f.mode = '440'
24
+ end
25
+ ```
30
26
 
31
- ```ruby
32
- require 'wright'
33
- extend Wright::DSL
27
+ Scripts can also be run directly from the shell.
34
28
 
35
- foo_dir = directory '/tmp/foo'
36
- fstab = symlink '/tmp/foo/fstab' do |s|
37
- s.to = '/etc/fstab'
38
- end
29
+ wright -e "package('tmux')"
39
30
 
40
- puts File.directory? '/tmp/foo'
41
- puts File.symlink? '/tmp/foo/fstab'
31
+ If you would rather see the effects of running a wright script first,
32
+ use the dry-run option:
42
33
 
43
- fstab.remove
44
- foo_dir.remove
45
- ```
34
+ wright --dry-run -e "package('tmux')"
46
35
 
47
- If you don't want to use the DSL:
36
+ For a list of command-line parameters, see
37
+ [the manpage][wright-manpage]. For a more in-depth list of tasks you
38
+ can perform using wright, check the [resource list][wright-resources].
48
39
 
49
- ```ruby
50
- require 'wright'
40
+ Installation
41
+ ------------
42
+ Since wright does not have any runtime dependencies apart from Ruby
43
+ ≥1.9, it can safely be installed system-wide via rubygems:
51
44
 
52
- foo_dir = Wright::Resource::Directory.new('/tmp/foo')
53
- foo_dir.create
54
- fstab = Wright::Resource::Symlink.new('/tmp/foo/fstab')
55
- fstab.to = '/etc/fstab'
56
- fstab.create
45
+ sudo gem install wright
57
46
 
58
- puts File.directory? '/tmp/foo'
59
- puts File.symlink? '/tmp/foo/fstab'
47
+ Installation on Debian-based systems
48
+ ------------------------------------
49
+ If you use a Debian-based GNU/Linux distribution such as Ubuntu, you
50
+ can also install wright via the PPA [sometimesfood/wright][ppa]:
60
51
 
61
- fstab.remove
62
- foo_dir.remove
63
- ```
52
+ sudo apt-get install software-properties-common
53
+ sudo add-apt-repository -y ppa:sometimesfood/wright
54
+ sudo apt-get update && sudo apt-get install wright
55
+
56
+ If you use a Debian-based distribution that is not Ubuntu, you have to
57
+ update your apt sources manually before installing wright:
58
+
59
+ export DISTRO="$(lsb_release -sc)"
60
+ export PPA_LIST="sometimesfood-wright-${DISTRO}.list"
61
+ sudo sed -i "s/${DISTRO}/trusty/g" /etc/apt/sources.list.d/${PPA_LIST}
64
62
 
65
63
  Documentation
66
64
  -------------
65
+ As a wright user, the following documents are probably going to be of
66
+ interest to you:
67
67
 
68
- There is not too much useful documentation that is targeted towards
69
- users at the moment.
68
+ - [wright manpage][wright-manpage]
69
+ - [list of wright resources][wright-resources]
70
+ - [wright is just Ruby][wright-is-ruby]
70
71
 
71
- Run `bundle exec yard` to generate
72
- [HTML docs for wright developers](http://rubydoc.info/gems/wright/).
72
+ As a wright developer, you might also be interested in the
73
+ [wright developer docs](http://www.rubydoc.info/gems/wright/) which
74
+ can also be generated via `bundle exec yard`.
73
75
 
74
- Hacking
75
- -------
76
+ Contributing
77
+ ------------
78
+ Contributions to wright are greatly appreciated. If you would like to
79
+ contribute to wright, please have a look at the
80
+ [contribution guidelines](CONTRIBUTING.md).
76
81
 
77
- To get started with wright, simply install the development
82
+ To start hacking on wright, simply install the development
78
83
  dependencies via bundler:
79
84
 
80
85
  - `bundle install --path .bundle`
@@ -82,15 +87,16 @@ dependencies via bundler:
82
87
 
83
88
  All tests should pass.
84
89
 
85
- Contributing
86
- ------------
87
-
88
- Contributions to wright are greatly appreciated. If you would like to
89
- contribute to wright, please have a look at the
90
- [contribution guidelines](CONTRIBUTING.md).
91
-
92
90
  Copyright
93
91
  ---------
94
-
95
92
  Copyright (c) 2012-2015 Sebastian Boehm. See [LICENSE](LICENSE) for
96
93
  details.
94
+
95
+ [gem]: https://rubygems.org/gems/wright
96
+ [travis]: https://travis-ci.org/sometimesfood/wright
97
+ [codeclimate]: https://codeclimate.com/github/sometimesfood/wright
98
+ [gemnasium]: https://gemnasium.com/sometimesfood/wright
99
+ [ppa]: http://launchpad.net/~sometimesfood/+archive/ubuntu/wright
100
+ [wright-manpage]: http://wright.sometimesfood.org/man/wright.1.html
101
+ [wright-resources]: http://wright.sometimesfood.org/doc/resources.html
102
+ [wright-is-ruby]: http://wright.sometimesfood.org/doc/wright-is-ruby.html
data/lib/wright/cli.rb CHANGED
@@ -6,8 +6,9 @@ module Wright
6
6
  class CLI
7
7
  def initialize(main)
8
8
  @commands = []
9
+ @requires = []
9
10
  @main = main
10
- @parser = option_parser
11
+ set_up_parser
11
12
  end
12
13
 
13
14
  # Runs a wright script with the supplied arguments.
@@ -17,16 +18,17 @@ module Wright
17
18
  arguments = parse(argv)
18
19
  return if @quit
19
20
 
21
+ Wright.activate_dry_run if @dry_run
20
22
  Wright.log.level = @log_level if @log_level
21
23
  @main.extend Wright::DSL
24
+ @requires.each { |r| require r }
22
25
 
23
26
  run_script(arguments)
24
27
  end
25
28
 
26
29
  private
27
30
 
28
- attr_reader :commands
29
- attr_reader :log_level
31
+ attr_reader :commands, :requires, :dry_run, :log_level
30
32
 
31
33
  def parse(argv)
32
34
  # use OptionParser#order! instead of #parse! so CLI#run does not
@@ -44,24 +46,48 @@ module Wright
44
46
  end
45
47
  end
46
48
 
47
- def option_parser
48
- OptionParser.new do |opts|
49
- opts.on('-e COMMAND', 'Run COMMAND') do |e|
50
- @commands << e
51
- end
49
+ def set_up_parser
50
+ @parser = OptionParser.new
51
+ set_up_command_option
52
+ set_up_require_option
53
+ set_up_dry_run_option
54
+ set_up_verbosity_options
55
+ set_up_version_option
56
+ end
52
57
 
53
- opts.on('-v', '--verbose', 'Increase verbosity') do
54
- @log_level = Wright::Logger::DEBUG
55
- end
58
+ def set_up_command_option
59
+ @parser.on('-e COMMAND', 'Run COMMAND') do |e|
60
+ @commands << e
61
+ end
62
+ end
56
63
 
57
- opts.on('-q', '--quiet', 'Decrease verbosity') do
58
- @log_level = Wright::Logger::ERROR
59
- end
64
+ def set_up_require_option
65
+ @parser.on('-r LIBRARY',
66
+ 'Require LIBRARY before running the script') do |r|
67
+ @requires << r
68
+ end
69
+ end
70
+
71
+ def set_up_dry_run_option
72
+ @parser.on('-n', '--dry-run', 'Enable dry-run mode') do
73
+ @dry_run = true
74
+ end
75
+ end
76
+
77
+ def set_up_verbosity_options
78
+ @parser.on('-v', '--verbose', 'Increase verbosity') do
79
+ @log_level = Wright::Logger::DEBUG
80
+ end
81
+
82
+ @parser.on('-q', '--quiet', 'Decrease verbosity') do
83
+ @log_level = Wright::Logger::ERROR
84
+ end
85
+ end
60
86
 
61
- opts.on_tail('--version', 'Show wright version') do
62
- puts "wright version #{Wright::VERSION}"
63
- @quit = true
64
- end
87
+ def set_up_version_option
88
+ @parser.on_tail('--version', 'Show wright version') do
89
+ puts "wright version #{Wright::VERSION}"
90
+ @quit = true
65
91
  end
66
92
  end
67
93
  end
@@ -29,4 +29,11 @@ module Wright # rubocop:disable Documentation
29
29
  ensure
30
30
  @dry_run = saved_dry_run
31
31
  end
32
+
33
+ # @api private
34
+ # Activates dry-run mode.
35
+ # @return [void]
36
+ def self.activate_dry_run
37
+ @dry_run = true
38
+ end
32
39
  end
@@ -12,11 +12,14 @@ module Wright
12
12
  #
13
13
  # @return [void]
14
14
  def create
15
- fail Errno::EEXIST, dirname if regular_file?
15
+ fail Errno::EEXIST, dirname_expanded if regular_file?
16
16
 
17
- dir = @resource.name
18
- unless_uptodate(:create, "directory already created: '#{dir}'") do
19
- create_directory
17
+ dir_permissions = permissions
18
+ unless_uptodate(:create, "directory already created: '#{dir_name}'") do
19
+ unless_dry_run("create directory: '#{dir_name}'") do
20
+ FileUtils.mkdir_p(dirname_expanded)
21
+ dir_permissions.update unless dir_permissions.uptodate?
22
+ end
20
23
  end
21
24
  end
22
25
 
@@ -24,25 +27,22 @@ module Wright
24
27
  #
25
28
  # @return [void]
26
29
  def remove
27
- if ::File.exist?(dirname) && !::File.directory?(dirname)
28
- fail "'#{dirname}' exists but is not a directory"
30
+ if ::File.exist?(dirname_expanded) &&
31
+ !::File.directory?(dirname_expanded)
32
+ fail "'#{dirname_expanded}' exists but is not a directory"
29
33
  end
30
34
 
31
- dir = @resource.name
32
- unless_uptodate(:remove, "directory already removed: '#{dir}'") do
33
- remove_directory
35
+ unless_uptodate(:remove, "directory already removed: '#{dir_name}'") do
36
+ unless_dry_run("remove directory: '#{dir_name}'") do
37
+ FileUtils.rmdir(dirname_expanded)
38
+ end
34
39
  end
35
40
  end
36
41
 
37
42
  private
38
43
 
39
- def uptodate?(action)
40
- case action
41
- when :create
42
- ::File.directory?(dirname) && permissions.uptodate?
43
- when :remove
44
- !::File.exist?(dirname) && !::File.directory?(dirname)
45
- end
44
+ def dir_name
45
+ @resource.name
46
46
  end
47
47
 
48
48
  def permissions
@@ -50,26 +50,22 @@ module Wright
50
50
  :directory)
51
51
  end
52
52
 
53
- def create_directory
54
- dir_permissions = permissions
55
- unless_dry_run("create directory: '#{@resource.name}'") do
56
- FileUtils.mkdir_p(dirname)
57
- dir_permissions.update unless dir_permissions.uptodate?
58
- end
59
- end
60
-
61
- def remove_directory
62
- unless_dry_run("remove directory: '#{@resource.name}'") do
63
- FileUtils.rmdir(dirname)
53
+ def uptodate?(action)
54
+ case action
55
+ when :create
56
+ ::File.directory?(dirname_expanded) && permissions.uptodate?
57
+ when :remove
58
+ !::File.exist?(dirname_expanded) &&
59
+ !::File.directory?(dirname_expanded)
64
60
  end
65
61
  end
66
62
 
67
63
  def regular_file?
68
- ::File.exist?(dirname) && !::File.directory?(dirname)
64
+ ::File.exist?(dirname_expanded) && !::File.directory?(dirname_expanded)
69
65
  end
70
66
 
71
- def dirname
72
- ::File.expand_path(@resource.name)
67
+ def dirname_expanded
68
+ ::File.expand_path(dir_name)
73
69
  end
74
70
  end
75
71
  end
@@ -18,9 +18,12 @@ module Wright
18
18
  # the specified name
19
19
  def create
20
20
  fail_if_directory
21
- file = @resource.name
22
- unless_uptodate(:create, "file already created: '#{file}'") do
23
- create_file
21
+ file_permissions = permissions
22
+ unless_uptodate(:create, "file already created: '#{file_name}'") do
23
+ unless_dry_run("create file: '#{file_name}'") do
24
+ write_content_to_file
25
+ file_permissions.update unless file_permissions.uptodate?
26
+ end
24
27
  end
25
28
  end
26
29
 
@@ -31,25 +34,30 @@ module Wright
31
34
  # specified name
32
35
  def remove
33
36
  fail_if_directory
34
- file = @resource.name
35
- unless_uptodate(:remove, "file already removed: '#{file}'") do
36
- remove_file
37
+ unless_uptodate(:remove, "file already removed: '#{file_name}'") do
38
+ unless_dry_run("remove file: '#{file_name}'") do
39
+ FileUtils.rm(filename_expanded)
40
+ end
37
41
  end
38
42
  end
39
43
 
40
44
  private
41
45
 
42
- def create_file
43
- file_permissions = permissions
44
- unless_dry_run("create file: '#{@resource.name}'") do
45
- write_content_to_file
46
- file_permissions.update unless file_permissions.uptodate?
47
- end
46
+ def file_name
47
+ @resource.name
48
+ end
49
+
50
+ def content
51
+ @resource.content
52
+ end
53
+
54
+ def permissions
55
+ Wright::Util::FilePermissions.create_from_resource(@resource, :file)
48
56
  end
49
57
 
50
58
  def write_content_to_file
51
- tempfile = Tempfile.new(::File.basename(filename))
52
- tempfile.write(@resource.content) if @resource.content
59
+ tempfile = Tempfile.new(::File.basename(filename_expanded))
60
+ tempfile.write(content) if content
53
61
  move_tempfile(tempfile)
54
62
  ensure
55
63
  tempfile.close!
@@ -57,18 +65,8 @@ module Wright
57
65
 
58
66
  def move_tempfile(tempfile)
59
67
  # do not overwrite existing files if content was not specified
60
- return if @resource.content.nil? && ::File.exist?(filename)
61
- FileUtils.mv(tempfile.path, filename)
62
- end
63
-
64
- def remove_file
65
- unless_dry_run("remove file: '#{@resource.name}'") do
66
- FileUtils.rm(filename)
67
- end
68
- end
69
-
70
- def permissions
71
- Wright::Util::FilePermissions.create_from_resource(@resource, :file)
68
+ return if content.nil? && ::File.exist?(filename_expanded)
69
+ FileUtils.mv(tempfile.path, filename_expanded)
72
70
  end
73
71
 
74
72
  def checksum(content)
@@ -76,10 +74,10 @@ module Wright
76
74
  end
77
75
 
78
76
  def content_uptodate?
79
- return false unless ::File.exist?(filename)
80
- content = @resource.content || ''
81
- target_checksum = checksum(content.to_s)
82
- current_checksum = checksum(::File.read(filename))
77
+ return false unless ::File.exist?(filename_expanded)
78
+ target_content = content || ''
79
+ target_checksum = checksum(target_content.to_s)
80
+ current_checksum = checksum(::File.read(filename_expanded))
83
81
  current_checksum == target_checksum
84
82
  end
85
83
 
@@ -88,16 +86,18 @@ module Wright
88
86
  when :create
89
87
  content_uptodate? && permissions.uptodate?
90
88
  when :remove
91
- !::File.exist?(filename) && !::File.symlink?(filename)
89
+ !::File.exist?(filename_expanded) &&
90
+ !::File.symlink?(filename_expanded)
92
91
  end
93
92
  end
94
93
 
95
- def filename
96
- ::File.expand_path(@resource.name)
94
+ def filename_expanded
95
+ ::File.expand_path(file_name)
97
96
  end
98
97
 
99
98
  def fail_if_directory
100
- fail Errno::EISDIR, filename if ::File.directory?(filename)
99
+ return unless ::File.directory?(filename_expanded)
100
+ fail Errno::EISDIR, filename_expanded
101
101
  end
102
102
  end
103
103
  end
@@ -9,28 +9,29 @@ module Wright
9
9
  class DarwinDirectoryService < Wright::Provider::Group
10
10
  private
11
11
 
12
- def add_group(group_name, gid, system)
13
- gid ||= next_system_gid if system
14
- options = gid.nil? ? [] : ['-i', gid.to_s]
12
+ def create_group
13
+ target_gid = gid
14
+ target_gid ||= next_system_gid if system_group?
15
+ options = target_gid.nil? ? [] : ['-i', target_gid.to_s]
15
16
  cmd = 'dseditgroup'
16
17
  args = ['-o', 'create', *options, group_name]
17
18
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
18
19
  end
19
20
 
20
- def delete_group(group_name)
21
+ def remove_group
21
22
  cmd = 'dseditgroup'
22
23
  args = ['-o', 'delete', group_name]
23
24
  exec_or_fail(cmd, args, "cannot remove group '#{group_name}'")
24
25
  end
25
26
 
26
- def set_members(group_name, members)
27
+ def set_members
27
28
  options = ['GroupMembership', *members]
28
29
  cmd = 'dscl'
29
30
  args = ['.', 'create', "/Groups/#{group_name}", *options]
30
31
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
31
32
  end
32
33
 
33
- def set_gid(group_name, gid)
34
+ def set_gid
34
35
  cmd = 'dseditgroup'
35
36
  args = ['-o', 'edit',
36
37
  '-i', gid.to_s,
@@ -41,7 +42,7 @@ module Wright
41
42
  # Overrides Provider::Group#group_data to work around caching
42
43
  # issues with getgrnam(3) on OS X.
43
44
  def group_data
44
- Etc.group { |g| break g if g.name == @resource.name }
45
+ Etc.group { |g| break g if g.name == group_name }
45
46
  end
46
47
 
47
48
  def next_system_gid
@@ -9,28 +9,28 @@ module Wright
9
9
  class GnuPasswd < Wright::Provider::Group
10
10
  private
11
11
 
12
- def add_group(group_name, gid, system)
12
+ def create_group
13
13
  options = []
14
- options << '--system' if system
14
+ options << '--system' if system_group?
15
15
  options += ['-g', gid.to_s] if gid
16
16
  cmd = 'groupadd'
17
17
  args = [*options, group_name]
18
18
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
19
19
  end
20
20
 
21
- def delete_group(group_name)
21
+ def remove_group
22
22
  cmd = 'groupdel'
23
23
  args = [group_name]
24
24
  exec_or_fail(cmd, args, "cannot remove group '#{group_name}'")
25
25
  end
26
26
 
27
- def set_members(group_name, members)
27
+ def set_members
28
28
  cmd = 'gpasswd'
29
29
  args = ['-M', members.join(','), group_name]
30
30
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")
31
31
  end
32
32
 
33
- def set_gid(group_name, gid)
33
+ def set_gid
34
34
  cmd = 'groupmod'
35
35
  args = ['-g', gid.to_s, group_name]
36
36
  exec_or_fail(cmd, args, "cannot create group '#{group_name}'")