transpec 3.3.0 → 3.4.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
- SHA1:
3
- metadata.gz: 776c4008f4f9b8774ba45005e5a01ff5ea623355
4
- data.tar.gz: 590eb411838be93f6073e91e1ac62db2a2cd5169
2
+ SHA256:
3
+ metadata.gz: 5f050e81b8e897c4e35a682c4ac792a6cfc66eae45e91c36cc7e2fd937fa6562
4
+ data.tar.gz: 03210bb216919ec7481a66401aba1c85a5f46d6c5ea13160d2b396741b7ace91
5
5
  SHA512:
6
- metadata.gz: ba23453c7453fda5bd427dc4ba09c56a98dc9da01c08627e2f31e7b9f1b6ab1f6c659559e5ef2237dc83cca0a491e2400b7141d5ebe67c8bcad385be859a5423
7
- data.tar.gz: 8196d68cc2beaa8a10bdf6b99dfad2d11671bb97f654474f46e9ba5672b41a4ffa90da3cc75201d084e0c0d3487f9353eed5821110687f66d17bf13961444fac
6
+ metadata.gz: 1de6e9796ab5f7e9b53099f070d5a76a2fd9c23f249e01b4e2992c0a97e8cba81d3a6af3d7e2db748bdf9e9b8ff053ed6a7327903bbbea9f4d9f889b69f2f4e1
7
+ data.tar.gz: a1a5db78f94f4cff4f952c123cda966a43c284311ce3aac7b60f190b9e5e9b6576c71ae75315c62d3c1467bec46ec902d64e10f38cde3fdad272df9755df8689
@@ -1,26 +1,21 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
4
  - 2.1.10
6
- - 2.2.6
7
- - 2.3.3
8
- - 2.4.0
9
- - ruby-head
10
- - jruby-19mode
11
- - jruby-9.1.7.0
5
+ - 2.2.10
6
+ - 2.3.7
7
+ - 2.4.4
8
+ - 2.5.1
9
+ - jruby-9.2.0.0
12
10
  env:
13
11
  - RSPEC_VERSION=2.14
14
12
  - RSPEC_VERSION=2.99
15
13
  - RSPEC_VERSION=3.0
16
- - RSPEC_VERSION=3.5
14
+ - RSPEC_VERSION=3.8
17
15
  - RSPEC_VERSION=master
18
- matrix:
19
- allow_failures:
20
- - rvm: ruby-head
16
+ sudo: false
17
+ cache: bundler
21
18
  before_install:
22
19
  - gem update --system # https://github.com/sickill/rainbow/issues/49
23
20
  - gem update --remote bundler
24
21
  script: bundle exec rake ci
25
- sudo: false
26
- cache: bundler
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v3.4.0
6
+
7
+ * Drop support for Ruby 1.9.3.
8
+ * Use `parser` gem 2.5.0.0 or later.
9
+ * Handle deprecation message `Parser::Source::Rewriter is deprecated.` from `parser` gem.
10
+
5
11
  ## v3.3.0
6
12
 
7
13
  * Support `json` gem 2.x and `activesupport` gem 5.x.
data/Gemfile CHANGED
@@ -2,6 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'activesupport', '< 5.0' if RUBY_VERSION < '2.2'
6
+
5
7
  group :development, :test do
6
8
  rspec_version = ENV['RSPEC_VERSION'] || '2.14'
7
9
 
@@ -18,15 +20,7 @@ group :development, :test do
18
20
  # https://github.com/rspec/rspec-core/pull/2197
19
21
  gem 'rake', '~> 11.0'
20
22
  gem 'simplecov', '~> 0.7'
21
- gem 'rubocop', '~> 0.39'
22
- end
23
-
24
- group :development do
25
- gem 'fuubar', '>= 1.3', '< 3.0'
26
- gem 'guard-rspec', '>= 4.2.3', '< 5.0'
27
- gem 'guard-rubocop', '~> 1.0'
28
- gem 'guard-shell', '~> 0.5'
29
- gem 'ruby_gntp', '~> 0.3'
23
+ gem 'rubocop', '~> 0.47.1'
30
24
  end
31
25
 
32
26
  group :test do
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/transpec.svg)](http://badge.fury.io/rb/transpec)
2
- [![Dependency Status](https://gemnasium.com/yujinakayama/transpec.svg)](https://gemnasium.com/yujinakayama/transpec)
3
2
  [![Build Status](https://travis-ci.org/yujinakayama/transpec.svg?branch=master&style=flat)](https://travis-ci.org/yujinakayama/transpec)
4
3
  [![Coverage Status](https://coveralls.io/repos/yujinakayama/transpec/badge.svg?branch=master&service=github)](https://coveralls.io/github/yujinakayama/transpec?branch=master)
5
4
  [![Code Climate](https://codeclimate.com/github/yujinakayama/transpec/badges/gpa.svg)](https://codeclimate.com/github/yujinakayama/transpec)
@@ -1451,19 +1450,16 @@ end
1451
1450
 
1452
1451
  Transpec is tested on the following Ruby implementations:
1453
1452
 
1454
- * MRI
1455
- * 1.9.3
1456
- * 2.0.0
1457
- * 2.1.10
1458
- * 2.2.6
1459
- * 2.3.3
1460
- * 2.4.0
1461
- * JRuby
1462
- * 1.9 mode
1463
- * 9.1.7.0
1453
+ * MRI 2.0.0
1454
+ * MRI 2.1.10
1455
+ * MRI 2.2.10
1456
+ * MRI 2.3.7
1457
+ * MRI 2.4.4
1458
+ * MRI 2.5.1
1459
+ * JRuby 9.2.0.0
1464
1460
 
1465
1461
  ## License
1466
1462
 
1467
- Copyright (c) 2013–2017 Yuji Nakayama
1463
+ Copyright (c) 2013–2018 Yuji Nakayama
1468
1464
 
1469
1465
  See the [LICENSE.txt](LICENSE.txt) for details.
@@ -1,5 +1,4 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/transpec.svg)](http://badge.fury.io/rb/transpec)
2
- [![Dependency Status](https://gemnasium.com/yujinakayama/transpec.svg)](https://gemnasium.com/yujinakayama/transpec)
3
2
  [![Build Status](https://travis-ci.org/yujinakayama/transpec.svg?branch=master&style=flat)](https://travis-ci.org/yujinakayama/transpec)
4
3
  [![Coverage Status](https://coveralls.io/repos/yujinakayama/transpec/badge.svg?branch=master&service=github)](https://coveralls.io/github/yujinakayama/transpec?branch=master)
5
4
  [![Code Climate](https://codeclimate.com/github/yujinakayama/transpec/badges/gpa.svg)](https://codeclimate.com/github/yujinakayama/transpec)
@@ -457,8 +456,8 @@ The one-liner (implicit receiver) `should`:
457
456
  ## Supported Conversions
458
457
 
459
458
  <%=
460
- supported_conversions_section = select_sections(readme, 2, 'Supported Conversions').first
461
- table_of_contents(supported_conversions_section, 3)
459
+ supported_conversions_section = find_section('Supported Conversions', level: 2)
460
+ table_of_contents(supported_conversions_section, level: 3)
462
461
  %>
463
462
 
464
463
  ### Standard expectations
@@ -1472,21 +1471,10 @@ Will be converted to:
1472
1471
 
1473
1472
  Transpec is tested on the following Ruby implementations:
1474
1473
 
1475
- * MRI
1476
- <%= travis_config['rvm'].grep(/\A\d/).map { |version| " * #{version}" }.join("\n") %>
1477
- * JRuby
1478
- <%=
1479
- travis_config['rvm'].grep(/\Ajruby-/).map do |name|
1480
- version = name.sub('jruby-', '')
1481
- if /\A(?<major>\d)(?<minor>\d)mode\z/ =~ version
1482
- version = "#{major}.#{minor} mode"
1483
- end
1484
- " * #{version}"
1485
- end.join("\n")
1486
- %>
1474
+ <%= supported_ruby_names.map { |name| "* #{name}" }.join("\n") %>
1487
1475
 
1488
1476
  ## License
1489
1477
 
1490
- Copyright (c) 2013–<%= DateTime.now.year %> Yuji Nakayama
1478
+ Copyright (c) 2013–<%= Time.now.year %> Yuji Nakayama
1491
1479
 
1492
1480
  See the [LICENSE.txt](LICENSE.txt) for details.
data/Rakefile CHANGED
@@ -1,8 +1,7 @@
1
- require 'bundler/setup'
2
1
  require 'bundler/gem_tasks'
3
- require 'rubocop/rake_task'
4
2
  require 'rspec/core/version'
5
3
 
4
+ require 'rubocop/rake_task'
6
5
  RuboCop::RakeTask.new(:style)
7
6
 
8
7
  Dir['tasks/**/*.rake'].each do |path|
@@ -4,6 +4,23 @@ require 'transpec/processed_source'
4
4
 
5
5
  module Transpec
6
6
  class BaseRewriter
7
+ def self.create_source_rewriter(processed_source)
8
+ # We prefer :warn diagnostic level and diagnostic consumer over :raise level
9
+ # because the Parser::ClobberingError raised with :raise does not contain detailed message.
10
+ # https://github.com/whitequark/parser/blob/v2.5.1.2/lib/parser/source/tree_rewriter.rb#L297
11
+ source_rewriter = Parser::Source::TreeRewriter.new(
12
+ processed_source.buffer,
13
+ different_replacements: :warn,
14
+ swallowed_insertions: :warn
15
+ )
16
+
17
+ source_rewriter.diagnostics.consumer = proc do |diagnostic|
18
+ fail OverlappedRewriteError, diagnostic.render.join("\n")
19
+ end
20
+
21
+ source_rewriter
22
+ end
23
+
7
24
  def rewrite_file!(arg)
8
25
  processed_source = case arg
9
26
  when String then ProcessedSource.from_file(arg)
@@ -26,7 +43,7 @@ module Transpec
26
43
  def rewrite(processed_source)
27
44
  fail processed_source.error if processed_source.error
28
45
 
29
- source_rewriter = create_source_rewriter(processed_source)
46
+ source_rewriter = self.class.create_source_rewriter(processed_source)
30
47
  incomplete = false
31
48
 
32
49
  begin
@@ -43,14 +60,6 @@ module Transpec
43
60
 
44
61
  private
45
62
 
46
- def create_source_rewriter(processed_source)
47
- Parser::Source::Rewriter.new(processed_source.buffer).tap do |source_rewriter|
48
- source_rewriter.diagnostics.consumer = proc do
49
- fail OverlappedRewriteError
50
- end
51
- end
52
- end
53
-
54
63
  def process(ast, source_rewriter) # rubocop:disable UnusedMethodArgument
55
64
  fail NotImplementedError
56
65
  end
@@ -69,22 +69,20 @@ module Transpec
69
69
  end
70
70
 
71
71
  def inject_analysis_code(node, analysis_codes, source_rewriter)
72
- front, rear = build_wrapper_codes(node, analysis_codes)
73
-
74
72
  source_range = if (block_node = block_node_taken_by_method(node))
75
73
  block_node.loc.expression
76
74
  else
77
75
  node.loc.expression
78
76
  end
79
77
 
80
- source_rewriter.insert_before_multi(source_range, front)
81
- source_rewriter.insert_after_multi(source_range, rear)
78
+ forward, backward = build_wrapper_codes(node, analysis_codes)
79
+ source_rewriter.wrap(source_range, forward, backward)
82
80
  end
83
81
 
84
82
  def build_wrapper_codes(node, analysis_codes)
85
- front = "#{ANALYSIS_MODULE}.#{ANALYSIS_METHOD}(("
86
- rear = format('), self, %s, %s)', node_id(node).inspect, hash_literal(analysis_codes))
87
- [front, rear]
83
+ forward = "#{ANALYSIS_MODULE}.#{ANALYSIS_METHOD}(("
84
+ backward = format('), self, %s, %s)', node_id(node).inspect, hash_literal(analysis_codes))
85
+ [forward, backward]
88
86
  end
89
87
 
90
88
  # Hash#inspect generates invalid literal with following example:
@@ -105,16 +105,20 @@ module Transpec
105
105
  end
106
106
 
107
107
  def insert_before(range, content)
108
- source_rewriter.insert_before_multi(range, content)
108
+ source_rewriter.insert_before(range, content)
109
109
  end
110
110
 
111
111
  def insert_after(range, content)
112
- source_rewriter.insert_after_multi(range, content)
112
+ source_rewriter.insert_after(range, content)
113
113
  end
114
114
 
115
115
  def replace(range, content)
116
116
  source_rewriter.replace(range, content)
117
117
  end
118
+
119
+ def wrap(range, forward_content, backward_content)
120
+ source_rewriter.wrap(range, forward_content, backward_content)
121
+ end
118
122
  end
119
123
  end
120
124
  end
@@ -26,8 +26,7 @@ module Transpec
26
26
 
27
27
  def convert_to_describe_subject_it!
28
28
  insert_before(beginning_of_line_range(block_node), front_code)
29
- insert_before(expression_range, additional_indentation_for_it)
30
- replace(range_from_its_to_front_of_block, 'it ')
29
+ replace(range_from_its_to_front_of_block, additional_indentation_for_it + 'it ')
31
30
  insert_after(block_node.loc.expression, rear_code)
32
31
 
33
32
  increment_block_base_indentation!
@@ -19,8 +19,7 @@ module Transpec
19
19
  if Util.in_explicit_parentheses?(subject_node)
20
20
  insert_before(subject_range, method)
21
21
  else
22
- insert_before(subject_range, "#{method}(")
23
- insert_after(subject_range, ')')
22
+ wrap(subject_range, "#{method}(", ')')
24
23
  end
25
24
  end
26
25
  end
@@ -4,7 +4,7 @@ module Transpec
4
4
  # http://semver.org/
5
5
  module Version
6
6
  MAJOR = 3
7
- MINOR = 3
7
+ MINOR = 4
8
8
  PATCH = 0
9
9
 
10
10
  def self.to_s
@@ -1,10 +1,10 @@
1
1
  # coding: utf-8
2
2
 
3
- tasks = %w(spec)
3
+ tasks = ['spec']
4
4
 
5
5
  if RSpec::Core::Version::STRING.start_with?('2.14') && RUBY_ENGINE != 'jruby'
6
- tasks << 'style' if RUBY_VERSION >= '2.0.0'
7
- tasks.concat(%w(readme:check test:all))
6
+ tasks << 'style'
7
+ tasks << 'readme:check'
8
8
  end
9
9
 
10
10
  task ci: tasks
@@ -41,157 +41,204 @@ class READMEContext
41
41
 
42
42
  def initialize(readme)
43
43
  @readme = readme
44
- require 'transpec/cli'
45
- require 'stringio'
46
- require 'tmpdir'
47
- require 'rspec/mocks/standalone'
48
- require File.join(Transpec.root, 'spec/support/file_helper')
49
44
  end
50
45
 
51
46
  def binding
52
47
  super
53
48
  end
54
49
 
55
- def convert(source, options = {}) # rubocop:disable MethodLength
56
- cli_args = Array(options[:cli])
57
- cli_args << '--skip-dynamic-analysis' unless options[:dynamic] # For performance
50
+ module SourceConversion
51
+ def convert(source, options = {}) # rubocop:disable MethodLength
52
+ require 'transpec/cli'
53
+ require File.join(Transpec.root, 'spec/support/file_helper')
58
54
 
59
- hidden_code = options[:hidden]
60
- if hidden_code
61
- hidden_code += "\n"
62
- source = hidden_code + source
63
- end
55
+ cli_args = Array(options[:cli])
56
+ cli_args << '--skip-dynamic-analysis' unless options[:dynamic] # For performance
64
57
 
65
- source = wrap_source(source, options[:wrap_with])
58
+ hidden_code = options[:hidden]
59
+ if hidden_code
60
+ hidden_code += "\n"
61
+ source = hidden_code + source
62
+ end
66
63
 
67
- converted_source = nil
64
+ source = wrap_source(source, options[:wrap_with])
68
65
 
69
- in_isolated_env do
70
- path = options[:path] || 'spec/example_spec.rb'
71
- FileHelper.create_file(path, source)
66
+ converted_source = nil
72
67
 
73
- cli = Transpec::CLI.new
68
+ in_isolated_env do
69
+ path = options[:path] || 'spec/example_spec.rb'
70
+ FileHelper.create_file(path, source)
74
71
 
75
- if options[:rspec_version]
76
- cli.project.stub(:rspec_version).and_return(options[:rspec_version])
77
- end
72
+ cli = Transpec::CLI.new
78
73
 
79
- if options[:rails]
80
- cli.project.stub(:depend_on_rspec_rails?).and_return(true)
81
- end
74
+ if options[:rspec_version]
75
+ cli.project.define_singleton_method(:rspec_version) { options[:rspec_version] }
76
+ end
77
+
78
+ if options[:rails]
79
+ cli.project.define_singleton_method(:depend_on_rspec_rails?) { true }
80
+ end
82
81
 
83
- cli.run(cli_args)
82
+ cli.run(cli_args)
84
83
 
85
- converted_source = File.read(path)
84
+ converted_source = File.read(path)
85
+ end
86
+
87
+ converted_source = unwrap_source(converted_source, options[:wrap_with])
88
+ converted_source = converted_source[hidden_code.length..-1] if hidden_code
89
+ converted_source
86
90
  end
87
91
 
88
- converted_source = unwrap_source(converted_source, options[:wrap_with])
89
- converted_source = converted_source[hidden_code.length..-1] if hidden_code
90
- converted_source
91
- end
92
+ def wrap_source(source, wrapper)
93
+ source = "it 'is example' do\n" + source + "end\n" if wrapper == :example
92
94
 
93
- def wrap_source(source, wrapper)
94
- source = "it 'is example' do\n" + source + "end\n" if wrapper == :example
95
+ if [:example, :group].include?(wrapper)
96
+ source = "describe 'example group' do\n" + source + "end\n"
97
+ end
95
98
 
96
- if [:example, :group].include?(wrapper)
97
- source = "describe 'example group' do\n" + source + "end\n"
99
+ source
98
100
  end
99
101
 
100
- source
101
- end
102
+ def unwrap_source(source, wrapper)
103
+ return source unless wrapper
102
104
 
103
- def unwrap_source(source, wrapper)
104
- return source unless wrapper
105
+ unwrap_count = case wrapper
106
+ when :group then 1
107
+ when :example then 2
108
+ end
105
109
 
106
- unwrap_count = case wrapper
107
- when :group then 1
108
- when :example then 2
109
- end
110
+ lines = source.lines.to_a
110
111
 
111
- lines = source.lines.to_a
112
+ unwrap_count.times do
113
+ lines = lines[1..-2]
114
+ end
112
115
 
113
- unwrap_count.times do
114
- lines = lines[1..-2]
116
+ lines.join('')
115
117
  end
116
118
 
117
- lines.join('')
118
- end
119
+ def in_isolated_env
120
+ require 'stringio'
121
+ require 'tmpdir'
119
122
 
120
- def in_isolated_env
121
- original_stdout = $stdout
122
- $stdout = StringIO.new
123
+ original_stdout = $stdout
124
+ $stdout = StringIO.new
123
125
 
124
- Dir.mktmpdir do |tmpdir|
125
- Dir.chdir(tmpdir) do
126
- yield
126
+ Dir.mktmpdir do |tmpdir|
127
+ Dir.chdir(tmpdir) do
128
+ yield
129
+ end
127
130
  end
131
+ ensure
132
+ $stdout = original_stdout
128
133
  end
129
- ensure
130
- $stdout = original_stdout
131
134
  end
132
135
 
133
- def select_sections(content, header_level, *section_names)
134
- header_pattern = pattern_for_header_level(header_level)
135
- sections = content.each_line.slice_before(header_pattern)
136
+ include SourceConversion
136
137
 
137
- sections.select do |section|
138
- header_line = section.first
139
- section_names.any? { |name| header_line.include?(name) }
138
+ module MarkdownHelper
139
+ def find_section(section_name, options = {})
140
+ header_pattern = pattern_for_header_level(options[:level])
141
+ sections = readme.each_line.slice_before(header_pattern)
142
+
143
+ sections.find do |section|
144
+ header_line = section.first
145
+ header_line.include?(section_name)
146
+ end
140
147
  end
141
- end
142
148
 
143
- def table_of_contents(lines, header_level)
144
- header_pattern = pattern_for_header_level(header_level)
149
+ def table_of_contents(lines, options = {})
150
+ header_pattern = pattern_for_header_level(options[:level])
145
151
 
146
- titles = lines.map do |line|
147
- next unless line.match(header_pattern)
148
- line.sub(/^[#\s]*/, '').chomp
149
- end.compact
152
+ titles = lines.map do |line|
153
+ next unless line.match(header_pattern)
154
+ line.sub(/^[#\s]*/, '').chomp
155
+ end.compact
150
156
 
151
- titles.map do |title|
152
- anchor = '#' + title.gsub(/[^\w_\- ]/, '').downcase.tr(' ', '-')
153
- "* [#{title}](#{anchor})"
154
- end.join("\n")
155
- end
157
+ titles.map do |title|
158
+ anchor = '#' + title.gsub(/[^\w_\- ]/, '').downcase.tr(' ', '-')
159
+ "* [#{title}](#{anchor})"
160
+ end.join("\n")
161
+ end
156
162
 
157
- def pattern_for_header_level(level)
158
- /^#{'#' * level}[^#]/
163
+ def pattern_for_header_level(level)
164
+ /^#{'#' * level}[^#]/
165
+ end
159
166
  end
160
167
 
161
- def validate_syntax_type_table(markdown_table, enabled_by_default)
162
- types_in_doc = markdown_table.lines.map do |line|
163
- first_column = line.split('|').first
164
- first_column.gsub(/[^\w]/, '').to_sym
165
- end.sort
168
+ include MarkdownHelper
166
169
 
167
- types_in_code = Config::DEFAULT_CONVERSIONS.select do |_type, enabled|
168
- enabled == enabled_by_default
169
- end.keys.sort
170
+ module SyntaxTypeTableHelper
171
+ def validate_syntax_type_table(markdown_table, enabled_by_default)
172
+ types_in_doc = markdown_table.lines.map do |line|
173
+ first_column = line.split('|').first
174
+ first_column.gsub(/[^\w]/, '').to_sym
175
+ end.sort
170
176
 
171
- unless types_in_doc == types_in_code
172
- types_missing_description = types_in_code - types_in_doc
173
- fail "No descriptions for syntax types #{types_missing_description}"
177
+ types_in_code = Transpec::Config::DEFAULT_CONVERSIONS.select do |_type, enabled|
178
+ enabled == enabled_by_default
179
+ end.keys.sort
180
+
181
+ unless types_in_doc == types_in_code
182
+ types_missing_description = types_in_code - types_in_doc
183
+ fail "No descriptions for syntax types #{types_missing_description}"
184
+ end
174
185
  end
175
186
  end
176
187
 
177
- def insert_comment_above(code, pattern, comments)
178
- regexp = Regexp.new('^([ \t]*).*' + Regexp.escape(pattern))
188
+ include SyntaxTypeTableHelper
189
+
190
+ module CodeExampleHelper
191
+ def insert_comment_above(code, pattern, comments)
192
+ regexp = Regexp.new('^([ \t]*).*' + Regexp.escape(pattern))
179
193
 
180
- code.sub(regexp) do |match|
181
- indentation = Regexp.last_match(1)
182
- replacement = ''
183
- Array(comments).each do |comment|
184
- comment = comment.to_s.chomp
185
- replacement << "#{indentation}# #{comment}\n"
194
+ code.sub(regexp) do |match|
195
+ indentation = Regexp.last_match(1)
196
+ replacement = ''
197
+ Array(comments).each do |comment|
198
+ comment = comment.to_s.chomp
199
+ replacement << "#{indentation}# #{comment}\n"
200
+ end
201
+ replacement << match
186
202
  end
187
- replacement << match
188
203
  end
189
204
  end
190
205
 
191
- def travis_config
192
- @travis_config ||= begin
193
- require 'yaml'
194
- YAML.parse_file('.travis.yml').to_ruby
206
+ include CodeExampleHelper
207
+
208
+ module SupportedRubyListHelper
209
+ def supported_ruby_names
210
+ supported_ruby_ids.map { |id| ruby_name_from(id) }
211
+ end
212
+
213
+ def ruby_name_from(id)
214
+ implementation, version = id.split('-', 2)
215
+
216
+ if implementation == 'jruby'
217
+ implementation = 'JRuby'
218
+ elsif version.nil?
219
+ version = implementation
220
+ implementation = 'MRI'
221
+ end
222
+
223
+ "#{implementation} #{version}"
224
+ end
225
+
226
+ def supported_ruby_ids
227
+ travis_config['rvm'] - unsupported_ruby_ids
228
+ end
229
+
230
+ def unsupported_ruby_ids
231
+ return [] unless travis_config['matrix']
232
+ travis_config['matrix']['allow_failures'].map { |build| build['rvm'] }.compact
233
+ end
234
+
235
+ def travis_config
236
+ @travis_config ||= begin
237
+ require 'yaml'
238
+ YAML.parse_file('.travis.yml').to_ruby
239
+ end
195
240
  end
196
241
  end
242
+
243
+ include SupportedRubyListHelper
197
244
  end
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.required_ruby_version = '>= 1.9.3'
24
+ spec.required_ruby_version = '>= 2.0.0'
25
25
 
26
- spec.add_runtime_dependency 'parser', '>= 2.3.0.7'
26
+ spec.add_runtime_dependency 'parser', '>= 2.5.0.0'
27
27
  spec.add_runtime_dependency 'astrolabe', '~> 1.2'
28
28
  spec.add_runtime_dependency 'bundler', '~> 1.3'
29
29
  spec.add_runtime_dependency 'rainbow', '>= 1.99.1', '< 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transpec
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Nakayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-07 00:00:00.000000000 Z
11
+ date: 2018-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.3.0.7
19
+ version: 2.5.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.3.0.7
26
+ version: 2.5.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: astrolabe
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +221,6 @@ files:
221
221
  - tasks/lib/test.rb
222
222
  - tasks/readme.rake
223
223
  - tasks/spec.rake
224
- - tasks/test.rake
225
224
  - transpec.gemspec
226
225
  homepage: http://yujinakayama.me/transpec/
227
226
  licenses:
@@ -235,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
235
234
  requirements:
236
235
  - - ">="
237
236
  - !ruby/object:Gem::Version
238
- version: 1.9.3
237
+ version: 2.0.0
239
238
  required_rubygems_version: !ruby/object:Gem::Requirement
240
239
  requirements:
241
240
  - - ">="
@@ -243,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
242
  version: '0'
244
243
  requirements: []
245
244
  rubyforge_project:
246
- rubygems_version: 2.6.8
245
+ rubygems_version: 2.7.7
247
246
  signing_key:
248
247
  specification_version: 4
249
248
  summary: The RSpec syntax converter
@@ -1,30 +0,0 @@
1
- # coding: utf-8
2
-
3
- require_relative 'lib/test'
4
-
5
- namespace :test do
6
- # On Travis CI, reuse system gems to speed up build.
7
- bundler_args = if ENV['TRAVIS']
8
- []
9
- else
10
- %w(--path vendor/bundle)
11
- end
12
-
13
- # rubocop:disable LineLength
14
- tests = [
15
- Test.new('https://github.com/yujinakayama/twitter.git', 'transpec-test-rspec-2-99', bundler_args),
16
- Test.new('https://github.com/yujinakayama/mail.git', 'transpec-test-rspec-2-99', bundler_args),
17
- # Test.new('https://github.com/yujinakayama/guard.git', 'transpec-test-rspec-2-99', bundler_args + %w(--without development))
18
- ]
19
- # rubocop:enable LineLength
20
-
21
- desc 'Test transpec on all projects'
22
- task all: tests.map(&:name)
23
-
24
- tests.each do |test|
25
- desc "Test transpec on #{test.name} project"
26
- task test.name do
27
- test.run
28
- end
29
- end
30
- end