kamaze-project 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/lib/kamaze-project.rb +1 -31
  4. data/lib/kamaze/project.rb +37 -31
  5. data/lib/kamaze/project/autoload.rb +38 -0
  6. data/lib/kamaze/project/boot/core_ext.rb +8 -8
  7. data/lib/kamaze/project/boot/listen.rb +11 -13
  8. data/lib/kamaze/project/bundled.rb +79 -0
  9. data/lib/kamaze/project/concern.rb +17 -2
  10. data/lib/kamaze/project/concern/cli.rb +3 -1
  11. data/lib/kamaze/project/concern/cli/with_exit_on_failure.rb +2 -6
  12. data/lib/kamaze/project/concern/env.rb +14 -12
  13. data/lib/kamaze/project/concern/helper.rb +1 -2
  14. data/lib/kamaze/project/concern/mode.rb +1 -1
  15. data/lib/kamaze/project/concern/observable.rb +12 -11
  16. data/lib/kamaze/project/concern/sh.rb +7 -7
  17. data/lib/kamaze/project/concern/tasks.rb +36 -10
  18. data/lib/kamaze/project/concern/tools.rb +2 -3
  19. data/lib/kamaze/project/config.rb +1 -1
  20. data/lib/kamaze/project/core_ext/object.rb +17 -8
  21. data/lib/kamaze/project/core_ext/pp.rb +14 -16
  22. data/lib/kamaze/project/debug.rb +47 -48
  23. data/lib/kamaze/project/dsl.rb +9 -5
  24. data/lib/kamaze/project/dsl/definition.rb +6 -12
  25. data/lib/kamaze/project/dsl/setup.rb +1 -3
  26. data/lib/kamaze/project/helper.rb +1 -1
  27. data/lib/kamaze/project/helper/inflector.rb +9 -27
  28. data/lib/kamaze/project/helper/project.rb +1 -1
  29. data/lib/kamaze/project/helper/project/config.rb +1 -1
  30. data/lib/kamaze/project/inflector.rb +15 -0
  31. data/lib/kamaze/project/observable.rb +1 -4
  32. data/lib/kamaze/project/observer.rb +1 -1
  33. data/lib/kamaze/project/resources/Vagrantfile +1 -1
  34. data/lib/kamaze/project/struct.rb +1 -1
  35. data/lib/kamaze/project/tasks/cs.rb +1 -1
  36. data/lib/kamaze/project/tasks/cs/control.rb +1 -1
  37. data/lib/kamaze/project/tasks/cs/correct.rb +1 -1
  38. data/lib/kamaze/project/tasks/cs/pre_commit.rb +4 -6
  39. data/lib/kamaze/project/tasks/doc.rb +2 -4
  40. data/lib/kamaze/project/tasks/doc/watch.rb +4 -6
  41. data/lib/kamaze/project/tasks/gem.rb +15 -6
  42. data/lib/kamaze/project/tasks/gem/build.rb +33 -17
  43. data/lib/kamaze/project/tasks/gem/compile.rb +1 -1
  44. data/lib/kamaze/project/tasks/gem/gemspec.rb +12 -11
  45. data/lib/kamaze/project/tasks/gem/install.rb +1 -1
  46. data/lib/kamaze/project/tasks/gem/push.rb +16 -17
  47. data/lib/kamaze/project/tasks/misc/gitignore.rb +1 -1
  48. data/lib/kamaze/project/tasks/shell.rb +1 -1
  49. data/lib/kamaze/project/tasks/sources.rb +1 -1
  50. data/lib/kamaze/project/tasks/sources/license.rb +1 -1
  51. data/lib/kamaze/project/tasks/test.rb +3 -5
  52. data/lib/kamaze/project/tasks/vagrant.rb +1 -1
  53. data/lib/kamaze/project/tasks/version/edit.rb +1 -1
  54. data/lib/kamaze/project/tools.rb +18 -6
  55. data/lib/kamaze/project/tools/base_tool.rb +6 -2
  56. data/lib/kamaze/project/tools/console.rb +4 -13
  57. data/lib/kamaze/project/tools/console/output.rb +14 -6
  58. data/lib/kamaze/project/tools/console/output/buffer.rb +8 -3
  59. data/lib/kamaze/project/tools/gemspec.rb +11 -21
  60. data/lib/kamaze/project/tools/gemspec/builder.rb +43 -31
  61. data/lib/kamaze/project/tools/gemspec/concern.rb +6 -1
  62. data/lib/kamaze/project/tools/gemspec/concern/reading.rb +2 -5
  63. data/lib/kamaze/project/tools/gemspec/packager.rb +10 -10
  64. data/lib/kamaze/project/tools/gemspec/packer.rb +11 -15
  65. data/lib/kamaze/project/tools/gemspec/packer/command.rb +1 -1
  66. data/lib/kamaze/project/tools/gemspec/reader.rb +22 -14
  67. data/lib/kamaze/project/tools/gemspec/reader/decorator.rb +3 -6
  68. data/lib/kamaze/project/tools/gemspec/writer.rb +43 -19
  69. data/lib/kamaze/project/tools/gemspec/writer/dep_gen.rb +9 -6
  70. data/lib/kamaze/project/tools/gemspec/writer/dependency.rb +1 -1
  71. data/lib/kamaze/project/tools/git.rb +13 -31
  72. data/lib/kamaze/project/tools/git/hooks.rb +12 -6
  73. data/lib/kamaze/project/tools/git/hooks/base_hook.rb +3 -11
  74. data/lib/kamaze/project/tools/git/hooks/pre_commit.rb +3 -7
  75. data/lib/kamaze/project/tools/git/status.rb +13 -9
  76. data/lib/kamaze/project/tools/git/status/decorator.rb +1 -1
  77. data/lib/kamaze/project/tools/git/status/file.rb +2 -1
  78. data/lib/kamaze/project/tools/git/status/files_array.rb +1 -1
  79. data/lib/kamaze/project/tools/git/status/index.rb +1 -1
  80. data/lib/kamaze/project/tools/git/status/worktree.rb +1 -1
  81. data/lib/kamaze/project/tools/git/util.rb +1 -1
  82. data/lib/kamaze/project/tools/licenser.rb +2 -2
  83. data/lib/kamaze/project/tools/packager.rb +12 -22
  84. data/lib/kamaze/project/tools/packager/filesystem.rb +11 -3
  85. data/lib/kamaze/project/tools/packager/filesystem/operator.rb +19 -11
  86. data/lib/kamaze/project/tools/packager/filesystem/operator/utils.rb +22 -16
  87. data/lib/kamaze/project/tools/process_locker.rb +67 -36
  88. data/lib/kamaze/project/tools/rspec.rb +5 -3
  89. data/lib/kamaze/project/tools/rubocop.rb +30 -40
  90. data/lib/kamaze/project/tools/rubocop/arguments.rb +1 -1
  91. data/lib/kamaze/project/tools/rubocop/config.rb +2 -4
  92. data/lib/kamaze/project/tools/shell.rb +7 -8
  93. data/lib/kamaze/project/tools/vagrant.rb +6 -16
  94. data/lib/kamaze/project/tools/vagrant/composer.rb +1 -1
  95. data/lib/kamaze/project/tools/vagrant/composer/file.rb +1 -1
  96. data/lib/kamaze/project/tools/vagrant/remote.rb +1 -1
  97. data/lib/kamaze/project/tools/vagrant/shell.rb +1 -1
  98. data/lib/kamaze/project/tools/vagrant/writer.rb +1 -1
  99. data/lib/kamaze/project/tools/yardoc.rb +14 -17
  100. data/lib/kamaze/project/tools/yardoc/file.rb +7 -7
  101. data/lib/kamaze/project/tools/yardoc/watchable.rb +9 -15
  102. data/lib/kamaze/project/tools/yardoc/watcher.rb +28 -35
  103. data/lib/kamaze/project/tools_provider.rb +28 -40
  104. data/lib/kamaze/project/tools_provider/resolver.rb +1 -1
  105. data/lib/kamaze/project/version.rb +5 -94
  106. data/lib/kamaze/project/version.yml +5 -5
  107. metadata +23 -64
  108. data/bin/plop +0 -5
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -10,4 +10,9 @@ require_relative '../gemspec'
10
10
 
11
11
  # Concern for ``Gemspec``
12
12
  module Kamaze::Project::Tools::Gemspec::Concern
13
+ # @formatter:off
14
+ {
15
+ Reading: 'reading',
16
+ }.each { |k, v| autoload(k, "#{__dir__}/concern/#{v}") }
17
+ # @formatter:on
13
18
  end
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
- require_relative '../reader'
10
9
  require_relative '../concern'
11
10
 
12
11
  # Provides gemspec reader
@@ -29,9 +28,7 @@ module Kamaze::Project::Tools::Gemspec::Concern::Reading
29
28
 
30
29
  # @return [Kamaze::Project::Tools::Gemspec::Reader]
31
30
  def gemspec_reader
32
- @gemspec_reader ||= Kamaze.project.fetch(:gemspec_reader)
33
-
34
- @gemspec_reader
31
+ @gemspec_reader ||= Kamaze::Project.instance.tools.fetch(:gemspec_reader)
35
32
  end
36
33
 
37
34
  # Get specification
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
9
  require_relative '../gemspec'
10
- require_relative 'concern/reading'
11
10
 
12
11
  # Provide a specialized packager, for ``gemspec`` based projects
13
12
  #
@@ -21,7 +20,7 @@ require_relative 'concern/reading'
21
20
  # can be dynamically retrieved through the project.
22
21
  #
23
22
  # @abstract
24
- class Kamaze::Project::Tools::Gemspec::Packager
23
+ class Kamaze::Project::Tools::Gemspec::Packager < Kamaze::Project::Tools::Packager
25
24
  include Kamaze::Project::Tools::Gemspec::Concern::Reading
26
25
 
27
26
  def mutable_attributes
@@ -44,17 +43,18 @@ class Kamaze::Project::Tools::Gemspec::Packager
44
43
  #
45
44
  # @return [Array<String>]
46
45
  def package_files
47
- (Dir.glob([
48
- '*.gemspec',
49
- 'Gemfile', 'Gemfile.lock',
50
- 'gems.rb', 'gems.locked',
51
- ]) + (gemspec_reader.read&.files).to_a).sort
46
+ # @formatter: off
47
+ (gemspec_reader.read&.files).to_a.yield_self do |files| # rubocop:disable Style/RedundantParentheses
48
+ Dir.glob(%w[*.gemspec Gemfile Gemfile.lock gems.rb gems.locked])
49
+ .concat(files)
50
+ end.sort
51
+ # @formatter: on
52
52
  end
53
53
 
54
54
  def setup
55
- @gemspec_reader ||= Kamaze.project.tools.fetch(:gemspec_reader)
55
+ @gemspec_reader ||= Kamaze::Project.instance.tools.fetch(:gemspec_reader)
56
56
 
57
- self.verbose = false
57
+ self.verbose = false
58
58
  self.source_files = package_files if self.source_files.to_a.empty?
59
59
  end
60
60
 
@@ -1,20 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
- require 'pathname'
10
- require 'rubygems'
11
- require_relative 'reader'
12
- require_relative 'packer/command'
9
+ require_relative '../gemspec'
13
10
 
14
11
  # Provides a ready to use interface based on rubyc (aka ruby-packer)
15
12
  #
16
13
  # @see https://github.com/pmq20/ruby-packer
17
- class Kamaze::Project::Tools::Gemspec::Packer
14
+ class Kamaze::Project::Tools::Gemspec::Packer < Kamaze::Project::Tools::Gemspec::Packager
15
+ autoload(:Gem, 'rubygems')
16
+ autoload(:Pathname, 'pathname')
17
+ autoload(:Command, "#{__dir__}/packer/")
18
+
18
19
  # Binary (executable) used to pack the project
19
20
  #
20
21
  # @see https://github.com/pmq20/ruby-packer
@@ -25,10 +26,12 @@ class Kamaze::Project::Tools::Gemspec::Packer
25
26
  # @return [Array<Pathname>]
26
27
  def packables
27
28
  specification.executables.map do |executable|
29
+ # @formatter:off
28
30
  package_dirs.fetch(:bin)
29
31
  .join(executable)
30
32
  .to_s.gsub(%r{^./}, '')
31
33
  .yield_self { |path| ::Pathname.new(path) }
34
+ # @formatter:on
32
35
  end
33
36
  end
34
37
 
@@ -44,12 +47,7 @@ class Kamaze::Project::Tools::Gemspec::Packer
44
47
  # @param [String] packable
45
48
  # @return [Pathname]
46
49
  def pack(packable)
47
- bin_dir = ::Pathname.new(specification.bin_dir)
48
-
49
- prepare
50
- command_for(packable).execute
51
-
52
- bin_dir.join(packable)
50
+ prepare.tap { command_for(packable).execute }
53
51
  end
54
52
 
55
53
  def mutable_attributes
@@ -74,14 +72,12 @@ class Kamaze::Project::Tools::Gemspec::Packer
74
72
  # @param [String] packable
75
73
  # @return [Command]
76
74
  def command_for(packable)
77
- bin_dir = ::Pathname.new(specification.bin_dir)
78
-
79
75
  Dir.chdir(pwd) do
80
76
  Command.new do |command|
81
77
  command.executable = compiler
82
78
  command.src_dir = package_dirs.fetch(:src)
83
79
  command.tmp_dir = package_dirs.fetch(:tmp)
84
- command.bin_dir = bin_dir
80
+ command.bin_dir = Pathname.new(specification.bin_dir)
85
81
  command.packable = packable
86
82
  end
87
83
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -1,26 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
9
  require_relative '../gemspec'
10
- require_relative 'reader/decorator'
11
-
12
- require 'pathname'
13
- require 'rubygems'
14
10
 
15
11
  # Read ``gemspec`` file
16
12
  #
17
13
  # Retrieve ``Gem::Specification`` through ``read`` method.
18
14
  #
19
15
  # @see Kamaze::Project
20
- class Kamaze::Project::Tools::Gemspec::Reader
16
+ class Kamaze::Project::Tools::Gemspec::Reader < Kamaze::Project::Tools::BaseTool
17
+ autoload(:Pathname, 'pathname')
18
+ autoload(:Gem, 'rubygems')
19
+ autoload(:Decorator, "#{__dir__}/reader/decorator")
20
+
21
21
  # @return [String]
22
22
  attr_accessor :gem_name
23
23
 
24
+ # @return [Kamaze::Project]
24
25
  attr_writer :project
25
26
 
26
27
  def mutable_attributes
@@ -29,7 +30,7 @@ class Kamaze::Project::Tools::Gemspec::Reader
29
30
 
30
31
  # @return [Pathname]
31
32
  def pwd
32
- ::Pathname.new(Dir.pwd)
33
+ Pathname.new(Dir.pwd)
33
34
  end
34
35
 
35
36
  # Read gemspec (as given ``type``)
@@ -40,11 +41,7 @@ class Kamaze::Project::Tools::Gemspec::Reader
40
41
  # @param [nil|Class|Symbol] type
41
42
  # @return [Gem::Specification|Object]
42
43
  def read(type = nil)
43
- Dir.chdir(pwd) do
44
- spec = Gem::Specification.load(self.spec_file.to_s)
45
-
46
- type ? Decorator.new(spec).to(type) : spec
47
- end
44
+ type ? Decorator.new(spec).to(type) : spec
48
45
  end
49
46
 
50
47
  # Get (gem)spec file path
@@ -56,10 +53,9 @@ class Kamaze::Project::Tools::Gemspec::Reader
56
53
 
57
54
  # Get project
58
55
  #
59
- # @see Kamaze.project
60
56
  # @return [Object|Kamaze::Project]
61
57
  def project
62
- @project || Kamaze.project
58
+ @project || Kamaze::Project.instance
63
59
  end
64
60
 
65
61
  protected
@@ -67,4 +63,16 @@ class Kamaze::Project::Tools::Gemspec::Reader
67
63
  def setup
68
64
  @gem_name ||= project.name
69
65
  end
66
+
67
+ # Read sepc file.
68
+ #
69
+ # @see Gem::Specification.load()
70
+ # @return [Gem::Specification|Object]
71
+ def spec
72
+ Dir.chdir(pwd) do
73
+ return Gem::Specification.new unless spec_file.file?
74
+
75
+ eval(self.spec_file.read, binding, self.spec_file.to_s) # rubocop:disable Security/Eval
76
+ end
77
+ end
70
78
  end
@@ -1,21 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
- require 'kamaze/project/tools/gemspec/reader'
10
- require 'ostruct'
11
-
12
- class Kamaze::Project::Tools::Gemspec::Reader
13
- end
9
+ require_relative '../reader'
14
10
 
15
11
  # Decorator for ``Gem::Specification``
16
12
  #
17
13
  # @note Decorator is not recursive
18
14
  class Kamaze::Project::Tools::Gemspec::Reader::Decorator
15
+ autoload(:OpenStruct, 'ostruct')
19
16
  # @param [Gem::Specification] spec
20
17
  def initialize(spec)
21
18
  @spec = spec
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
7
7
  # There is NO WARRANTY, to the extent permitted by law.
8
8
 
9
9
  require_relative '../gemspec'
10
- require 'pathname'
11
- require 'tenjin'
12
10
 
13
11
  # Class intended to generate ``gemspec`` file from a template
14
12
  #
@@ -18,7 +16,12 @@ require 'tenjin'
18
16
  #
19
17
  # @see templated
20
18
  # @see Kamaze::Project
21
- class Kamaze::Project::Tools::Gemspec::Writer
19
+ class Kamaze::Project::Tools::Gemspec::Writer < Kamaze::Project::Tools::BaseTool
20
+ autoload(:FileUtils, 'fileutils')
21
+ autoload(:Pathname, 'pathname')
22
+ autoload(:Tenjin, 'tenjin')
23
+ autoload(:DepGen, "#{__dir__}/writer/dep_gen")
24
+
22
25
  # Set path (almost filename) to templated gemspec
23
26
  #
24
27
  # @type [String|Pathname]
@@ -26,6 +29,7 @@ class Kamaze::Project::Tools::Gemspec::Writer
26
29
 
27
30
  # @see Kamaze.project
28
31
  # @type [Object|Kamaze::Project]
32
+ #
29
33
  # @return [Kamaze::Project]
30
34
  attr_accessor :project
31
35
 
@@ -59,18 +63,18 @@ class Kamaze::Project::Tools::Gemspec::Writer
59
63
  #
60
64
  # @return [String]
61
65
  def spec_id
66
+ # @formatter:off
62
67
  templated
63
68
  .read
64
69
  .scan(/Gem::Specification\.new\s+do\s+\|([a-z]+)\|/)
65
70
  .flatten.fetch(0)
71
+ # @formatter:on
66
72
  end
67
73
 
68
74
  # Get dependency
69
75
  #
70
76
  # @return [Dependency]
71
77
  def dependency
72
- require_relative 'writer/dep_gen'
73
-
74
78
  DepGen.new(spec_id).dependency
75
79
  end
76
80
 
@@ -78,6 +82,7 @@ class Kamaze::Project::Tools::Gemspec::Writer
78
82
  #
79
83
  # @return [Hahsh]
80
84
  def context
85
+ # @formatter:off
81
86
  {
82
87
  name: project.name,
83
88
  version: project.version,
@@ -85,6 +90,7 @@ class Kamaze::Project::Tools::Gemspec::Writer
85
90
  }.yield_self do |variables|
86
91
  project.version.to_h.merge(variables)
87
92
  end
93
+ # @formatter:on
88
94
  end
89
95
 
90
96
  # Get generated/templated content
@@ -94,28 +100,46 @@ class Kamaze::Project::Tools::Gemspec::Writer
94
100
  template.render(templated.to_s, context)
95
101
  end
96
102
 
103
+ # Get status for current gemspec file.
104
+ #
105
+ # @return [Hash{Symbol => Object}]
106
+ def status
107
+ Pathname.new(self.to_s).yield_self do |file|
108
+ # @formatter:off
109
+ {
110
+ mtime: -> { return File.mtime(file) if file.file? }.call,
111
+ content: -> { return file.read if file.file? }.call
112
+ }
113
+ # @formatter:on
114
+ end
115
+ end
116
+
97
117
  # Write gemspec file
98
118
  #
99
119
  # @return [self]
100
- def write
101
- generated.write(content)
102
-
103
- self
120
+ def write(preserve_mtime: false)
121
+ self.tap do
122
+ (preserve_mtime ? status : {}).tap do |meta|
123
+ generated.write(content)
124
+
125
+ if preserve_mtime
126
+ if content == meta.fetch(:content, nil)
127
+ fs.touch(self.to_s, mtime: meta.fetch(:mtime), nocreate: true)
128
+ end
129
+ end
130
+ end
131
+ end
104
132
  end
105
133
 
106
134
  protected
107
135
 
136
+ # @return [FileUtils]
137
+ attr_reader :fs
138
+
108
139
  def setup
109
140
  @templated ||= 'gemspec.tpl'
110
- @project ||= Kamaze.project
111
- end
112
-
113
- # Get ``GemspecDepsGen`` instance
114
- #
115
- # @see https://github.com/shvets/gemspec_deps_gen
116
- # @return [GemspecDepsGen]
117
- def deps_gen
118
- GemspecDepsGen.new
141
+ @project ||= Kamaze::Project.instance
142
+ @fs ||= FileUtils
119
143
  end
120
144
 
121
145
  # Get template engine
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
3
+ # Copyright (C) 2017-2021 Dimitri Arrigoni <dimitri@arrigoni.me>
4
4
  # License GPLv3+: GNU GPL version 3 or later
5
5
  # <http://www.gnu.org/licenses/gpl.html>.
6
6
  # This is free software: you are free to change and redistribute it.
@@ -43,18 +43,21 @@ class Kamaze::Project::Tools::Gemspec::Writer::DepGen
43
43
 
44
44
  protected
45
45
 
46
+ # @return [Bundler::Runtime]
47
+ def runtime
48
+ # Bundler.environment has been removed in favor of Bundler.load
49
+ Bundler.public_send(Bundler.respond_to?(:load) ? :load : :environment)
50
+ end
51
+
46
52
  # Get gems for given group
47
53
  #
48
54
  # @param [Symbol|String] group
49
55
  # @return [Array]
50
56
  def gems_by_group(group)
51
- Bundler.environment
52
- .dependencies
53
- .select { |d| d.groups.include?(group.to_sym) }
54
- .to_a
57
+ runtime.dependencies.select { |d| d.groups.include?(group.to_sym) }.to_a
55
58
  end
56
59
 
57
- # @return [Kamaze::Project::Tools::Gemspec::Writer::Dependency]
60
+ # @return [Class<Kamaze::Project::Tools::Gemspec::Writer::Dependency>]
58
61
  def decorator
59
62
  Kamaze::Project::Tools::Gemspec::Writer::Dependency
60
63
  end