crystallize 0.0.2 → 0.1.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
  SHA1:
3
- metadata.gz: 968f4a1b4b1c51abcfe5e1019cd430e19efaf11d
4
- data.tar.gz: f427b933ea4b729cee407989ae366f1cec312e30
3
+ metadata.gz: 751fb81bc9177eddd2d35f2f0bafbd3fdc7aece6
4
+ data.tar.gz: dfe57778e7fbc984d6b9c9fd1e4926c1dc21c3c2
5
5
  SHA512:
6
- metadata.gz: 4281c5061a0f25d914287933f10d56150f32b6fd3e87610fab4f535b46715333e58902914d6a10de547fd1b8d24d1209b37a3f0a3c43893eea6f185a45d1e3ad
7
- data.tar.gz: 5b4688ab05d5e28c9b6264095799f4d19fbe2d17585fc4941faab44985370e85363da8fdd91eccebd48175a017b9321b05d1b265627ef4ce5528f1f2f661e2b4
6
+ metadata.gz: dbd67601d98e64150015d0c2a3b124c2bbe2d5a4f1178abd84f8578c750b7554dc658ca2641d6b07363427cf7e9f49be0d2ec2e63b5555653fb856dfab20652d
7
+ data.tar.gz: 9a2cb5c11f8408f51383e51396f138b1bf28a98be729d1d38d4a08cc616fc4b9c465a0868e581602dc554cc2a09f3688491e51084bd89475c2d8cb397a8adf8b
data/README.md CHANGED
@@ -17,8 +17,25 @@ gem install crystallize
17
17
  Usage
18
18
  -----
19
19
 
20
+ #### Typical usage
21
+
22
+ ```bash
23
+ $ crystallize my_gem
24
+ Created gem in ./my_gem
25
+ ```
26
+
27
+ #### Settings
28
+
29
+ The first time you run `crystallize`, it'll prompt you for settings that'll be used in all of your gems:
30
+
20
31
  ```bash
21
32
  $ crystallize my_gem
33
+ Welcome to Crystallize!
34
+ Please enter some settings for your gems:
35
+ Your name: Tom Benner
36
+ Your email: tombenner@gmail.com
37
+ Your GitHub username: tombenner
38
+ Thanks! Saved your settings in ~/.crystallize.yml
22
39
  Created gem in ./my_gem
23
40
  ```
24
41
 
@@ -3,37 +3,66 @@ require 'fileutils'
3
3
  module Crystallize
4
4
  class Creator
5
5
  def initialize
6
- args = ARGV
7
- @gem_name = args.shift
8
- if @gem_name.nil?
9
- puts "Please specify a gem name:\ncrystallize my_gem" and return
10
- end
6
+ @settings_manager = SettingsManager.new
7
+ @gem_name = ARGV.shift
8
+ @gem_dir = "#{Dir.pwd}/#{@gem_name}"
11
9
  end
12
10
 
13
11
  def run
14
- gem_dir = "#{Dir.pwd}/#{@gem_name}"
15
- FileUtils.rm_rf(gem_dir)
16
- FileUtils.cp_r("#{Crystallize.dir}/gem_name", gem_dir)
17
- gem_name_camelized = @gem_name.split('_').map { |word| word.capitalize }.join
18
- Dir.chdir(gem_dir) do
12
+ @settings = @settings_manager.get
13
+ if @gem_name.nil? || @gem_name.empty?
14
+ puts "Please specify a gem name:\ncrystallize my_gem"
15
+ return
16
+ end
17
+ if @gem_name == 'settings'
18
+ @settings_manager.write
19
+ return
20
+ end
21
+
22
+ FileUtils.rm_rf(@gem_dir)
23
+ FileUtils.cp_r("#{Crystallize.dir}/gem_name", @gem_dir)
24
+
25
+ Dir.chdir(@gem_dir) do
19
26
  rename_files
20
- Dir.glob('**/*').each do |name|
21
- next unless File.file?(name)
22
- content = File.read(name)
23
- content.gsub!('gem_name', @gem_name)
24
- content.gsub!('GemName', gem_name_camelized)
25
- File.write(name, content)
26
- end
27
+ replace_tokens
27
28
  end
28
- Dir.chdir("#{gem_dir}/lib") do
29
+
30
+ Dir.chdir("#{@gem_dir}/lib") do
29
31
  rename_files
30
32
  end
31
- Dir.chdir(gem_dir) do
33
+ Dir.chdir(@gem_dir) do
32
34
  `git init && git add . && git commit -m 'Initial commit'`
33
35
  end
36
+
34
37
  puts "Created gem in ./#{@gem_name}"
35
38
  end
36
39
 
40
+ private
41
+
42
+ def replace_tokens
43
+ token_values = get_token_values
44
+ Dir.glob('**/*').each do |name|
45
+ next unless File.file?(name)
46
+ content = File.read(name)
47
+ token_values.each do |token, value|
48
+ content.gsub!("{{#{token}}}", value)
49
+ end
50
+ File.write(name, content)
51
+ end
52
+ end
53
+
54
+ def get_token_values
55
+ gem_name_camelized = @gem_name.split('_').map { |word| word.capitalize }.join
56
+ {
57
+ :gem_name => @gem_name,
58
+ :gem_name_camelized => gem_name_camelized,
59
+ :settings_name => @settings['name'],
60
+ :settings_email => @settings['email'],
61
+ :settings_github_username => @settings['github_username'],
62
+ :year => Time.now.year.to_s
63
+ }
64
+ end
65
+
37
66
  def rename_files
38
67
  %x[for f in *gem_name*; do mv "$f" "`echo $f | sed s/gem_name/#{@gem_name}/`"; done]
39
68
  end
@@ -1,4 +1,4 @@
1
- Copyright 2014 Tom Benner
1
+ Copyright {{year}} {{settings_name}}
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- GemName
1
+ {{gem_name_camelized}}
2
2
  =====
3
3
 
4
4
  Overview
@@ -7,4 +7,4 @@ Overview
7
7
  License
8
8
  -------
9
9
 
10
- GemName is released under the MIT License. Please see the MIT-LICENSE file for details.
10
+ {{gem_name_camelized}} is released under the MIT License. Please see the MIT-LICENSE file for details.
@@ -1,15 +1,15 @@
1
- require File.expand_path('../lib/gem_name/version', __FILE__)
1
+ require File.expand_path('../lib/{{gem_name}}/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.authors = ['Tom Benner']
5
- s.email = ['tombenner@gmail.com']
4
+ s.authors = ['{{settings_name}}']
5
+ s.email = ['{{settings_email}}']
6
6
  s.description = s.summary = %q{TODO}
7
- s.homepage = 'https://github.com/tombenner/gem_name'
7
+ s.homepage = 'https://github.com/{{settings_github_username}}/{{gem_name}}'
8
8
 
9
9
  s.files = `git ls-files`.split($\)
10
- s.name = 'gem_name'
10
+ s.name = '{{gem_name}}'
11
11
  s.require_paths = ['lib']
12
- s.version = GemName::VERSION
12
+ s.version = {{gem_name_camelized}}::VERSION
13
13
  s.license = 'MIT'
14
14
 
15
15
  s.add_development_dependency 'rspec'
@@ -1,5 +1,5 @@
1
1
  directory = File.dirname(File.absolute_path(__FILE__))
2
- Dir.glob("#{directory}/gem_name/*.rb") { |file| require file }
2
+ Dir.glob("#{directory}/{{gem_name}}/*.rb") { |file| require file }
3
3
 
4
- module GemName
4
+ module {{gem_name_camelized}}
5
5
  end
@@ -1,3 +1,3 @@
1
- module GemName
1
+ module {{gem_name_camelized}}
2
2
  VERSION = '0.0.1'
3
3
  end
@@ -1,4 +1,4 @@
1
- require 'gem_name'
1
+ require '{{gem_name}}'
2
2
 
3
3
  RSpec.configure do |config|
4
4
  # ## Mock Framework
@@ -0,0 +1,53 @@
1
+ require 'pathname'
2
+ require 'yaml'
3
+
4
+ module Crystallize
5
+ class SettingsManager
6
+ def get
7
+ read || write
8
+ end
9
+
10
+ def write
11
+ puts "Welcome to Crystallize!\nPlease enter some settings for your gems:"
12
+ settings = prompt_settings
13
+ settings['version'] = Crystallize::VERSION
14
+ File.open(path, 'w') do |file|
15
+ YAML.dump(settings, file)
16
+ end
17
+ puts "Thanks! Saved your settings in ~/.crystallize.yml"
18
+ settings
19
+ end
20
+
21
+ def read
22
+ return nil unless File.exist?(path)
23
+ settings = YAML.load_file(path)
24
+ return nil unless settings && settings['name'] && settings['email'] && settings['github_username']
25
+ settings
26
+ end
27
+
28
+ private
29
+
30
+ def prompt_settings
31
+ settings = {}
32
+ settings['name'] = prompt_setting('name')
33
+ settings['email'] = prompt_setting('email')
34
+ settings['github_username'] = prompt_setting('GitHub username')
35
+ settings
36
+ end
37
+
38
+ def prompt_setting(name)
39
+ print "Your #{name}: "
40
+ value = nil
41
+ loop do
42
+ value = gets.chomp
43
+ break if !value.empty?
44
+ puts "Please enter your #{name}!"
45
+ end
46
+ value
47
+ end
48
+
49
+ def path
50
+ @path ||= Pathname.new(`echo ~`.strip).join('.crystallize.yml')
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Crystallize
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crystallize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Benner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-11 00:00:00.000000000 Z
11
+ date: 2014-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -50,6 +50,7 @@ files:
50
50
  - lib/crystallize/gem_name/lib/gem_name.rb
51
51
  - lib/crystallize/gem_name/lib/gem_name/version.rb
52
52
  - lib/crystallize/gem_name/spec/spec_helper.rb
53
+ - lib/crystallize/settings_manager.rb
53
54
  - lib/crystallize/version.rb
54
55
  - spec/spec_helper.rb
55
56
  homepage: https://github.com/tombenner/crystallize