ammeter 1.1.0 → 1.1.5

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: 0f14d89dc8ba87e492a772bd8e81a8370641b8bd
4
- data.tar.gz: bea93658480644d813daafa47b58510c7d9c856b
2
+ SHA256:
3
+ metadata.gz: 15c215e3ca3e6612c3a575d4867460591978e772edc6b25af049887adcab428f
4
+ data.tar.gz: 94c066d9357c99d88fb78ea07ddc4a0387248bd5eafc8992d49b81a5bc5fa007
5
5
  SHA512:
6
- metadata.gz: 24107720705e3ff11ba9691b762c43fe2b0d09c2608e00c9438a4ae25699acbc3f27993169c40f739fd30a66fc3a7ff65281ed9673a43330eaeb534b6858dbfa
7
- data.tar.gz: 7687869b3fddd91f0fba62b628b23f3059befdfba8bdfd1cb25f08bfa64864237ac121152aaef5ebef12999a36f1a05002a8430e966179e676890811673f3e7c
6
+ metadata.gz: 490b1a299c1916d6e42fb88409ba9c65e8343c6b9696dcbf686b81a08054a5a042737ee993c163f9802c0ea513735238e8deb032af72a7be35b646d138399043
7
+ data.tar.gz: 3aefd4e01fb7e0fd75caefd5ed5b4b70d531176e83221d881fb088f42f7bfc787221527b6f0cab9e7c31ece610bf7fa75d023c7fb5f10f7f7aaeb3d8cd3b070a
@@ -0,0 +1,70 @@
1
+ name: Ammeter CI
2
+ on:
3
+ push:
4
+ branches:
5
+ - 'main'
6
+ pull_request:
7
+ branches:
8
+ - '*'
9
+ jobs:
10
+ test:
11
+ name: 'Ruby: ${{ matrix.ruby }}, Rspec: ${{matrix.env.RSPEC_VERSION}}, Rails: ${{ matrix.env.RAILS_VERSION }}'
12
+ runs-on: ubuntu-20.04
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ include:
17
+ - ruby: 3.0
18
+ env:
19
+ RSPEC_VERSION: 'master'
20
+ RAILS_VERSION: '~> 6.1.0'
21
+ - ruby: 3.0
22
+ env:
23
+ RSPEC_VERSION: '~> 4.0'
24
+ RAILS_VERSION: '~> 6.1.0'
25
+ - ruby: 3.0
26
+ env:
27
+ RSPEC_VERSION: '~> 4.0'
28
+ RAILS_VERSION: '~> 6.0.0'
29
+ - ruby: 3.0
30
+ env:
31
+ RSPEC_VERSION: '~> 3.9'
32
+ RAILS_VERSION: '~> 6.0.0'
33
+ - ruby: 2.5
34
+ env:
35
+ RSPEC_VERSION: 'master'
36
+ RAILS_VERSION: '~> 6.1.0'
37
+ - ruby: 2.5
38
+ env:
39
+ RSPEC_VERSION: '~> 4.0'
40
+ RAILS_VERSION: '~> 6.1.0'
41
+ - ruby: 2.5
42
+ env:
43
+ RSPEC_VERSION: '~> 4.0'
44
+ RAILS_VERSION: '~> 6.0.0'
45
+ - ruby: 2.5
46
+ env:
47
+ RSPEC_VERSION: '~> 4.0'
48
+ RAILS_VERSION: '~> 5.2.0'
49
+ - ruby: 2.5
50
+ env:
51
+ RSPEC_VERSION: '~> 3.9'
52
+ RAILS_VERSION: '~> 6.0.0'
53
+ - ruby: 2.5
54
+ env:
55
+ RSPEC_VERSION: '~> 3.9'
56
+ RAILS_VERSION: '~> 5.2.0'
57
+ - ruby: ruby-head
58
+ env:
59
+ RSPEC_VERSION: 'master'
60
+ RAILS_VERSION: '~> 6.1.0'
61
+ env: ${{ matrix.env }}
62
+ steps:
63
+ - uses: actions/checkout@v2
64
+ - uses: ruby/setup-ruby@v1
65
+ with:
66
+ ruby-version: ${{ matrix.ruby }}
67
+ bundler-cache: true
68
+ - run: bundle install
69
+ - run: bundle exec rake ci
70
+ continue-on-error: ${{ matrix.allow_failure || false }}
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.8
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- rspec_version = ENV['RSPEC_VERSION']
4
- rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.split('.')[0] : '3'
3
+ rspec_version = ENV['RSPEC_VERSION'] || '~> 4.0'
4
+ rails_version = ENV['RAILS_VERSION'] || '>= 5.1.0'
5
5
 
6
6
  if rspec_version == 'master'
7
7
  gem "rspec-rails", :git => 'git://github.com/rspec/rspec-rails.git'
@@ -13,31 +13,16 @@ if rspec_version == 'master'
13
13
  gem "rspec-support", :git => 'git://github.com/rspec/rspec-support.git'
14
14
  else
15
15
  gem 'rspec-rails', rspec_version
16
- gem 'rspec', rspec_version
17
16
  end
18
17
 
19
- case rspec_major_version
20
- when '2'
21
- # rspec 2.x does not support Rails 4.1+
22
- gem 'rails', '~> 3.2'
23
- gem 'uglifier', '~> 1.2.4'
24
- gem 'rake', '~> 0.9.2.2'
25
- gem 'coffee-rails', '~> 3.2'
26
- gem 'sass-rails', '~> 3.2'
27
- gem 'jquery-rails', '~> 2.0'
28
- gem 'haml-rails', '~> 0.4'
29
- when '3'
30
- gem 'rails', '>= 4.0'
31
- gem 'uglifier', '>= 1.3'
32
- gem 'rake', '>= 0.10'
33
- gem 'coffee-rails', '>= 4.0'
34
- gem 'sass-rails', '>= 4.0'
35
- gem 'jquery-rails', '>= 3.0'
36
- gem 'haml-rails', '>= 0.5'
37
- else
38
- raise "rspec version #{rspec_version} is not supported"
39
- end
18
+ gem 'rails', rails_version
19
+ gem 'uglifier'
20
+ gem 'rake'
21
+ gem 'coffee-rails'
22
+ gem 'sass-rails'
23
+ gem 'jquery-rails'
24
+ gem 'haml-rails'
40
25
 
41
- # Specify your gem's dependencies in rspec-rails-generator-specs.gemspec
26
+ # Specify your gem's dependencies in ammeter.gemspec
42
27
  gemspec
43
28
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ammeter [![Build Status](https://secure.travis-ci.org/alexrothenberg/ammeter.png)](http://travis-ci.org/alexrothenberg/ammeter) [![Code Climate](https://codeclimate.com/github/alexrothenberg/ammeter.png)](https://codeclimate.com/github/alexrothenberg/ammeter) [![Gem Version](https://badge.fury.io/rb/ammeter.png)](http://badge.fury.io/rb/ammeter)
1
+ # Ammeter [![Ammeter CI](https://github.com/alexrothenberg/ammeter/actions/workflows/ci.yml/badge.svg)](https://github.com/alexrothenberg/ammeter/actions/workflows/ci.yml) [![Code Climate](https://codeclimate.com/github/alexrothenberg/ammeter.png)](https://codeclimate.com/github/alexrothenberg/ammeter) [![Gem Version](https://badge.fury.io/rb/ammeter.png)](http://badge.fury.io/rb/ammeter)
2
2
 
3
3
 
4
4
  A gem that makes it easy to write specs for your Rails 3 Generators.
@@ -13,6 +13,24 @@ and we think you may find it useful too.
13
13
  An [ammeter](http://en.wikipedia.org/wiki/Ammeter) is used to measure electrical current and
14
14
  electricity can be produced by a generator.
15
15
 
16
+ # Installation
17
+ Add this line to your Gemfile (or gemspec):
18
+
19
+ ```ruby
20
+ gem 'ammeter'
21
+ ```
22
+
23
+ And then execute:
24
+ ```bash
25
+ $ bundle
26
+ ```
27
+
28
+ Add:
29
+ ```ruby
30
+ require 'ammeter/init'
31
+ ```
32
+ To your `spec/spec_helper.rb`.
33
+
16
34
  # Example
17
35
 
18
36
  ```ruby
@@ -21,7 +39,7 @@ require 'spec_helper'
21
39
  # Generators are not automatically loaded by Rails
22
40
  require 'generators/rspec/model/model_generator'
23
41
 
24
- describe Rspec::Generators::ModelGenerator do
42
+ describe Rspec::Generators::ModelGenerator, :type => :generator do
25
43
  # Tell the generator where to put its output (what it thinks of as Rails.root)
26
44
  destination File.expand_path("../../../../../tmp", __FILE__)
27
45
  before do
@@ -61,10 +79,11 @@ describe Rspec::Generators::ModelGenerator do
61
79
  it { is_expected_to contain /describe Posts/ }
62
80
  end
63
81
  describe 'the migration' do
64
- subject { file('db/migrate/create_posts.rb') }
82
+ subject { migration_file('db/migrate/create_posts.rb') }
65
83
 
66
84
  # is_expected_to be_a_migration - verifies the file exists with a migration timestamp as part of the filename
67
- it { is_expected_to be_a_migration }
85
+ it { is_expected_to exist }
86
+ it { is_expected_to contain /create_table/ }
68
87
  end
69
88
  end
70
89
  end
data/Rakefile CHANGED
@@ -27,7 +27,7 @@ def create_gem(gem_name)
27
27
  template_folder = "features/templates/#{gem_name}"
28
28
 
29
29
  Dir.chdir("./tmp") do
30
- sh "bundle gem #{gem_name}"
30
+ sh "yes | bundle gem -t rspec #{gem_name}"
31
31
  end
32
32
  sh "cp '#{template_folder}/Gemfile' tmp/#{gem_name}"
33
33
  sh "cp '#{template_folder}/#{gem_name}.gemspec' tmp/#{gem_name}"
@@ -35,19 +35,19 @@ def create_gem(gem_name)
35
35
  sh "mkdir -p tmp/#{gem_name}/spec"
36
36
  sh "cp '#{template_folder}/spec/spec_helper.rb' tmp/#{gem_name}/spec"
37
37
  Dir.chdir("./tmp/#{gem_name}") do
38
- Bundler.clean_system 'bundle install'
38
+ Bundler.unbundled_system 'bundle install'
39
39
  end
40
40
  end
41
41
 
42
42
  namespace :generate do
43
43
  desc "generate a fresh app with rspec installed"
44
44
  task :app => :ensure_bundler_11 do |t|
45
- sh "bundle exec rails new ./tmp/example_app -m 'features/templates/generate_example_app.rb' --skip-test-unit"
45
+ sh "bundle exec rails new ./tmp/example_app -m 'features/templates/generate_example_app.rb' --skip-test-unit --skip-bootsnap --skip-spring --skip-webpack-install"
46
46
  sh "cp 'features/templates/rspec.rake' ./tmp/example_app/lib/tasks"
47
47
  Dir.chdir("./tmp/example_app/") do
48
- Bundler.clean_system 'rake db:migrate'
49
- Bundler.clean_system 'rails g rspec:install'
50
- Bundler.clean_system 'bundle install'
48
+ Bundler.unbundled_system 'bundle install'
49
+ Bundler.unbundled_system 'rake db:migrate'
50
+ Bundler.unbundled_system 'rails g rspec:install'
51
51
  end
52
52
  end
53
53
 
@@ -74,7 +74,7 @@ Feature: Gems can contain generators
74
74
  describe 'app/models/post.rb' do
75
75
  subject { file('app/models/post.rb') }
76
76
  it { expect(subject).to exist }
77
- it { expect(subject).to contain 'class Post < ActiveRecord::Base' }
77
+ it { expect(subject).to contain 'class Post < ' }
78
78
  end
79
79
  end
80
80
  """
@@ -10,13 +10,14 @@ Feature: generator spec
10
10
  class AwesomeGenerator < Rails::Generators::NamedBase
11
11
  source_root File.expand_path('../templates', __FILE__)
12
12
  class_option :super, :type => :boolean, :default => false
13
+ class_option :someone, :type => :string
13
14
 
14
15
  def create_awesomeness
15
16
  template 'awesome.html', File.join('public', name, "#{"super_" if options[:super]}awesome.html")
16
17
  end
17
18
 
18
19
  def create_lameness
19
- template 'lame.html', File.join('public', name, "#{"super_" if options[:super]}lame.html")
20
+ template 'lame.html.erb', File.join('public', name, "#{"super_" if options[:super]}lame.html")
20
21
  end
21
22
  end
22
23
  """
@@ -24,9 +25,9 @@ Feature: generator spec
24
25
  """
25
26
  This is an awesome file
26
27
  """
27
- And a file named "lib/generators/awesome/templates/lame.html" with:
28
+ And a file named "lib/generators/awesome/templates/lame.html.erb" with:
28
29
  """
29
- This is a lame file
30
+ <%= options[:someone] %> is lame
30
31
  """
31
32
 
32
33
  Scenario: A spec that runs the entire generator
@@ -36,23 +37,38 @@ Feature: generator spec
36
37
  require 'generators/awesome/awesome_generator'
37
38
 
38
39
  describe AwesomeGenerator do
39
- before { run_generator %w(my_dir) }
40
- describe 'public/my_dir/awesome.html' do
41
- subject { file('public/my_dir/awesome.html') }
42
- it { expect(subject).to exist }
43
- it { expect(subject).to contain 'This is an awesome file' }
44
- it { expect(subject).to_not contain 'This text is not in the file' }
40
+ describe 'invoke' do
41
+ before { run_generator %w(my_dir --someone Alex) }
42
+ describe 'public/my_dir/awesome.html' do
43
+ subject { file('public/my_dir/awesome.html') }
44
+ it { expect(subject).to exist }
45
+ it { expect(subject).to contain 'This is an awesome file' }
46
+ it { expect(subject).to_not contain 'This text is not in the file' }
47
+ end
48
+ describe 'public/my_dir/lame.html' do
49
+ subject { file('public/my_dir/lame.html') }
50
+ it { expect(subject).to exist }
51
+ it { expect(subject).to contain 'Alex is lame' }
52
+ it { expect(subject).to_not contain 'This text is not in the file' }
53
+ end
45
54
  end
46
- describe 'public/my_dir/lame.html' do
47
- subject { file('public/my_dir/lame.html') }
48
- it { expect(subject).to exist }
49
- it { expect(subject).to contain 'This is a lame file' }
50
- it { expect(subject).to_not contain 'This text is not in the file' }
55
+ describe 'revoke' do
56
+ subject { file('public/my_dir/awesome.html') }
57
+ it 'can run a reverse migration' do
58
+ FileUtils.mkdir_p(File.dirname(subject))
59
+ # File.write is not in 1.8.7 use File.open
60
+ File.open(subject, 'w') do |f|
61
+ f.write "test file"
62
+ end
63
+ expect(subject).to exist
64
+ run_generator %w(my_dir --someone Alex), :behavior => :revoke
65
+ expect(subject).not_to exist
66
+ end
51
67
  end
52
68
  end
53
69
  """
54
70
  When I run `rake spec`
55
- Then the output should contain "6 examples, 0 failures"
71
+ Then the output should contain "7 examples, 0 failures"
56
72
 
57
73
  Scenario: A spec that runs one task in the generator
58
74
  Given a file named "spec/generators/another_awesome_generator_spec.rb" with:
@@ -0,0 +1,56 @@
1
+ @example_app
2
+ Feature: generator with shell prompts spec
3
+
4
+ Generator specs live in spec/generators. In order to access
5
+ the generator's methods you can call them on the "generator" object.
6
+
7
+ Background: A simple generator
8
+ Given a file named "lib/generators/awesome/lamest_generator.rb" with:
9
+ """
10
+ class LamestGenerator < Rails::Generators::NamedBase
11
+ source_root File.expand_path('../templates', __FILE__)
12
+ class_option :super, :type => :boolean, :default => false
13
+
14
+ def create_lamest
15
+ @lame = false
16
+ @awesome = false
17
+ @user_name = ask("What is your name?")
18
+ if yes?("Are you the lamest?")
19
+ @lame = true
20
+ end
21
+ if yes?("Are you awesome?")
22
+ @awesome = true
23
+ end
24
+ template 'lamest.html.erb', File.join('public', name, "#{"super_" if options[:super]}lamest.html")
25
+ end
26
+ end
27
+ """
28
+ And a file named "lib/generators/awesome/templates/lamest.html.erb" with:
29
+ """
30
+ <%= @user_name %> <%= "is the lamest" if @lame %> and <%= "is not awesome!" if @awesome == false %>
31
+ """
32
+
33
+ Scenario: A spec that runs the entire generator
34
+ Given a file named "spec/generators/lamest_generator_spec.rb" with:
35
+ """
36
+ require "rails_helper"
37
+ require 'generators/awesome/lamest_generator'
38
+
39
+ describe LamestGenerator do
40
+ describe 'invoke' do
41
+ before do
42
+ gen = generator %w(my_dir)
43
+ set_shell_prompt_responses(gen, { :ask => "Thomas", :yes? => [true, false] })
44
+ run_generator
45
+ end
46
+ describe 'public/my_dir/lamest.html' do
47
+ subject { file('public/my_dir/lamest.html') }
48
+ it { expect(subject).to exist }
49
+ it { expect(subject).to contain 'Thomas is the lamest and is not awesome!' }
50
+ it { expect(subject).to_not contain 'This text is not in the file' }
51
+ end
52
+ end
53
+ end
54
+ """
55
+ When I run `rake spec`
56
+ Then the output should contain "3 examples, 0 failures"
@@ -41,7 +41,7 @@ Feature: generator spec
41
41
  describe 'app/models/post.rb' do
42
42
  subject { file('app/models/post.rb') }
43
43
  it { expect(subject).to exist }
44
- it { expect(subject).to contain 'class Post < ActiveRecord::Base' }
44
+ it { expect(subject).to contain 'class Post < ' }
45
45
  end
46
46
  end
47
47
  """
@@ -1,7 +1,11 @@
1
1
  require 'aruba/cucumber'
2
2
 
3
3
  Before do
4
- @aruba_timeout_seconds = 30
4
+ if RUBY_VERSION == "1.9.3"
5
+ @aruba_timeout_seconds = 60
6
+ else
7
+ @aruba_timeout_seconds = 30
8
+ end
5
9
  end
6
10
 
7
11
  def aruba_path(file_or_dir, source_foldername)
@@ -25,7 +29,7 @@ def copy_to_aruba_from(gem_or_app_name)
25
29
  }
26
30
 
27
31
  rspec_version = ENV['RSPEC_VERSION']
28
- rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.split('.')[0] : '3'
32
+ rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.scan(/\d+/).first : '3'
29
33
 
30
34
  Dir["tmp/#{gem_or_app_name}/*"].each do |file_or_dir|
31
35
  if !(file_or_dir =~ /\/spec$/)
@@ -38,7 +42,7 @@ def copy_to_aruba_from(gem_or_app_name)
38
42
  if rspec_major_version == '2'
39
43
  # rspec 2.x does not create rails_helper.rb so we create a symlink to avoid cluttering tests
40
44
  write_symlink("tmp/#{gem_or_app_name}/spec/spec_helper.rb", gem_or_app_name, 'rails_helper.rb')
41
- elsif rspec_major_version == '3'
45
+ elsif rspec_major_version >= '3'
42
46
  write_symlink("tmp/#{gem_or_app_name}/spec/rails_helper.rb", gem_or_app_name)
43
47
  end
44
48
  end
@@ -1,2 +1,21 @@
1
- gem 'rspec-rails'#, '>=3.0.0.beta2'
1
+ rspec_version = ENV['RSPEC_VERSION']
2
+ rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.scan(/\d+/).first : '3'
3
+
4
+ if rspec_version == 'master'
5
+ gem "rspec-rails", :git => 'git://github.com/rspec/rspec-rails.git'
6
+ gem "rspec", :git => 'git://github.com/rspec/rspec.git'
7
+ gem "rspec-core", :git => 'git://github.com/rspec/rspec-core.git'
8
+ gem "rspec-expectations", :git => 'git://github.com/rspec/rspec-expectations.git'
9
+ gem "rspec-mocks", :git => 'git://github.com/rspec/rspec-mocks.git'
10
+ gem "rspec-collection_matchers", :git => 'git://github.com/rspec/rspec-collection_matchers.git'
11
+ gem "rspec-support", :git => 'git://github.com/rspec/rspec-support.git'
12
+ else
13
+ gem 'rspec-rails', rspec_version
14
+ end
15
+
16
+ gem "i18n", '< 0.7.0' if RUBY_VERSION < '1.9.3'
2
17
  gem 'ammeter', :path=>'../..'
18
+ if defined?(Rails) && Rails::VERSION::STRING.to_f < 4
19
+ # Execjs is causing problems on 1.8.7
20
+ gem 'execjs', '~> 2.0.0'
21
+ end
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- rspec_version = ENV['RSPEC_VERSION']
4
- rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.split('.')[0] : '3'
3
+ rspec_version = ENV['RSPEC_VERSION'] || '~> 4.0'
4
+ rails_version = ENV['RAILS_VERSION'] || '>= 5.1.0'
5
5
 
6
6
  if rspec_version == 'master'
7
7
  gem "rspec-rails", :git => 'git://github.com/rspec/rspec-rails.git'
@@ -13,21 +13,12 @@ if rspec_version == 'master'
13
13
  gem "rspec-support", :git => 'git://github.com/rspec/rspec-support.git'
14
14
  else
15
15
  gem 'rspec-rails', rspec_version
16
- gem 'rspec', rspec_version
17
- end
18
-
19
- case rspec_major_version
20
- when '2'
21
- gem 'rails', '~> 3.2'
22
- when '3'
23
- gem 'rails', '>= 4.1'
24
- else
25
- raise "rspec version #{rspec_version} is not supported"
26
16
  end
27
17
 
18
+ gem 'rails', rails_version
28
19
 
29
20
  # Specify your gem's dependencies in my_gem.gemspec
30
21
  gemspec
31
22
 
32
23
  # we cannot add a development dependency with a path to my_gem.gemspec
33
- gem 'ammeter', :path => '../..'
24
+ gem 'ammeter', :path => '../..'
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
3
2
 
4
3
  require 'rspec'
@@ -1,7 +1,13 @@
1
1
  require 'bundler/setup'
2
2
  require 'rails/all'
3
- # This prevents 'uninitialized constant Jquery::Rails::Railtie::PROTOTYPE_JS (NameError)'
4
- require 'jquery/rails'
3
+
4
+ ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
5
+
6
+ begin
7
+ # This prevents 'uninitialized constant Jquery::Rails::Railtie::PROTOTYPE_JS (NameError)'
8
+ require 'jquery/rails'
9
+ rescue LoadError
10
+ end
5
11
 
6
12
  module MyRailsGem
7
13
  module TestApp
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- rspec_version = ENV['RSPEC_VERSION']
4
- rspec_major_version = (rspec_version && rspec_version != 'master') ? rspec_version.split('.')[0] : '3'
3
+ rspec_version = ENV['RSPEC_VERSION'] || '~> 4.0'
4
+ rails_version = ENV['RAILS_VERSION'] || '>= 5.1.0'
5
5
 
6
6
  if rspec_version == 'master'
7
7
  gem "rspec-rails", :git => 'git://github.com/rspec/rspec-rails.git'
@@ -13,21 +13,12 @@ if rspec_version == 'master'
13
13
  gem "rspec-support", :git => 'git://github.com/rspec/rspec-support.git'
14
14
  else
15
15
  gem 'rspec-rails', rspec_version
16
- gem 'rspec', rspec_version
17
- end
18
-
19
- case rspec_major_version
20
- when '2'
21
- gem 'railties', '~> 3.2'
22
- when '3'
23
- gem 'railties', '>= 4.1'
24
- else
25
- raise "rspec version #{rspec_version} is not supported"
26
16
  end
27
17
 
18
+ gem 'railties', rails_version
28
19
 
29
20
  # Specify your gem's dependencies in my_gem.gemspec
30
21
  gemspec
31
22
 
32
23
  # we cannot add a development dependency with a path to my_gem.gemspec
33
- gem 'ammeter', :path => '../..'
24
+ gem 'ammeter', :path => '../..'
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
3
2
 
4
3
  require 'rspec'
@@ -1,5 +1,6 @@
1
1
  require 'bundler/setup'
2
- require 'rails'
2
+ require 'rails/all'
3
3
  require 'ammeter/init'
4
4
 
5
5
  Bundler.require
6
+ ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
data/lib/ammeter/init.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require 'rspec/core'
2
+ require 'rspec/rails'
2
3
  if RSpec::Core::Version::STRING < '3'
3
4
  require 'ammeter/rspec/rspec_2_compatibility' # if rspec2
4
5
  end
5
6
  require 'rails'
7
+ require 'ammeter/output_capturer.rb'
6
8
  require 'ammeter/rspec/generator/example.rb'
7
9
  require 'ammeter/rspec/generator/matchers.rb'
8
10
 
@@ -0,0 +1,40 @@
1
+ module Ammeter
2
+ class OutputCapturer
3
+ # Is this thread safe!?!?
4
+ # This won't work with sub-processes
5
+ def self.capture(io, &block)
6
+ case io
7
+ when :stdout
8
+ capture_stdout(&block)
9
+ when :stderr
10
+ capture_stderr(&block)
11
+ else
12
+ raise "Unknown IO #{io}"
13
+ end
14
+ end
15
+
16
+ def self.capture_stdout(&block)
17
+ captured_stream = StringIO.new
18
+
19
+ orginal_io, $stdout = $stdout, captured_stream
20
+
21
+ block.call
22
+
23
+ captured_stream.string
24
+ ensure
25
+ $stdout = orginal_io
26
+ end
27
+
28
+ def self.capture_stderr(&block)
29
+ captured_stream = StringIO.new
30
+
31
+ orginal_io, $stderr = $stderr, captured_stream
32
+
33
+ block.call
34
+
35
+ captured_stream.string
36
+ ensure
37
+ $stderr = orginal_io
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,6 @@
1
1
  require 'rspec/core'
2
2
  require 'ammeter/rspec/generator/example/generator_example_group'
3
+ require 'ammeter/rspec/generator/example/generator_example_helpers'
3
4
 
4
5
  RSpec::configure do |c|
5
6
  def c.escaped_path(*parts)
@@ -8,14 +9,17 @@ RSpec::configure do |c|
8
9
 
9
10
  generator_path_regex = c.escaped_path(%w[spec generators])
10
11
  if RSpec::Core::Version::STRING >= '3'
12
+ c.include Ammeter::RSpec::Rails::GeneratorExampleHelpers,
13
+ :type => :generator
14
+ c.include Ammeter::RSpec::Rails::GeneratorExampleGroup,
15
+ :type => :generator
11
16
  c.include Ammeter::RSpec::Rails::GeneratorExampleGroup,
12
- :type => :generator,
13
17
  :file_path => lambda { |file_path, metadata|
14
18
  metadata[:type].nil? && generator_path_regex =~ file_path
15
19
  }
16
20
 
17
21
  else #rspec2
18
-
22
+ c.include Ammeter::RSpec::Rails::GeneratorExampleHelpers, :type => :generator
19
23
  c.include Ammeter::RSpec::Rails::GeneratorExampleGroup, :type => :generator, :example_group => {
20
24
  :file_path => generator_path_regex
21
25
  }
@@ -1,7 +1,5 @@
1
1
  require 'rails/generators'
2
2
  require 'active_support/core_ext'
3
- require 'rspec/rails/adapters'
4
- require 'rspec/rails/example/rails_example_group'
5
3
  require 'tmpdir'
6
4
  require 'fileutils'
7
5
 
@@ -13,7 +11,7 @@ module Ammeter
13
11
  extend ActiveSupport::Concern
14
12
  include ::RSpec::Rails::RailsExampleGroup
15
13
 
16
- DELEGATED_METHODS = [:capture, :destination_root, :current_path, :generator_class]
14
+ DELEGATED_METHODS = [:destination_root, :current_path, :generator_class]
17
15
  module ClassMethods
18
16
  mattr_accessor :test_unit_test_case_delegate
19
17
  delegate :default_arguments, :to => :'self.test_unit_test_case_delegate'
@@ -44,12 +42,12 @@ module Ammeter
44
42
  end
45
43
 
46
44
  def run_generator(given_args=self.default_arguments, config={})
47
- capture(:stdout) { generator(given_args, config).invoke_all }
45
+ OutputCapturer.capture(:stdout) { generator(given_args, config).invoke_all }
48
46
  end
49
47
  end
50
48
 
51
49
  def invoke_task name
52
- capture(:stdout) { generator.invoke_task(generator_class.all_tasks[name.to_s]) }
50
+ OutputCapturer.capture(:stdout) { generator.invoke_task(generator_class.all_tasks[name.to_s]) }
53
51
  end
54
52
 
55
53
  included do
@@ -65,8 +63,6 @@ module Ammeter
65
63
  ::Rails::Generators::TestCase.destination File.expand_path('ammeter', Dir.tmpdir)
66
64
  initialize_delegate
67
65
 
68
- subject { generator }
69
-
70
66
  before do
71
67
  self.class.initialize_delegate
72
68
  prepare_destination
@@ -86,7 +82,10 @@ module Ammeter
86
82
  migration_file = "#{File.dirname(file_path)}/TIMESTAMP_#{File.basename(file_path)}" if migration_file.nil?
87
83
  migration_file
88
84
  end
85
+ def subject
86
+ generator
87
+ end
89
88
  end
90
89
  end
91
90
  end
92
- end
91
+ end
@@ -0,0 +1,29 @@
1
+ require 'rails/generators'
2
+ require 'active_support/core_ext'
3
+
4
+ module Ammeter
5
+ module RSpec
6
+ module Rails
7
+ # Delegates to Rails::Generators::TestCase to work with RSpec.
8
+ module GeneratorExampleHelpers
9
+
10
+ # Sets return values for basic shell commands (ex. ask, yes?, no?).
11
+ # Does this by mocking return values using RSpec's `and_return` method
12
+ #
13
+ # ===== Parameters =====
14
+ # Generator w/ @shell attribute
15
+ # Hash { command_name: input_value, ask: "Testing", yes?: true }
16
+ # The values for each element in the hash can be set as an array as well.
17
+ # This will allow for different return values upon each call.
18
+ #
19
+ # ex. set_shell_prompt_responses(generator, { yes?: [true, false] })
20
+ # would respond with true to the first yes? call, but false to the second
21
+ def set_shell_prompt_responses(generator, command_args={})
22
+ command_args.each do |k,v|
23
+ allow(generator.shell).to receive(k.to_sym).and_return(*v)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -30,7 +30,11 @@ RSpec::Matchers.define :have_correct_syntax do
30
30
  require 'ostruct'
31
31
 
32
32
  begin
33
- view = ActionView::Template::Handlers::ERB.call(OpenStruct.new(source: code))
33
+ if Rails::VERSION::STRING < "6.0"
34
+ view = ActionView::Template::Handlers::ERB.call(OpenStruct.new(:source => code))
35
+ else
36
+ view = ActionView::Template::Handlers::ERB.call(OpenStruct.new, code)
37
+ end
34
38
  eval('__crash_me__; ' + view)
35
39
  rescue SyntaxError
36
40
  false
@@ -1,3 +1,3 @@
1
1
  module Ammeter
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.5"
3
3
  end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ module Ammeter::RSpec::Rails
4
+ describe GeneratorExampleHelpers do
5
+ include GeneratorExampleHelpers
6
+ let(:generator) { MockGenerator.new }
7
+
8
+ it "mocks return value of ask to response" do
9
+ set_shell_prompt_responses(generator, { :ask => "response" })
10
+ expect(generator.shell.ask).to eq("response")
11
+ end
12
+ context "arguments contain multiple shell commands" do
13
+ it "mocks return values response for ask and true for yes?" do
14
+ set_shell_prompt_responses(generator, { :ask => "response", :yes? => true })
15
+ expect(generator.shell.ask).to eq("response")
16
+ expect(generator.shell.yes?).to be true
17
+ end
18
+ end
19
+ context "argument shell command contains an array" do
20
+ it "mocks sequential return values response1 and response2" do
21
+ set_shell_prompt_responses(generator, { :ask => ["response1", "response2"] })
22
+ expect(generator.shell.ask).to eq("response1")
23
+ expect(generator.shell.ask).to eq("response2")
24
+ end
25
+ end
26
+ end
27
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rails/all'
2
2
  require 'rspec/rails'
3
3
 
4
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
4
+ ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
5
5
 
6
6
  module TestApp
7
7
  class Application < Rails::Application
@@ -22,4 +22,4 @@ end
22
22
 
23
23
  def stub_file(filename, content)
24
24
  allow(File).to receive(:read).with(filename).and_return(content)
25
- end
25
+ end
@@ -0,0 +1,10 @@
1
+ # Used in generator_example_helpers_spec.rb
2
+ # set_shell_prompt_responses requires a generator w/ a shell
3
+ # as an argument. This class defines that generator w/ a shell.
4
+ class MockGenerator
5
+ attr_accessor :shell
6
+
7
+ def initialize
8
+ @shell = Object.new
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ammeter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rothenberg
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-21 00:00:00.000000000 Z
11
+ date: 2021-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -213,8 +213,9 @@ executables: []
213
213
  extensions: []
214
214
  extra_rdoc_files: []
215
215
  files:
216
+ - ".github/workflows/ci.yml"
216
217
  - ".gitignore"
217
- - ".travis.yml"
218
+ - ".ruby-version"
218
219
  - Gemfile
219
220
  - History.md
220
221
  - LICENSE.txt
@@ -223,6 +224,7 @@ files:
223
224
  - ammeter.gemspec
224
225
  - features/generator_in_a_gem.feature
225
226
  - features/generator_spec.feature
227
+ - features/generator_with_shell_prompts_spec.feature
226
228
  - features/hooking_into_other_generators.feature
227
229
  - features/support/aruba_timeout.rb
228
230
  - features/support/env.rb
@@ -238,9 +240,11 @@ files:
238
240
  - features/templates/rspec.rake
239
241
  - lib/ammeter.rb
240
242
  - lib/ammeter/init.rb
243
+ - lib/ammeter/output_capturer.rb
241
244
  - lib/ammeter/railtie.rb
242
245
  - lib/ammeter/rspec/generator/example.rb
243
246
  - lib/ammeter/rspec/generator/example/generator_example_group.rb
247
+ - lib/ammeter/rspec/generator/example/generator_example_helpers.rb
244
248
  - lib/ammeter/rspec/generator/matchers.rb
245
249
  - lib/ammeter/rspec/generator/matchers/be_a_migration.rb
246
250
  - lib/ammeter/rspec/generator/matchers/contain.rb
@@ -250,6 +254,7 @@ files:
250
254
  - lib/ammeter/rspec/rspec_2_compatibility.rb
251
255
  - lib/ammeter/version.rb
252
256
  - spec/ammeter/rspec/generator/example/generator_example_group_spec.rb
257
+ - spec/ammeter/rspec/generator/example/generator_example_helpers_spec.rb
253
258
  - spec/ammeter/rspec/generator/matchers/be_a_migration_spec.rb
254
259
  - spec/ammeter/rspec/generator/matchers/contain_spec.rb
255
260
  - spec/ammeter/rspec/generator/matchers/exist_spec.rb
@@ -259,10 +264,11 @@ files:
259
264
  - spec/support/helpers.rb
260
265
  - spec/support/matchers.rb
261
266
  - spec/support/memoized_helpers_rspec2compatibility.rb
267
+ - spec/support/mock_generator.rb
262
268
  homepage: ''
263
269
  licenses: []
264
270
  metadata: {}
265
- post_install_message:
271
+ post_install_message:
266
272
  rdoc_options: []
267
273
  require_paths:
268
274
  - lib
@@ -277,14 +283,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
283
  - !ruby/object:Gem::Version
278
284
  version: '0'
279
285
  requirements: []
280
- rubyforge_project:
281
- rubygems_version: 2.2.2
282
- signing_key:
286
+ rubyforge_project:
287
+ rubygems_version: 2.7.6.2
288
+ signing_key:
283
289
  specification_version: 4
284
290
  summary: Write specs for your Rails 3+ generators
285
291
  test_files:
286
292
  - features/generator_in_a_gem.feature
287
293
  - features/generator_spec.feature
294
+ - features/generator_with_shell_prompts_spec.feature
288
295
  - features/hooking_into_other_generators.feature
289
296
  - features/support/aruba_timeout.rb
290
297
  - features/support/env.rb
@@ -299,6 +306,7 @@ test_files:
299
306
  - features/templates/my_railties_gem/spec/spec_helper.rb
300
307
  - features/templates/rspec.rake
301
308
  - spec/ammeter/rspec/generator/example/generator_example_group_spec.rb
309
+ - spec/ammeter/rspec/generator/example/generator_example_helpers_spec.rb
302
310
  - spec/ammeter/rspec/generator/matchers/be_a_migration_spec.rb
303
311
  - spec/ammeter/rspec/generator/matchers/contain_spec.rb
304
312
  - spec/ammeter/rspec/generator/matchers/exist_spec.rb
@@ -308,3 +316,4 @@ test_files:
308
316
  - spec/support/helpers.rb
309
317
  - spec/support/matchers.rb
310
318
  - spec/support/memoized_helpers_rspec2compatibility.rb
319
+ - spec/support/mock_generator.rb
data/.travis.yml DELETED
@@ -1,22 +0,0 @@
1
- script: "bundle exec rake ci"
2
- rvm:
3
- - ruby-head
4
- - 2.1.1
5
- - 2.0.0
6
- - 1.9.3
7
- - 1.8.7
8
- - jruby-head
9
- - jruby-19mode
10
- - rbx-19mode
11
- env:
12
- - RSPEC_VERSION=master
13
- - RSPEC_VERSION=2.99.0.beta2
14
- - RSPEC_VERSION=2.14
15
- matrix:
16
- allow_failures:
17
- - rvm: 1.8.7
18
- - rvm: 1.9.3
19
- - rvm: ruby-head
20
- - rvm: jruby-head
21
- - rvm: jruby-19mode
22
- - rvm: rbx-19mode