gitable 0.3.1 → 0.4.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDAyYWRhZmQ4YmE3ZTY5YWNlOTI0YWI1NjhiYTg3NWUxNWIyZjc0Zg==
5
- data.tar.gz: !binary |-
6
- NTlkZWEyMGYyMTMzZmUyNWNjY2FhMzg5NDU2ZTM0OTlmMmViYmJiYg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- ZDRlMzdlOGJjYWU4ZGJiNjY5NTFjMzdhNTViYjZmZDlkNzBhODJjYzhhMDA3
10
- NTI3NWMxZTJmNGQxNGFhMzUzOTRkNTY0ZGMxN2VkZmU4ZjIzOTJmMjRjN2Yx
11
- NWY2ZDFjZDE5M2U3ZmFiNTJlNWFkYTQyZDY3NzVjNDk1ZGM3NWI=
12
- data.tar.gz: !binary |-
13
- OGJhNjcwNDk3Mjg2MjE4NWM0NzAyMGFiZWJlMzg3YzI0OWJjZTYxMDg3NTdk
14
- YzQ3MzU3MjZlZWQwMzYxNWZjM2UwM2E2Zjg3MTYwZjJiOWRiNmJlMDhiOTkx
15
- OWQ5Y2NiMWRmZDA2OTFhNDcyZWZkYmYyMTJhMGU2NjkzY2YyNzg=
2
+ SHA1:
3
+ metadata.gz: b8946d8df934b379e9bb04017f8d42c3aa9f0d0a
4
+ data.tar.gz: 9d3b013c3ccd4609d545f9c58b8dd87cc16856ac
5
+ SHA512:
6
+ metadata.gz: 3c696b9586345ffd296491fdf911c08639aa5672be3be4f2d860655920ff5f91fa906fb00b9b9d10aafd8e1529b99c369b3b54743a65f420246dc7f966a1399e
7
+ data.tar.gz: 4a78d11b69c5a66b550e68d380e4001f20e40e21bd765ce88ccc3343e496ee20c11be5fcfffa1cdb223fb61e65f3d31d330c638d03eddb68ff7a2ea72648f82f
data/.gitignore CHANGED
@@ -20,6 +20,7 @@ doc
20
20
  rdoc
21
21
  pkg
22
22
  vendor/gems
23
+ vendor/bundle
23
24
  .yardoc
24
25
  .bundle
25
26
  Gemfile.lock
@@ -1,6 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
- - jruby
6
- - rbx-19mode
4
+ - 2.1.0
5
+ - 2.2.0
6
+ - 2.3.0
7
+ - ruby-head
8
+ - jruby-head
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
12
+ - rvm: jruby-head
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Martin Emde
1
+ Copyright (c) 2009-2014 Martin Emde
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
@@ -0,0 +1,108 @@
1
+ # Gitable
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/gitable.png)][gem]
4
+ [![Build Status](https://travis-ci.org/martinemde/gitable.png?branch=master)][travis]
5
+ [![Dependency Status](https://gemnasium.com/martinemde/gitable.png?travis)][gemnasium]
6
+ [![Code Climate](https://codeclimate.com/github/martinemde/gitable.png)][codeclimate]
7
+
8
+ [gem]: https://rubygems.org/gems/gitable
9
+ [travis]: https://travis-ci.org/martinemde/gitable
10
+ [gemnasium]: https://gemnasium.com/martinemde/gitable
11
+ [codeclimate]: https://codeclimate.com/github/martinemde/gitable
12
+
13
+ ## A git remote URI parser backed by Addressable
14
+
15
+ Works with any valid Git URI as described in the git docs.
16
+
17
+ `git clone` accepts many different URI formats for remote repositories.
18
+ Unfortunately, not all of them are actually URIs. Addressable is able to parse
19
+ many of the standard URIs accepted by git, and this library extends Addressable
20
+ to handle the non-standard scp-style repository locations.
21
+
22
+ Gitable provides a uniform way to parse a git repository location and determine
23
+ information about the project. Gitable can determine whether or not a repository
24
+ will require authentication before actually using `git` to clone the repository.
25
+ Gitable is also very useful for determining equivalence between git remotes that
26
+ are entered slightly differently (e.g. trailing slashes, uri scheme, uri format)
27
+
28
+ This is *not* a general substitute for Addressable, but rather a specific solution
29
+ for accepting git repository addresses and confirming validity and authentication.
30
+ Gitable *should not* be used as a general URI parser for anything other than git
31
+ repository locations.
32
+
33
+ Many thanks to [Bob Aman (sporkmonger)](https://github.com/sporkmonger) for his
34
+ work on Addressable and for his feedback on this gem.
35
+
36
+ ## Example
37
+
38
+ require 'gitable/uri'
39
+ uri = Gitable::URI.parse('git@github.com:martinemde/gitable.git')
40
+
41
+ uri.path # => 'martinemde/gitable.git'
42
+ uri.user # => 'git'
43
+ uri.host # => 'github.com'
44
+
45
+ Maintain the same url format.
46
+
47
+ uri.to_s # => 'git@github.com:martinemde/gitable.git'
48
+
49
+ Uses ssh?
50
+
51
+ uri.ssh? # => true
52
+
53
+ SCP format?
54
+
55
+ uri.scp? # => true
56
+
57
+ If it can't guess the name, you named your repository wrong.
58
+
59
+ uri.project_name # => 'gitable'
60
+
61
+ Will this uri require authentication?
62
+
63
+ uri.authenticated? # => true
64
+
65
+ Will I have to interactively type something into git (a password)?
66
+
67
+ uri.interactive_authenticated? # => false
68
+
69
+ Matching public to private git uris?
70
+
71
+ uri.equivalent?('git://github.com/martinemde/gitable.git') # => true
72
+ uri.equivalent?('https://martinemde@github.com/martinemde/gitable.git') # => true
73
+
74
+ Link to the web page for a project (github)
75
+
76
+ if uri.github?
77
+ uri.to_web_uri # => <Addressable::URI https://github.com/martinemde/gitable>
78
+ end
79
+
80
+ Inherited from Addressable::URI
81
+
82
+ uri.kind_of?(Addressable::URI) # => true
83
+
84
+ Teenage Mutant Ninja Urls (mutable uris like Addressable, if you want)
85
+
86
+ uri.path = 'someotheruser/gitable.git'
87
+ uri.basename = 'umm.git'
88
+ uri.to_s # => 'git@github.com:someotheruser/umm.git'
89
+
90
+ ## `Gitable::URI.heuristic_parse`
91
+
92
+ `Gitable::URI.heuristic_parse` can be used to accept user input.
93
+
94
+ Currently this supports the mistake of copying the url bar instead of the git
95
+ uri for a few of the popular git webhosts. It also runs through Addressable's
96
+ `heuristic_parse` so it will correct some poorly typed URIs.
97
+
98
+ uri = Gitable::URI.heuristic_parse('http://github.com:martinemde/gitable')
99
+ uri.to_s # => 'git://github.com/martinemde/gitable.git'
100
+
101
+ `heuristic_parse` is currently very limited. If the url doesn't end in .git, it
102
+ switches http:// to git:// and adds .git to the basename.
103
+ This works fine for github.com and gitorious.org but will happily screw up other
104
+ URIs.
105
+
106
+ ## Copyright
107
+
108
+ Copyright (c) 2014 Martin Emde. See LICENSE for details.
@@ -1,16 +1,16 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "gitable"
4
- s.version = "0.3.1"
4
+ s.version = "0.4.0"
5
5
  s.authors = ["Martin Emde"]
6
6
  s.email = ["martin.emde@gmail.com"]
7
7
  s.homepage = "http://github.org/martinemde/gitable"
8
- s.summary = %q{Addressable::URI for Git. Gitable::URI.}
9
- s.description = %q{Addressable::URI for Git URIs with special handling for scp-style URIs that Addressable doesn't like.}
8
+ s.summary = %q{Addressable::URI with additional support for Git "URIs"}
9
+ s.description = %q{Addressable::URI for Git "URIs" with special handling for scp-style remotes that Addressable intentionally doesn't parse.}
10
10
  s.license = 'MIT'
11
11
 
12
- s.add_dependency "addressable", ">= 2.2.7"
13
- s.add_development_dependency "rspec", "~>2.11"
12
+ s.add_dependency "addressable", "~> 2.2", ">= 2.2.7"
13
+ s.add_development_dependency "rspec", "~> 3.0"
14
14
  s.add_development_dependency "rake"
15
15
  s.add_development_dependency "simplecov"
16
16
 
@@ -18,5 +18,5 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
- s.extra_rdoc_files = ["LICENSE", "README.rdoc"]
21
+ s.extra_rdoc_files = ["LICENSE", "README.md"]
22
22
  end
@@ -83,22 +83,26 @@ module Gitable
83
83
  return if @validation_deferred
84
84
 
85
85
  if host.to_s.empty?
86
- raise InvalidURIError, "Hostname segment missing: '#{to_s}'"
86
+ invalid! "Hostname segment missing"
87
87
  end
88
88
 
89
- unless scheme.to_s.empty?
90
- raise InvalidURIError, "Scp style URI must not have a scheme: '#{to_s}'"
89
+ if !scheme.to_s.empty?
90
+ invalid! "Scp style URI must not have a scheme"
91
91
  end
92
92
 
93
93
  if !port.to_s.empty?
94
- raise InvalidURIError, "Scp style URI cannot have a port: '#{to_s}'"
94
+ invalid! "Scp style URI cannot have a port"
95
95
  end
96
96
 
97
97
  if path.to_s.empty?
98
- raise InvalidURIError, "Absolute URI missing hierarchical segment: '#{to_s}'"
98
+ invalid! "Absolute URI missing hierarchical segment"
99
99
  end
100
100
 
101
101
  nil
102
102
  end
103
+
104
+ def invalid!(reason)
105
+ raise InvalidURIError, "#{reason}: '#{to_s}'"
106
+ end
103
107
  end
104
108
  end
@@ -44,14 +44,15 @@ module Gitable
44
44
  query = fragments[6]
45
45
  fragment = fragments[8]
46
46
  host = nil
47
+
47
48
  if authority
48
49
  host = authority.gsub(/^([^\[\]]*)@/, '').gsub(/:([^:@\[\]]*?)$/, '')
49
50
  else
50
51
  authority = scheme
51
52
  end
52
53
 
53
- if host.nil? && (parts = uri.scan(SCP_REGEXP)) && parts.any?
54
- Gitable::ScpURI.new(:authority => parts.first[0], :path => parts.first[1])
54
+ if host.nil? && uri =~ SCP_REGEXP
55
+ Gitable::ScpURI.new(:authority => $1, :path => $2)
55
56
  else
56
57
  new(
57
58
  :scheme => scheme,
@@ -96,7 +97,7 @@ module Gitable
96
97
  # Addressable::URI.heuristic_parse _does_ return the correct type :)
97
98
  gitable = super # boo inconsistency
98
99
 
99
- if gitable.github?
100
+ if gitable.github? || gitable.bitbucket?
100
101
  gitable.extname = "git"
101
102
  end
102
103
  gitable
@@ -109,10 +110,18 @@ module Gitable
109
110
  !!normalized_host.to_s.match(/\.?github.com$/)
110
111
  end
111
112
 
113
+ # Is this uri a bitbucket uri?
114
+ #
115
+ # @return [Boolean] bitbucket.org is the host?
116
+ def bitbucket?
117
+ !!normalized_host.to_s.match(/\.?bitbucket.org$/)
118
+ end
119
+
112
120
  # Create a web link uri for repositories that follow the github pattern.
113
121
  #
114
122
  # This probably won't work for all git hosts, so it's a good idea to use
115
- # this in conjunction with #github? to help ensure correct links.
123
+ # this in conjunction with #github? or #bitbucket? to help ensure correct
124
+ # links.
116
125
  #
117
126
  # @param [String] Scheme of the web uri (smart defaults)
118
127
  # @return [Addressable::URI] https://#{host}/#{path_without_git_extension}
@@ -125,7 +134,11 @@ module Gitable
125
134
  #
126
135
  # @return [String] Project name without .git
127
136
  def project_name
128
- basename.sub(/\.git$/,'')
137
+ basename.sub(/\.git\/?$/,'')
138
+ end
139
+
140
+ def org_project
141
+ normalized_path.sub(/^\//,'').sub(/\.git\/?$/,'')
129
142
  end
130
143
 
131
144
  # Detect local filesystem URIs.
@@ -186,19 +199,15 @@ module Gitable
186
199
  def equivalent?(other_uri)
187
200
  other = Gitable::URI.parse_when_valid(other_uri)
188
201
  return false unless other
202
+ return false unless normalized_host.to_s == other.normalized_host.to_s
189
203
 
190
- same_host = normalized_host.to_s == other.normalized_host.to_s
191
-
192
- if github? && other.github?
193
- # github doesn't care about relative vs absolute paths in scp uris (so we can remove leading / for comparison)
194
- same_path = normalized_path.sub(%r#\.git/?$#, '').sub(%r#^/#,'') == other.normalized_path.sub(%r#\.git/?$#, '').sub(%r#^/#,'')
195
- same_host && same_path
204
+ if github? || bitbucket?
205
+ # github doesn't care about relative vs absolute paths in scp uris
206
+ org_project == other.org_project
196
207
  else
197
- same_path = normalized_path.sub(%r#/$#,'').to_s == other.normalized_path.sub(%r#/$#,'').to_s # remove trailing slashes.
198
- same_user = normalized_user == other.normalized_user
199
-
200
208
  # if the path is absolute, we can assume it's the same for all users (so the user doesn't have to match).
201
- same_host && same_path && (path =~ %r#^/# || same_user)
209
+ normalized_path.sub(/\/$/,'') == other.normalized_path.sub(/\/$/,'') &&
210
+ (path[0] == '/' || normalized_user == other.normalized_user)
202
211
  end
203
212
  end
204
213
 
@@ -574,6 +574,7 @@ describe Gitable::URI do
574
574
  :authenticated? => true,
575
575
  :interactive_authenticated? => false,
576
576
  :github? => true,
577
+ :bitbucket? => false,
577
578
  :to_web_uri => Addressable::URI.parse("https://github.com/martinemde/gitable"),
578
579
  })
579
580
  end
@@ -601,6 +602,7 @@ describe Gitable::URI do
601
602
  :ssh? => false,
602
603
  :scp? => false,
603
604
  :github? => true,
605
+ :bitbucket? => false,
604
606
  :to_web_uri => Addressable::URI.parse("https://github.com/martinemde/gitable"),
605
607
  })
606
608
  end
@@ -629,6 +631,7 @@ describe Gitable::URI do
629
631
  :ssh? => false,
630
632
  :scp? => false,
631
633
  :github? => true,
634
+ :bitbucket? => false,
632
635
  :authenticated? => true,
633
636
  :interactive_authenticated? => true,
634
637
  :to_web_uri => Addressable::URI.parse("https://github.com/martinemde/gitable"),
@@ -658,6 +661,7 @@ describe Gitable::URI do
658
661
  :ssh? => false,
659
662
  :scp? => false,
660
663
  :github? => true,
664
+ :bitbucket? => false,
661
665
  :authenticated? => false,
662
666
  :interactive_authenticated? => false,
663
667
  :to_web_uri => Addressable::URI.parse("https://github.com/martinemde/gitable"),
@@ -690,8 +694,159 @@ describe Gitable::URI do
690
694
  :authenticated? => true,
691
695
  :interactive_authenticated? => false,
692
696
  :github? => true,
697
+ :bitbucket? => false,
693
698
  :to_web_uri => Addressable::URI.parse("https://github.com/martinemde/gitable"),
694
699
  })
695
700
  end
701
+
702
+ describe_uri "ssh://git@bitbucket.org/martinemde/gitable.git" do
703
+ it { expect(subject.to_s).to eq(@uri) }
704
+ it { expect("#{subject}").to eq(@uri) }
705
+ it { expect(subject.inspect).to match(%r|^#<Gitable::URI #{@uri}>$|) }
706
+ it { expect(subject).to be_equivalent(@uri) }
707
+ it { expect(subject).to be_equivalent('git://bitbucket.org/martinemde/gitable.git') }
708
+ it { expect(subject).to be_equivalent('git@bitbucket.org:martinemde/gitable.git') }
709
+ it { expect(subject).to be_equivalent('git@bitbucket.org:/martinemde/gitable.git') }
710
+ it { expect(subject).to be_equivalent('https://martinemde@bitbucket.org/martinemde/gitable.git') }
711
+ it { expect(subject).to_not be_equivalent('git@othergit.com:martinemde/gitable.git') }
712
+ it { expect(subject).to_not be_equivalent('git@bitbucket.org:martinemde/not_gitable.git') }
713
+ it_sets({
714
+ :scheme => "ssh",
715
+ :user => "git",
716
+ :password => nil,
717
+ :host => "bitbucket.org",
718
+ :port => nil,
719
+ :path => "/martinemde/gitable.git",
720
+ :fragment => nil,
721
+ :basename => "gitable.git",
722
+ :ssh? => true,
723
+ :scp? => false,
724
+ :authenticated? => true,
725
+ :interactive_authenticated? => false,
726
+ :github? => false,
727
+ :bitbucket? => true,
728
+ :to_web_uri => Addressable::URI.parse("https://bitbucket.org/martinemde/gitable"),
729
+ })
730
+ end
731
+
732
+ describe_uri "https://bitbucket.org/martinemde/gitable.git" do
733
+ it { expect(subject.to_s).to eq(@uri) }
734
+ it { expect("#{subject}").to eq(@uri) }
735
+ it { expect(subject.inspect).to match(%r|^#<Gitable::URI #{@uri}>$|) }
736
+ it { expect(subject).to be_equivalent(@uri) }
737
+ it { expect(subject).to be_equivalent('ssh://git@bitbucket.org/martinemde/gitable.git') }
738
+ it { expect(subject).to be_equivalent('git://bitbucket.org/martinemde/gitable.git') }
739
+ it { expect(subject).to be_equivalent('git@bitbucket.org:martinemde/gitable.git') }
740
+ it { expect(subject).to be_equivalent('git@bitbucket.org:/martinemde/gitable.git') }
741
+ it { expect(subject).to_not be_equivalent('git@othergit.com:martinemde/gitable.git') }
742
+ it { expect(subject).to_not be_equivalent('git@bitbucket.org:martinemde/not_gitable.git') }
743
+ it_sets({
744
+ :scheme => "https",
745
+ :user => nil,
746
+ :password => nil,
747
+ :host => "bitbucket.org",
748
+ :port => nil,
749
+ :path => "/martinemde/gitable.git",
750
+ :fragment => nil,
751
+ :basename => "gitable.git",
752
+ :ssh? => false,
753
+ :scp? => false,
754
+ :github? => false,
755
+ :bitbucket? => true,
756
+ :to_web_uri => Addressable::URI.parse("https://bitbucket.org/martinemde/gitable"),
757
+ })
758
+ end
759
+
760
+ describe_uri "https://martinemde@bitbucket.org/martinemde/gitable.git" do
761
+ it { expect(subject.to_s).to eq(@uri) }
762
+ it { expect("#{subject}").to eq(@uri) }
763
+ it { expect(subject.inspect).to match(%r|^#<Gitable::URI #{@uri}>$|) }
764
+ it { expect(subject).to be_equivalent(@uri) }
765
+ it { expect(subject).to be_equivalent('ssh://git@bitbucket.org/martinemde/gitable.git') }
766
+ it { expect(subject).to be_equivalent('git://bitbucket.org/martinemde/gitable.git') }
767
+ it { expect(subject).to be_equivalent('git@bitbucket.org:martinemde/gitable.git') }
768
+ it { expect(subject).to be_equivalent('git@bitbucket.org:/martinemde/gitable.git') }
769
+ it { expect(subject).to be_equivalent('https://bitbucket.org/martinemde/gitable.git') }
770
+ it { expect(subject).to_not be_equivalent('git@othergit.com:martinemde/gitable.git') }
771
+ it { expect(subject).to_not be_equivalent('git@bitbucket.org:martinemde/not_gitable.git') }
772
+ it_sets({
773
+ :scheme => "https",
774
+ :user => "martinemde",
775
+ :password => nil,
776
+ :host => "bitbucket.org",
777
+ :port => nil,
778
+ :path => "/martinemde/gitable.git",
779
+ :fragment => nil,
780
+ :basename => "gitable.git",
781
+ :ssh? => false,
782
+ :scp? => false,
783
+ :github? => false,
784
+ :bitbucket? => true,
785
+ :authenticated? => true,
786
+ :interactive_authenticated? => true,
787
+ :to_web_uri => Addressable::URI.parse("https://bitbucket.org/martinemde/gitable"),
788
+ })
789
+ end
790
+
791
+ describe_uri "git://bitbucket.org/martinemde/gitable.git" do
792
+ it { expect(subject.to_s).to eq(@uri) }
793
+ it { expect("#{subject}").to eq(@uri) }
794
+ it { expect(subject.inspect).to match(%r|^#<Gitable::URI #{@uri}>$|) }
795
+ it { expect(subject).to be_equivalent(@uri) }
796
+ it { expect(subject).to be_equivalent('ssh://git@bitbucket.org/martinemde/gitable.git') }
797
+ it { expect(subject).to be_equivalent('git@bitbucket.org:martinemde/gitable.git') }
798
+ it { expect(subject).to be_equivalent('git@bitbucket.org:/martinemde/gitable.git') }
799
+ it { expect(subject).to be_equivalent('https://martinemde@bitbucket.org/martinemde/gitable.git') }
800
+ it { expect(subject).to_not be_equivalent('git@othergit.com:martinemde/gitable.git') }
801
+ it { expect(subject).to_not be_equivalent('git@bitbucket.org:martinemde/not_gitable.git') }
802
+ it_sets({
803
+ :scheme => "git",
804
+ :user => nil,
805
+ :password => nil,
806
+ :host => "bitbucket.org",
807
+ :port => nil,
808
+ :path => "/martinemde/gitable.git",
809
+ :fragment => nil,
810
+ :basename => "gitable.git",
811
+ :ssh? => false,
812
+ :scp? => false,
813
+ :github? => false,
814
+ :bitbucket? => true,
815
+ :authenticated? => false,
816
+ :interactive_authenticated? => false,
817
+ :to_web_uri => Addressable::URI.parse("https://bitbucket.org/martinemde/gitable"),
818
+ })
819
+ end
820
+
821
+ describe_uri "git@bitbucket.org:martinemde/gitable.git" do
822
+ it { expect(subject.to_s).to eq(@uri) }
823
+ it { expect("#{subject}").to eq(@uri) }
824
+ it { expect(subject.inspect).to match(%r|^#<Gitable::ScpURI #{@uri}>$|) }
825
+ it { expect(subject).to be_equivalent(@uri) }
826
+ it { expect(subject).to be_equivalent('ssh://git@bitbucket.org/martinemde/gitable.git') }
827
+ it { expect(subject).to be_equivalent('git://bitbucket.org/martinemde/gitable.git') }
828
+ it { expect(subject).to be_equivalent('https://martinemde@bitbucket.org/martinemde/gitable.git') }
829
+ it { expect(subject).to_not be_equivalent('git@othergit.com:martinemde/gitable.git') }
830
+ it { expect(subject).to_not be_equivalent('git@bitbucket.org:martinemde/not_gitable.git') }
831
+ it_sets({
832
+ :scheme => nil,
833
+ :inferred_scheme => 'ssh',
834
+ :user => "git",
835
+ :password => nil,
836
+ :host => "bitbucket.org",
837
+ :port => nil,
838
+ :path => "martinemde/gitable.git",
839
+ :fragment => nil,
840
+ :basename => "gitable.git",
841
+ :project_name => "gitable",
842
+ :ssh? => true,
843
+ :scp? => true,
844
+ :authenticated? => true,
845
+ :interactive_authenticated? => false,
846
+ :github? => false,
847
+ :bitbucket? => true,
848
+ :to_web_uri => Addressable::URI.parse("https://bitbucket.org/martinemde/gitable"),
849
+ })
850
+ end
696
851
  end
697
852
  end
metadata CHANGED
@@ -1,87 +1,93 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Emde
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-20 00:00:00.000000000 Z
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 2.2.7
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ! '>='
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.2'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 2.2.7
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rspec
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ~>
37
+ - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '2.11'
39
+ version: '3.0'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ~>
44
+ - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '2.11'
46
+ version: '3.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ! '>='
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ! '>='
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: simplecov
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ! '>='
65
+ - - ">="
60
66
  - !ruby/object:Gem::Version
61
67
  version: '0'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ! '>='
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
74
  version: '0'
69
- description: Addressable::URI for Git URIs with special handling for scp-style URIs
70
- that Addressable doesn't like.
75
+ description: Addressable::URI for Git "URIs" with special handling for scp-style remotes
76
+ that Addressable intentionally doesn't parse.
71
77
  email:
72
78
  - martin.emde@gmail.com
73
79
  executables: []
74
80
  extensions: []
75
81
  extra_rdoc_files:
76
82
  - LICENSE
77
- - README.rdoc
83
+ - README.md
78
84
  files:
79
- - .document
80
- - .gitignore
81
- - .travis.yml
85
+ - ".document"
86
+ - ".gitignore"
87
+ - ".travis.yml"
82
88
  - Gemfile
83
89
  - LICENSE
84
- - README.rdoc
90
+ - README.md
85
91
  - Rakefile
86
92
  - gitable.gemspec
87
93
  - lib/gitable.rb
@@ -101,20 +107,20 @@ require_paths:
101
107
  - lib
102
108
  required_ruby_version: !ruby/object:Gem::Requirement
103
109
  requirements:
104
- - - ! '>='
110
+ - - ">="
105
111
  - !ruby/object:Gem::Version
106
112
  version: '0'
107
113
  required_rubygems_version: !ruby/object:Gem::Requirement
108
114
  requirements:
109
- - - ! '>='
115
+ - - ">="
110
116
  - !ruby/object:Gem::Version
111
117
  version: '0'
112
118
  requirements: []
113
119
  rubyforge_project:
114
- rubygems_version: 2.0.6
120
+ rubygems_version: 2.5.2
115
121
  signing_key:
116
122
  specification_version: 4
117
- summary: Addressable::URI for Git. Gitable::URI.
123
+ summary: Addressable::URI with additional support for Git "URIs"
118
124
  test_files:
119
125
  - spec/describe_uri.rb
120
126
  - spec/gitable_spec.rb
@@ -1,82 +0,0 @@
1
- = Gitable
2
-
3
- == Addressable::URI for Git.
4
-
5
- Works with any valid Git URI, because Addressable doesn't.
6
-
7
- == Example!?
8
-
9
- require 'gitable/uri'
10
- uri = Gitable::URI.parse('git@github.com:martinemde/gitable.git')
11
-
12
- uri.path # => 'martinemde/gitable.git'
13
- uri.user # => 'git'
14
- uri.host # => 'github.com'
15
-
16
- Maintain the same url format.
17
-
18
- uri.to_s # => 'git@github.com:martinemde/gitable.git'
19
-
20
- Uses ssh?
21
-
22
- uri.ssh? # => true
23
-
24
- SCP format?
25
-
26
- uri.scp? # => true
27
-
28
- If it can't guess the name, you named your repository wrong.
29
-
30
- uri.project_name # => 'gitable'
31
-
32
- Will this uri require authentication?
33
-
34
- uri.authenticated? # => true
35
-
36
- Will I have to interactively type something into git (a password)?
37
-
38
- uri.interactive_authenticated? # => false
39
-
40
- Matching public to private git uris?
41
-
42
- uri.equivalent?('git://github.com/martinemde/gitable.git') # => true
43
- uri.equivalent?('https://martinemde@github.com/martinemde/gitable.git') # => true
44
-
45
- Link to the web page for a project (github)
46
-
47
- if uri.github?
48
- uri.to_web_uri # => <Addressable::URI https://github.com/martinemde/gitable>
49
- end
50
-
51
- Inherited from Addressable::URI
52
-
53
- uri.kind_of?(Addressable::URI) # => true
54
-
55
- Teenage Mutant Ninja Urls (mutable uris like Addressable, if you want)
56
-
57
- uri.path = 'someotheruser/gitable.git'
58
- uri.basename = 'umm.git'
59
- uri.to_s # => 'git@github.com:someotheruser/umm.git'
60
-
61
- == heuristic_parse
62
-
63
- You can use Gitable::URI.heuristic_parse to take user input.
64
-
65
- Currently this supports the mistake of copying the url bar instead of the git
66
- uri for a few of the popular git webhosts. It also runs through Addressable's
67
- heuristic_parse so it will correct some poorly typed URIs.
68
-
69
- uri = Gitable::URI.heuristic_parse('http://github.com:martinemde/gitable')
70
- uri.to_s # => 'git://github.com/martinemde/gitable.git'
71
-
72
- heuristic_parse is currently very limited. If the url doesn't end in .git, it
73
- switches http:// to git:// and adds .git to the basename.
74
- This works fine for github.com and gitorious.org but will happily screw up other URIs.
75
-
76
- == That's it?
77
-
78
- Yep. What else did you expect? (let me know or write a patch)
79
-
80
- == Copyright
81
-
82
- Copyright (c) 2010 Martin Emde. See LICENSE for details.