avm-eac_ruby_base1 0.10.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b649e4edfb32089188b9da21975cc64277b0098695591542ad0b49b3007f0dd3
4
- data.tar.gz: d899119a0150b6ea5765709fbb1e510ba90384875bbcad9cefc32f3ad39d7615
3
+ metadata.gz: 660a216c70551ca1c3ba380e9c4b4ea6af5f9a348134bdc508357b3a0c6d63f2
4
+ data.tar.gz: 5b9853c0ae6e667615cc0b8cb17ed4173b84de60de4b0dfa67c74e6ec4fc1d45
5
5
  SHA512:
6
- metadata.gz: 06dfebfa55020d4db5b445e186afb3a46df0b76207996c7e6c4b53dc3f357b54c8346d41f6ea5015c586042404322f55cd2d8d8d4c58e978a0655cef87897639
7
- data.tar.gz: f7f04b88b18ada98464d331d8c166797d23c059b9dc37ee64e30779e7f707a441ff122199905a5ac357141a617a2bddd1153ddb8e31ccf66461696e34e2a9a64
6
+ metadata.gz: 4c1a82c5c0302ad6db97ce0916daa899353e46ee77913508f4abbbd1a550dab1c44fa18b14ee97a85d9b60a57ae8301ea7b1848ed8f6fb8d9031471210776cb7
7
+ data.tar.gz: 3f4dc7a0f397db675196a9035aaa672442a4cecb70510053ba05fce2f6e53a018d4848e76269704037f77b69ac29332cd6779140eeec5e6f043cac20f3718f39
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Rubygems
8
+ class Gemspec
9
+ class AddOrReplaceGemLine
10
+ enable_method_class
11
+ common_constructor :sender, :gem_name, :gem_specs
12
+ delegate :lines, to: :sender
13
+
14
+ DEPENDENCY_PREFIX = ' s.add_dependency'
15
+
16
+ def existing_gem_line_index
17
+ lines.index { |line| line.start_with?(gem_line_prefix) }
18
+ end
19
+
20
+ def result
21
+ if existing_gem_line_index.present?
22
+ replace_line
23
+ else
24
+ add_line
25
+ end
26
+ end
27
+
28
+ def add_line
29
+ lines.insert(add_line_index, new_gem_line)
30
+ end
31
+
32
+ def add_line_index
33
+ (gems_lines_start_index..(lines.count - 1)).each do |e|
34
+ return e if new_gem_line < lines[e]
35
+ end
36
+ lines.count
37
+ end
38
+
39
+ def gems_lines_start_index
40
+ lines.index { |line| line.start_with?(DEPENDENCY_PREFIX) } || lines.count
41
+ end
42
+
43
+ def new_gem_line
44
+ ([gem_line_prefix] + quoted_gem_specs).join(', ')
45
+ end
46
+
47
+ def gem_line_prefix
48
+ "#{DEPENDENCY_PREFIX} '#{gem_name}'"
49
+ end
50
+
51
+ def replace_line
52
+ lines[existing_gem_line_index] = new_gem_line
53
+ end
54
+
55
+ def quoted_gem_specs
56
+ gem_specs.map { |gem_spec| "'#{gem_spec}'" }
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Rubygems
8
+ class Gemspec
9
+ class Dependency
10
+ common_constructor :gemspec, :gem_name
11
+
12
+ def version_specs=(version_specs)
13
+ gemspec.add_or_replace_gem_line(gem_name, version_specs)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module Rubygems
8
+ class Gemspec
9
+ require_sub __FILE__, require_dependency: true
10
+
11
+ DEPENDENCY_LINE_PARSER = /s\.add_dependency\s*'(\S+)'/.to_parser { |m| m[1] }
12
+
13
+ class << self
14
+ def from_file(path)
15
+ new(path.read.each_line.map(&:rstrip))
16
+ end
17
+ end
18
+
19
+ common_constructor :lines
20
+
21
+ # @return [Avm::EacRubyBase1::Bundler::Gemfile::Dependency]
22
+ def dependency(gem_name)
23
+ ::Avm::EacRubyBase1::Rubygems::Gemspec::Dependency.new(self, gem_name)
24
+ end
25
+
26
+ # @return [Array<Avm::EacRubyBase1::Bundler::Gemfile::Dependency>]
27
+ def dependencies
28
+ lines.lazy.map { |line| DEPENDENCY_LINE_PARSER.parse(line) }.reject(&:blank?)
29
+ .map { |gem_name| dependency(gem_name) }.to_a
30
+ end
31
+
32
+ def write(path)
33
+ path.to_pathname.write(to_text)
34
+ end
35
+
36
+ def to_text
37
+ lines.map { |line| "#{line}\n" }.join
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,176 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_ruby_base1/sources/base'
4
+ require 'avm/source_generators/base'
5
+ require 'eac_templates/core_ext'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module EacRubyBase1
10
+ module SourceGenerators
11
+ class Base < ::Avm::SourceGenerators::Base
12
+ IDENT = ' '
13
+ JOBS = %w[root_directory gemspec root_lib version_lib static gemfile_lock].freeze
14
+ TEMPLATE_VARIABLES = %w[lib_path name root_module].freeze
15
+ OPTIONS = {
16
+ 'eac-ruby-utils-version'.to_sym => 'Version for "eac_ruby_utils" gem.',
17
+ 'eac-ruby-gem-support-version'.to_sym => 'Version for "eac_ruby_gem_support" gem.'
18
+ }.freeze
19
+
20
+ enable_speaker
21
+ enable_simple_cache
22
+
23
+ class << self
24
+ def option_list
25
+ OPTIONS.inject(super) { |a, e| a.option(*e) }
26
+ end
27
+ end
28
+
29
+ def root_directory
30
+ target_path
31
+ end
32
+
33
+ def eac_ruby_gem_support_version
34
+ dependency_version('eac_ruby_gem_support')
35
+ end
36
+
37
+ def eac_ruby_utils_version
38
+ dependency_version('eac_ruby_utils')
39
+ end
40
+
41
+ def name
42
+ root_directory.basename.to_s
43
+ end
44
+
45
+ def lib_path
46
+ name.split('-').join('/')
47
+ end
48
+
49
+ def perform
50
+ infov 'Root directory', root_directory
51
+ infov 'Gem name', name
52
+ JOBS.each do |job|
53
+ infom "Generating #{job.humanize}..."
54
+ send("generate_#{job}")
55
+ end
56
+ end
57
+
58
+ def root_module
59
+ lib_path.camelize
60
+ end
61
+
62
+ def root_module_close
63
+ root_module_components.count.times.map do |index|
64
+ (IDENT * index) + 'end'
65
+ end.reverse.join("\n")
66
+ end
67
+
68
+ def root_module_inner_identation
69
+ IDENT * root_module_components.count
70
+ end
71
+
72
+ def root_module_open
73
+ root_module_components.each_with_index.map do |component, index|
74
+ (IDENT * index) + 'module ' + component
75
+ end.join("\n")
76
+ end
77
+
78
+ def root_module_components
79
+ root_module.split('::')
80
+ end
81
+
82
+ protected
83
+
84
+ def apply_to_root_directory(template, subpath)
85
+ if template.is_a?(::EacTemplates::Directory)
86
+ template.children.each do |child|
87
+ apply_to_root_directory(child, subpath.join(child.basename))
88
+ end
89
+ elsif template.is_a?(::EacTemplates::File)
90
+ template.apply_to_file(template_variables, root_directory.join(subpath))
91
+ else
92
+ raise "Unknown template object: #{template}"
93
+ end
94
+ end
95
+
96
+ def dependency_version(gem_name)
97
+ VersionBuilder.new(gem_name, options).to_s
98
+ end
99
+
100
+ def generate_gemspec
101
+ template_apply('gemspec', "#{name}.gemspec")
102
+ end
103
+
104
+ def generate_gemfile_lock
105
+ self_gem.bundle('install').chdir_root.execute!
106
+ end
107
+
108
+ def generate_root_directory
109
+ root_directory.mkpath
110
+ end
111
+
112
+ def generate_root_lib
113
+ template_apply('root_lib', "lib/#{lib_path}.rb")
114
+ end
115
+
116
+ def generate_static
117
+ template.child('static').apply(self, root_directory)
118
+ end
119
+
120
+ def generate_version_lib
121
+ template_apply('version', "lib/#{lib_path}/version.rb")
122
+ end
123
+
124
+ def self_gem_uncached
125
+ ::Avm::EacRubyBase1::Sources::Base.new(root_directory)
126
+ end
127
+
128
+ def template_apply(from, to)
129
+ target = root_directory.join(to)
130
+ target.dirname.mkpath
131
+ template.child("#{from}.template").apply_to_file(self, target.to_path)
132
+ end
133
+
134
+ class VersionBuilder
135
+ enable_simple_cache
136
+ common_constructor :gem_name, :options
137
+
138
+ def to_s
139
+ r = "'~> #{two_segments}'"
140
+ r += ", '>= #{three_segments}'" if segments.count >= 3 && segments[2].positive?
141
+ r
142
+ end
143
+
144
+ # @return [Gem::Version]
145
+ def version
146
+ (options_version || default_version)
147
+ end
148
+
149
+ def two_segments
150
+ segments.first(2).join('.')
151
+ end
152
+
153
+ def three_segments
154
+ segments.first(3).join('.')
155
+ end
156
+
157
+ private
158
+
159
+ def segments_uncached
160
+ version.release.to_s.split('.').map(&:to_i)
161
+ end
162
+
163
+ def default_version
164
+ ::Gem.loaded_specs[gem_name].version
165
+ end
166
+
167
+ def options_version
168
+ options["#{gem_name}_version".dasherize.to_sym].if_present do |v|
169
+ ::Gem::Version.new(v)
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module EacRubyBase1
7
+ module SourceGenerators
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -20,7 +20,7 @@ module Avm
20
20
 
21
21
  # @return [String]
22
22
  def configured_gemfile_path
23
- configuration.entry(CONFIGURED_GEMFILE_PATH_ENTRY_KEY).value
23
+ configuration_entry(CONFIGURED_GEMFILE_PATH_ENTRY_KEY).value
24
24
  end
25
25
 
26
26
  # @return [String]
@@ -9,6 +9,9 @@ module Avm
9
9
  class Base < ::Avm::EacGenericBase0::Sources::Base
10
10
  module Rake
11
11
  RAKEFILE_BASENAME = 'Rakefile'
12
+ RAKE_TASKS_LINE_PARSER = /\Arake\s+(\S+)\s+/.to_parser do |m|
13
+ m[1]
14
+ end
12
15
 
13
16
  # @return [Avm::EacRubyBase1::Sources::Base::BundleCommand]
14
17
  def rake(*args)
@@ -21,6 +24,17 @@ module Avm
21
24
  def rakefile_path
22
25
  path.join(RAKEFILE_BASENAME)
23
26
  end
27
+
28
+ # @return [Boolean]
29
+ def rake_task?(task_name)
30
+ rake_tasks.include?(task_name)
31
+ end
32
+
33
+ # @return [Array<String>]
34
+ def rake_tasks
35
+ rake('--all', '--tasks').execute!.each_line
36
+ .map { |line| RAKE_TASKS_LINE_PARSER.parse!(line) }
37
+ end
24
38
  end
25
39
  end
26
40
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacRubyBase1
5
- VERSION = '0.10.0'
5
+ VERSION = '0.13.0'
6
6
  end
7
7
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+
5
+ require '%%LIB_PATH%%/version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = '%%NAME%%'
9
+ s.version = %%ROOT_MODULE%%::VERSION
10
+ s.authors = ['Put here the authors']
11
+ s.summary = 'Put here de description.'
12
+
13
+ s.files = Dir['{lib}/**/*']
14
+
15
+ s.add_dependency 'eac_ruby_utils', %%EAC_RUBY_UTILS_VERSION%%
16
+
17
+ s.add_development_dependency 'eac_ruby_gem_support', %%EAC_RUBY_GEM_SUPPORT_VERSION%%
18
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ %%ROOT_MODULE_OPEN%%
6
+ %%ROOT_MODULE_INNER_IDENTATION%%require_sub __FILE__
7
+ %%ROOT_MODULE_CLOSE%%
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ ::EacRubyUtils::Rspec.default_setup.describe_rubocop
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/rspec/default_setup'
4
+ ::EacRubyUtils::Rspec.default_setup_create(::File.expand_path('..', __dir__))
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ %%ROOT_MODULE_OPEN%%
4
+ %%ROOT_MODULE_INNER_IDENTATION%%VERSION = '0.0.0'
5
+ %%ROOT_MODULE_CLOSE%%
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-eac_ruby_base1
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-20 00:00:00.000000000 Z
11
+ date: 2022-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.23'
19
+ version: '0.34'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.23'
26
+ version: '0.34'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: avm-eac_generic_base0
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -116,7 +116,12 @@ files:
116
116
  - lib/avm/eac_ruby_base1/rubocop/envvar.rb
117
117
  - lib/avm/eac_ruby_base1/rubocop/gemfile.rb
118
118
  - lib/avm/eac_ruby_base1/rubygems.rb
119
+ - lib/avm/eac_ruby_base1/rubygems/gemspec.rb
120
+ - lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
121
+ - lib/avm/eac_ruby_base1/rubygems/gemspec/dependency.rb
119
122
  - lib/avm/eac_ruby_base1/rubygems/version_file.rb
123
+ - lib/avm/eac_ruby_base1/source_generators.rb
124
+ - lib/avm/eac_ruby_base1/source_generators/base.rb
120
125
  - lib/avm/eac_ruby_base1/sources.rb
121
126
  - lib/avm/eac_ruby_base1/sources/base.rb
122
127
  - lib/avm/eac_ruby_base1/sources/base/bundle_command.rb
@@ -139,6 +144,12 @@ files:
139
144
  - lib/avm/eac_ruby_base1/version.rb
140
145
  - locale/en.yml
141
146
  - locale/pt-BR.yml
147
+ - template/avm/eac_ruby_base1/source_generators/base/gemspec.template
148
+ - template/avm/eac_ruby_base1/source_generators/base/root_lib.template
149
+ - template/avm/eac_ruby_base1/source_generators/base/static/Gemfile
150
+ - template/avm/eac_ruby_base1/source_generators/base/static/spec/rubocop_spec.rb
151
+ - template/avm/eac_ruby_base1/source_generators/base/static/spec/spec_helper.rb
152
+ - template/avm/eac_ruby_base1/source_generators/base/version.template
142
153
  homepage:
143
154
  licenses: []
144
155
  metadata: {}