sijka 0.0.3.5 → 0.1

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