rnes 0.1.1 → 0.2.0

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: 768392aacc5ad611aa059d5ef7a7c23c78ca1088
4
- data.tar.gz: 37881bb61c15ed1f35c5015174bf47d26b8fc50f
3
+ metadata.gz: 6d3d1d154a09065286af7ca812325aa2b1685cbf
4
+ data.tar.gz: cfa99900503dd5d59f6553f7ee3c81f4fd292dc3
5
5
  SHA512:
6
- metadata.gz: 65ec79252019d26f9d6fa5aa471ecb031adcbeb067c7413a54e0c8dd58a7dbb989d9989638861694caab9ea03dce11625743c0bdcfb05919da3f7c5a9d8b11e0
7
- data.tar.gz: 5af737101697e45640a8e211423f5dcbd858c0de846fe2b63d52d197bbd3abdf2baf53d089a3fe7c47440d6f3e6b36bd6597332945ab62a180af62ecd96987ec
6
+ metadata.gz: 859089e4d81fb3888ea5e52b95de2695f48acf3346b219a5e579ebcdd6516ff92ce709a798334afc60e2adf76c078898d6d79fb866c8cb6659fff149360f983e
7
+ data.tar.gz: 3e69abecdf78153e5ceca5090fbf8b6202fb936f710eb49a659a6b3d25756d4e52d245c93bbad73b4ca7ed8a55419b329276a6d97cf490ec4e1387be0b5ab187
@@ -3,6 +3,9 @@ jobs:
3
3
  machine: true
4
4
  steps:
5
5
  - checkout
6
+ - run:
7
+ command: gem install bundler -v 1.17.1
8
+ name: gem install bundler -v 1.17.1
6
9
  - run:
7
10
  command: bundle install
8
11
  name: bundle install
@@ -13,6 +16,9 @@ jobs:
13
16
  machine: true
14
17
  steps:
15
18
  - checkout
19
+ - run:
20
+ command: gem install bundler -v 1.17.1
21
+ name: gem install bundler -v 1.17.1
16
22
  - run:
17
23
  command: bundle install
18
24
  name: bundle install
@@ -1,13 +1,28 @@
1
- ## 0.1.1 - 2018-11-12
1
+ ## Unreleased
2
2
 
3
- ### Changed
3
+ ## 0.2.0 - 2018-11-17
4
4
 
5
- - Improve logger format for compatibility with nestest.log.
5
+ ### Added
6
+
7
+ - Add CLI options and help message.
8
+ - Add PPU sprite reverse.
9
+
10
+ ### Fixed
11
+
12
+ - Fix PPU sprites rendering.
13
+ - Fix PPU sprite pattern addressing.
14
+ - Fix PPU background pattern attribute addressing.
15
+
16
+ ## 0.1.1 - 2018-11-12
6
17
 
7
18
  ### Added
8
19
 
9
20
  - Allow break-less input on key input.
10
21
 
22
+ ### Changed
23
+
24
+ - Improve logger format for compatibility with nestest.log.
25
+
11
26
  ### Fixed
12
27
 
13
28
  - Fix CPU ADC instruction.
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in rnes.gemspec
6
6
  gemspec
7
+
8
+ gem 'pry'
9
+ gem 'rspec'
10
+ gem 'rubocop'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rnes (0.1.0)
4
+ rnes (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -52,8 +52,8 @@ DEPENDENCIES
52
52
  pry
53
53
  rake (~> 10.0)
54
54
  rnes!
55
- rspec (= 3.7.0)
56
- rubocop (= 0.60.0)
55
+ rspec
56
+ rubocop
57
57
 
58
58
  BUNDLED WITH
59
59
  1.17.1
data/README.md CHANGED
@@ -22,7 +22,7 @@ gem install rnes
22
22
  Pass ROM file path to `rnes` executable.
23
23
 
24
24
  ```sh
25
- rnes <FILE>
25
+ Usage: rnes [options] <FILE>
26
26
  ```
27
27
 
28
28
  ## Controls
data/exe/rnes CHANGED
@@ -1,10 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
2
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
3
+ require 'optparse'
3
4
  require 'rnes'
4
5
 
5
- path = ARGV[0]
6
+ options = ARGV.getopts('h', 'help', 'log:')
7
+ log_file_path = options['log']
8
+ args = ARGV.parse!
9
+ help_message = "Usage: #{$PROGRAM_NAME} [options] <FILE>"
10
+ if options['h'] || options['help']
11
+ puts help_message
12
+ exit
13
+ end
14
+
15
+ path = args.first
16
+ unless path
17
+ abort help_message
18
+ end
19
+
6
20
  io = File.binread(path)
7
21
  bytes = io.bytes
8
- emulator = Rnes::Emulator.new
22
+ emulator = Rnes::Emulator.new(log_file_path: log_file_path)
9
23
  emulator.load_rom(bytes)
10
24
  emulator.run
@@ -5,9 +5,8 @@ require 'rnes/rom_loader'
5
5
 
6
6
  module Rnes
7
7
  class Emulator
8
- LOG_FILE_NAME = 'rnes.log'.freeze
9
-
10
- def initialize
8
+ # @param [String] log_file_path
9
+ def initialize(log_file_path: nil)
11
10
  parts_factory = ::Rnes::PartsFactory.new
12
11
  @cpu = parts_factory.cpu
13
12
  @cpu_bus = parts_factory.cpu_bus
@@ -16,7 +15,9 @@ module Rnes
16
15
  @keypad2 = parts_factory.keypad2
17
16
  @ppu = parts_factory.ppu
18
17
  @ppu_bus = parts_factory.ppu_bus
19
- @logger = ::Rnes::Logger.new(cpu: @cpu, path: LOG_FILE_NAME, ppu: @ppu)
18
+ if log_file_path
19
+ @logger = ::Rnes::Logger.new(cpu: @cpu, path: log_file_path, ppu: @ppu)
20
+ end
20
21
  end
21
22
 
22
23
  # @param [Array<Integer>] rom_bytes
@@ -6,6 +6,8 @@ require 'rnes/ram'
6
6
 
7
7
  module Rnes
8
8
  class Ppu
9
+ ADDRESS_TO_FINISH_SPRITE_PALETTE_TABLE = 0x3F1F
10
+
9
11
  ADDRESS_TO_START_ATTRIBUTE_TABLE = 0x23C0
10
12
 
11
13
  ADDRESS_TO_START_NAME_TABLE = 0x2000
@@ -20,6 +22,8 @@ module Rnes
20
22
 
21
23
  CYCLES_PER_LINE = 341
22
24
 
25
+ PALETTE_ADDRESS_RANGE = (ADDRESS_TO_START_BACKGROUND_PALETTE_TABLE..ADDRESS_TO_FINISH_SPRITE_PALETTE_TABLE).freeze
26
+
23
27
  SPRITE_RAM_BYTESIZE = 2**8
24
28
 
25
29
  SPRITES_COUNT = 64
@@ -34,6 +38,14 @@ module Rnes
34
38
 
35
39
  WINDOW_WIDTH = 256
36
40
 
41
+ ENCODED_ATTRIBUTES_HEIGHT = BLOCK_HEIGHT * 2
42
+
43
+ ENCODED_ATTRIBUTES_WIDTH = BLOCK_WIDTH * 2
44
+
45
+ ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE = WINDOW_WIDTH / ENCODED_ATTRIBUTES_WIDTH
46
+
47
+ ENCODED_ATTRIBUTES_COUNT_IN_VERTICAL_LINE = 256 / ENCODED_ATTRIBUTES_HEIGHT
48
+
37
49
  TILES_COUNT_IN_HORIZONTAL_LINE = WINDOW_WIDTH / TILE_WIDTH
38
50
 
39
51
  TILES_COUNT_IN_VERTICAL_LINE = WINDOW_HEIGHT / TILE_HEIGHT
@@ -180,6 +192,23 @@ module Rnes
180
192
  end
181
193
  end
182
194
 
195
+ # +---+---+
196
+ # | 0 | 1 |
197
+ # +---+---+
198
+ # | 2 | 3 |
199
+ # +---+---+
200
+ # @return [Integer] Integer from 0 to 3.
201
+ def block_id_in_encoded_attributes
202
+ (x_of_block.even? ? 0 : 1) + (y_of_block.even? ? 0 : 2)
203
+ end
204
+
205
+ # @return [Integer] Integer from 0 to 63.
206
+ def object_attribute_index
207
+ (y_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_VERTICAL_LINE) * ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
208
+ x_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
209
+ background_pattern_index_paging_offset
210
+ end
211
+
183
212
  def check_sprite_hit
184
213
  if read_from_sprite_ram(0) == y && @registers.background_enabled? && @registers.sprite_enabled?
185
214
  registers.sprite_hit = true
@@ -199,25 +228,21 @@ module Rnes
199
228
  end
200
229
 
201
230
  def draw_background_8pixels
202
- base_pattern_table_address = base_background_pattern_table_address
203
- character_index = read_character_index(tile_index)
204
- character_line_low_byte_address = TILE_HEIGHT * 2 * character_index + y_in_tile + base_pattern_table_address
205
- character_line_low_byte = read_character_data(character_line_low_byte_address)
206
- character_line_high_byte = read_character_data(character_line_low_byte_address + TILE_HEIGHT)
207
-
208
- block_id = 0
209
- block_id |= 0b01 if (x % BLOCK_WIDTH).odd?
210
- block_id |= 0b10 if (y % BLOCK_HEIGHT).odd?
211
- mini_palette_ids_byte = read_object_attribute(tile_index)
212
- mini_palette_id = (mini_palette_ids_byte >> (block_id * 2)) & 0b11
213
-
214
- TILE_WIDTH.times do |x_in_character|
215
- index_in_character_line_byte = TILE_WIDTH - 1 - x_in_character
216
- background_palette_index = character_line_low_byte[index_in_character_line_byte] | character_line_high_byte[index_in_character_line_byte] << 1 | mini_palette_id << 2
231
+ pattern_index = read_pattern_index(background_pattern_index)
232
+ pattern_line_low_byte_address = TILE_HEIGHT * 2 * pattern_index + y_in_tile
233
+ pattern_line_low_byte = read_background_pattern_line(pattern_line_low_byte_address)
234
+ pattern_line_high_byte = read_background_pattern_line(pattern_line_low_byte_address + TILE_HEIGHT)
235
+
236
+ mini_palette_ids_byte = read_object_attribute(object_attribute_index)
237
+ mini_palette_id = (mini_palette_ids_byte >> (block_id_in_encoded_attributes * 2)) & 0b11
238
+
239
+ TILE_WIDTH.times do |x_in_pattern|
240
+ index_in_pattern_line_byte = TILE_WIDTH - 1 - x_in_pattern
241
+ background_palette_index = pattern_line_low_byte[index_in_pattern_line_byte] | (pattern_line_high_byte[index_in_pattern_line_byte] << 1) | (mini_palette_id << 2)
217
242
  color_id = read_color_id(background_palette_index)
218
243
  @image.write(
219
244
  value: ::Rnes::Ppu::COLORS[color_id],
220
- x: x + x_in_character,
245
+ x: x + x_in_pattern,
221
246
  y: y,
222
247
  )
223
248
  end
@@ -237,31 +262,31 @@ module Rnes
237
262
  # |`------- horizontal flip
238
263
  # `-------- vertical flip
239
264
  def draw_sprites
240
- base_pattern_table_address = base_sprite_pattern_table_address
241
- SPRITES_COUNT.times do |i|
242
- base_sprite_ram_address = i * 4
265
+ 0.step(SPRITES_COUNT - 1, 4) do |base_sprite_ram_address|
243
266
  y_for_sprite = (read_from_sprite_ram(base_sprite_ram_address) - TILE_HEIGHT)
244
267
  next if y_for_sprite.negative?
245
- name_table_index = read_from_sprite_ram(base_sprite_ram_address + 1)
268
+ pattern_index = read_from_sprite_ram(base_sprite_ram_address + 1)
246
269
  sprite_attribute_byte = read_from_sprite_ram(base_sprite_ram_address + 2)
247
270
  x_for_sprite = read_from_sprite_ram(base_sprite_ram_address + 3)
248
271
 
249
- character_index = read_character_index(name_table_index)
250
-
251
272
  mini_palette_id = sprite_attribute_byte & 0b11
252
-
253
- TILE_HEIGHT.times do |y_in_character|
254
- character_line_low_byte_address = TILE_HEIGHT * 2 * character_index + y_in_character + base_pattern_table_address
255
- character_line_low_byte = read_character_data(character_line_low_byte_address)
256
- character_line_high_byte = read_character_data(character_line_low_byte_address + TILE_HEIGHT)
257
- TILE_WIDTH.times do |x_in_character|
258
- index_in_character_line_byte = TILE_WIDTH - 1 - x_in_character
259
- background_palette_index = character_line_low_byte[index_in_character_line_byte] | character_line_high_byte[index_in_character_line_byte] << 1 | mini_palette_id << 2
273
+ reversed_horizontally = sprite_attribute_byte[6] == 1
274
+ reversed_vertically = sprite_attribute_byte[7] == 1
275
+
276
+ TILE_HEIGHT.times do |y_in_pattern|
277
+ pattern_line_low_byte_address = TILE_HEIGHT * 2 * pattern_index + y_in_pattern
278
+ pattern_line_low_byte = read_sprite_pattern_line(pattern_line_low_byte_address)
279
+ pattern_line_high_byte = read_sprite_pattern_line(pattern_line_low_byte_address + TILE_HEIGHT)
280
+ TILE_WIDTH.times do |x_in_pattern|
281
+ index_in_pattern_line_byte = TILE_WIDTH - 1 - x_in_pattern
282
+ background_palette_index = pattern_line_low_byte[index_in_pattern_line_byte] | pattern_line_high_byte[index_in_pattern_line_byte] << 1 | mini_palette_id << 2
260
283
  color_id = read_color_id(background_palette_index)
284
+ y_in_pattern = TILE_HEIGHT - 1 - y_in_pattern if reversed_vertically
285
+ x_in_pattern = TILE_WIDTH - 1 - x_in_pattern if reversed_horizontally
261
286
  @image.write(
262
287
  value: ::Rnes::Ppu::COLORS[color_id],
263
- x: x_for_sprite + x_in_character,
264
- y: y_for_sprite + y_in_character,
288
+ x: x_for_sprite + x_in_pattern,
289
+ y: y_for_sprite + y_in_pattern,
265
290
  )
266
291
  end
267
292
  end
@@ -288,16 +313,15 @@ module Rnes
288
313
  (0...WINDOW_WIDTH).cover?(x) && (0...WINDOW_HEIGHT).cover?(y)
289
314
  end
290
315
 
291
- # @param [Integer] index
292
- # @return [Integer]
293
- def read_character_data(index)
294
- @bus.read(index)
316
+ # @return [Boolean]
317
+ def palette_data_requested?
318
+ PALETTE_ADDRESS_RANGE.cover?(@registers.video_ram_address % 0x4000)
295
319
  end
296
320
 
297
- # @param [Integer] index
321
+ # @param [Integer] index.
298
322
  # @return [Integer]
299
- def read_character_index(index)
300
- @bus.read(base_name_table_address + index)
323
+ def read_background_pattern_line(index)
324
+ read_pattern_line(base_background_pattern_table_address + index)
301
325
  end
302
326
 
303
327
  # @param [Integer] index
@@ -312,15 +336,9 @@ module Rnes
312
336
  @sprite_ram.read(address)
313
337
  end
314
338
 
315
- # @param [Integer] index
316
- # @return [Integer] 4-color-palette IDs of 4 blocks, as 8 bit data.
317
- def read_object_attribute(index)
318
- @bus.read(ADDRESS_TO_START_ATTRIBUTE_TABLE + index)
319
- end
320
-
321
339
  # @return [Integer]
322
340
  def read_from_video_ram_for_cpu
323
- if (0x3F00..0x3F1F).cover?(@registers.video_ram_address % 0x4000)
341
+ if palette_data_requested?
324
342
  value = @bus.read(@registers.video_ram_address)
325
343
  @video_ram_reading_buffer = @bus.read(@registers.video_ram_address - 0x1000)
326
344
  else
@@ -331,6 +349,30 @@ module Rnes
331
349
  value
332
350
  end
333
351
 
352
+ # @param [Integer] index
353
+ # @return [Integer] 4-color-palette IDs of 4 blocks, as 8 bit data.
354
+ def read_object_attribute(index)
355
+ @bus.read(ADDRESS_TO_START_ATTRIBUTE_TABLE + index)
356
+ end
357
+
358
+ # @param [Integer] index
359
+ # @return [Integer]
360
+ def read_pattern_line(index)
361
+ @bus.read(index)
362
+ end
363
+
364
+ # @param [Integer] index.
365
+ # @return [Integer]
366
+ def read_sprite_pattern_line(index)
367
+ read_pattern_line(base_sprite_pattern_table_address + index)
368
+ end
369
+
370
+ # @param [Integer] index
371
+ # @return [Integer]
372
+ def read_pattern_index(index)
373
+ @bus.read(base_name_table_address + index)
374
+ end
375
+
334
376
  def render_image
335
377
  @renderer.render(@image)
336
378
  end
@@ -345,23 +387,23 @@ module Rnes
345
387
  # | 2(0x0800) | 3(0x0C00) |
346
388
  # +-----------+-----------+
347
389
  # @return [Integer] Integer from 0x0000 to 0x0FC0.
348
- def tile_index
349
- tile_index_in_window + tile_index_paging_offset
390
+ def background_pattern_index
391
+ background_pattern_index_in_window + background_pattern_index_paging_offset
350
392
  end
351
393
 
352
394
  # @return [Integer] Integer from 0x0000 to 0x03C0.
353
- def tile_index_in_window
395
+ def background_pattern_index_in_window
354
396
  (y_of_tile % TILES_COUNT_IN_VERTICAL_LINE) * TILES_COUNT_IN_HORIZONTAL_LINE + x_of_tile % TILES_COUNT_IN_HORIZONTAL_LINE
355
397
  end
356
398
 
357
399
  # @return [Integer] Integer from 0 to 3.
358
- def tile_index_page
400
+ def background_pattern_index_page
359
401
  x_of_tile / TILES_COUNT_IN_HORIZONTAL_LINE + y_of_tile / TILES_COUNT_IN_VERTICAL_LINE * 2
360
402
  end
361
403
 
362
404
  # @return [Integer] 0x0000, 0x0400, 0x0800, or 0x0C00.
363
- def tile_index_paging_offset
364
- tile_index_page * 0x0400
405
+ def background_pattern_index_paging_offset
406
+ background_pattern_index_page * 0x0400
365
407
  end
366
408
 
367
409
  # @return [Boolean]
@@ -381,7 +423,7 @@ module Rnes
381
423
  # @param [Integer] value
382
424
  def write_to_sprite_ram_for_cpu(value)
383
425
  @sprite_ram.write(@registers.sprite_ram_address, value)
384
- @registers.sprite_ram_address += 1
426
+ @registers.sprite_ram_address = (@registers.sprite_ram_address + 1) & 0xFF
385
427
  end
386
428
 
387
429
  # @param [Integer] value
@@ -397,12 +439,27 @@ module Rnes
397
439
 
398
440
  # @return [Integer]
399
441
  def x_in_tile
400
- x % TILE_WIDTH
442
+ x_with_scroll % TILE_WIDTH
443
+ end
444
+
445
+ # @return [Integer]
446
+ def x_of_block
447
+ x_with_scroll / BLOCK_WIDTH
448
+ end
449
+
450
+ # @return [Integer]
451
+ def x_of_encoded_attributes
452
+ x_with_scroll / ENCODED_ATTRIBUTES_WIDTH
401
453
  end
402
454
 
403
455
  # @return [Integer]
404
456
  def x_of_tile
405
- (x + @registers.scroll_x) / TILE_WIDTH
457
+ x_with_scroll / TILE_WIDTH
458
+ end
459
+
460
+ # @return [Integer]
461
+ def x_with_scroll
462
+ x + @registers.scroll_x
406
463
  end
407
464
 
408
465
  # @return [Integer]
@@ -412,12 +469,27 @@ module Rnes
412
469
 
413
470
  # @return [Integer]
414
471
  def y_in_tile
415
- y % TILE_HEIGHT
472
+ y_with_scroll % TILE_HEIGHT
473
+ end
474
+
475
+ # @return [Integer]
476
+ def y_of_block
477
+ y_with_scroll / BLOCK_HEIGHT
478
+ end
479
+
480
+ # @return [Integer]
481
+ def y_of_encoded_attributes
482
+ y_with_scroll / ENCODED_ATTRIBUTES_HEIGHT
416
483
  end
417
484
 
418
485
  # @return [Integer]
419
486
  def y_of_tile
420
- (y + @registers.scroll_y) / TILE_HEIGHT
487
+ y_with_scroll / TILE_HEIGHT
488
+ end
489
+
490
+ # @return [Integer]
491
+ def y_with_scroll
492
+ y + @registers.scroll_y
421
493
  end
422
494
  end
423
495
  end
@@ -6,7 +6,6 @@ module Rnes
6
6
  attr_reader :character_ram
7
7
 
8
8
  # @param [Rnes::Ram] character_ram
9
- # @param [Rnes::Ram] sprite_ram
10
9
  # @param [Rnes::Ram] video_ram
11
10
  def initialize(character_ram:, video_ram:)
12
11
  @character_ram = character_ram
@@ -38,8 +38,8 @@ module Rnes
38
38
  @sprite_ram_address = 0x00
39
39
  @video_ram_address = 0x0000
40
40
 
41
- @address_latch = false
42
- @scroll_latch = false
41
+ @buffer = 0x00
42
+ @latch = false
43
43
  end
44
44
 
45
45
  # @return [Boolean]
@@ -124,12 +124,13 @@ module Rnes
124
124
 
125
125
  # @param [Integer] value
126
126
  def scroll=(value)
127
- if @scroll_latch
127
+ if @latch
128
+ @scroll_x = @buffer
128
129
  @scroll_y = value
129
130
  else
130
- @scroll_x = value
131
+ @buffer = value
131
132
  end
132
- @scroll_latch = !@scroll_latch
133
+ toggle_latch
133
134
  end
134
135
 
135
136
  # @return [Boolean]
@@ -161,23 +162,26 @@ module Rnes
161
162
  def status
162
163
  value = @status
163
164
  self.in_v_blank = false
164
- @address_latch = false
165
- @scroll_latch = false
165
+ @latch = false
166
166
  value
167
167
  end
168
168
 
169
169
  # @param [Integer] value
170
170
  def video_ram_address=(value)
171
- if @address_latch
172
- @video_ram_address |= value
171
+ if @latch
172
+ @video_ram_address = value + (@buffer << 8)
173
173
  else
174
- @video_ram_address = value << 8
174
+ @buffer = value
175
175
  end
176
- @address_latch = !@address_latch
176
+ toggle_latch
177
177
  end
178
178
 
179
179
  private
180
180
 
181
+ def toggle_latch
182
+ @latch = !@latch
183
+ end
184
+
181
185
  # @param [Integer] index
182
186
  # @param [Boolean] boolean
183
187
  def toggle_status_bit(index, boolean)
@@ -1,3 +1,3 @@
1
1
  module Rnes
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -24,8 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.required_ruby_version = '>= 2.2'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.17'
27
- spec.add_development_dependency 'pry'
28
27
  spec.add_development_dependency 'rake', '~> 10.0'
29
- spec.add_development_dependency 'rspec', '3.7.0'
30
- spec.add_development_dependency 'rubocop', '0.60.0'
31
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rnes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-12 00:00:00.000000000 Z
11
+ date: 2018-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.17'
27
- - !ruby/object:Gem::Dependency
28
- name: pry
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,34 +38,6 @@ dependencies:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
40
  version: '10.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 3.7.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 3.7.0
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 0.60.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 0.60.0
83
41
  description:
84
42
  email:
85
43
  - r7kamura@gmail.com