ammeter 0.2.8 → 0.2.9
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.
- data/.gitignore +2 -1
- data/.travis.yml +15 -1
- data/History.md +7 -0
- data/README.md +59 -58
- data/Rakefile +1 -1
- data/ammeter.gemspec +8 -2
- data/features/support/aruba_timeout.rb +14 -0
- data/features/templates/my_railties_gem/spec/spec_helper.rb +1 -1
- data/lib/ammeter/rspec/generator/example/generator_example_group.rb +5 -1
- data/lib/ammeter/rspec/generator/matchers/contain.rb +40 -13
- data/lib/ammeter/version.rb +1 -1
- data/spec/ammeter/rspec/generator/matchers/contain_spec.rb +3 -2
- metadata +6 -4
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,4 +1,18 @@
|
|
1
1
|
script: "bundle exec rake ci"
|
2
2
|
rvm:
|
3
|
+
- ruby-head
|
4
|
+
- 2.0.0
|
5
|
+
- 1.9.3
|
3
6
|
- 1.8.7
|
4
|
-
-
|
7
|
+
- jruby-head
|
8
|
+
- jruby-19mode
|
9
|
+
- jruby-18mode
|
10
|
+
- rbx-19mode
|
11
|
+
- rbx-18mode
|
12
|
+
matrix:
|
13
|
+
allow_failures:
|
14
|
+
- rvm: jruby-head
|
15
|
+
- rvm: jruby-19mode
|
16
|
+
- rvm: jruby-18mode
|
17
|
+
- rvm: rbx-19mode
|
18
|
+
- rvm: rbx-18mode
|
data/History.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
## Ammeter release history
|
2
2
|
|
3
|
+
### 0.2.9 / 2013-06-06
|
4
|
+
|
5
|
+
[full changelog](https://github.com/alexrothenberg/ammeter/compare/v0.2.8...v0.2.9)
|
6
|
+
|
7
|
+
* Improves `contain` matcher for generated file contents
|
8
|
+
* Adds `ensure_current_path` method to GeneratorExampleGroup
|
9
|
+
|
3
10
|
### 0.2.8 / 2012-07-06
|
4
11
|
|
5
12
|
[full changelog](https://github.com/alexrothenberg/ammeter/compare/v0.2.7...v0.2.8)
|
data/README.md
CHANGED
@@ -1,73 +1,74 @@
|
|
1
|
-
# Ammeter [](http://travis-ci.org/alexrothenberg/ammeter) [](http://travis-ci.org/alexrothenberg/ammeter) [](https://codeclimate.com/github/alexrothenberg/ammeter) [](http://badge.fury.io/rb/ammeter)
|
2
|
+
|
2
3
|
|
3
4
|
A gem that makes it easy to write specs for your Rails 3 Generators.
|
4
5
|
|
5
|
-
RSpec is using ammeter to
|
6
|
-
[spec](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/model/model_generator_spec.rb)
|
7
|
-
[its](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/controller/controller_generator_spec.rb)
|
8
|
-
[own](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/helper/helper_generator_spec.rb)
|
6
|
+
RSpec is using ammeter to
|
7
|
+
[spec](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/model/model_generator_spec.rb)
|
8
|
+
[its](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/controller/controller_generator_spec.rb)
|
9
|
+
[own](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/helper/helper_generator_spec.rb)
|
9
10
|
[generators](https://github.com/rspec/rspec-rails/blob/master/spec/generators/rspec/scaffold/scaffold_generator_spec.rb)
|
10
11
|
and we think you may find it useful too.
|
11
12
|
|
12
|
-
An [ammeter](http://en.wikipedia.org/wiki/Ammeter) is used to measure electrical current and
|
13
|
+
An [ammeter](http://en.wikipedia.org/wiki/Ammeter) is used to measure electrical current and
|
13
14
|
electricity can be produced by a generator.
|
14
15
|
|
15
16
|
# Example
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
describe 'the migration' do
|
63
|
-
subject { file('db/migrate/create_posts.rb') }
|
64
|
-
|
65
|
-
# should be_a_migration - verifies the file exists with a migration timestamp as part of the filename
|
66
|
-
it { should be_a_migration }
|
67
|
-
end
|
68
|
-
end
|
18
|
+
```ruby
|
19
|
+
require 'spec_helper'
|
20
|
+
|
21
|
+
# Generators are not automatically loaded by Rails
|
22
|
+
require 'generators/rspec/model/model_generator'
|
23
|
+
|
24
|
+
describe Rspec::Generators::ModelGenerator do
|
25
|
+
# Tell the generator where to put its output (what it thinks of as Rails.root)
|
26
|
+
destination File.expand_path("../../../../../tmp", __FILE__)
|
27
|
+
before do
|
28
|
+
prepare_destination
|
29
|
+
end
|
30
|
+
|
31
|
+
# using mocks to ensure proper methods are called
|
32
|
+
# invoke_all - will call all the tasks in the generator
|
33
|
+
it 'should run all tasks in the generator' do
|
34
|
+
gen = generator %w(posts)
|
35
|
+
gen.should_receive :create_model_spec
|
36
|
+
gen.should_receive :create_fixture_file
|
37
|
+
capture(:stdout) { gen.invoke_all }
|
38
|
+
end
|
39
|
+
|
40
|
+
# invoke_task - will call just the named task in the generator
|
41
|
+
it 'should run a specific tasks in the generator' do
|
42
|
+
gen = generator %w(posts)
|
43
|
+
gen.should_receive :create_model_spec
|
44
|
+
gen.should_not_receive :create_fixture_file
|
45
|
+
capture(:stdout) { gen.invoke_task :create_model_spec }
|
46
|
+
end
|
47
|
+
|
48
|
+
# custom matchers make it easy to verify what the generator creates
|
49
|
+
describe 'the generated files' do
|
50
|
+
before do
|
51
|
+
run_generator %w(posts)
|
52
|
+
end
|
53
|
+
describe 'the spec' do
|
54
|
+
# file - gives you the absolute path where the generator will create the file
|
55
|
+
subject { file('spec/models/posts_spec.rb') }
|
56
|
+
# should exist - verifies the file exists
|
57
|
+
it { should exist }
|
58
|
+
|
59
|
+
# should contain - verifies the file's contents
|
60
|
+
it { should contain /require 'spec_helper'/ }
|
61
|
+
it { should contain /describe Posts/ }
|
69
62
|
end
|
63
|
+
describe 'the migration' do
|
64
|
+
subject { file('db/migrate/create_posts.rb') }
|
70
65
|
|
66
|
+
# should be_a_migration - verifies the file exists with a migration timestamp as part of the filename
|
67
|
+
it { should be_a_migration }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
71
72
|
|
72
73
|
# Contributing
|
73
74
|
|
data/Rakefile
CHANGED
@@ -32,7 +32,7 @@ def create_gem(gem_name)
|
|
32
32
|
sh "cp '#{template_folder}/Gemfile' tmp/#{gem_name}"
|
33
33
|
sh "cp '#{template_folder}/#{gem_name}.gemspec' tmp/#{gem_name}"
|
34
34
|
sh "cp '#{template_folder}/Rakefile' tmp/#{gem_name}"
|
35
|
-
sh "mkdir tmp/#{gem_name}/spec"
|
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
38
|
Bundler.clean_system 'bundle install'
|
data/ammeter.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
|
-
|
19
|
+
|
20
20
|
s.add_runtime_dependency 'railties', '>= 3.0'
|
21
21
|
s.add_runtime_dependency 'activesupport', '>= 3.0'
|
22
22
|
s.add_runtime_dependency 'rspec', '>= 2.2'
|
@@ -30,5 +30,11 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'jquery-rails', '>= 2.0.2'
|
31
31
|
s.add_development_dependency 'cucumber', '>= 0.10'
|
32
32
|
s.add_development_dependency 'aruba', '>= 0.3'
|
33
|
-
|
33
|
+
case RUBY_PLATFORM
|
34
|
+
when 'java'
|
35
|
+
s.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
|
36
|
+
s.add_development_dependency 'therubyrhino'
|
37
|
+
else
|
38
|
+
s.add_development_dependency 'sqlite3', '>= 1'
|
39
|
+
end
|
34
40
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# see https://github.com/cucumber/aruba#jruby-tips
|
2
|
+
Aruba.configure do |config|
|
3
|
+
config.before_cmd do |cmd|
|
4
|
+
set_env('JRUBY_OPTS', "-X-C #{ENV['JRUBY_OPTS']}") # disable JIT since these processes are so short lived
|
5
|
+
set_env('JAVA_OPTS', "-d32 #{ENV['JAVA_OPTS']}") # force jRuby to use client JVM for faster startup times
|
6
|
+
end
|
7
|
+
end if RUBY_PLATFORM == 'java'
|
8
|
+
|
9
|
+
# MRI 1.8.7 does not define RUBY_ENGINE
|
10
|
+
if defined?(RUBY_ENGINE) && %w(jruby rbx).include?(RUBY_ENGINE)
|
11
|
+
Before do
|
12
|
+
@aruba_timeout_seconds = 30
|
13
|
+
end
|
14
|
+
end
|
@@ -25,6 +25,10 @@ module Ammeter
|
|
25
25
|
def prepare_destination
|
26
26
|
self.test_unit_test_case_delegate.send :prepare_destination
|
27
27
|
end
|
28
|
+
|
29
|
+
def ensure_current_path
|
30
|
+
self.test_unit_test_case_delegate.send :ensure_current_path
|
31
|
+
end
|
28
32
|
|
29
33
|
def initialize_delegate
|
30
34
|
self.test_unit_test_case_delegate = ::Rails::Generators::TestCase.new 'pending'
|
@@ -49,7 +53,7 @@ module Ammeter
|
|
49
53
|
end
|
50
54
|
|
51
55
|
included do
|
52
|
-
delegate :generator, :run_generator, :destination, :arguments, :to => :'self.class'
|
56
|
+
delegate :generator, :run_generator, :destination, :arguments, :ensure_current_path, :to => :'self.class'
|
53
57
|
DELEGATED_METHODS.each do |method|
|
54
58
|
delegate method, :to => :'self.class'
|
55
59
|
end
|
@@ -1,19 +1,46 @@
|
|
1
|
-
RSpec::Matchers.define :contain do |
|
2
|
-
|
3
|
-
@actual_contents = File.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
RSpec::Matchers.define :contain do |*expected_contents|
|
2
|
+
match_for_should do |file_path|
|
3
|
+
@actual_contents = File.read(file_path)
|
4
|
+
not_found_expectations.empty?
|
5
|
+
end
|
6
|
+
|
7
|
+
match_for_should_not do |file_path|
|
8
|
+
@actual_contents = File.read(file_path)
|
9
|
+
found_expectations.empty?
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
failure_message_for_should do |file_path|
|
13
|
-
"expected the file #{file_path} to contain
|
13
|
+
"expected the file #{file_path} to contain " +
|
14
|
+
if expected_contents.many?
|
15
|
+
"#{expected_contents.map(&:inspect).to_sentence} but " +
|
16
|
+
"#{not_found_expectations.map(&:inspect).to_sentence} #{not_found_expectations.many? ? 'were' : 'was'} not found"
|
17
|
+
else
|
18
|
+
"#{expected_contents.first.inspect} but it contained #{@actual_contents.inspect}"
|
19
|
+
end
|
14
20
|
end
|
15
|
-
|
21
|
+
|
16
22
|
failure_message_for_should_not do |file_path|
|
17
|
-
"expected the file #{file_path} to not contain
|
23
|
+
"expected the file #{file_path} to not contain " +
|
24
|
+
if expected_contents.many?
|
25
|
+
"#{expected_contents.map(&:inspect).to_sentence} but " +
|
26
|
+
"#{found_expectations.map(&:inspect).to_sentence} #{found_expectations.many? ? 'were' : 'was'} found"
|
27
|
+
else
|
28
|
+
"#{expected_contents.first.inspect} but it did"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
define_method :found_expectations do
|
33
|
+
@found_expectations ||= expected_contents.select do |expected_content|
|
34
|
+
case expected_content
|
35
|
+
when String
|
36
|
+
@actual_contents.include? expected_content
|
37
|
+
when Regexp
|
38
|
+
@actual_contents =~ expected_content
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
define_method :not_found_expectations do
|
44
|
+
@not_found_expectations ||= expected_contents - found_expectations
|
18
45
|
end
|
19
46
|
end
|
data/lib/ammeter/version.rb
CHANGED
@@ -4,18 +4,19 @@ describe "contain" do
|
|
4
4
|
|
5
5
|
context "when the file exists" do
|
6
6
|
let(:contents) { "This file\ncontains\nthis text" }
|
7
|
-
let(:mock_file) { mock(:read=>contents) }
|
8
7
|
|
9
8
|
subject { '/some/file/path' }
|
10
9
|
before do
|
11
|
-
File.stub(:
|
10
|
+
File.stub(:read).with('/some/file/path').and_return(contents)
|
12
11
|
end
|
13
12
|
it { should contain "This file\ncontains\nthis text" }
|
14
13
|
it { should contain "This file" }
|
15
14
|
it { should contain "this text" }
|
16
15
|
it { should contain /This file/ }
|
17
16
|
it { should contain /this text/ }
|
17
|
+
it { should contain "contains", /this text/ }
|
18
18
|
it { should_not contain /something not there/ }
|
19
|
+
it { should_not contain /this isn't at the contents/, /neither is this/ }
|
19
20
|
end
|
20
21
|
|
21
22
|
context "when the file is not there" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ammeter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- features/generator_in_a_gem.feature
|
238
238
|
- features/generator_spec.feature
|
239
239
|
- features/hooking_into_other_generators.feature
|
240
|
+
- features/support/aruba_timeout.rb
|
240
241
|
- features/support/env.rb
|
241
242
|
- features/templates/generate_example_app.rb
|
242
243
|
- features/templates/my_rails_gem/Gemfile
|
@@ -278,7 +279,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
278
279
|
version: '0'
|
279
280
|
segments:
|
280
281
|
- 0
|
281
|
-
hash:
|
282
|
+
hash: 1076241884620753575
|
282
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
283
284
|
none: false
|
284
285
|
requirements:
|
@@ -287,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
288
|
version: '0'
|
288
289
|
segments:
|
289
290
|
- 0
|
290
|
-
hash:
|
291
|
+
hash: 1076241884620753575
|
291
292
|
requirements: []
|
292
293
|
rubyforge_project:
|
293
294
|
rubygems_version: 1.8.24
|
@@ -298,6 +299,7 @@ test_files:
|
|
298
299
|
- features/generator_in_a_gem.feature
|
299
300
|
- features/generator_spec.feature
|
300
301
|
- features/hooking_into_other_generators.feature
|
302
|
+
- features/support/aruba_timeout.rb
|
301
303
|
- features/support/env.rb
|
302
304
|
- features/templates/generate_example_app.rb
|
303
305
|
- features/templates/my_rails_gem/Gemfile
|