factorio-mod 0.5.5 → 0.6.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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d768f70e391360db2b2ae8eae6f7349e1bd26417b1c0829276ee7e13c67fce50
4
- data.tar.gz: abbc666ed30d1997a87081f98cc5f92eb504b07e6a2cc8af8039f2135f526485
3
+ metadata.gz: e8417b98fa7593e0defd4c676d400840e998ab87fd5a63e2c625df220bb8be24
4
+ data.tar.gz: ecd77d7c281591a9642d193d135552d6b4ac08079b070ce2c53728e8ed6c7160
5
5
  SHA512:
6
- metadata.gz: 0332a88734cdaf0ee4958cea7b39b9c8038885704f68fae15c3ebd4ac686cb8d2bd1407a67824d5d82320634a376c8ebf43e524e25aeaa56d56a49576f9e1ed2
7
- data.tar.gz: c0c38517d2c462cb6e949023a761e2857d634f4d2f2a563e0a6903f5da3d3c4f5001bbdf07101dd3ffd4103a50ec6588fbe87ccceb8d92444bfa659b5db11437
6
+ metadata.gz: 95279289b28a0d647187119ae06da9af3c4b334d105f491e6dd85ffe7c30b24fe30d0d64e140b1d7be90cca1a30aae38105292c286637676e199b0b8c6caaf26
7
+ data.tar.gz: 27b3e5dd78066ef18f123407130598c6a37d1b33f5f3b145f855008e38c64437eb68591264daf5d1d97146f65abe3c87177cfe2df0bff037c4705289d2776e32
@@ -1,2 +1,2 @@
1
1
  AllCops:
2
- TargetRubyVersion: '2.4.0'
2
+ TargetRubyVersion: '2.6.0'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- factorio-mod (0.5.5)
4
+ factorio-mod (0.6.0)
5
5
  activesupport (~> 5.2)
6
6
  nokogiri (~> 1.8)
7
7
 
@@ -14,24 +14,24 @@ GEM
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
16
  ast (2.4.0)
17
- bump (0.6.1)
17
+ bump (0.7.0)
18
18
  coco (0.15.0)
19
19
  coderay (1.1.2)
20
20
  concurrent-ruby (1.1.4)
21
21
  diff-lcs (1.3)
22
- i18n (1.5.1)
22
+ i18n (1.5.2)
23
23
  concurrent-ruby (~> 1.0)
24
- jaro_winkler (1.5.1)
25
- method_source (0.9.0)
24
+ jaro_winkler (1.5.2)
25
+ method_source (0.9.2)
26
26
  mini_portile2 (2.4.0)
27
27
  minitest (5.11.3)
28
- nokogiri (1.10.0)
28
+ nokogiri (1.10.1)
29
29
  mini_portile2 (~> 2.4.0)
30
30
  parallel (1.12.1)
31
- parser (2.5.1.2)
31
+ parser (2.5.3.0)
32
32
  ast (~> 2.4.0)
33
33
  powerpack (0.1.2)
34
- pry (0.11.3)
34
+ pry (0.12.2)
35
35
  coderay (~> 1.1.0)
36
36
  method_source (~> 0.9.0)
37
37
  rainbow (3.0.0)
@@ -42,26 +42,26 @@ GEM
42
42
  rspec-mocks (~> 3.8.0)
43
43
  rspec-core (3.8.0)
44
44
  rspec-support (~> 3.8.0)
45
- rspec-expectations (3.8.1)
45
+ rspec-expectations (3.8.2)
46
46
  diff-lcs (>= 1.2.0, < 2.0)
47
47
  rspec-support (~> 3.8.0)
48
48
  rspec-mocks (3.8.0)
49
49
  diff-lcs (>= 1.2.0, < 2.0)
50
50
  rspec-support (~> 3.8.0)
51
51
  rspec-support (3.8.0)
52
- rubocop (0.58.2)
52
+ rubocop (0.62.0)
53
53
  jaro_winkler (~> 1.5.1)
54
54
  parallel (~> 1.10)
55
55
  parser (>= 2.5, != 2.5.1.1)
56
56
  powerpack (~> 0.1)
57
57
  rainbow (>= 2.2.2, < 4.0)
58
58
  ruby-progressbar (~> 1.7)
59
- unicode-display_width (~> 1.0, >= 1.0.1)
59
+ unicode-display_width (~> 1.4.0)
60
60
  ruby-progressbar (1.10.0)
61
61
  thread_safe (0.3.6)
62
62
  tzinfo (1.2.5)
63
63
  thread_safe (~> 0.1)
64
- unicode-display_width (1.4.0)
64
+ unicode-display_width (1.4.1)
65
65
 
66
66
  PLATFORMS
67
67
  ruby
@@ -49,9 +49,7 @@ module Factorio
49
49
  # Get from cache or download page
50
50
  def get(symbol, uri)
51
51
  symbol = symbol.to_sym
52
- return @cache[symbol] if @cache.key? symbol
53
-
54
- @cache[symbol] = Nokogiri::HTML(URI.open(uri, 'Cookie' => @cookie))
52
+ @cache[symbol] ||= Nokogiri::HTML(URI.open(uri, 'Cookie' => @cookie))
55
53
  rescue OpenURI::HTTPError => e
56
54
  raise NoMODError.new "MOD #{@uri.split('/').last} not found", e.io
57
55
  end
@@ -18,13 +18,13 @@ module Factorio
18
18
  game_version: :text.to_proc,
19
19
  uri: Mod.method(:get_href).to_proc,
20
20
  date: :text.to_proc,
21
- times: proc { |item| item.text.to_i }
21
+ times: :text.to_proc >> :to_i.to_proc
22
22
  }.freeze
23
23
 
24
24
  # set value by table header
25
25
  def set(name, value)
26
26
  sym = TABLE_HEADER_TO_SYM[name]
27
- self[sym] = HANDLE_VALUE[sym].call value
27
+ tap { |a| a[sym] = HANDLE_VALUE[sym].call value }
28
28
  end
29
29
  end
30
30
  end
@@ -17,13 +17,6 @@ module Factorio
17
17
  end
18
18
  end
19
19
 
20
- # The Exception that can't find download
21
- class NoDownloadError < StandardError
22
- def initialize(msg)
23
- super
24
- end
25
- end
26
-
27
20
  # The Exception that try to visit not exist page
28
21
  class NoPageError < StandardError
29
22
  def initialize(msg)
@@ -13,7 +13,7 @@ module Factorio
13
13
  # puts "It latest version for factorio 0.16 can download at " \
14
14
  # "#{mod.latest_download('0.16')[:uri]}"
15
15
  # ```
16
- class Mod # rubocop:disable ClassLength
16
+ class Mod
17
17
  # factorio Mod portal website URI
18
18
  MOD_URI = 'https://mods.factorio.com'
19
19
 
@@ -35,8 +35,7 @@ module Factorio
35
35
  table = @mod.information.xpath("//div[@class='mod-page-data-table']")
36
36
  return table if key.blank?
37
37
 
38
- xpath = "//td[../td[@class='data-name'][.='#{key}:']]"
39
- table.xpath xpath
38
+ table.xpath "//td[../td[@class='data-name'][.='#{key}:']]"
40
39
  end
41
40
 
42
41
  public
@@ -46,10 +45,8 @@ module Factorio
46
45
  # @param line [Nokogiri::HTML] `<tr>`
47
46
  # @return [Download] _download_
48
47
  def self.bind_td_to_th(table_header, line)
49
- line.css('td').each_with_index.each_with_object(Download.new) \
50
- do |(item, index), obj|
51
- key = table_header[index]
52
- obj.set(key, item)
48
+ table_header.zip(line.css('td')).inject(Download.new) do |obj, pair|
49
+ obj.set(*pair)
53
50
  end
54
51
  end
55
52
 
@@ -72,12 +69,10 @@ module Factorio
72
69
  rescue Net::ReadTimeout
73
70
  retry
74
71
  end
75
-
76
72
  sleep(1) while driver.current_url == 'https://mods.factorio.com/login'
77
- session = driver.manage.cookie_named('session')[:value]
78
- driver.quit if autoclose
79
73
 
80
- "session=#{session}"
74
+ "session=#{driver.manage.cookie_named('session')[:value]}" \
75
+ .tap { driver.quit if autoclose }
81
76
  end
82
77
 
83
78
  # @return [String, String] `csrf_token` and cookie
@@ -108,8 +103,8 @@ module Factorio
108
103
  'username' => username,
109
104
  'password' => password
110
105
  )
111
- resp = Net::HTTP.post(URI(MOD_URI + '/login'), data, 'Cookie' => cookie)
112
- resp.response['set-cookie'].split('; ').first
106
+ Net::HTTP.post(URI(MOD_URI + '/login'), data, 'Cookie' => cookie) \
107
+ .response['set-cookie'].split('; ').first
113
108
  end
114
109
 
115
110
  # Extend relative links to absolute links
@@ -117,9 +112,7 @@ module Factorio
117
112
  # @return [String] absolute link
118
113
  # @raise [NotLoginError]
119
114
  def self.extend_uri(rel)
120
- raise NotLoginError if rel =~ %r{^/login}
121
-
122
- MOD_URI + rel
115
+ MOD_URI + rel.tap { |a| raise NotLoginError if a =~ %r{^/login} }
123
116
  end
124
117
 
125
118
  # Get href in Nokogiri node
@@ -176,7 +169,7 @@ module Factorio
176
169
  # Whether Mod is deprecated
177
170
  # @return [Bool] is deprecated
178
171
  def deprecated?
179
- !@mod.any.xpath('//span[@class="mod-card-title-deprecated"]').empty?
172
+ @mod.any.xpath('//span[@class="mod-card-title-deprecated"]').any?
180
173
  end
181
174
 
182
175
  # Get the totle number of downloads of Mod.
@@ -189,13 +182,9 @@ module Factorio
189
182
  # Get the latest _download_ of the Mod.
190
183
  # @param version [String] factorio version
191
184
  # @return [Download]
192
- def latest_download(version = nil)
193
- return download_list.last if version.blank?
194
-
195
- download_list.each do |download|
196
- return download if download.game_version == version.to_s
197
- end
198
- raise NoDownloadError, "can't found #{name} for factorio #{version}"
185
+ def latest_download(version = nil, ifnone = nil)
186
+ version.blank? && download_list.last ||
187
+ download_list.find(ifnone) { |d| d.game_version == version.to_s }
199
188
  end
200
189
 
201
190
  # Get the _download_ for all of version.
@@ -203,9 +192,7 @@ module Factorio
203
192
  def download_list
204
193
  table = @mod.downloads.css 'table.mod-page-downloads-table'
205
194
  head = table.css('thead tr th').map(&:text)
206
- table.css('tbody tr').map do |line|
207
- Mod.bind_td_to_th head, line
208
- end
195
+ table.css('tbody tr').map { |line| Mod.bind_td_to_th(head, line) }
209
196
  end
210
197
 
211
198
  # Get latest download uri by download button in card
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Factorio
4
4
  class Mod
5
- VERSION = '0.5.5'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factorio-mod
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 71e6fd52
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-13 00:00:00.000000000 Z
11
+ date: 2019-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -182,8 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  - !ruby/object:Gem::Version
183
183
  version: '0'
184
184
  requirements: []
185
- rubyforge_project:
186
- rubygems_version: 2.7.7
185
+ rubygems_version: 3.0.2
187
186
  signing_key:
188
187
  specification_version: 4
189
188
  summary: Get the info of Factorio's MOD.