sijka 0.0.3.5 → 0.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
- SHA1:
3
- metadata.gz: 04f78e121417021ca540680a3472a9d9ef93df85
4
- data.tar.gz: 7750a44b6ee255aa692969b085bbfa8b5d47062a
2
+ SHA256:
3
+ metadata.gz: 652ec21dae9b00a0a020798053bc7689497375a4e0238ba72168e38bc372f832
4
+ data.tar.gz: b3557d3e0257328aa0bdb99476d625cb8c84e228730455e633c8d2546bbd4f20
5
5
  SHA512:
6
- metadata.gz: f3e3d92a5553280d7fd2513661d39e23a4aa002960401a4ade31f4225ea7015aff86cf0c47348eb2e023f899253b2010e66cad1d1932c34d4088b4f9e87abe66
7
- data.tar.gz: 835c8d980e38fe51e2fc09c5afdfc4c7a17d831a8b31b97ef74b4267782bc485cdf199dfd3ad58574237fd2439f2e667209200d2d242e42c0d931805a0a8345e
6
+ metadata.gz: 20ad9e8fe3e4301cf165554c575e91b6e7a35dd3cc6f6874ad612b5bb18c9c0dca56a82602ddaafe26a831048af9b9e8d7f144d5e9b04869ca7036d7c012895c
7
+ data.tar.gz: 629ebf20b628c8b2dba6112995d286330760bc3f03a7e253a30dbc8eb0c6fcee238211443304878caeae25ff0cbaf3e98463661378bad0dfd46fcf33fa853e48
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -0,0 +1,2 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
@@ -0,0 +1,35 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-05-12 16:32:19 +0300 using RuboCop version 0.52.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ # Configuration parameters: CountComments, ExcludedMethods.
11
+ Metrics/BlockLength:
12
+ Max: 100
13
+
14
+ # Offense count: 1
15
+ # Configuration parameters: CountComments.
16
+ Metrics/MethodLength:
17
+ Max: 50
18
+
19
+ # Offense count: 15
20
+ # Cop supports --auto-correct.
21
+ # Configuration parameters: EnforcedStyle.
22
+ # SupportedStyles: when_needed, always, never
23
+ Style/FrozenStringLiteralComment:
24
+ Enabled: false
25
+
26
+ # Offense count: 5
27
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
28
+ # URISchemes: http, https
29
+
30
+ # Offense count: 4
31
+ Style/Documentation:
32
+ Enabled: false
33
+
34
+ Metrics/LineLength:
35
+ Max: 120
@@ -0,0 +1 @@
1
+ 2.5.1
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.4.1
5
+
6
+ cache: bundler
7
+
8
+ bundler_args: --jobs=3 --retry=3
9
+
10
+ script:
11
+ - bundle exec rubocop -P
12
+ - bundle exec parallel_rspec spec/
13
+
14
+ notifications:
15
+ email: false
16
+
17
+ addons:
18
+ apt:
19
+ update: true
data/Gemfile CHANGED
@@ -3,10 +3,12 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in sijka.gemspec
4
4
  gemspec
5
5
 
6
+ gem 'curses'
6
7
  gem 'i18n', '~> 0.7.0'
7
- gem 'ruby-terminfo', '~> 0.1.1'
8
8
 
9
9
  group :development, :test do
10
+ gem 'parallel_tests'
10
11
  gem 'pry'
11
12
  gem 'rspec'
13
+ gem 'rubocop'
12
14
  end
@@ -0,0 +1,66 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ sijka (0.1)
5
+ curses (~> 1.2, >= 1.2.5)
6
+ i18n (~> 0.7, >= 0.7.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ ast (2.4.0)
12
+ coderay (1.1.2)
13
+ curses (1.2.5)
14
+ diff-lcs (1.3)
15
+ i18n (0.7.0)
16
+ method_source (0.9.0)
17
+ parallel (1.12.1)
18
+ parallel_tests (2.21.3)
19
+ parallel
20
+ parser (2.5.1.0)
21
+ ast (~> 2.4.0)
22
+ powerpack (0.1.1)
23
+ pry (0.11.3)
24
+ coderay (~> 1.1.0)
25
+ method_source (~> 0.9.0)
26
+ rainbow (3.0.0)
27
+ rake (10.5.0)
28
+ rspec (3.7.0)
29
+ rspec-core (~> 3.7.0)
30
+ rspec-expectations (~> 3.7.0)
31
+ rspec-mocks (~> 3.7.0)
32
+ rspec-core (3.7.1)
33
+ rspec-support (~> 3.7.0)
34
+ rspec-expectations (3.7.0)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.7.0)
37
+ rspec-mocks (3.7.0)
38
+ diff-lcs (>= 1.2.0, < 2.0)
39
+ rspec-support (~> 3.7.0)
40
+ rspec-support (3.7.1)
41
+ rubocop (0.55.0)
42
+ parallel (~> 1.10)
43
+ parser (>= 2.5)
44
+ powerpack (~> 0.1)
45
+ rainbow (>= 2.2.2, < 4.0)
46
+ ruby-progressbar (~> 1.7)
47
+ unicode-display_width (~> 1.0, >= 1.0.1)
48
+ ruby-progressbar (1.9.0)
49
+ unicode-display_width (1.3.2)
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ bundler (~> 1.16, >= 1.16.1)
56
+ curses
57
+ i18n (~> 0.7.0)
58
+ parallel_tests
59
+ pry
60
+ rake (~> 10.5)
61
+ rspec
62
+ rubocop
63
+ sijka!
64
+
65
+ BUNDLED WITH
66
+ 1.16.1
data/bin/sijka CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require_relative '../lib/sijka'
4
4
 
5
- Sijka::Sijka.new(ARGV, STDIN).smoke
5
+ Sijka::Sijka.new(ARGV).smoke
data/bin/smoke CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require_relative '../lib/sijka'
4
4
 
5
- Sijka::Sijka.new(ARGV, STDIN).smoke
5
+ Sijka::Sijka.new(ARGV).smoke
@@ -1,24 +1,26 @@
1
1
  require_relative 'sijka/smoke'
2
2
  require_relative 'sijka/parser'
3
3
  require_relative 'sijka/translator'
4
+ require_relative 'sijka/curses_initializer'
4
5
 
5
- $LOAD_PATH.unshift(File.dirname(File.realpath(__FILE__)))
6
+ $LOAD_PATH.unshift(__dir__)
6
7
 
7
8
  module Sijka
8
9
  class Sijka
9
10
  FILE_LIST = (Dir.entries("#{$LOAD_PATH.first}/characters") - %w[. ..]).freeze
11
+ attr_reader :options, :message
10
12
 
11
- def initialize(argv, stdin)
12
- sijka_parser = SijkaParser.new(argv, stdin)
13
+ def initialize(argv)
14
+ sijka_parser = SijkaParser.new(argv)
13
15
  @options = sijka_parser.parse_flags
14
16
  @message = sijka_parser.parse_message
15
17
  end
16
18
 
17
19
  def smoke
18
- if @options['list']
20
+ if options['list']
19
21
  puts 'Sijka files:', "\n", FILE_LIST
20
22
  else
21
- Smoke.new(@message, @options['sijkafile']).smoke
23
+ Smoke.new(message, options['sijkafile']).smoke
22
24
  end
23
25
  end
24
26
  end
@@ -0,0 +1,31 @@
1
+ require 'curses'
2
+
3
+ module Sijka
4
+ class CursesInitializer
5
+ class << self
6
+ def call
7
+ init_curses
8
+ end
9
+
10
+ def init_curses
11
+ Curses.init_screen
12
+ Curses.nonl
13
+ Curses.noecho
14
+ Curses.curs_set 0
15
+
16
+ set_curses_trap
17
+ end
18
+
19
+ def set_curses_trap
20
+ %w[HUP INT QUIT TERM].each do |sig|
21
+ trap(sig) { |s| onsig(s) } if trap(sig, 'IGNORE') != 'IGNORE'
22
+ end
23
+ end
24
+
25
+ def onsig(signal)
26
+ Curses.close_screen
27
+ exit signal
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,9 +2,8 @@ require 'optparse'
2
2
 
3
3
  module Sijka
4
4
  class SijkaParser
5
- def initialize(argv, stdin)
5
+ def initialize(argv)
6
6
  @argv = argv
7
- @stdin = stdin
8
7
  end
9
8
 
10
9
  def parse_flags
@@ -25,11 +24,7 @@ module Sijka
25
24
  end
26
25
 
27
26
  def parse_message
28
- if @argv.any?
29
- @argv.join(' ')
30
- else
31
- @stdin.tty? ? '' : @argv.read.chomp
32
- end
27
+ @argv.any? ? @argv.join(' ') : ''
33
28
  end
34
29
  end
35
30
  end
@@ -1,59 +1,83 @@
1
- require 'terminfo'
2
-
3
1
  module Sijka
4
2
  class Smoke
5
- SLEEP_TIME = 0.02
3
+ MOVE_SLEEP_TIME = 0.025
4
+ SLEEP_TIME_IN_THE_END = 1.5
5
+ DEFAULT_IMG_FILE = 'sijka'.freeze
6
6
 
7
- def initialize(name, file_name)
8
- set_standarted_img file_name
9
- @movement_range = TermInfo.screen_size[1] - @img_length
7
+ attr_reader :img_file_name, :smoker_name
10
8
 
11
- message = Translator.new.smoken_with_locale(file_name)
12
- @message_with_name = name.to_s.empty? ? "#{message}!" : "#{message}, #{name}!"
9
+ def initialize(smoker_name, file_name)
10
+ @smoker_name = smoker_name
11
+ @img_file_name = validated_img_file_name(file_name&.downcase)
12
+ load_standarted_img
13
+ CursesInitializer.call
14
+ @movement_range = Curses.cols - @img_length
13
15
  end
14
16
 
15
17
  def smoke
16
18
  right_move
17
19
  reverse_img
18
20
  left_move
19
- puts @message_with_name
20
- sleep(1.3)
21
- system 'clear'
21
+ write_end_message
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- def right_move
27
- @movement_range.times do
28
- system 'clear'
29
- puts @img
30
- sleep(SLEEP_TIME)
31
- @img.map! { |line| line.insert(0, ' ') }
32
- end
26
+ def clear_terminal
27
+ Curses.refresh
28
+ Curses.clear
33
29
  end
34
30
 
35
- def set_standarted_img(file_name)
36
- file_name = !file_name.to_s.empty? && Sijka::FILE_LIST.include?(file_name) ? file_name : 'sijka'
37
- file_path = "#{$LOAD_PATH.first}/characters/#{file_name.downcase}"
38
- @img = File.open(file_path) { |file| file.read.split("\n") }
31
+ def place_string(y_pos:, x_pos:, line:)
32
+ Curses.setpos(y_pos, x_pos)
33
+ Curses.addstr(line)
34
+ end
39
35
 
40
- @img_length = @img.max_by(&:length).length
41
- @img.map { |line| line << ' ' * (@img_length - line.length) }
36
+ def draw_image(start_position:)
37
+ @img.each_with_index { |line, y_position| place_string(y_pos: y_position, x_pos: start_position, line: line) }
42
38
  end
43
39
 
44
- def reverse_img
45
- @img.map! do |line|
46
- line[0..@movement_range - 1] + line[@movement_range..-1].reverse
40
+ def right_move
41
+ @movement_range.times do |i|
42
+ draw_image(start_position: i)
43
+ sleep(MOVE_SLEEP_TIME)
44
+ clear_terminal
47
45
  end
48
46
  end
49
47
 
50
48
  def left_move
51
- @movement_range.times do
52
- system 'clear'
53
- puts @img
54
- sleep(SLEEP_TIME)
55
- @img.map! { |line| line[1..-1] }
49
+ @movement_range.times do |i|
50
+ draw_image(start_position: @movement_range - i)
51
+ sleep(MOVE_SLEEP_TIME)
52
+ clear_terminal
56
53
  end
57
54
  end
55
+
56
+ def reverse_img
57
+ @img.map!(&:reverse)
58
+ end
59
+
60
+ def message_with_name
61
+ message = Translator.new.smoken_with_locale(img_file_name)
62
+ smoker_name.to_s.empty? ? "#{message}!" : "#{message}, #{smoker_name}!"
63
+ end
64
+
65
+ def write_end_message
66
+ place_string(y_pos: 0, x_pos: 0, line: message_with_name)
67
+ clear_terminal
68
+ sleep(SLEEP_TIME_IN_THE_END)
69
+ end
70
+
71
+ def load_standarted_img
72
+ file_path = "#{$LOAD_PATH.first}/characters/#{img_file_name}"
73
+ @img = File.open(file_path) { |file| file.read.split("\n") }
74
+
75
+ @img_length = @img.max_by(&:length).length
76
+ @img.map { |line| line << ' ' * (@img_length - line.length) }
77
+ end
78
+
79
+ def validated_img_file_name(file_name)
80
+ file_name && Sijka::FILE_LIST.include?(file_name) ? file_name : DEFAULT_IMG_FILE
81
+ end
58
82
  end
59
83
  end
@@ -1,3 +1,3 @@
1
1
  module Sijka
2
- VERSION = '0.0.3.5'.freeze
2
+ VERSION = '0.1'.freeze
3
3
  end
@@ -1,6 +1,4 @@
1
- # coding: utf-8
2
-
3
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
3
  require 'sijka/version'
6
4
 
@@ -20,8 +18,9 @@ Gem::Specification.new do |spec|
20
18
  spec.require_paths = ['lib']
21
19
 
22
20
  spec.version = Sijka::VERSION
23
- spec.add_runtime_dependency 'ruby-terminfo', '~> 0.1.1'
24
- spec.add_runtime_dependency 'i18n', '>= 0.7.0'
25
- spec.add_development_dependency 'bundler', '~> 1.15'
26
- spec.add_development_dependency 'rake', '~> 10.0'
21
+ spec.add_runtime_dependency 'curses', '~> 1.2', '>= 1.2.5'
22
+ spec.add_runtime_dependency 'i18n', '~> 0.7', '>= 0.7.0'
23
+ spec.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.1'
24
+ spec.add_development_dependency 'rake', '~> 10.5'
25
+ spec.add_development_dependency 'rspec', '~> 3.7'
27
26
  end
metadata CHANGED
@@ -1,33 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sijka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.5
4
+ version: '0.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario_Sparta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-12 00:00:00.000000000 Z
11
+ date: 2018-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ruby-terminfo
14
+ name: curses
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.1
19
+ version: '1.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.5
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 0.1.1
29
+ version: '1.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.5
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: i18n
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.7'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
42
  version: 0.7.0
@@ -35,6 +44,9 @@ dependencies:
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.7'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
52
  version: 0.7.0
@@ -44,28 +56,48 @@ dependencies:
44
56
  requirements:
45
57
  - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: '1.15'
59
+ version: '1.16'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.16.1
48
63
  type: :development
49
64
  prerelease: false
50
65
  version_requirements: !ruby/object:Gem::Requirement
51
66
  requirements:
52
67
  - - "~>"
53
68
  - !ruby/object:Gem::Version
54
- version: '1.15'
69
+ version: '1.16'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.16.1
55
73
  - !ruby/object:Gem::Dependency
56
74
  name: rake
57
75
  requirement: !ruby/object:Gem::Requirement
58
76
  requirements:
59
77
  - - "~>"
60
78
  - !ruby/object:Gem::Version
61
- version: '10.0'
79
+ version: '10.5'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '10.5'
87
+ - !ruby/object:Gem::Dependency
88
+ name: rspec
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '3.7'
62
94
  type: :development
63
95
  prerelease: false
64
96
  version_requirements: !ruby/object:Gem::Requirement
65
97
  requirements:
66
98
  - - "~>"
67
99
  - !ruby/object:Gem::Version
68
- version: '10.0'
100
+ version: '3.7'
69
101
  description: Smoke without harm to health
70
102
  email:
71
103
  - megosparta@mail.ru
@@ -77,8 +109,14 @@ extra_rdoc_files: []
77
109
  files:
78
110
  - ".DS_Store"
79
111
  - ".gitignore"
112
+ - ".rspec"
113
+ - ".rubocop.yml"
114
+ - ".rubocop_todo.yml"
115
+ - ".ruby-version"
116
+ - ".travis.yml"
80
117
  - CODE_OF_CONDUCT.md
81
118
  - Gemfile
119
+ - Gemfile.lock
82
120
  - LICENSE.txt
83
121
  - README.md
84
122
  - Rakefile
@@ -90,6 +128,7 @@ files:
90
128
  - lib/characters/nyan_cat
91
129
  - lib/characters/sijka
92
130
  - lib/sijka.rb
131
+ - lib/sijka/curses_initializer.rb
93
132
  - lib/sijka/parser.rb
94
133
  - lib/sijka/smoke.rb
95
134
  - lib/sijka/translator.rb
@@ -120,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
159
  version: '0'
121
160
  requirements: []
122
161
  rubyforge_project:
123
- rubygems_version: 2.6.14
162
+ rubygems_version: 2.7.6
124
163
  signing_key:
125
164
  specification_version: 4
126
165
  summary: To smoke a cigarette.