anticuado 0.2.14 → 0.4.2

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
- SHA1:
3
- metadata.gz: a8c8697b62518725b1d8381f550bfec2a3318506
4
- data.tar.gz: 642a4b8d2250620d86e358a8c2a00288dec532c6
2
+ SHA256:
3
+ metadata.gz: b031d2164292d5feff8bd65a2d1e2a011e357d71ee7d83f9a2f28016548df84a
4
+ data.tar.gz: bd94fee7076a9f3d92a116967282d60bad513da4ab07cca219401b4b1879dca4
5
5
  SHA512:
6
- metadata.gz: 3f2e1192452cdcd813c26d0f4b5364988feebb663f5122e2f9bcadd571881fdaa2e57d7b615d843af4570908fceaa2052b50a16e478e57908b8d66e5306096f1
7
- data.tar.gz: b6584b5526cad230dd91baff4ca82f2bdd3ccb788c51ae5cdd4561aa192b7660fbcaa9de54514849f2f764394b9689bfefdbe9e31eecf3f631f1f786283a7ffb
6
+ metadata.gz: 2e3a2c447c08cfd1812f75cbbbae08e3e462cf5547163b1ca1983b19097c4056cee02752ad7a3bc7b7c373d2e471b1fe9ed858f7f30cef89df8136b9991f20e2
7
+ data.tar.gz: 75ee0bf8aef0c1d9e10605d194e9c71774094092494f4d69a6e68a88a296f29e2716d0fc43a3b0cdb231543b32f0e120e4413a3dcc97d8c834ef8dd30d14dc03
@@ -0,0 +1,28 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [2.2, 2.3, 2.4, 2.5, 2.6, 2.7]
15
+ os: [ubuntu-latest, macos-latest]
16
+
17
+ runs-on: ${{ matrix.os }}
18
+
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ - name: Set up Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ - name: Install dependencies
26
+ run: bundle install
27
+ - name: Run tests
28
+ run: bundle exec rake test
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Anticuado
2
2
 
3
- [![Build Status](https://travis-ci.org/KazuCocoa/anticuado.svg?branch=master)](https://travis-ci.org/KazuCocoa/anticuado)
4
-
5
3
  This library collect __outdated__ libraries for each platforms. [Here](https://github.com/KazuCocoa/anticuado-example) is example how to use this library.
6
4
  And [this travis project](https://travis-ci.org/KazuCocoa/anticuado-example) is just sample how to run this and the output.
7
5
 
@@ -64,8 +62,9 @@ This library's results are like the following format:
64
62
  ```ruby
65
63
  require "anticuado"
66
64
 
67
- outdated = ::Anticuado::IOS::CocoaPods.outdated "path/to/project"
68
- ::Anticuado::IOS::CocoaPods.format outdated
65
+ cocoadpos = ::Anticuado::IOS::CocoaPods.new "path/to/project"
66
+ outdated = cocoadpos.outdated
67
+ cocoadpos.format outdated
69
68
  ```
70
69
 
71
70
  #### Carthage
@@ -75,8 +74,9 @@ outdated = ::Anticuado::IOS::CocoaPods.outdated "path/to/project"
75
74
  ```ruby
76
75
  require "anticuado"
77
76
 
78
- outdated = ::Anticuado::IOS::Carthage.outdated "path/to/project"
79
- ::Anticuado::IOS::Carthage.format outdated
77
+ carthage = ::Anticuado::IOS::Carthage.new "path/to/project"
78
+ outdated = carthage.outdated
79
+ carthage.format outdated
80
80
  ```
81
81
 
82
82
  ### Android
@@ -91,9 +91,10 @@ https://github.com/ben-manes/gradle-versions-plugin
91
91
  ```ruby
92
92
  require "anticuado"
93
93
 
94
- ::Anticuado::Java::Gradle.outdated "path/to/project"
95
- outdated = ::Anticuado::Java::Gradle.parse_json "build/dependencyUpdates"
96
- ::Anticuado::Java::Gradle.format outdated
94
+ gradle = ::Anticuado::Java::Gradle.new "path/to/project"
95
+ gradle.outdated # Writes the result to "build/dependencyUpdates" by defaylt
96
+ outdated = gradle.parse_json "build/dependencyUpdates"
97
+ gradle.format outdated
97
98
  ```
98
99
 
99
100
  ### Elixir
@@ -104,8 +105,9 @@ outdated = ::Anticuado::Java::Gradle.parse_json "build/dependencyUpdates"
104
105
  ```ruby
105
106
  require "anticuado"
106
107
 
107
- outdated = ::Anticuado::Elixir::Hex.outdated "path/to/project"
108
- ::Anticuado::Elixir::Hex.format outdated
108
+ hex = ::Anticuado::Elixir::Hex.new "path/to/project"
109
+ outdated = hex.outdated
110
+ hex.format outdated
109
111
  ```
110
112
 
111
113
  ### Ruby
@@ -116,16 +118,19 @@ outdated = ::Anticuado::Elixir::Hex.outdated "path/to/project"
116
118
  ```ruby
117
119
  require "anticuado"
118
120
 
119
- outdated = ::Anticuado::Ruby::Bundler.outdated "path/to/project"
120
- ::Anticuado::Ruby::Bundler.format outdated
121
+ bundler = ::Anticuado::Ruby::Bundler.new "path/to/project"
122
+ outdated = bundler.outdated
123
+ bundler.format outdated
121
124
  ```
122
125
 
123
126
  ## In advance
127
+ - Create a PR automatically to update libraries
128
+ - See test/anticuado/git_test.rb
124
129
 
125
130
 
126
131
  ## Contributing
127
132
 
128
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/anticuado. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
133
+ Bug reports and pull requests are welcome on GitHub at https://github.com/Kazu_cocoa/anticuado. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
129
134
 
130
135
 
131
136
  ## License
@@ -20,7 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.12"
24
- spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_runtime_dependency "git", ">= 1.3", "< 1.7"
24
+ spec.add_runtime_dependency "octokit", ">= 4.8", "< 4.17"
25
+
26
+ spec.add_development_dependency "bundler", ">= 1.12"
27
+ spec.add_development_dependency "rake", "~> 12.3"
25
28
  spec.add_development_dependency "minitest", "~> 5.0"
29
+ spec.add_development_dependency "pry"
26
30
  end
@@ -1,5 +1,6 @@
1
1
  require "anticuado/version"
2
2
  require "anticuado/base"
3
+ require "anticuado/github"
3
4
 
4
5
  require "anticuado/ios/carthage"
5
6
  require "anticuado/ios/cocoapods"
@@ -1,35 +1,23 @@
1
1
  module Anticuado
2
2
  class Base
3
- def self.outdated(_project)
4
- raise NotImplementedError
3
+ attr_reader :project_dir, :outdated_libraries, :formatted_outdated_libraries
4
+
5
+ def initialize(project_dir = nil)
6
+ @project_dir = project_dir
7
+ @outdated_libraries = ''
8
+ @formatted_outdated_libraries = []
5
9
  end
6
10
 
7
- def self.format(_outdated)
11
+ def outdated(_project)
8
12
  raise NotImplementedError
9
13
  end
10
14
 
11
- private
12
-
13
- def self.update_with_prefix(pod_file_in:, pod_file_out: nil, libraries:, prefix:)
14
- pod_file_out = pod_file_in if pod_file_out.nil?
15
- current_pod = File.read(pod_file_in)
16
-
17
- result = current_pod.each_line.reduce("") do |memo, line|
18
- memo << if line.strip.start_with?(prefix)
19
- key = get_key libraries, line
20
- key.nil? ? line : line.sub(/[0-9|.]+/, libraries[key])
21
- else
22
- line
23
- end
24
- end
25
-
26
- File.write(pod_file_out, result)
27
- result
15
+ def format(_outdated)
16
+ raise NotImplementedError
28
17
  end
29
18
 
30
- def self.get_key(libraries, line)
31
- libraries.each_key { |k| return k if line.include?(k.to_s) }
32
- nil
19
+ def update_lock(target_name = nil)
20
+ raise NotImplementedError
33
21
  end
34
22
  end
35
23
  end
@@ -1,34 +1,33 @@
1
1
  module Anticuado
2
2
  module Elixir
3
3
  class Hex < Anticuado::Base
4
- # @param [String] project Path to project directory.
5
4
  # @return [String] The result of command `mix hex.outdated`.
6
- def self.outdated(project = nil)
5
+ def outdated
7
6
  return puts "have no mix command" if `which mix`.empty?
8
7
  `mix local.hex --force`
9
8
 
10
- if project
11
- current_dir = Anticuado.current_dir
12
- Dir.chdir Anticuado.project_dir(project)
13
- outdated_str = `mix hex.outdated`
14
- Dir.chdir current_dir
9
+ if @project_dir
10
+ Dir.chdir(@project_dir) do
11
+ @outdated_libraries = `mix hex.outdated`
12
+ end
15
13
  else
16
- outdated_str = `mix hex.outdated`
14
+ @outdated_libraries = `mix hex.outdated`
17
15
  end
18
-
19
- outdated_str
16
+ @outdated_libraries
20
17
  end
21
18
 
22
19
  # @param [String] outdated The result of command `mix hex.outdated`
23
20
  # @return [Array] Array include outdated data.
24
21
  # If target project have no outdated data, then return blank array such as `[]`
25
- def self.format(outdated)
26
- array = outdated.split(/\R/).map(&:strip)
22
+ def format(outdated = nil)
23
+ @outdated_libraries = outdated unless outdated.nil?
24
+
25
+ array = @outdated_libraries.split(/\R/).map(&:strip)
27
26
  index = array.find_index { |line| line.scan(/\ADependency\s+Current\s+/) != [] }
28
27
 
29
28
  return [] if index.nil?
30
29
 
31
- array[index + 1..array.size].reduce([]) do |acc, library|
30
+ @formatted_outdated_libraries = array[index + 1..array.size].reduce([]) do |acc, library|
32
31
  break acc if library.empty?
33
32
 
34
33
  array_lib = library.split(/\s+/)
@@ -0,0 +1,86 @@
1
+ require 'git'
2
+ require 'octokit'
3
+
4
+ module Anticuado
5
+ class GitHub
6
+ attr_reader :repo_uri, :repo_name, :git, :client
7
+
8
+ def initialize(repository_name, enterprise: true, api_endpoint: nil)
9
+ @repo_name = repository_name
10
+
11
+ @client = if enterprise
12
+ ::Octokit::Client.new(
13
+ access_token: ENV['GHE_ACCESS_TOKEN'] || 'dummy_token',
14
+ api_endpoint: api_endpoint || ENV['GHE_API_ENDPOINT'], # 'https://example.api.endpoint/api/v3/'
15
+ )
16
+ else
17
+ ::Octokit::Client.new(access_token: ENV['GITHUB_TOKEN'])
18
+ end
19
+ @repo_uri = "git@#{URI.parse(enterprise ? @client.api_endpoint : @client.web_endpoint).host}:#{@repo_name}.git"
20
+ end
21
+
22
+ def clone_or_open_to(target_path)
23
+ @git = begin
24
+ ::Git.clone(@repo_uri, target_path)
25
+ rescue
26
+ g = ::Git.open(target_path)
27
+ g.pull
28
+ g
29
+ end
30
+ end
31
+
32
+ def create_a_new_pull_request(base_branch:, head_branch: (Time.now.strftime '%Y%m%d-%H%M%S'), update_libraries: nil)
33
+ remote_name = 'origin'
34
+
35
+ begin
36
+ create_a_branch_local head_branch
37
+ commit_all_changes
38
+
39
+ git_push_to_remote remote_name, head_branch
40
+ create_pull_request(base_branch: base_branch, head_branch: head_branch, title: github_pr_title(head_branch), body: github_pr_body(update_libraries))
41
+
42
+ delete_a_branch_local head_branch
43
+ rescue Git::GitExecuteError => e
44
+ puts "no changes: #{e}, #{e.message}"
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def github_pr_title(message)
51
+ "update #{message}"
52
+ end
53
+
54
+ def github_pr_body(update_libraries)
55
+ return 'update libraries' if update_libraries.nil?
56
+ update_libraries.reduce("# Update libraries\n") do |acc, library|
57
+ acc << "- #{library}\n"
58
+ end
59
+ end
60
+
61
+ def commit_all_changes_message
62
+ "update libraries"
63
+ end
64
+
65
+ def commit_all_changes
66
+ @git.commit_all(commit_all_changes_message)
67
+ end
68
+
69
+ def create_a_branch_local(branch_name)
70
+ @git.branch(branch_name).checkout
71
+ end
72
+
73
+ def delete_a_branch_local(branch_name)
74
+ @git.checkout # We should change current branch first
75
+ @git.branch(branch_name).delete
76
+ end
77
+
78
+ def git_push_to_remote(remote_name, head_branch)
79
+ @git.push(remote_name, head_branch)
80
+ end
81
+
82
+ def create_pull_request(base_branch:, head_branch:, title:, body:)
83
+ @client.create_pull_request @repo_name, base_branch, head_branch, title, body
84
+ end
85
+ end
86
+ end # module Anticuado
@@ -1,28 +1,29 @@
1
1
  module Anticuado
2
2
  module IOS
3
3
  class Carthage < Anticuado::Base
4
- # @param [String] project Path to project directory.
5
4
  # @return [String] The result of command `carthage outdated`.
6
- def self.outdated(project = nil)
5
+ def outdated
7
6
  return puts "have no carthage command" if `which carthage`.empty?
8
7
 
9
- if project
10
- `carthage outdated --project-directory #{project}`
11
- else
12
- `carthage outdated`
13
- end
8
+ @outdated_libraries = if @project_dir
9
+ `carthage outdated --project-directory #{@project_dir}`
10
+ else
11
+ `carthage outdated`
12
+ end
14
13
  end
15
14
 
16
15
  # @param [String] outdated The result of command `carthage outdated`
17
16
  # @return [Array] Array include outdated data.
18
17
  # If target project have no outdated data, then return blank array such as `[]`
19
- def self.format(outdated)
20
- array = outdated.split(/\R/).map(&:strip)
18
+ def format(outdated = nil)
19
+ @outdated_libraries = outdated unless outdated.nil?
20
+
21
+ array = @outdated_libraries.split(/\R/).map(&:strip)
21
22
  index = array.find_index("The following dependencies are outdated:")
22
23
 
23
24
  return [] if index.nil?
24
25
 
25
- array[index + 1..array.size].map do |library|
26
+ @formatted_outdated_libraries = array[index + 1..array.size].map do |library|
26
27
  versions = library.split(/[\s|"]/)
27
28
  if versions[8] =~ /Latest/
28
29
  # e.g. ["RxSwift", "", "4.1.0", "", "->", "", "4.1.2", "", "(Latest:", "", "4.1.2", ")"]
@@ -43,6 +44,23 @@ module Anticuado
43
44
  end
44
45
  end
45
46
  end
47
+
48
+ # @param [Array] target_names: Name of library.
49
+ def update_lock(target_names = nil)
50
+ return puts "have no pod command" if `which pod`.empty?
51
+ do_update_lock target_names
52
+ end
53
+
54
+ private
55
+
56
+ def do_update_lock(target_names = nil)
57
+ if target_names.nil?
58
+ `carthage update --project-directory=#{@project_dir}`
59
+ else
60
+ raise ArgumentError, "An argument should be Array like ['Result']" unless target_names.is_a? Array
61
+ `carthage update #{target_names.join(' ')} --project-directory=#{@project_dir}`
62
+ end
63
+ end
46
64
  end # class Carthage
47
65
  end # module IOS
48
66
  end # module Anticuado
@@ -1,43 +1,31 @@
1
1
  module Anticuado
2
2
  module IOS
3
3
  class CocoaPods < Anticuado::Base
4
- # @param [String] project Name of library.
5
4
  # @return [String] The result of command `pod outdated`.
6
- def self.update_lock(library: nil)
7
- return puts "have no pod command" if `which pod`.empty?
8
-
9
- if library
10
- `pod update #{library}`
11
- else
12
- `pod update`
13
- end
14
- end
15
-
16
- # @param [String] project Path to project directory.
17
- # @return [String] The result of command `pod outdated`.
18
- def self.outdated(project = nil)
5
+ def outdated
19
6
  return puts "have no pod command" if `which pod`.empty?
20
7
 
21
- if project
22
-
23
- `pod install --project-directory=#{project}`
24
- `pod outdated --project-directory=#{project}`
25
- else
26
- `pod install`
27
- `pod outdated`
28
- end
8
+ @outdated_libraries = if @project_dir
9
+ `pod install --project-directory=#{@project_dir}`
10
+ `pod outdated --project-directory=#{@project_dir}`
11
+ else
12
+ `pod install`
13
+ `pod outdated`
14
+ end
29
15
  end
30
16
 
31
17
  # @param [String] outdated The result of command `pod outdated`
32
18
  # @return [Array] Array include outdated data.
33
19
  # If target project have no outdated data, then return blank array such as `[]`
34
- def self.format(outdated)
35
- array = outdated.split(/\R/).map(&:strip)
20
+ def format(outdated = nil)
21
+ @outdated_libraries = outdated unless outdated.nil?
22
+
23
+ array = @outdated_libraries.split(/\R/).map(&:strip)
36
24
  index = array.find_index("The following pod updates are available:")
37
25
 
38
26
  return [] if index.nil?
39
27
 
40
- array[index + 1..array.size].map { |library|
28
+ @formatted_outdated_libraries = array[index + 1..array.size].map { |library|
41
29
  versions = library.split(/\s/) # e.g. ["-", "AFNetworking", "2.5.4", "->", "3.1.0", "(latest", "version", "3.1.0)"]
42
30
  if versions[0] == "-"
43
31
  {
@@ -50,15 +38,55 @@ module Anticuado
50
38
  }.compact
51
39
  end
52
40
 
41
+ # @param [Array] target_names: Name of library.
42
+ def update_lock(target_names = nil)
43
+ return puts "have no pod command" if `which pod`.empty?
44
+ do_update_lock target_names
45
+ end
46
+
47
+ # TODO: Should fix. (Not used)
53
48
  # @param [String] pod_file_in The file path to Podfile you'd like to update
54
49
  # @param [String] pod_file_out The file path to new Podfile updated. Default is nil and then `pod_file_in` is used
55
50
  # as the file path
56
- # @param [Hash] library_name The library name you'd like to update
51
+ # @param [Hash] libraries The library name you'd like to update
57
52
  # {library_name: "version", library_name2: "version"}
58
53
  # @return [String] new Podfile
59
- def self.update(pod_file_in:, pod_file_out: nil, libraries:)
54
+ def update(pod_file_in:, pod_file_out: nil, libraries:)
60
55
  update_with_prefix(pod_file_in: pod_file_in, pod_file_out: pod_file_out, libraries: libraries, prefix: "pod ")
61
56
  end
57
+
58
+ private
59
+
60
+ def do_update_lock(target_names = nil)
61
+ if target_names.nil?
62
+ `pod update --project-directory=#{@project_dir}`
63
+ else
64
+ raise ArgumentError, "An argument should be Array like ['PromisesObjC']" unless target_names.is_a? Array
65
+ `pod update #{target_names.join(' ')} --project-directory=#{@project_dir}`
66
+ end
67
+ end
68
+
69
+ def update_with_prefix(pod_file_in:, pod_file_out: nil, libraries:, prefix:)
70
+ pod_file_out = pod_file_in if pod_file_out.nil?
71
+ current_pod = File.read(pod_file_in)
72
+
73
+ result = current_pod.each_line.reduce("") do |memo, line|
74
+ memo << if line.strip.start_with?(prefix)
75
+ key = get_key libraries, line
76
+ key.nil? ? line : line.sub(/[0-9|.]+/, libraries[key])
77
+ else
78
+ line
79
+ end
80
+ end
81
+
82
+ File.write(pod_file_out, result)
83
+ result
84
+ end
85
+
86
+ def get_key(libraries, line)
87
+ libraries.each_key { |k| return k if line.include?(k.to_s) }
88
+ nil
89
+ end
62
90
  end # class CocoaPods
63
91
  end # module IOS
64
92
  end # module Anticuado
@@ -10,14 +10,13 @@ module Anticuado
10
10
  # @param [Bool] wrapper Use gradle wrapper or use gradle directory.
11
11
  # @param [String] format "plain", "json" or "xml". Default is "json".
12
12
  # @param [String] outdir Path to output the result. Default is "build/dependencyUpdates".
13
- def self.outdated(project = nil, wrapper = false, revision = "release", format = "json", outdir = "build/dependencyUpdates")
13
+ def outdated(wrapper = false, revision = "release", format = "json", outdir = "build/dependencyUpdates")
14
14
  return puts "have no gradle command" if !wrapper && `which gradle`.empty?
15
15
 
16
- if project
17
- current_dir = Anticuado.current_dir
18
- Dir.chdir Anticuado.project_dir(project)
19
- `#{gradle(wrapper)} dependencyUpdates -Drevision=#{revision} -DoutputFormatter=#{format} -DoutputDir=#{outdir}`
20
- Dir.chdir current_dir
16
+ if @project_dir
17
+ Dir.chdir(@project_dir) do
18
+ `#{gradle(wrapper)} dependencyUpdates -Drevision=#{revision} -DoutputFormatter=#{format} -DoutputDir=#{outdir}`
19
+ end
21
20
  else
22
21
  `#{gradle(wrapper)} dependencyUpdates -Drevision=#{revision} -DoutputFormatter=#{format} -DoutputDir=#{outdir}`
23
22
  end
@@ -27,20 +26,22 @@ module Anticuado
27
26
 
28
27
  # @param [String] file_path The result of command `gradle dependencyUpdates` with json format
29
28
  # @return [JSON] JSON data
30
- def self.parse_json(file_path)
29
+ def parse_json(file_path)
31
30
  str = File.read(file_path)
32
- JSON.parse(str)
31
+ @outdated_libraries = JSON.parse(str)
33
32
  end
34
33
 
35
34
  # @param [String] outdated_parsed_json The result of command `gradle dependencyUpdates` and json parsed data
36
35
  # @return [Array] Array include outdated data.
37
36
  # If target project have no outdated data, then return blank array such as `[]`
38
- def self.format(outdated_parsed_json, filter = %w(alpha beta rc cr m))
39
- outdted = outdated_parsed_json["outdated"]
37
+ def format(outdated_parsed_json = nil, filter = %w(alpha beta rc cr m))
38
+ @outdated_libraries = outdated_parsed_json unless outdated_parsed_json.nil?
39
+
40
+ outdted = @outdated_libraries["outdated"]
40
41
  return [] if outdted.nil?
41
42
  return [] if outdted["dependencies"].nil?
42
43
 
43
- outdted["dependencies"].map { |library|
44
+ @formatted_outdated_libraries = outdted["dependencies"].map { |library|
44
45
  available_version = filter(filter, library["available"]["release"])
45
46
  latest_version = filter(filter, library["available"]["release"])
46
47
 
@@ -58,12 +59,12 @@ module Anticuado
58
59
 
59
60
  private
60
61
 
61
- def self.gradle(wrapper = false)
62
+ def gradle(wrapper = false)
62
63
  return "./gradlew" if wrapper
63
64
  "gradle"
64
65
  end
65
66
 
66
- def self.filter(revisions, string)
67
+ def filter(revisions, string)
67
68
  result = revisions.find { |qualifier| string.match(/(?i).*[.-]#{qualifier}[.\d-]*/) }
68
69
  return NO_VERSION if result
69
70
  string
@@ -1,33 +1,32 @@
1
1
  module Anticuado
2
2
  module JavaScript
3
3
  class Npm < Anticuado::Base
4
- # @param [String] project Path to project directory.
5
4
  # @return [String] The result of command `npm outdated`.
6
- def self.outdated(project = nil)
5
+ def outdated
7
6
  return puts "have no npm command" if `which npm`.empty?
8
7
 
9
- if project
10
- current_dir = Anticuado.current_dir
11
- Dir.chdir Anticuado.project_dir(project)
12
- `npm install`
13
- outdated_str = `npm outdated`
14
- Dir.chdir current_dir
8
+ if @project_dir
9
+ Dir.chdir(@project_dir) do
10
+ @outdated_libraries = run_outdated
11
+ end
15
12
  else
16
- outdated_str = `npm outdated`
13
+ @outdated_libraries = run_outdated
17
14
  end
18
- outdated_str
15
+ @outdated_libraries
19
16
  end
20
17
 
21
18
  # @param [String] outdated The result of command `npm outdated`
22
19
  # @return [Array] Array include outdated data.
23
20
  # If target project have no outdated data, then return blank array such as `[]`
24
- def self.format(outdated)
25
- array = outdated.split(/\R/).map(&:strip)
21
+ def format(outdated = nil)
22
+ @outdated_libraries = outdated unless outdated.nil?
23
+
24
+ array = @outdated_libraries.split(/\R/).map(&:strip)
26
25
  index = array.find_index { |line| line.scan(/\APackage\s+Current\s+Wanted\s+Latest\s+Location\z/) != [] }
27
26
 
28
27
  return [] if index.nil?
29
28
 
30
- array[index + 1...array.size].map do |library|
29
+ @formatted_outdated_libraries = array[index + 1...array.size].map do |library|
31
30
  versions = library.split(/\s+/) # e.g. ["babel-brunch", "6.0.2", "6.0.6", "6.0.6"]
32
31
  {
33
32
  library_name: versions[0],
@@ -37,6 +36,13 @@ module Anticuado
37
36
  }
38
37
  end
39
38
  end
39
+
40
+ private
41
+
42
+ def run_outdated
43
+ `npm install`
44
+ `npm outdated`
45
+ end
40
46
  end # class Npm
41
47
  end # module JavaScript
42
48
  end # module Anticuado
@@ -1,33 +1,32 @@
1
1
  module Anticuado
2
2
  module JavaScript
3
3
  class Yarn < Anticuado::Base
4
- # @param [String] project Path to project directory.
5
4
  # @return [String] The result of command `yarn outdated`.
6
- def self.outdated(project = nil)
5
+ def outdated
7
6
  return puts "have no yarn command" if `which yarn`.empty?
8
7
 
9
- if project
10
- current_dir = Anticuado.current_dir
11
- Dir.chdir Anticuado.project_dir(project)
12
- `yarn install`
13
- outdated_str = `yarn outdated`
14
- Dir.chdir current_dir
8
+ if @project_dir
9
+ Dir.chdir(@project_dir) do
10
+ @outdated_libraries = run_outdated
11
+ end
15
12
  else
16
- outdated_str = `yarn outdated`
13
+ @outdated_libraries = run_outdated
17
14
  end
18
- outdated_str
15
+ @outdated_libraries
19
16
  end
20
17
 
21
18
  # @param [String] outdated The result of command `yarn outdated`
22
19
  # @return [Array] Array include outdated data.
23
20
  # If target project have no outdated data, then return blank array such as `[]`
24
- def self.format(outdated)
25
- array = outdated.split(/\R/).map(&:strip)
21
+ def format(outdated = nil)
22
+ @outdated_libraries = outdated unless outdated.nil?
23
+
24
+ array = @outdated_libraries.split(/\R/).map(&:strip)
26
25
  index = array.find_index { |line| line.scan(/Package\s+Current\s+Wanted\s+Latest/) != [] }
27
26
 
28
27
  return [] if index.nil?
29
28
 
30
- array[index + 1...(array.size - 1)].map do |library|
29
+ @formatted_outdated_libraries = array[index + 1...(array.size - 1)].map do |library|
31
30
  versions = library.split(/\s+/) # e.g. ["babel-brunch", "6.0.2", "6.0.6", "6.0.6"]
32
31
  {
33
32
  library_name: versions[0],
@@ -37,6 +36,13 @@ module Anticuado
37
36
  }
38
37
  end
39
38
  end
39
+
40
+ private
41
+
42
+ def run_outdated
43
+ `yarn install`
44
+ `yarn outdated`
45
+ end
40
46
  end # class Yarn
41
47
  end # module JavaScript
42
48
  end # module Anticuado
@@ -1,32 +1,31 @@
1
1
  module Anticuado
2
2
  module Ruby
3
3
  class Bundler < Anticuado::Base
4
- def self.outdated(project = nil)
4
+ def outdated(option = '')
5
5
  return puts "have no bundle command" if `which bundle`.empty?
6
6
 
7
- if project
8
- current_dir = Anticuado.current_dir
9
- Dir.chdir Anticuado.project_dir(project)
10
- `bundle install`
11
- outdated_str = `bundle outdated`
12
- Dir.chdir current_dir
7
+ if @project_dir
8
+ Dir.chdir(@project_dir) do
9
+ @outdated_libraries = run_outdated option
10
+ end
13
11
  else
14
- `bundle install`
15
- outdated_str = `bundle outdated`
12
+ @outdated_libraries = run_outdated option
16
13
  end
17
- outdated_str
14
+ @outdated_libraries
18
15
  end
19
16
 
20
- # @param [String] outdated The result of command `bundle outdated`
17
+ # @param [String] outdated The result of command `bundle outdated`. If it's no argument, the method use the result of `outdated`.
21
18
  # @return [Array] Array include outdated data.
22
19
  # If target project have no outdated data, then return blank array such as `[]`
23
- def self.format(outdated)
24
- array = outdated.split(/\R/).map(&:strip)
20
+ def format(outdated = nil)
21
+ @outdated_libraries = outdated unless outdated.nil?
22
+
23
+ array = @outdated_libraries.split(/\R/).map(&:strip)
25
24
  index = array.find_index("Outdated gems included in the bundle:")
26
25
 
27
26
  return [] if index.nil?
28
27
 
29
- array[index + 1..array.size].map { |library|
28
+ @formatted_outdated_libraries = array[index + 1..array.size].map { |library|
30
29
  versions = library.split(/\s/) # e.g. ["*", "jwt", "(newest", "1.5.6,", "installed", "1.5.5)"]
31
30
  if versions[0] == "*"
32
31
  {
@@ -38,6 +37,32 @@ module Anticuado
38
37
  end
39
38
  }.compact
40
39
  end
40
+
41
+ def update_lock(target_names = nil)
42
+ if @project_dir
43
+ Dir.chdir(@project_dir) do
44
+ do_update_lock target_names
45
+ end
46
+ else
47
+ do_update_lock target_names
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def do_update_lock(target_names = nil)
54
+ if target_names.nil?
55
+ `bundle update`
56
+ else
57
+ raise ArgumentError, "An argument should be Array like ['cocoapod']" unless target_names.is_a? Array
58
+ `bundle update #{target_names.join(' ')}`
59
+ end
60
+ end
61
+
62
+ def run_outdated(option)
63
+ `bundle install #{option}`
64
+ `bundle outdated`
65
+ end
41
66
  end # class Bundler
42
67
  end # module Ruby
43
68
  end # module Anticuado
@@ -1,3 +1,3 @@
1
1
  module Anticuado
2
- VERSION = "0.2.14"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,27 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anticuado
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.14
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuaki MATSUO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-12 00:00:00.000000000 Z
11
+ date: 2020-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: git
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.7'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.7'
33
+ - !ruby/object:Gem::Dependency
34
+ name: octokit
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '4.8'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '4.17'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '4.8'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '4.17'
13
53
  - !ruby/object:Gem::Dependency
14
54
  name: bundler
15
55
  requirement: !ruby/object:Gem::Requirement
16
56
  requirements:
17
- - - "~>"
57
+ - - ">="
18
58
  - !ruby/object:Gem::Version
19
59
  version: '1.12'
20
60
  type: :development
21
61
  prerelease: false
22
62
  version_requirements: !ruby/object:Gem::Requirement
23
63
  requirements:
24
- - - "~>"
64
+ - - ">="
25
65
  - !ruby/object:Gem::Version
26
66
  version: '1.12'
27
67
  - !ruby/object:Gem::Dependency
@@ -30,14 +70,14 @@ dependencies:
30
70
  requirements:
31
71
  - - "~>"
32
72
  - !ruby/object:Gem::Version
33
- version: '10.0'
73
+ version: '12.3'
34
74
  type: :development
35
75
  prerelease: false
36
76
  version_requirements: !ruby/object:Gem::Requirement
37
77
  requirements:
38
78
  - - "~>"
39
79
  - !ruby/object:Gem::Version
40
- version: '10.0'
80
+ version: '12.3'
41
81
  - !ruby/object:Gem::Dependency
42
82
  name: minitest
43
83
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +92,20 @@ dependencies:
52
92
  - - "~>"
53
93
  - !ruby/object:Gem::Version
54
94
  version: '5.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: pry
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
55
109
  description: Collect and arrange some outdated libraries for several platforms
56
110
  email:
57
111
  - fly.49.89.over@gmail.com
@@ -59,8 +113,8 @@ executables: []
59
113
  extensions: []
60
114
  extra_rdoc_files: []
61
115
  files:
116
+ - ".github/workflows/ruby.yml"
62
117
  - ".gitignore"
63
- - ".travis.yml"
64
118
  - CODE_OF_CONDUCT.md
65
119
  - Gemfile
66
120
  - LICENSE
@@ -72,6 +126,7 @@ files:
72
126
  - lib/anticuado.rb
73
127
  - lib/anticuado/base.rb
74
128
  - lib/anticuado/elixir/hex.rb
129
+ - lib/anticuado/github.rb
75
130
  - lib/anticuado/ios/carthage.rb
76
131
  - lib/anticuado/ios/cocoapods.rb
77
132
  - lib/anticuado/java/gradle.rb
@@ -98,8 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
153
  - !ruby/object:Gem::Version
99
154
  version: '0'
100
155
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.5.2
156
+ rubygems_version: 3.1.2
103
157
  signing_key:
104
158
  specification_version: 4
105
159
  summary: Collect and arrange some outdated libraries for several platforms
@@ -1,15 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.2.0
6
- - 2.3.0
7
- - 2.4.0
8
- os:
9
- - linux
10
- - osx
11
- before_install:
12
- - gem install bundler -v 1.12.5
13
- script:
14
- - bundle exec rake test
15
-