gemignore 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ == 0.2.0
2
+ * Add colored messages
3
+ * Fix bug which prevented one from installing the 'Go' snippet
4
+ * Improve command line interface
5
+ * Add usage information accessible from command line
6
+
7
+ == 0.1.1
8
+ * First release
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  gem "json", ">= 1.5.1"
6
+ gem "rainbow", "~> 1.1.1"
6
7
 
7
8
  # Add dependencies to develop your gem here.
8
9
  # Include everything needed to run rake, tests, features, etc.
@@ -6,16 +6,20 @@ This is a handy little tool for all people who work with Git. It allows you to e
6
6
 
7
7
  To search for a .gitignore snippet, simply type
8
8
 
9
- $ gemignore searchword
9
+ $ gemignore search searchword
10
10
 
11
11
  To list all available snippets run
12
12
 
13
- $ gemignore
13
+ $ gemignore list
14
14
 
15
15
  And finally, to add a snippet to the .gitignore file in the <b>current working directory</b>:
16
16
 
17
17
  $ gemignore add Global/OSX
18
18
 
19
+ To display usage information you can use
20
+
21
+ $ gemignore help
22
+
19
23
  == Copyright
20
24
 
21
25
  Copyright (c) 2011 Lucas Jenß. See LICENSE.txt for
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gemignore}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Lucas Jenss"]
12
+ s.date = %q{2011-05-28}
13
+ s.default_executable = %q{gemignore}
14
+ s.description = %q{gemignore allows you to automatically insert a wide range of preset .gitignore snippets into your .gitignore files}
15
+ s.email = %q{lucas@x3ro.de}
16
+ s.executables = ["gemignore"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".rspec",
24
+ "Changelog",
25
+ "Gemfile",
26
+ "LICENSE.txt",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "bin/.gitignore",
31
+ "bin/gemignore",
32
+ "gemignore.gemspec",
33
+ "lib/gemignore.rb",
34
+ "lib/gemignore/main.rb",
35
+ "lib/gemignore/util.rb",
36
+ "spec/gemignore_spec.rb",
37
+ "spec/spec_helper.rb"
38
+ ]
39
+ s.homepage = %q{http://github.com/x3ro/gemignore}
40
+ s.licenses = ["MIT"]
41
+ s.require_paths = ["lib"]
42
+ s.rubygems_version = %q{1.3.7}
43
+ s.summary = %q{A command-line tool which ought to simplify your daily .gitignore hassle}
44
+
45
+ if s.respond_to? :specification_version then
46
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
51
+ s.add_runtime_dependency(%q<rainbow>, ["~> 1.1.1"])
52
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
53
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
54
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
55
+ s.add_development_dependency(%q<rcov>, [">= 0"])
56
+ else
57
+ s.add_dependency(%q<json>, [">= 1.5.1"])
58
+ s.add_dependency(%q<rainbow>, ["~> 1.1.1"])
59
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
60
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
61
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
62
+ s.add_dependency(%q<rcov>, [">= 0"])
63
+ end
64
+ else
65
+ s.add_dependency(%q<json>, [">= 1.5.1"])
66
+ s.add_dependency(%q<rainbow>, ["~> 1.1.1"])
67
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
68
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
69
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
70
+ s.add_dependency(%q<rcov>, [">= 0"])
71
+ end
72
+ end
73
+
@@ -1,8 +1,10 @@
1
+ require 'rubygems'
2
+ require 'rainbow'
1
3
  require 'net/http'
2
4
  require 'net/https'
3
5
  require 'json'
4
- require 'pp'
5
6
 
7
+ require 'gemignore/util'
6
8
 
7
9
  module GemIgnore
8
10
 
@@ -13,25 +15,62 @@ module GemIgnore
13
15
  #++
14
16
  class Main
15
17
 
18
+ include Util
19
+
16
20
  def dispatch
17
- list if ARGV.length === 0
18
- search if ARGV.length === 1
19
- add if ARGV.length === 2 and ARGV[0] === "add"
21
+
22
+ (help; return) if ARGV.length === 0
23
+
24
+ cmd = ARGV.shift # get the sub-command
25
+ case cmd
26
+ when "list"
27
+ list
28
+ when "search"
29
+ search
30
+ when "add"
31
+ add
32
+ when "help"
33
+ help
34
+ else
35
+ error "Unknown gemignore command '#{cmd}'."
36
+ notice "Run 'gemignore help' to display usage information."
37
+ end
38
+
39
+ end
40
+
41
+ # Displays some usage information
42
+ def help
43
+ notice <<-BANNER
44
+ gemignore - .gitignore snippet utility
45
+ usage: gemignore <command> <input>
46
+
47
+ Available commands are:
48
+ list Lists all available snippets
49
+ search Searches for snippets containing <input>
50
+ add Add a snippet to the .gitignore file in your working directory
51
+ help Display this message
52
+ BANNER
20
53
  end
21
54
 
22
55
  # Displays a list of available .gitignore snippets
23
56
  def list
24
- puts "-> Available .gitignore snippets:"
57
+ msg "Available .gitignore snippets:", 1
25
58
  fetch().each do |f|
26
- puts "---> " + f
59
+ notice f, 2
27
60
  end
28
61
  end
29
62
 
30
63
  # Searches for a given snippet name
31
64
  def search
32
- puts "-> Snippets found for '#{ARGV[0]}':"
33
- fetch(regexpForInput(ARGV[0])).each do |f|
34
- puts "---> " + f
65
+ results = fetch(ARGV[0])
66
+ if(results.length < 1)
67
+ error "No snippets found for '#{ARGV[0]}'", 1
68
+ else
69
+ msg "Snippets found for '#{ARGV[0]}':", 1
70
+ results.each do |f|
71
+ notice f, 2
72
+ end
73
+
35
74
  end
36
75
  end
37
76
 
@@ -39,13 +78,14 @@ module GemIgnore
39
78
  # directory in case it exists and the given snippet identifier matched
40
79
  # exactly one snippet.
41
80
  def add
42
- snippets = fetch(regexpForInput(ARGV[1]))
81
+ snippets = fetch(ARGV[0])
43
82
  if snippets.length < 1
44
- puts "-> No snippets found"
83
+ error "No snippets found for '#{ARGV[0]}'", 1
45
84
  elsif snippets.length > 1
46
- puts "-> Multiple possible snippets found:"
85
+ error "Multiple possible snippets found for '#{ARGV[0]}'.", 1
86
+ error "Please be more specific.", 1
47
87
  snippets.each do |f|
48
- puts "---> " + f
88
+ notice f, 2
49
89
  end
50
90
  else
51
91
  performAdd(snippets.first)
@@ -55,24 +95,28 @@ module GemIgnore
55
95
  # Adds the given snippet in case the .gitignore file exists.
56
96
  def performAdd(snippet)
57
97
  if not File.exists?(".gitignore")
58
- puts "No .gitignore file found in working directory"
98
+ error "No .gitignore file found in working directory.", 1
59
99
  else
60
-
61
- puts "Adding Snippet '#{snippet}'"
100
+ notice "Adding Snippet '#{snippet}'.", 1
62
101
 
63
102
  f = File.new(".gitignore", "a")
64
103
  snippetData = fetchFile(snippet)
65
104
  f.write("\n\n# Added by gemignore. Snippet '#{snippet}'\n" + snippetData)
66
105
  f.close
106
+
107
+ msg "Successfully added snippet.", 1
67
108
  end
68
109
  end
69
110
 
70
- # Creates a case-insensitive Regexp for the given string. Wildcards are
111
+ # Creates a Regexp for the given string. Will be case-insensitive if the
112
+ # input does not contain any uppercase characters. Wildcards are
71
113
  # added before and after the input, so the regex will match anything containing
72
114
  # the input, or the input itself.
73
115
  def regexpForInput(input)
116
+ return (/(.*)/) if not input
74
117
  input = Regexp.escape(input)
75
- Regexp.new("(.*#{input}.*)", Regexp::IGNORECASE)
118
+ opt = input =~ /[A-Z]/ ? nil : Regexp::IGNORECASE;
119
+ Regexp.new("(.*#{input}.*)", opt)
76
120
  end
77
121
 
78
122
  # Fetches the list of available snippets via the GitHub API
@@ -80,11 +124,10 @@ module GemIgnore
80
124
  # FIXME: Do some (url) refactoring
81
125
  #++
82
126
  def fetch(search = nil)
83
- search = /(.*)/ if search === nil
84
-
127
+ search = regexpForInput(search)
85
128
  data = Net::HTTP.get( URI.parse('http://github.com/api/v2/json/blob/all/github/gitignore/master') )
86
129
  response = JSON.parse(data)
87
- files = response["blobs"].map { |k,v| k.split('.gitignore')[0] =~ search; $1 }
130
+ files = response["blobs"].map { |k,v| t = k.split('.'); (t[0] =~ search; $1) if t.last === 'gitignore' }
88
131
  files.compact
89
132
  end
90
133
 
@@ -99,11 +142,11 @@ module GemIgnore
99
142
  http.use_ssl = true if url.scheme == "https" # enable SSL/TLS
100
143
 
101
144
  data = ""
102
- http.start {
103
- http.request_get(url.path) {|res|
145
+ http.start do
146
+ http.request_get(url.path) do |res|
104
147
  data = res.body
105
- }
106
- }
148
+ end
149
+ end
107
150
 
108
151
  data
109
152
  end
@@ -0,0 +1,24 @@
1
+ module GemIgnore
2
+ module Util
3
+
4
+ def msg(msg, level=0)
5
+ puts (prefix(level) + msg).foreground(:green)
6
+ end
7
+
8
+ def notice(msg, level=0)
9
+ puts (prefix(level) + msg).foreground(:yellow)
10
+ end
11
+
12
+ def error(msg, level=0)
13
+ puts (prefix(level) + msg).foreground(:red)
14
+ end
15
+
16
+ def prefix(level)
17
+ return "" if level <= 0
18
+ ("-" * level) + "> "
19
+ end
20
+
21
+
22
+
23
+ end
24
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lucas Jenss
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-05-26 00:00:00 +02:00
17
+ date: 2011-05-28 00:00:00 +02:00
18
18
  default_executable: gemignore
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -33,8 +33,23 @@ dependencies:
33
33
  prerelease: false
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: rspec
36
+ name: rainbow
37
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 1
44
+ - 1
45
+ - 1
46
+ version: 1.1.1
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
52
+ requirement: &id003 !ruby/object:Gem::Requirement
38
53
  none: false
39
54
  requirements:
40
55
  - - ~>
@@ -46,10 +61,10 @@ dependencies:
46
61
  version: 2.3.0
47
62
  type: :development
48
63
  prerelease: false
49
- version_requirements: *id002
64
+ version_requirements: *id003
50
65
  - !ruby/object:Gem::Dependency
51
66
  name: bundler
52
- requirement: &id003 !ruby/object:Gem::Requirement
67
+ requirement: &id004 !ruby/object:Gem::Requirement
53
68
  none: false
54
69
  requirements:
55
70
  - - ~>
@@ -61,10 +76,10 @@ dependencies:
61
76
  version: 1.0.0
62
77
  type: :development
63
78
  prerelease: false
64
- version_requirements: *id003
79
+ version_requirements: *id004
65
80
  - !ruby/object:Gem::Dependency
66
81
  name: jeweler
67
- requirement: &id004 !ruby/object:Gem::Requirement
82
+ requirement: &id005 !ruby/object:Gem::Requirement
68
83
  none: false
69
84
  requirements:
70
85
  - - ~>
@@ -76,10 +91,10 @@ dependencies:
76
91
  version: 1.6.0
77
92
  type: :development
78
93
  prerelease: false
79
- version_requirements: *id004
94
+ version_requirements: *id005
80
95
  - !ruby/object:Gem::Dependency
81
96
  name: rcov
82
- requirement: &id005 !ruby/object:Gem::Requirement
97
+ requirement: &id006 !ruby/object:Gem::Requirement
83
98
  none: false
84
99
  requirements:
85
100
  - - ">="
@@ -89,7 +104,7 @@ dependencies:
89
104
  version: "0"
90
105
  type: :development
91
106
  prerelease: false
92
- version_requirements: *id005
107
+ version_requirements: *id006
93
108
  description: gemignore allows you to automatically insert a wide range of preset .gitignore snippets into your .gitignore files
94
109
  email: lucas@x3ro.de
95
110
  executables:
@@ -102,6 +117,7 @@ extra_rdoc_files:
102
117
  files:
103
118
  - .document
104
119
  - .rspec
120
+ - Changelog
105
121
  - Gemfile
106
122
  - LICENSE.txt
107
123
  - README.rdoc
@@ -109,8 +125,10 @@ files:
109
125
  - VERSION
110
126
  - bin/.gitignore
111
127
  - bin/gemignore
128
+ - gemignore.gemspec
112
129
  - lib/gemignore.rb
113
130
  - lib/gemignore/main.rb
131
+ - lib/gemignore/util.rb
114
132
  - spec/gemignore_spec.rb
115
133
  - spec/spec_helper.rb
116
134
  has_rdoc: true
@@ -127,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
145
  requirements:
128
146
  - - ">="
129
147
  - !ruby/object:Gem::Version
130
- hash: 3835635056973709115
148
+ hash: 1748015699591437022
131
149
  segments:
132
150
  - 0
133
151
  version: "0"