setdevenv 0.1.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97bfc0c8d73609c60cfe013561fc11f2fceaa3c0d95fd3d37320e396b1390cd9
4
- data.tar.gz: 0f2677401800a85696ec05ea9eb029d524e8efdfa2d19365b8ff1a224404447c
3
+ metadata.gz: 2e136e0c06de106df3ee5fb5eb14e7b9fc13dde0130d00f748b737bd586bce87
4
+ data.tar.gz: e3b404127200fd7d584011380ca0f9e984887d9cc77ff20c835fc250e2e9753d
5
5
  SHA512:
6
- metadata.gz: c54302279eb6b4484a320e3e007ae0e79b1c92f9197bba47f50be10e222f68b445cb935000d725503ac84712f9fbbcbb7cf6a980f008fc85be3b41e3b853c5bc
7
- data.tar.gz: 9ee80bb4304eef46ce4580d01c1ec20d71354ceeb54866fc3950cacde063b1514472e16811bdf62e58aea5e2ff6295a1ce7c5eb6af25e6111a6ddd12cc2c9a9e
6
+ metadata.gz: 802ade39ae04da7beca32e0597cc3bf57d004cd45b8259489667d3806882b38db8a0e7f53c7c3bf50f788e6630efbb850b3fa47ab5c2f3ca32880cb68a104485
7
+ data.tar.gz: b2d3d8586ef1a413a8893a20b85bd3b4adeff07bcfc387fec26026b6c9cb031316e0dbd728c9676f4b817430da76d1b468dae2b24a40ffdb30447d6d5f78d853
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ Metrics/MethodLength:
2
+ Enabled: false
3
+ Style/ClassAndModuleChildren:
4
+ Enabled: false
5
+ Style/Documentation:
6
+ Enabled: false
data/README.md CHANGED
@@ -20,7 +20,6 @@ This command will generate 3 files (***more to comming eventually***) within a f
20
20
 
21
21
  ## TODO
22
22
 
23
- - Retrieve ruby/alpine latests version from somewhere (and cache it)
24
- - Accept those versions as arguments from cli
25
- - Accept an argument in cli to use rails when setuping the new environment
26
- - Accept an argument `--service` to create a custom service within docker-compose
23
+ - [ ] Accept those versions as arguments from cli
24
+ - [ ] Accept an argument in cli to use rails when setuping the new environment
25
+ - [ ] Accept an argument `--service` to create a custom service within docker-compose
data/Rakefile CHANGED
@@ -5,4 +5,9 @@ require 'minitest/test_task'
5
5
 
6
6
  Minitest::TestTask.create
7
7
 
8
- task default: :test
8
+ task default: %i[test cucumber]
9
+
10
+ desc 'run cucumber features'
11
+ task :cucumber do
12
+ sh 'bundle exec cucumber'
13
+ end
@@ -7,9 +7,7 @@ module SetDevEnv
7
7
  class Base < Thor::Group
8
8
  include Thor::Actions
9
9
 
10
- def self.source_root
11
- "#{File.dirname(__FILE__)}/templates"
12
- end
10
+ def self.source_root = "#{File.dirname(__FILE__, 4)}/templates"
13
11
  end
14
12
  end
15
13
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../version_fetcher'
4
+
3
5
  module SetDevEnv
4
6
  module Setup::Generator
5
7
  class Dockerfile < Base
@@ -8,9 +10,8 @@ module SetDevEnv
8
10
  argument :ruby_version, type: :string, default: nil, optional: true
9
11
 
10
12
  def copy_dockerfile
11
- # TODO: retrieve those values from somewhere to take latest ruby/alpine versions
12
- self.alpine_version ||= '3.21'
13
- self.ruby_version ||= '3.4.1'
13
+ self.alpine_version ||= VersionFetcher.call(resource: :alpine)
14
+ self.ruby_version ||= VersionFetcher.call(resource: :ruby)
14
15
 
15
16
  template('Dockerfile.tt', "#{name}/Dockerfile.dev")
16
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SetDevEnv
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'net/http'
5
+ require 'nokogiri'
6
+ require 'uri'
7
+
8
+ module SetDevEnv
9
+ module VersionFetcher
10
+ extend self
11
+
12
+ ALPINE_LATEST_VERSION = '3.21'
13
+ RUBY_LATEST_VERSION = '3.4.2'
14
+ URLS = {
15
+ alpine: 'https://alpinelinux.org/releases/',
16
+ ruby: 'https://www.ruby-lang.org/en/downloads/releases/'
17
+ }.freeze
18
+
19
+ def call(resource:)
20
+ case resource
21
+ in :alpine then retrieve_alpine_version
22
+ in :ruby then retrieve_ruby_version
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def retrieve_alpine_version
29
+ response = make_request(:alpine)
30
+
31
+ return ALPINE_LATEST_VERSION unless response in Net::HTTPOK
32
+
33
+ document = Nokogiri::HTML5(response.body)
34
+
35
+ versions = document.css('table.pure-table tbody tr td:first-child').map do |td|
36
+ res = td.text.gsub(/\D/, '').chars
37
+
38
+ next if res.empty?
39
+
40
+ res[1, 0] = '.'
41
+
42
+ res * ''
43
+ end.uniq.compact
44
+
45
+ find_higher_version(versions)
46
+ rescue StandardError => _e
47
+ ALPINE_LATEST_VERSION
48
+ end
49
+
50
+ def retrieve_ruby_version
51
+ response = make_request(:ruby)
52
+
53
+ return RUBY_LATEST_VERSION unless response in Net::HTTPOK
54
+
55
+ document = Nokogiri::HTML5(response.body)
56
+
57
+ versions = document.css('table.release-list tbody tr td:first-child').map do |td|
58
+ td.text.gsub(/\D/, '')[0..2].chars * '.'
59
+ end.uniq
60
+
61
+ find_higher_version(versions)
62
+ rescue StandardError => _e
63
+ RUBY_LATEST_VERSION
64
+ end
65
+
66
+ def find_higher_version(versions) = versions.map { Gem::Version.new(it) }.max.to_s
67
+ def make_request(resource) = Net::HTTP.get_response(URI(URLS[resource]))
68
+
69
+ private_constant :ALPINE_LATEST_VERSION, :RUBY_LATEST_VERSION, :URLS
70
+ end
71
+ end
data/lib/set_dev_env.rb CHANGED
@@ -4,7 +4,4 @@ require_relative 'set_dev_env/setup'
4
4
  require_relative 'set_dev_env/version'
5
5
 
6
6
  module SetDevEnv
7
- def self.create(name)
8
- Setup.new(name).build
9
- end
10
7
  end
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: setdevenv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Júnior
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-03 00:00:00.000000000 Z
10
+ date: 2025-04-26 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: nokogiri
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.18'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.18'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: thor
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -79,6 +93,20 @@ dependencies:
79
93
  - - ">="
80
94
  - !ruby/object:Gem::Version
81
95
  version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: webmock
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
82
110
  email:
83
111
  - b.sep@live.com
84
112
  executables:
@@ -86,6 +114,7 @@ executables:
86
114
  extensions: []
87
115
  extra_rdoc_files: []
88
116
  files:
117
+ - ".rubocop.yml"
89
118
  - CHANGELOG.md
90
119
  - CODE_OF_CONDUCT.md
91
120
  - LICENSE.txt
@@ -100,12 +129,13 @@ files:
100
129
  - lib/set_dev_env/generator/folder.rb
101
130
  - lib/set_dev_env/generator/generator.rb
102
131
  - lib/set_dev_env/generator/makefile.rb
103
- - lib/set_dev_env/generator/templates/Dockerfile.tt
104
- - lib/set_dev_env/generator/templates/Makefile.tt
105
- - lib/set_dev_env/generator/templates/docker-compose.tt
106
132
  - lib/set_dev_env/setup.rb
107
133
  - lib/set_dev_env/version.rb
134
+ - lib/set_dev_env/version_fetcher.rb
108
135
  - sig/set_dev_env.rbs
136
+ - templates/Dockerfile.tt
137
+ - templates/Makefile.tt
138
+ - templates/docker-compose.tt
109
139
  homepage: https://github.com/b-sep/setdevenv
110
140
  licenses:
111
141
  - MIT