spell_craft 0.1.1 → 0.1.2

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: 51e6df509e88a2fdb1cffa70963e78efed803d5fc53b74b17da22ec24cbdb630
4
- data.tar.gz: cc4a063114b4ed4ef4e8da045ecc48d205ff4fc5561c44f5626427c2f0f4183c
3
+ metadata.gz: '092e3be07d884e6207f4f0c0cf93157609fddd1e62218514f927cccd58275dfe'
4
+ data.tar.gz: c641a6d3b418b14b03da93af53489c6f0a235cc96373968c33d618b3c1efbfc6
5
5
  SHA512:
6
- metadata.gz: 9374f712bcafab23eefdbeca6b81b69ed9d2633bfe016d35537692f66ba40123194b334430afc8e74dde872d1023c0df950757262a2cabc474ebfe16ca49b6b3
7
- data.tar.gz: 5071f7bfb76234778d933ba02c00d62694c60d1680e5f73c39886a52915199a3515cd38480de099ba873cda342aee8f8e9f52deca3f011c4f87b3adabdb0d379
6
+ metadata.gz: cea8a072a79286eb5bd74b6555c491a6578ac5545a78f191b6689824e0d1261f850a5a34ecfdb721a68cc71c16589496b4eaa7f5f537c60a088ebbf5636cbeb5
7
+ data.tar.gz: 59472374d88a467c8827e2ccb6617f861f76a7093a324adaf8972687a4ba6b3ef974e803e88e998e06b5e367f652724627d679e28a5f6c1ac4d270f2e1084652
@@ -4,7 +4,7 @@
4
4
  require 'zeitwerk'
5
5
  require 'pathname'
6
6
 
7
- root = Pathname('.')
7
+ root = Pathname('/Users/cherryramatis/Repos/spell_craft')
8
8
 
9
9
  loader = Zeitwerk::Loader.new
10
10
 
data/lib/cmd/add/repl.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: true
3
3
 
4
+ require 'dry/monads/all'
5
+ require 'async'
6
+
4
7
  module Cmd
5
8
  module Add
6
9
  class Repl < Dry::CLI::Command
10
+ include Dry::Monads
7
11
  extend T::Sig
8
12
 
9
13
  desc 'Allow adding configuration for REPL support on the current application, being either pry or irb'
@@ -13,17 +17,77 @@ module Cmd
13
17
  option :pry, type: :boolean, default: false,
14
18
  desc: 'Enable the code generator to assume Pry as the REPL of choice'
15
19
 
20
+ IRB_TEMPLATE = <<~CONTENT
21
+ #!/usr/bin/env ruby
22
+
23
+ # frozen_string_literal: true
24
+
25
+ require 'irb'
26
+ IRB.start
27
+ CONTENT
28
+
29
+ PRY_TEMPLATE = <<~CONTENT
30
+ #!/usr/bin/env ruby
31
+
32
+ require 'pry-reload'
33
+ require 'pry'
34
+ Pry.start
35
+ CONTENT
36
+
37
+ class ConfigType < T::Enum
38
+ enums do
39
+ IRB = new
40
+ PRY = new
41
+ end
42
+ end
43
+
16
44
  def call(irb:, pry:)
17
- install_deps if pry
45
+ if pry
46
+ response = install_deps
47
+
48
+ if response.failure?
49
+ # TODO: make this better with red message maybe.
50
+ puts response.failure[:message]
51
+ return
52
+ end
53
+ end
18
54
 
19
- puts 'Hello world'
55
+ write_config(type: ConfigType::IRB) if irb
56
+ write_config(type: ConfigType::PRY) if pry
20
57
  end
21
58
 
22
59
  private
23
60
 
24
- sig { void }
61
+ sig { params(type: ConfigType).void }
62
+ def write_config(type:)
63
+ case type
64
+ when ConfigType::IRB
65
+ Utils::FileSystem.create_directory_if_not_exist('bin')
66
+
67
+ File.write('bin/console', IRB_TEMPLATE)
68
+ when ConfigType::PRY
69
+ Utils::FileSystem.create_directory_if_not_exist('bin')
70
+
71
+ File.write('bin/console', PRY_TEMPLATE)
72
+
73
+ File.chmod(0o755, 'bin/console')
74
+ end
75
+ end
76
+
77
+ sig { returns(T.any(Result::Success, Result::Failure)) }
25
78
  def install_deps
26
- puts 'installing deps'
79
+ unless File.exist?('Gemfile') || Utils::Shell.binary_exists?('bundle')
80
+ return Result::Failure.new({ message: 'Gemfile don\'t exist or the bundle gem is not available' })
81
+ end
82
+
83
+ return Result::Success.new(true) if Utils::Gem.exists?('pry') || Utils::Gem.exists?('pry-reload')
84
+
85
+ Async do
86
+ system('bundle add pry')
87
+ system('bundle add pry-reload')
88
+ end
89
+
90
+ Result::Success.new(true)
27
91
  end
28
92
  end
29
93
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module Utils
5
+ class FileSystem
6
+ extend T::Sig
7
+
8
+ sig { params(name: String).returns(T::Boolean) }
9
+ def self.create_directory_if_not_exist(name)
10
+ return true if File.directory?(name)
11
+
12
+ begin
13
+ Dir.mkdir(name)
14
+ true
15
+ rescue SystemCallError
16
+ false
17
+ end
18
+ end
19
+ end
20
+ end
data/lib/utils/gem.rb ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module Utils
5
+ class Gem
6
+ extend T::Sig
7
+
8
+ sig { params(name: String).returns(T::Boolean) }
9
+ def self.exists?(name)
10
+ gemfile_content = File.read('Gemfile')
11
+
12
+ pattern = /gem\s+['"]#{name}['"]/
13
+ !gemfile_content.scan(pattern).empty?
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # typed: true
3
+
4
+ module Utils
5
+ class Shell
6
+ extend T::Sig
7
+
8
+ sig { params(binary: String).returns(T::Boolean) }
9
+ def self.binary_exists?(binary)
10
+ File.executable?(File.join(ENV.fetch('PATH', '').split(':'), binary))
11
+ end
12
+ end
13
+ end
data/spell_craft.gemspec CHANGED
@@ -8,7 +8,7 @@ $LOAD_PATH.unshift(config) unless $LOAD_PATH.include?(config)
8
8
 
9
9
  Gem::Specification.new do |spec|
10
10
  spec.name = 'spell_craft'
11
- spec.version = '0.1.1'
11
+ spec.version = '0.1.2'
12
12
  spec.summary = 'Yet another code generator to make you type less stuff'
13
13
  spec.description = 'Yet another code generator to make you type less stuff'
14
14
  spec.authors = ['Cherry Ramatis']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spell_craft
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cherry Ramatis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-19 00:00:00.000000000 Z
11
+ date: 2023-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-cli
@@ -52,6 +52,9 @@ files:
52
52
  - lib/cmd/add/repl.rb
53
53
  - lib/cmd/cli.rb
54
54
  - lib/cmd/version.rb
55
+ - lib/utils/file_system.rb
56
+ - lib/utils/gem.rb
57
+ - lib/utils/shell.rb
55
58
  - spell_craft.gemspec
56
59
  homepage: https://github.com/cherryramatisdev/spell_craft.git
57
60
  licenses: