gemignore 0.2.1 → 0.3.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
data/gemignore.gemspec CHANGED
@@ -5,15 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gemignore}
8
- s.version = "0.2.1"
8
+ s.version = "0.3.0"
9
9
 
10
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-06-10}
13
- s.default_executable = %q{gemignore}
11
+ s.authors = [%q{Lucas Jenss}]
12
+ s.date = %q{2011-11-06}
14
13
  s.description = %q{gemignore allows you to automatically insert a wide range of preset .gitignore snippets into your .gitignore files}
15
14
  s.email = %q{lucas@x3ro.de}
16
- s.executables = ["gemignore"]
15
+ s.executables = [%q{gemignore}]
17
16
  s.extra_rdoc_files = [
18
17
  "LICENSE.txt",
19
18
  "README.rdoc"
@@ -34,16 +33,16 @@ Gem::Specification.new do |s|
34
33
  "lib/gemignore/main.rb",
35
34
  "lib/gemignore/util.rb",
36
35
  "spec/gemignore_spec.rb",
37
- "spec/spec_helper.rb"
36
+ "spec/spec_helper.rb",
37
+ "tests/gemignore_add_test.rb"
38
38
  ]
39
39
  s.homepage = %q{http://coding-journal.com/hassle-free-gitignore-management-with-gemignore/}
40
- s.licenses = ["MIT"]
41
- s.require_paths = ["lib"]
42
- s.rubygems_version = %q{1.3.7}
40
+ s.licenses = [%q{MIT}]
41
+ s.require_paths = [%q{lib}]
42
+ s.rubygems_version = %q{1.8.6}
43
43
  s.summary = %q{A command-line tool which ought to simplify your daily .gitignore hassle}
44
44
 
45
45
  if s.respond_to? :specification_version then
46
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
46
  s.specification_version = 3
48
47
 
49
48
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -52,6 +52,24 @@ Available commands are:
52
52
  BANNER
53
53
  end
54
54
 
55
+ # Check if there is an case insensitive match in the fetched snippet list, in which
56
+ # case a list containing only that snippet is returned. Otherwise, the entire list
57
+ # of snippets is retuned unmodified.
58
+ def searchExactMatch(snippets, keyword)
59
+ keyword = keyword.downcase
60
+ index = snippets.find_index { |x| x.downcase == keyword }
61
+ if index.nil?
62
+ snippets
63
+ else
64
+ [ snippets[index] ]
65
+ end
66
+ end
67
+
68
+ # Returns the comment that is added before a gitignore snippet
69
+ def gitignoreCommentForSnippet(snippet)
70
+ "\n\n# Added by gemignore. Snippet '#{snippet}'\n"
71
+ end
72
+
55
73
  # Displays a list of available .gitignore snippets
56
74
  def list
57
75
  msg "Available .gitignore snippets:", 1
@@ -78,11 +96,13 @@ BANNER
78
96
  # directory in case it exists and the given snippet identifier matched
79
97
  # exactly one snippet.
80
98
  def add
81
- snippets = fetch(ARGV[0])
99
+ keyword = ARGV[0]
100
+ snippets = fetch(keyword)
101
+ snippets = searchExactMatch(snippets, keyword)
82
102
  if snippets.length < 1
83
- error "No snippets found for '#{ARGV[0]}'", 1
103
+ error "No snippets found for '#{keyword}'", 1
84
104
  elsif snippets.length > 1
85
- error "Multiple possible snippets found for '#{ARGV[0]}'.", 1
105
+ error "Multiple possible snippets found for '#{keyword}'.", 1
86
106
  error "Please be more specific.", 1
87
107
  snippets.each do |f|
88
108
  notice f, 2
@@ -101,7 +121,7 @@ BANNER
101
121
 
102
122
  f = File.new(".gitignore", "a")
103
123
  snippetData = fetchFile(snippet)
104
- f.write("\n\n# Added by gemignore. Snippet '#{snippet}'\n" + snippetData)
124
+ f.write(gitignoreCommentForSnippet(snippet) + snippetData)
105
125
  f.close
106
126
 
107
127
  msg "Successfully added snippet.", 1
@@ -127,7 +147,12 @@ BANNER
127
147
  search = regexpForInput(search)
128
148
  data = Net::HTTP.get( URI.parse('http://github.com/api/v2/json/blob/all/github/gitignore/master') )
129
149
  response = JSON.parse(data)
130
- files = response["blobs"].map { |k,v| t = k.split('.'); (t[0] =~ search; $1) if t.last === 'gitignore' }
150
+
151
+ files = response["blobs"].map do |k,v|
152
+ t = k.split('.')
153
+ (t.pop; t.join('.') =~ search; $1) if t.last === 'gitignore'
154
+ end
155
+
131
156
  files.compact
132
157
  end
133
158
 
@@ -153,4 +178,5 @@ BANNER
153
178
  end
154
179
 
155
180
 
156
- end
181
+
182
+ end
@@ -0,0 +1,45 @@
1
+ require 'test/unit'
2
+ require 'pathname'
3
+ require 'pp'
4
+
5
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
6
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
7
+
8
+ require 'gemignore'
9
+
10
+ GEMIGNORE_PATH = "../bin/gemignore"
11
+
12
+ class GemIgnoreAddTest < Test::Unit::TestCase
13
+
14
+ def test_all_snippets
15
+ gemignore = GemIgnore::Main.new
16
+ snippets = gemignore.fetch('') # Get all snippets
17
+
18
+ gitignoreLines = 0 # File should be empty, we created it in #setup
19
+ gitignoreCommentLength = gemignore.gitignoreCommentForSnippet('foobar').split("\n").length
20
+
21
+ snippets.each do |snippet|
22
+ puts %x[#{GEMIGNORE_PATH} add #{snippet}]
23
+
24
+ gitignore = File.readlines('.gitignore')
25
+
26
+ # Make sure that adding the snippet did actually add something to the file
27
+ assert(gitignore.length >= (gitignoreLines + gitignoreCommentLength), "Adding Snippet #{snippet} didn't actually add anything")
28
+ gitignoreLines = gitignore.length
29
+
30
+ # Asserting that there is not HTML in the added snippet, which would mean there
31
+ # was a 404 error when fetching the snippet.
32
+ assert(gitignore.grep(/<html>/).empty?, "Adding Snippet #{snippet} failed (HTML in the .gitignore file)")
33
+ end
34
+ end
35
+
36
+ def setup
37
+ # Change CWD to tests/ so that we don't accidentally modify another .gitignore file
38
+ Dir.chdir(File.dirname(__FILE__))
39
+
40
+ # Clear potential old .gitignore file
41
+ File.delete('.gitignore') if File.exists?('.gitignore')
42
+ File.new('.gitignore', 'w')
43
+ end
44
+
45
+ end
metadata CHANGED
@@ -1,120 +1,92 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gemignore
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 1
9
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Lucas Jenss
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-06-10 00:00:00 +02:00
18
- default_executable: gemignore
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: json
22
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70346489392340 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 5
30
- - 1
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
31
21
  version: 1.5.1
32
22
  type: :runtime
33
23
  prerelease: false
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *70346489392340
25
+ - !ruby/object:Gem::Dependency
36
26
  name: rainbow
37
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &70346489390960 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
29
+ requirements:
40
30
  - - ~>
41
- - !ruby/object:Gem::Version
42
- segments:
43
- - 1
44
- - 1
45
- - 1
31
+ - !ruby/object:Gem::Version
46
32
  version: 1.1.1
47
33
  type: :runtime
48
34
  prerelease: false
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *70346489390960
36
+ - !ruby/object:Gem::Dependency
51
37
  name: rspec
52
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &70346489389620 !ruby/object:Gem::Requirement
53
39
  none: false
54
- requirements:
40
+ requirements:
55
41
  - - ~>
56
- - !ruby/object:Gem::Version
57
- segments:
58
- - 2
59
- - 3
60
- - 0
42
+ - !ruby/object:Gem::Version
61
43
  version: 2.3.0
62
44
  type: :development
63
45
  prerelease: false
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *70346489389620
47
+ - !ruby/object:Gem::Dependency
66
48
  name: bundler
67
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &70346489388420 !ruby/object:Gem::Requirement
68
50
  none: false
69
- requirements:
51
+ requirements:
70
52
  - - ~>
71
- - !ruby/object:Gem::Version
72
- segments:
73
- - 1
74
- - 0
75
- - 0
53
+ - !ruby/object:Gem::Version
76
54
  version: 1.0.0
77
55
  type: :development
78
56
  prerelease: false
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *70346489388420
58
+ - !ruby/object:Gem::Dependency
81
59
  name: jeweler
82
- requirement: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &70346489387220 !ruby/object:Gem::Requirement
83
61
  none: false
84
- requirements:
62
+ requirements:
85
63
  - - ~>
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 1
89
- - 6
90
- - 0
64
+ - !ruby/object:Gem::Version
91
65
  version: 1.6.0
92
66
  type: :development
93
67
  prerelease: false
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *70346489387220
69
+ - !ruby/object:Gem::Dependency
96
70
  name: rcov
97
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &70346489385860 !ruby/object:Gem::Requirement
98
72
  none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- segments:
103
- - 0
104
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
105
77
  type: :development
106
78
  prerelease: false
107
- version_requirements: *id006
108
- description: gemignore allows you to automatically insert a wide range of preset .gitignore snippets into your .gitignore files
79
+ version_requirements: *70346489385860
80
+ description: gemignore allows you to automatically insert a wide range of preset .gitignore
81
+ snippets into your .gitignore files
109
82
  email: lucas@x3ro.de
110
- executables:
83
+ executables:
111
84
  - gemignore
112
85
  extensions: []
113
-
114
- extra_rdoc_files:
86
+ extra_rdoc_files:
115
87
  - LICENSE.txt
116
88
  - README.rdoc
117
- files:
89
+ files:
118
90
  - .document
119
91
  - .rspec
120
92
  - Changelog
@@ -131,38 +103,33 @@ files:
131
103
  - lib/gemignore/util.rb
132
104
  - spec/gemignore_spec.rb
133
105
  - spec/spec_helper.rb
134
- has_rdoc: true
106
+ - tests/gemignore_add_test.rb
135
107
  homepage: http://coding-journal.com/hassle-free-gitignore-management-with-gemignore/
136
- licenses:
108
+ licenses:
137
109
  - MIT
138
110
  post_install_message:
139
111
  rdoc_options: []
140
-
141
- require_paths:
112
+ require_paths:
142
113
  - lib
143
- required_ruby_version: !ruby/object:Gem::Requirement
114
+ required_ruby_version: !ruby/object:Gem::Requirement
144
115
  none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: -4383186091217616758
149
- segments:
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ segments:
150
121
  - 0
151
- version: "0"
152
- required_rubygems_version: !ruby/object:Gem::Requirement
122
+ hash: 2488779062565889007
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
124
  none: false
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- segments:
158
- - 0
159
- version: "0"
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
160
129
  requirements: []
161
-
162
130
  rubyforge_project:
163
- rubygems_version: 1.3.7
131
+ rubygems_version: 1.8.6
164
132
  signing_key:
165
133
  specification_version: 3
166
134
  summary: A command-line tool which ought to simplify your daily .gitignore hassle
167
135
  test_files: []
168
-