singer 0.2.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: 52a8bd4bab0f3283223aa2db41a7bbffb58e84c8033f123892a5526942e35102
4
- data.tar.gz: 0031afac6095b8c2d40b6a699f698c5c170b2a115b4aeca0c5c29149cf22498b
3
+ metadata.gz: d324ad6ec097b02fe9db6ab844205b37dd6a53450d69d5c7780d5bd7e7743efa
4
+ data.tar.gz: 9990fccac83a6ce04a3d89da50e7dd6b109edbfb74fa48e938b40839c34dfe5e
5
5
  SHA512:
6
- metadata.gz: db604b8c31e53948e5a367b4282173ecc098b09ab1cd6c4ff28e941bfd5598818b03551354924e65671de348e09e5bb89d7695565d38340475a49051f9db0a9f
7
- data.tar.gz: 90505991f184b2925937143403c70b43287e6bce20088300fe79c603f52cde53d8b87645792b6c07564554c80b4f219689339ab09d96db78682dc4671f89f5c4
6
+ metadata.gz: b5ae6fa28d28668e5afa00615770a6e69628f767e7adaa1344d26bc6e9e0e4c26a60c17aeb51ccae165ad4e50a77fac52b9e38d391d3de01ff398df36bda6682
7
+ data.tar.gz: f1f56ff0b4234f45d9a68835d9c69110481567aa7a3554f06240913b6125e9017439d601754e522710b326bf6f402b1771f181b2ffb27cf746da1a8fc3762990
data/exe/singer CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  require 'singer'
4
4
 
5
+ Singer.configure(ARGV)
5
6
  Singer.generate
@@ -0,0 +1,4 @@
1
+ module Singer
2
+ # holds settings
3
+ CONFIGURATION = Struct.new(:camelcase_name, :snakecase_name).new
4
+ end
data/lib/singer/paths.rb CHANGED
@@ -4,5 +4,17 @@ module Singer
4
4
  def self.templates_from_gem
5
5
  @templates_from_gem ||= File.expand_path('../../templates', __dir__)
6
6
  end
7
+
8
+ def self.output_path(...)
9
+ File.join(...).gsub(/__([[:alpha:]][[:word:]]+)__/) do |match|
10
+ potential_config = $1.downcase
11
+
12
+ if CONFIGURATION.respond_to?(potential_config)
13
+ CONFIGURATION.send(potential_config)
14
+ else
15
+ match
16
+ end
17
+ end
18
+ end
7
19
  end
8
20
  end
@@ -24,12 +24,11 @@ module Singer
24
24
  end
25
25
 
26
26
  def generate(output_path)
27
- FileUtils.mkdir_p(output_path)
28
27
  files.each do |file|
29
- input_file = File.join(path, file)
30
- output_file = File.join(output_path, file)
31
- FileUtils.mkdir_p(File.dirname(output_file))
32
- FileUtils.cp(input_file, output_file)
28
+ source_file = File.join(path, file)
29
+ target_file = Paths.output_path(output_path, file)
30
+ FileUtils.mkdir_p(File.dirname(target_file))
31
+ TemplatingMethods.send(:erb, source_file, target_file)
33
32
  end
34
33
  end
35
34
  end
@@ -0,0 +1,14 @@
1
+ require 'erb'
2
+
3
+ module Singer
4
+ # different ways to create output file from source template file
5
+ class TemplatingMethods
6
+ def self.copy(source_file, target_file)
7
+ FileUtils.cp(source_file, target_file)
8
+ end
9
+
10
+ def self.erb(source_file, target_file)
11
+ File.write(target_file, ERB.new(File.read(source_file)).result)
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Singer
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
data/lib/singer.rb CHANGED
@@ -1,10 +1,24 @@
1
1
  require_relative 'singer/version'
2
+ require_relative 'singer/configuration'
2
3
  require_relative 'singer/paths'
3
4
  require_relative 'singer/template'
5
+ require_relative 'singer/templating_methods'
4
6
 
5
7
  # Singer, which generates Sinatra apps etc. from templates
6
8
  module Singer
7
9
  class Error < StandardError; end
10
+ class NameMissingError < StandardError; end
11
+
12
+ def self.configure(argvies)
13
+ raise NameMissingError, 'Missing mandatory argument NAME' if argvies.empty?
14
+
15
+ encase_name(argvies.last)
16
+ end
17
+
18
+ def self.encase_name(name)
19
+ CONFIGURATION.snakecase_name = name.gsub(/(\w)([A-Z])/){ "#{$1}_#{$2}" }.gsub(/_+/, '_').downcase
20
+ CONFIGURATION.camelcase_name = CONFIGURATION.snakecase_name.split('_').map(&:capitalize).join
21
+ end
8
22
 
9
23
  def self.generate
10
24
  Template.all['tdd'].generate('.')
@@ -1,5 +1,5 @@
1
1
  require 'colorize'
2
- require 'awesome_print'
2
+ # require 'awesome_print'
3
3
 
4
4
  class <%= Singer::CONFIGURATION.camelcase_name %>
5
5
  def hello(who:)
@@ -1,7 +1,7 @@
1
1
  require 'minitest/rg'
2
2
  require 'minitest/autorun' if $PROGRAM_NAME == __FILE__
3
3
 
4
- require_relative '<%= Singer::CONFIGURATION.snakecase_name %>'
4
+ require_relative '../lib/<%= Singer::CONFIGURATION.snakecase_name %>'
5
5
 
6
6
  class Test<%= Singer::CONFIGURATION.camelcase_name %> < Minitest::Test
7
7
  # TEST_INPUT = File.read('input_mini.txt').lines(chomp: true)
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: singer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Chludziński
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-01-19 00:00:00.000000000 Z
11
- dependencies: []
10
+ date: 2025-01-21 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: erb
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
12
26
  description: |
13
27
  Singer is a highly configurable templating system intended for generating Ruby boilerplate.
14
28
  It aims to make creating and extending Sinatra apps easier.
@@ -23,11 +37,13 @@ files:
23
37
  - README.md
24
38
  - exe/singer
25
39
  - lib/singer.rb
40
+ - lib/singer/configuration.rb
26
41
  - lib/singer/paths.rb
27
42
  - lib/singer/template.rb
43
+ - lib/singer/templating_methods.rb
28
44
  - lib/singer/version.rb
29
- - templates/tdd/lib/ruby.rb
30
- - templates/tdd/test/test_ruby.rb
45
+ - templates/tdd/lib/__SNAKECASE_NAME__.rb
46
+ - templates/tdd/test/test___SNAKECASE_NAME__.rb
31
47
  homepage: https://gitlab.com/tanstaafl/singer/
32
48
  licenses:
33
49
  - MIT