yu 0.1.5 → 0.1.6

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
  SHA1:
3
- metadata.gz: 966869713d53857c276a5a5b42402c5c7eee1bf2
4
- data.tar.gz: b8944277007f182c41e5b29e4f40fc342673af4f
3
+ metadata.gz: c10a73d66a86ec7e08c340efeea2be959c75ef1a
4
+ data.tar.gz: 648cdd1f69b19247bddcde521136bce10e53a469
5
5
  SHA512:
6
- metadata.gz: df8665a17bf5526d9cb8a65696e2ea19e1a430f1c04c07a494b610a143d9da126db4aa9255d25c62c3198bd85129b7ef1c11bf89f0495bd22325460618fa1f3b
7
- data.tar.gz: a1b1732be30ae876cbca0e46e61cbaacc75c79da98933486d2bc77f5dcd4423cb0432adaaac92fddb657af6566aa6d13d87abebb8cfeee6313448b8336d43f62
6
+ metadata.gz: 91a40197ae9e0b86a9b10e1a62dc40c94974767afac9a358d2473b7dcf0da9a5c097c55973dcd12a86ca070f9e39b874324c48fe2669a21dc48ddde8d95d49ad
7
+ data.tar.gz: d0851fa91ff16a6daba2a3a6e51bcb519bfa10336d9d98c54913696bdd210366700e0fdf06bb90f652fc6741df6b2ce0e0b78ea03bb812955e52aaeee8d63a94
@@ -0,0 +1,2 @@
1
+ SERVICE_NAME=<%= service_name %>
2
+ APP_ENV=development
@@ -0,0 +1,14 @@
1
+ FROM ruby:latest
2
+
3
+ # Install build dependencies:
4
+ # RUN yum groupinstall -y development
5
+
6
+ WORKDIR /tmp
7
+ COPY Gemfile /tmp/Gemfile
8
+ COPY Gemfile.lock /tmp/Gemfile.lock
9
+ ADD ./vendor/cache /tmp/vendor/cache
10
+
11
+ RUN bundle install --local --no-cache
12
+
13
+ ADD ./ /app
14
+ WORKDIR /app
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development, :test do
4
+ gem 'pry'
5
+ gem 'rspec'
6
+ end
@@ -0,0 +1,31 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ coderay (1.1.0)
5
+ diff-lcs (1.2.5)
6
+ method_source (0.8.2)
7
+ pry (0.10.1)
8
+ coderay (~> 1.1.0)
9
+ method_source (~> 0.8.1)
10
+ slop (~> 3.4)
11
+ rspec (3.2.0)
12
+ rspec-core (~> 3.2.0)
13
+ rspec-expectations (~> 3.2.0)
14
+ rspec-mocks (~> 3.2.0)
15
+ rspec-core (3.2.3)
16
+ rspec-support (~> 3.2.0)
17
+ rspec-expectations (3.2.1)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.2.0)
20
+ rspec-mocks (3.2.1)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.2.0)
23
+ rspec-support (3.2.2)
24
+ slop (3.6.0)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ pry
31
+ rspec
@@ -0,0 +1,6 @@
1
+ <%= service_name %>:
2
+ build: <%= service_name %>
3
+ volumes:
4
+ - <%= service_name %>:/app
5
+ env_file: <%= service_name %>/.env
6
+ command: bin/run
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require_relative '../config/env'
5
+
6
+ require 'service'
7
+
8
+ Service.start
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ bundle exec rspec
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.push(File.expand_path("../../", __FILE__))
2
+ $LOAD_PATH.push(File.expand_path("../../app", __FILE__))
@@ -0,0 +1,12 @@
1
+ class Service
2
+ def self.start(*args)
3
+ new(*args).start
4
+ end
5
+
6
+ def start
7
+ STDERR.puts "Starting <%= service_name %>..."
8
+ while true
9
+ # loop forever
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../config/env'
2
+ require 'pry'
3
+
4
+ RSpec.configure do |config|
5
+ config.expect_with :rspec do |expectations|
6
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
7
+ end
8
+
9
+ config.mock_with :rspec do |mocks|
10
+ mocks.verify_partial_doubles = true
11
+ end
12
+ end
data/lib/yu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yu
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
data/lib/yu.rb CHANGED
@@ -1,3 +1,7 @@
1
+ require 'pathname'
2
+ require 'erb'
3
+ require 'ostruct'
4
+
1
5
  require 'yu/version'
2
6
  require 'commander'
3
7
 
@@ -64,6 +68,12 @@ module Yu
64
68
  c.action(method(:recreate))
65
69
  end
66
70
 
71
+ command :service do |c|
72
+ c.syntax = 'yu service'
73
+ c.description = 'Create service from template'
74
+ c.action(method(:service))
75
+ end
76
+
67
77
  global_option('-V', '--verbose', 'Verbose output') { $verbose_mode = true }
68
78
 
69
79
  run!
@@ -164,6 +174,54 @@ module Yu
164
174
  run_command "docker-compose up -d #{service_list}"
165
175
  end
166
176
 
177
+ def service(args, options)
178
+ service_names = args.map(&method(:normalise_service_name_from_dir))
179
+ existing_services = get_existing_services(service_names)
180
+ if existing_services.any?
181
+ info "The following services already exist in the project: #{existing_services.join(', ')}"
182
+ else
183
+ service_names.each do |service_name|
184
+ copy_template_into_dir(service_name: service_name)
185
+ render_and_remove_erb_files(service_name: service_name)
186
+ append_partial_to_docker_compose_yml(service_name)
187
+ end
188
+ end
189
+ end
190
+
191
+ def get_existing_services(service_names)
192
+ service_names.select { |service_name| Pathname(service_name).exist? }
193
+ end
194
+
195
+ def copy_template_into_dir(service_name:)
196
+ run_command("cp -aR #{template_dir} #{service_name}")
197
+ end
198
+
199
+ def render_and_remove_erb_files(options)
200
+ service_name = options.fetch(:service_name)
201
+ template_context = OpenStruct.new(options).instance_eval { binding }
202
+
203
+ Dir.glob("#{service_name}/**/{*,.*}.erb").each do |erb_file_path|
204
+ template_string = File.read(erb_file_path)
205
+ template = ERB.new(template_string)
206
+ rendered_content = template.result(template_context)
207
+ target_file_path = erb_file_path.match(/(.*)\.erb$/)[1]
208
+
209
+ File.write(target_file_path, rendered_content)
210
+ run_command "rm #{erb_file_path}"
211
+ end
212
+ end
213
+
214
+ def append_partial_to_docker_compose_yml(service_name)
215
+ partial_path = "#{service_name}/_docker-compose.yml"
216
+ run_command "cat #{partial_path} >> docker-compose.yml"
217
+ run_command "rm #{partial_path}"
218
+ end
219
+
220
+ def template_dir
221
+ relative_path = Pathname(__FILE__).dirname + "templates/ruby_base"
222
+ relative_path.realpath
223
+ end
224
+
167
225
  def run_command(command, showing_output: true, exit_on_failure: true)
168
226
  unless showing_output || verbose_mode?
169
227
  command = "#{command} &>/dev/null"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Kelly
@@ -83,6 +83,16 @@ files:
83
83
  - bin/console
84
84
  - bin/setup
85
85
  - exe/yu
86
+ - lib/templates/ruby_base/.env.erb
87
+ - lib/templates/ruby_base/Dockerfile
88
+ - lib/templates/ruby_base/Gemfile
89
+ - lib/templates/ruby_base/Gemfile.lock
90
+ - lib/templates/ruby_base/_docker-compose.yml.erb
91
+ - lib/templates/ruby_base/bin/run
92
+ - lib/templates/ruby_base/bin/test
93
+ - lib/templates/ruby_base/config/env.rb
94
+ - lib/templates/ruby_base/service.rb.erb
95
+ - lib/templates/ruby_base/spec/spec_helper.rb
86
96
  - lib/yu.rb
87
97
  - lib/yu/version.rb
88
98
  - yu.gemspec