yu 0.1.5 → 0.1.6

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
  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