tachikoma_ai 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57446d98a983297938aacb973884a7c46c4ac7fc
4
- data.tar.gz: cc41502034a9dc63de29b10c1d32e563a4cba7c9
3
+ metadata.gz: 036d35e5edb505f39725fea36fb6ae032e9bcf27
4
+ data.tar.gz: a7e00c50e8f9122a9f7f3d97aaa87bc29a2f02c3
5
5
  SHA512:
6
- metadata.gz: e359165c3aad51aa63a70ccb92facc111c2cbe0304607b8d14d5676e1fb8b9c925e5cee6d738e76d61f29c995701234a7c6091e23bce6e4e6d8c385a91e52d84
7
- data.tar.gz: c9d70bdf10302e27795d0712f1c3e1be039a865fcf07b164284fffabfa8556142eff8247cefcb8e85c5cd3b2a1e66161cad89c41713b77fe502926ac471704af
6
+ metadata.gz: e69c17916d85dc6ecbb956e271b3b20aa0da0a75e02cc6ae15cb62cc704f7a278c24fd6f03d8a315ca0b99575a0a2eb77152c95031d5767d1532c1e23611effc
7
+ data.tar.gz: 2eadf556ad0f42d58d83baf2029bca06a1144edc89c3a2de934ec22663bb3e7fff09ad41befc804f31584cd143d51537eaf44d2733047ddaa4cfd25db2efeebf
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## master (unreleased)
2
2
 
3
+ ## v0.3.1
4
+
5
+ - :bug: Fix an error that occurs when GitHub API returns 301
6
+
7
+ ## v0.3.0
8
+
3
9
  - :bug: Fix crash when specify a github repository in Gemfile
4
10
  - :sparkles: Support gems that have the official page
5
11
  - [lib/tachikoma_ai/strategies/bundler/urls.json](https://github.com/sinsoku/tachikoma_ai/blob/master/lib/tachikoma_ai/strategies/bundler/urls.json)
@@ -29,9 +29,23 @@ module TachikomaAi
29
29
  def tags
30
30
  return @tags if @tags
31
31
 
32
- res = Net::HTTP.get_response URI.parse(api_tags_url)
32
+ res = fetch(api_tags_url)
33
33
  json = JSON.parse(res.body)
34
34
  @tags = json.map { |tag| tag['ref'].gsub('refs/tags/', '') }
35
35
  end
36
+
37
+ def fetch(uri_str, limit = 10)
38
+ raise ArgumentError, 'HTTP redirect too deep' if limit == 0
39
+
40
+ response = Net::HTTP.get_response URI.parse(uri_str)
41
+ case response
42
+ when Net::HTTPSuccess
43
+ response
44
+ when Net::HTTPRedirection
45
+ fetch(response['location'], limit - 1)
46
+ else
47
+ response.value
48
+ end
49
+ end
36
50
  end
37
51
  end
@@ -5,21 +5,15 @@ module TachikomaAi
5
5
  module Strategies
6
6
  class Bundler
7
7
  class Gem
8
- STRING_PATTERN = /[-|\+]\s+(\S+)\s\((.+?)\)/
9
8
  major, minor = RUBY_VERSION.split('.')
10
9
  SPECS_PATH = "vendor/bundle/ruby/#{major}.#{minor}.0/specifications/".freeze
11
10
  URLS = JSON.parse(File.read(File.expand_path('urls.json', __dir__)))
12
11
 
13
- attr_reader :name, :version
14
- attr_accessor :from
12
+ attr_reader :name, :from, :version
15
13
 
16
- def self.parse(s)
17
- m = s.match STRING_PATTERN
18
- new m[1], m[2]
19
- end
20
-
21
- def initialize(name, version)
14
+ def initialize(name, from, version)
22
15
  @name = name
16
+ @from = from
23
17
  @version = version
24
18
  end
25
19
 
@@ -1,4 +1,5 @@
1
1
  require 'tachikoma_ai/strategies/bundler/gem'
2
+ require 'bundler'
2
3
 
3
4
  module TachikomaAi
4
5
  module Strategies
@@ -20,26 +21,19 @@ module TachikomaAi
20
21
  def updated_gems
21
22
  return @updated_gems if @updated_gems
22
23
 
23
- names = plus_gems.map(&:name) & minus_gems.map(&:name)
24
- @updated_gems = plus_gems.select { |g| names.include? g.name }
25
- @updated_gems.each do |g|
26
- g.from = minus_gems.find { |mg| mg.name == g.name }.version
24
+ previous = lockfile('HEAD^')
25
+ @updated_gems = diff_specs(previous, lockfile('HEAD')).map do |spec|
26
+ before = previous.specs.find { |s| s.name == spec.name }
27
+ Gem.new(spec.name, before.version.to_s, spec.version.to_s)
27
28
  end
28
- @updated_gems
29
29
  end
30
30
 
31
- def diff
32
- @diff ||= `git show --format= HEAD`.split("\n")
31
+ def diff_specs(previous, current)
32
+ current.specs.reject { |s| previous.specs.include?(s) }
33
33
  end
34
34
 
35
- def minus_gems
36
- @minus_gems ||= diff.select { |s| s =~ /^- {4}\S/ }
37
- .map { |s| Gem.parse(s) }
38
- end
39
-
40
- def plus_gems
41
- @plus_gems ||= diff.select { |s| s =~ /^\+ {4}\S/ }
42
- .map { |s| Gem.parse(s) }
35
+ def lockfile(ref)
36
+ ::Bundler::LockfileParser.new(`git show #{ref}:Gemfile.lock`)
43
37
  end
44
38
 
45
39
  def compare_urls
@@ -1,3 +1,3 @@
1
1
  module TachikomaAi
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tachikoma_ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sinsoku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-17 00:00:00.000000000 Z
11
+ date: 2016-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tachikoma