boilerplater 0.1 → 0.2

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.
Files changed (5) hide show
  1. data/bin/bp +25 -29
  2. data/lib/boilerplater.rb +1 -0
  3. data/lib/cmd.rb +93 -0
  4. data/lib/parser.rb +9 -1
  5. metadata +51 -34
data/bin/bp CHANGED
@@ -1,43 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems'
4
- require 'optparse'
4
+ require 'trollop'
5
5
 
6
6
  $:.unshift File::expand_path(File.join(File.dirname(__FILE__), '..'))
7
7
 
8
8
  require 'lib/boilerplater.rb'
9
+ require 'lib/cmd.rb'
9
10
 
10
- options = {}
11
-
12
- optparse = OptionParser.new do |opts|
13
- opts.on( '-s', '--search BOILERPLATE', 'Search for specific boilerplate') do |keyword|
14
- puts BoilerPlater.search keyword
15
- exit 0
16
- end
17
- opts.on '-u', '--use ID', 'Download and install specific boilerplate' do |id|
18
- options[:id] = id
19
- end
20
- opts.on '-p', '--prefix PREFIX', 'Use prefix for installation' do |prefix|
21
- options[:prefix] = prefix
22
- end
23
- opts.on('-h', '--help') { options[:help] = true }
11
+ opts = Trollop::options do
12
+ opt :prefix, "Prefix for boilerplate files", :short => 'p', :default => '.'
24
13
  end
25
14
 
26
- optparse.parse!
27
-
28
- if options[:help]
29
- puts optparse
30
- exit(0)
15
+ if ARGV[0].nil?
16
+ puts 'Usage: bp command [id|alias|action] [options]'
17
+ puts
18
+ puts "Commands:\n\n"
19
+ puts ' bp list - List all boilerplates'
20
+ puts ' bp search [name] - Search for boilerplate'
21
+ puts ' bp show [id|alias] - Show boilerplate details'
22
+ puts ' bp use [id|alias] - Apply boilerplate'
23
+ puts ' bp alias create [id] [name] - Create alias for boilerplate'
24
+ puts ' bp alias delete [name] - Delete alias'
25
+ puts ' bp alias list - List all aliases'
26
+ puts
27
+ system("#{__FILE__} --help")
31
28
  end
32
29
 
33
- BoilerPlater.setup do |b|
34
- b.prefix = options[:prefix] || '.'
35
- end
30
+ exit(0) if opts[:help]
36
31
 
37
- if options[:id]
38
- BoilerPlater.use(options[:id])
39
- else
40
- puts "ERROR: You must specify the boiler plate ID"
41
- exit 1
32
+ puts case ARGV[0]
33
+ when 'list' then BoilerPlater::Cmd.list
34
+ when 'search' then BoilerPlater::Cmd.search(ARGV[1])
35
+ when 'show' then BoilerPlater::Cmd.show(ARGV[1])
36
+ when 'use' then BoilerPlater::Cmd.use(ARGV[1], opts)
37
+ when 'alias' then BoilerPlater::Cmd.alias(ARGV[1], ARGV[2], ARGV[3])
38
+ else ''
42
39
  end
43
-
@@ -7,5 +7,6 @@ require 'gist'
7
7
  require 'ostruct'
8
8
  require 'fileutils'
9
9
  require 'open-uri'
10
+ require 'pp'
10
11
 
11
12
  require_relative './parser.rb'
@@ -0,0 +1,93 @@
1
+ require 'yaml'
2
+
3
+ class String
4
+ # colorization
5
+ def colorize(text, color_code)
6
+ "\e[#{color_code}m#{text}\e[0m"
7
+ end
8
+
9
+ def red; colorize(self, 31); end
10
+ def green; colorize(self, 32); end
11
+ def yellow; colorize(self, 33); end
12
+ def pink; colorize(self, 35); end
13
+ end
14
+
15
+
16
+ module BoilerPlater
17
+
18
+ module Cmd
19
+
20
+ def self.search(keyword)
21
+ BoilerPlater.search(keyword)
22
+ end
23
+
24
+ def self.list
25
+ BoilerPlater.list.map { |k, v| "#{v}: #{k}" }.join("\n")
26
+ end
27
+
28
+ def self.show(id)
29
+ data = BoilerPlater.show(find_alias(id))
30
+ "\nDescription: #{data['description']}\n" +
31
+ "Author: #{data['user']['login']}\n" +
32
+ "URL: #{data['url']}\n" +
33
+ "\n"
34
+ end
35
+
36
+ def self.use(id, opts)
37
+ BoilerPlater.setup do |bp|
38
+ bp.prefix = opts[:prefix]
39
+ end
40
+ id = find_alias(id)
41
+ puts
42
+ puts "Setting up new project using %s\n\n" % BoilerPlater.show(id)['description']
43
+ BoilerPlater.sections(BoilerPlater.get(id)).each do |part|
44
+ puts ' [%-8s] %s' % [(part.content? ? 'create '.green : 'download'.yellow), part.path]
45
+ part.download_content! unless part.content?
46
+ if part.exists?
47
+ print ' File already exists, overwrite? [y,N]: '
48
+ part.save! if STDIN.gets.chop.strip == 'Y'
49
+ else
50
+ part.save!
51
+ end
52
+ end
53
+ "\ndone.\n"
54
+ end
55
+
56
+ def self.alias(action, gist_id, name)
57
+ result = case action
58
+ when 'create' then alias_create(gist_id, name)
59
+ when 'delete' then alias_delete(name=gist_id)
60
+ when 'list' then return aliases.map { |gist, n| "#{n}: #{gist}" }.join("\n")
61
+ end
62
+ "Alias '#{name}' was #{!result ? 'not' : ''}#{action}d."
63
+ end
64
+
65
+ def self.alias_create(gist_id, name)
66
+ return if find_alias(name) == gist_id
67
+ update_aliases(aliases << [gist_id, name])
68
+ end
69
+
70
+ def self.find_alias(name)
71
+ res = aliases.find { |k, v| v == name.strip }
72
+ res ? res.first : name
73
+ end
74
+
75
+ def self.alias_delete(name)
76
+ update_aliases(aliases.delete_if { |k, v| v == name })
77
+ end
78
+
79
+ def self.aliases
80
+ File.exists?(alias_file) ? YAML::load_file(alias_file) : []
81
+ end
82
+
83
+ def self.alias_file
84
+ File.join(ENV['HOME'], '.bp_aliases.yaml')
85
+ end
86
+
87
+ def self.update_aliases(arr)
88
+ File.open(alias_file, 'w') { |f| YAML::dump(arr, f) }
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -14,6 +14,10 @@ module BoilerPlater
14
14
  Gist.read(gist_id)
15
15
  end
16
16
 
17
+ def self.show(gist_id)
18
+ JSON.parse(open(Gist::GIST_URL % gist_id).read)
19
+ end
20
+
17
21
  def self.use(gist_id)
18
22
  BoilerPlater.sections(get(gist_id)).each do |f|
19
23
  f.download_content! unless f.content?
@@ -26,7 +30,7 @@ module BoilerPlater
26
30
  end
27
31
 
28
32
  def self.search(name)
29
- list.find { |k, v| v =~ /#{name}/ }.first
33
+ list.find { |k, v| v =~ /#{name}/ }.join(' | ')
30
34
  end
31
35
 
32
36
  def self.sections(content)
@@ -81,6 +85,10 @@ module BoilerPlater
81
85
  File.join(BoilerPlater.config.prefix || '.', File.dirname(@file), File.basename(@file))
82
86
  end
83
87
 
88
+ def exists?
89
+ File.exists? path
90
+ end
91
+
84
92
  def download_content!
85
93
  @content = open(metadata[:url]).read
86
94
  end
metadata CHANGED
@@ -1,66 +1,83 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: boilerplater
3
- version: !ruby/object:Gem::Version
4
- version: '0.1'
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ version: "0.2"
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Michal Fojtik
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2012-08-06 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2012-08-06 00:00:00 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
15
20
  name: gist
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
21
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
22
+ requirement: &id001 !ruby/object:Gem::Requirement
25
23
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
30
33
  description: Speed up your development using prepared boiler plate templates
31
- email:
34
+ email:
32
35
  - mi@mifo.sk
33
- executables:
36
+ executables:
34
37
  - bp
35
38
  extensions: []
39
+
36
40
  extra_rdoc_files: []
37
- files:
41
+
42
+ files:
38
43
  - bin/bp
39
44
  - lib/boilerplater.rb
45
+ - lib/cmd.rb
40
46
  - lib/parser.rb
41
47
  homepage: http://github.com/mifo/boilerplater
42
- licenses:
48
+ licenses:
43
49
  - MIT
44
50
  post_install_message:
45
51
  rdoc_options: []
46
- require_paths:
52
+
53
+ require_paths:
47
54
  - lib
48
- required_ruby_version: !ruby/object:Gem::Requirement
55
+ required_ruby_version: !ruby/object:Gem::Requirement
49
56
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
65
  none: false
56
- requirements:
57
- - - ! '>='
58
- - !ruby/object:Gem::Version
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 23
70
+ segments:
71
+ - 1
72
+ - 3
73
+ - 6
59
74
  version: 1.3.6
60
75
  requirements: []
76
+
61
77
  rubyforge_project:
62
- rubygems_version: 1.8.24
78
+ rubygems_version: 1.8.15
63
79
  signing_key:
64
80
  specification_version: 3
65
81
  summary: Simple boiler plate system to bootstrap dev of new applications
66
82
  test_files: []
83
+