tachikoma_ai 0.3.0 → 0.3.1

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,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