riveter 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -3
- data/Gemfile.lock +1 -1
- data/README.md +5 -1
- data/app/helpers/riveter.rb +2 -0
- data/app/helpers/riveter/query_filter_form_helper.rb +1 -1
- data/lib/generators/haml/command_controller/command_controller_generator.rb +1 -1
- data/lib/generators/haml/enquiry_controller/enquiry_controller_generator.rb +1 -1
- data/lib/generators/riveter/enquiry/enquiry_generator.rb +5 -0
- data/lib/generators/riveter/enum/enum_generator.rb +1 -1
- data/lib/generators/riveter/query_filter/query_filter_generator.rb +1 -1
- data/lib/riveter/booleaness_validator.rb +0 -7
- data/lib/riveter/version.rb +1 -1
- data/spec/examples/generator_examples.rb +57 -0
- data/spec/generators/haml/command_controller/command_controller_generator_spec.rb +38 -19
- data/spec/generators/haml/enquiry_controller/enquiry_controller_generator_spec.rb +38 -19
- data/spec/generators/riveter/command/command_generator_spec.rb +32 -36
- data/spec/generators/riveter/command_controller/command_controller_generator_spec.rb +51 -0
- data/spec/generators/riveter/enquiry/enquiry_generator_spec.rb +53 -0
- data/spec/generators/riveter/enquiry_controller/enquiry_controller_generator_spec.rb +51 -0
- data/spec/generators/riveter/enum/enum_generator_spec.rb +64 -0
- data/spec/generators/riveter/install/install_generator_spec.rb +6 -0
- data/spec/generators/riveter/presenter/presenter_generator_spec.rb +32 -0
- data/spec/generators/riveter/query/query_generator_spec.rb +32 -0
- data/spec/generators/riveter/query_filter/query_filter_generator_spec.rb +31 -36
- data/spec/generators/riveter/service/service_generator_spec.rb +33 -0
- data/spec/generators/riveter/worker/worker_generator_spec.rb +32 -0
- data/spec/generators/rspec/command/command_generator_spec.rb +24 -0
- data/spec/generators/rspec/command_controller/command_controller_generator_spec.rb +36 -0
- data/spec/generators/rspec/enquiry/enquiry_generator_spec.rb +24 -0
- data/spec/generators/rspec/enquiry_controller/enquiry_controller_generator_spec.rb +36 -0
- data/spec/generators/rspec/enum/enum_generator_spec.rb +24 -0
- data/spec/generators/rspec/presenter/presenter_generator_spec.rb +24 -0
- data/spec/generators/rspec/query/query_generator_spec.rb +24 -0
- data/spec/generators/rspec/query_filter/query_filter_generator_spec.rb +24 -0
- data/spec/generators/rspec/service/service_generator_spec.rb +24 -0
- data/spec/generators/rspec/worker/worker_generator_spec.rb +24 -0
- data/spec/helpers/riveter/command_form_helper_spec.rb +26 -0
- data/spec/helpers/riveter/enquiry_form_helper_spec.rb +26 -0
- data/spec/helpers/riveter/query_filter_form_helper_spec.rb +26 -0
- data/spec/riveter/booleaness_validator_spec.rb +83 -0
- data/spec/riveter/command_spec.rb +7 -2
- data/spec/spec_helper.rb +3 -17
- data/spec/support/test_class_with_attributes.rb +3 -0
- data/spec/support/test_service.rb +0 -5
- metadata +47 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 490a7f61ea22d7e68dcf0b8b634322d69e2989d3
|
4
|
+
data.tar.gz: 5593071d86a1e9372f755844be534ebf60b3ba98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff3996ed69e012715a3dfdceefaca6406fe3cb0b808c6c19c5ca696608d7b74392299885847fe41d15aefdf432dab6488ec4e3eb084ef95e428c6fb5e9d89c6e
|
7
|
+
data.tar.gz: d3a29892bceebcfa3a928c372fb323fcf88d1cc566a5b0b5a65681d0a6d697bda83f0dac09752426c9efc54b7e4e922b1c3fbaec6dc024487d453b87d9b0a092
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
# Riveter
|
1
|
+
# Riveter
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/riveter.svg)](http://badge.fury.io/rb/riveter)
|
4
|
+
[![Build Status](https://secure.travis-ci.org/virtualstaticvoid/riveter.png?branch=master)](http://travis-ci.org/virtualstaticvoid/riveter)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/virtualstaticvoid/riveter.png)](https://codeclimate.com/github/virtualstaticvoid/riveter)
|
2
6
|
|
3
7
|
Provides several useful patterns, packaged in a gem, for use in Rails.
|
4
8
|
Includes generators to help you improve consistency in your applications.
|
@@ -4,7 +4,7 @@ module Riveter
|
|
4
4
|
query_filter_class_name = query_filter.class.name.underscore
|
5
5
|
options = {
|
6
6
|
:as => query_filter_class_name.gsub(/_query_filter$/, ''),
|
7
|
-
:url => query_filter_class_name,
|
7
|
+
:url => query_filter_class_name.gsub(/_query_filter$/, ''),
|
8
8
|
:method => :get
|
9
9
|
}.merge(options)
|
10
10
|
|
@@ -37,7 +37,7 @@ module Haml
|
|
37
37
|
when :integer, :decimal, :boolean, :date, :time, :datetime
|
38
38
|
", :as => :#{type}"
|
39
39
|
when :enum
|
40
|
-
", :collection => #{name.titleize}.collection"
|
40
|
+
", :collection => #{name.titleize}Enum.collection"
|
41
41
|
when :model
|
42
42
|
", :collection => #{name.titleize}.all"
|
43
43
|
else
|
@@ -37,7 +37,7 @@ module Haml
|
|
37
37
|
when :integer, :decimal, :boolean, :date, :time, :datetime
|
38
38
|
", :as => :#{type}"
|
39
39
|
when :enum
|
40
|
-
", :collection => #{name.titleize}.collection"
|
40
|
+
", :collection => #{name.titleize}Enum.collection"
|
41
41
|
when :model
|
42
42
|
", :collection => #{name.titleize}.all"
|
43
43
|
else
|
@@ -14,6 +14,11 @@ module Riveter
|
|
14
14
|
|
15
15
|
check_class_collision :suffix => 'Enquiry'
|
16
16
|
|
17
|
+
argument :filter_attributes,
|
18
|
+
:type => :array,
|
19
|
+
:default => [],
|
20
|
+
:banner => "[attribute[:type[:required]] attribute[:type[:required]]]"
|
21
|
+
|
17
22
|
def create_enquiry_file
|
18
23
|
template 'enquiry.rb', File.join('app/enquiries', class_path, "#{file_name}_enquiry.rb")
|
19
24
|
end
|
@@ -21,7 +21,7 @@ module Riveter
|
|
21
21
|
|
22
22
|
def create_module_file
|
23
23
|
return if regular_class_path.empty?
|
24
|
-
template 'module.rb', File.join('app/
|
24
|
+
template 'module.rb', File.join('app/query_filters', "#{class_path.join('/')}.rb") if behavior == :invoke
|
25
25
|
end
|
26
26
|
|
27
27
|
def create_locale_file
|
@@ -1,13 +1,6 @@
|
|
1
1
|
module Riveter
|
2
2
|
class BooleanessValidator < ActiveModel::EachValidator
|
3
|
-
def initialize(options)
|
4
|
-
@allow_nil, @allow_blank = options.delete(:allow_nil), options.delete(:allow_blank)
|
5
|
-
super
|
6
|
-
end
|
7
|
-
|
8
3
|
def validate_each(record, attribute, value)
|
9
|
-
return if (@allow_nil && value.nil?) || (@allow_blank && value.blank?)
|
10
|
-
|
11
4
|
unless [true, false].include?(value)
|
12
5
|
record.errors.add(attribute, :booleaness, :value => value)
|
13
6
|
end
|
data/lib/riveter/version.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples_for "a generator with locale file output" do |file_name|
|
4
|
+
describe "the generated files" do
|
5
|
+
describe "the #{file_name}.en.yml" do
|
6
|
+
describe "creates when missing" do
|
7
|
+
before do
|
8
|
+
run_generator %w(foo_bar)
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { file("config/locales/#{file_name}.en.yml") }
|
12
|
+
|
13
|
+
it { should exist }
|
14
|
+
it { should contain("#{file_name}:") }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "skips when exists" do
|
18
|
+
before do
|
19
|
+
FileUtils.mkdir_p(file('config/locales'))
|
20
|
+
File.open(file("config/locales/#{file_name}.en.yml"), 'w') {|f| f.write 'untouched' }
|
21
|
+
run_generator %w(foo_bar)
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { file("config/locales/#{file_name}.en.yml") }
|
25
|
+
|
26
|
+
it { should exist }
|
27
|
+
it { should contain('untouched')}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
shared_examples_for "a generator with output to routes" do |route|
|
34
|
+
describe "the generated files" do
|
35
|
+
describe "the route" do
|
36
|
+
before do
|
37
|
+
run_generator %w(foo_bar)
|
38
|
+
end
|
39
|
+
|
40
|
+
subject { file('config/routes.rb') }
|
41
|
+
|
42
|
+
it { should contain(route) }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
shared_examples_for "a generator with a module" do |path|
|
48
|
+
describe "the module" do
|
49
|
+
before do
|
50
|
+
run_generator %w(test_ns/foo_bar)
|
51
|
+
end
|
52
|
+
|
53
|
+
subject { file("#{path}/test_ns.rb") }
|
54
|
+
|
55
|
+
it { should exist }
|
56
|
+
end
|
57
|
+
end
|
@@ -2,33 +2,52 @@ require 'spec_helper'
|
|
2
2
|
require 'generators/haml/command_controller/command_controller_generator'
|
3
3
|
|
4
4
|
describe Haml::Generators::CommandControllerGenerator, :type => :generator do
|
5
|
-
it "
|
6
|
-
gen = generator %w(
|
5
|
+
it "should run all tasks in the generator" do
|
6
|
+
gen = generator %w(foo_bar)
|
7
7
|
expect(gen).to receive(:create_template_file)
|
8
8
|
capture(:stdout) { gen.invoke_all }
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
describe "the generated files" do
|
12
|
+
describe "the view" do
|
13
|
+
describe "with defaults" do
|
14
|
+
before do
|
15
|
+
run_generator %w(foo_bar)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
gen = generator %w(create_something create name:string:required active:boolean other)
|
19
|
-
expect(gen).to receive(:create_template_file)
|
20
|
-
capture(:stdout) { gen.invoke_all }
|
21
|
-
end
|
18
|
+
subject { file('app/views/foo_bar_command/new.html.haml') }
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
20
|
+
it { should exist }
|
21
|
+
it { should contain('= command_form_for') }
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
|
24
|
+
describe "with specified action name" do
|
25
|
+
before do
|
26
|
+
run_generator %w(foo_bar create)
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { file('app/views/foo_bar_command/create.html.haml') }
|
30
|
+
|
31
|
+
it { should exist }
|
32
|
+
it { should contain('= command_form_for') }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "with specified action name and attributes" do
|
36
|
+
before do
|
37
|
+
run_generator %w(foo_bar baz qux:string quux:string:required corge:enum grault:boolean garply:model other)
|
38
|
+
end
|
39
|
+
|
40
|
+
subject { file('app/views/foo_bar_command/baz.html.haml') }
|
30
41
|
|
31
|
-
|
42
|
+
it { should exist }
|
43
|
+
it { should contain('= command_form_for') }
|
44
|
+
it { should contain('= f.input :qux') }
|
45
|
+
it { should contain('= f.input :quux') }
|
46
|
+
it { should contain('= f.input :corge, :collection => CorgeEnum.collection') }
|
47
|
+
it { should contain('= f.input :grault') }
|
48
|
+
it { should contain('= f.input :garply, :collection => Garply.all') }
|
49
|
+
it { should contain('= f.input :other') }
|
50
|
+
end
|
32
51
|
end
|
33
52
|
end
|
34
53
|
end
|
@@ -2,33 +2,52 @@ require 'spec_helper'
|
|
2
2
|
require 'generators/haml/enquiry_controller/enquiry_controller_generator'
|
3
3
|
|
4
4
|
describe Haml::Generators::EnquiryControllerGenerator, :type => :generator do
|
5
|
-
it "
|
6
|
-
gen = generator %w(
|
5
|
+
it "should run all tasks in the generator" do
|
6
|
+
gen = generator %w(foo_bar)
|
7
7
|
expect(gen).to receive(:create_template_file)
|
8
8
|
capture(:stdout) { gen.invoke_all }
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
describe "the generated files" do
|
12
|
+
describe "the view" do
|
13
|
+
describe "with defaults" do
|
14
|
+
before do
|
15
|
+
run_generator %w(foo_bar)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
gen = generator %w(list_something list name:string:required active:boolean other)
|
19
|
-
expect(gen).to receive(:create_template_file)
|
20
|
-
capture(:stdout) { gen.invoke_all }
|
21
|
-
end
|
18
|
+
subject { file('app/views/foo_bar_enquiry/index.html.haml') }
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
20
|
+
it { should exist }
|
21
|
+
it { should contain('= enquiry_form_for') }
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
|
24
|
+
describe "with specified action name" do
|
25
|
+
before do
|
26
|
+
run_generator %w(foo_bar baz)
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { file('app/views/foo_bar_enquiry/baz.html.haml') }
|
30
|
+
|
31
|
+
it { should exist }
|
32
|
+
it { should contain('= enquiry_form_for') }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "with specified action name and attributes" do
|
36
|
+
before do
|
37
|
+
run_generator %w(foo_bar baz qux:string quux:string:required corge:enum grault:boolean garply:model other)
|
38
|
+
end
|
39
|
+
|
40
|
+
subject { file('app/views/foo_bar_enquiry/baz.html.haml') }
|
30
41
|
|
31
|
-
|
42
|
+
it { should exist }
|
43
|
+
it { should contain('= enquiry_form_for') }
|
44
|
+
it { should contain('= f.input :qux') }
|
45
|
+
it { should contain('= f.input :quux') }
|
46
|
+
it { should contain('= f.input :corge, :collection => CorgeEnum.collection') }
|
47
|
+
it { should contain('= f.input :grault') }
|
48
|
+
it { should contain('= f.input :garply, :collection => Garply.all') }
|
49
|
+
it { should contain('= f.input :other') }
|
50
|
+
end
|
32
51
|
end
|
33
52
|
end
|
34
53
|
end
|
@@ -1,58 +1,54 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'generators/riveter/command/command_generator'
|
3
|
-
require 'fileutils'
|
4
3
|
|
5
4
|
describe Riveter::Generators::CommandGenerator, :type => :generator do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
capture(:stdout) { gen.invoke_all }
|
5
|
+
before do
|
6
|
+
FileUtils.mkdir_p(file('config/locales'))
|
7
|
+
File.open(file('config/routes.rb'), 'w') {|f| f.write "TestApp::Application.routes.draw do\nend\n" }
|
10
8
|
end
|
11
9
|
|
12
|
-
it "
|
13
|
-
gen = generator %w(
|
10
|
+
it "should run all tasks in the generator" do
|
11
|
+
gen = generator %w(foo_bar)
|
14
12
|
expect(gen).to receive(:create_command_file)
|
15
|
-
capture(:stdout) { gen.invoke_all }
|
16
|
-
end
|
17
|
-
|
18
|
-
it "creates a module file" do
|
19
|
-
gen = generator %w(test_ns/create_something name:string:required active:boolean other --no-command-controller)
|
20
13
|
expect(gen).to receive(:create_module_file)
|
21
|
-
capture(:stdout) { gen.invoke_all }
|
22
|
-
end
|
23
|
-
|
24
|
-
it "creates a locale file if it doesn't exist" do
|
25
|
-
gen = generator %w(create_something --no-command-controller)
|
26
14
|
expect(gen).to receive(:create_locale_file)
|
27
|
-
capture(:stdout) { gen.invoke_all }
|
28
|
-
end
|
29
15
|
|
30
|
-
|
31
|
-
|
16
|
+
# hooks
|
17
|
+
expect(gen).to receive(:_invoke_from_option_command_controller)
|
18
|
+
expect(gen).to receive(:_invoke_from_option_test_framework)
|
19
|
+
|
20
|
+
capture(:stdout) { gen.invoke_all }
|
32
21
|
end
|
33
22
|
|
34
23
|
describe "the generated files" do
|
35
24
|
describe "the command" do
|
36
|
-
|
37
|
-
|
38
|
-
|
25
|
+
describe "with defaults" do
|
26
|
+
before do
|
27
|
+
run_generator %w(foo_bar)
|
28
|
+
end
|
39
29
|
|
40
|
-
|
30
|
+
subject { file('app/commands/foo_bar_command.rb') }
|
41
31
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
describe "the commands.en.yml locale" do
|
46
|
-
before do
|
47
|
-
FileUtils.mkdir_p(file('config/locales'))
|
48
|
-
File.open(file('config/locales/commands.en.yml'), 'w') {|f| f.write 'empty' }
|
49
|
-
run_generator %w(create_something name:string:required active:boolean other --no-command-controller)
|
32
|
+
it { should exist }
|
33
|
+
it { should contain('class FooBarCommand') }
|
50
34
|
end
|
51
35
|
|
52
|
-
|
36
|
+
describe "with attributes" do
|
37
|
+
before do
|
38
|
+
run_generator %w(foo_bar name:string:required active:boolean other)
|
39
|
+
end
|
40
|
+
|
41
|
+
subject { file('app/commands/foo_bar_command.rb') }
|
53
42
|
|
54
|
-
|
55
|
-
|
43
|
+
it { should exist }
|
44
|
+
it { should contain('class FooBarCommand') }
|
45
|
+
it { should contain('attr_string :name, :required => true') }
|
46
|
+
it { should contain('attr_boolean :active') }
|
47
|
+
it { should contain('attr_string :other') }
|
48
|
+
end
|
56
49
|
end
|
50
|
+
|
51
|
+
it_should_behave_like 'a generator with a module', 'app/commands'
|
52
|
+
it_should_behave_like 'a generator with locale file output', 'commands'
|
57
53
|
end
|
58
54
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'generators/riveter/command_controller/command_controller_generator'
|
3
|
+
|
4
|
+
describe Riveter::Generators::CommandControllerGenerator, :type => :generator do
|
5
|
+
before do
|
6
|
+
FileUtils.mkdir_p(file('config'))
|
7
|
+
File.open(file('config/routes.rb'), 'w') {|f| f.write "TestApp::Application.routes.draw do\nend\n" }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should run all tasks in the generator" do
|
11
|
+
gen = generator %w(foo_bar)
|
12
|
+
expect(gen).to receive(:create_command_controller_file)
|
13
|
+
expect(gen).to receive(:create_module_file)
|
14
|
+
expect(gen).to receive(:add_command_route)
|
15
|
+
|
16
|
+
# hooks
|
17
|
+
expect(gen).to receive(:_invoke_from_option_template_engine)
|
18
|
+
expect(gen).to receive(:_invoke_from_option_test_framework)
|
19
|
+
|
20
|
+
capture(:stdout) { gen.invoke_all }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "the generated files" do
|
24
|
+
describe "the controller" do
|
25
|
+
describe "with defaults" do
|
26
|
+
before do
|
27
|
+
run_generator %w(foo_bar)
|
28
|
+
end
|
29
|
+
|
30
|
+
subject { file('app/controllers/foo_bar_command_controller.rb') }
|
31
|
+
|
32
|
+
it { should exist }
|
33
|
+
it { should contain('command_controller_for FooBarCommand') }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with action names" do
|
37
|
+
before do
|
38
|
+
run_generator %w(foo_bar start doit)
|
39
|
+
end
|
40
|
+
|
41
|
+
subject { file('app/controllers/foo_bar_command_controller.rb') }
|
42
|
+
|
43
|
+
it { should exist }
|
44
|
+
it { should contain('command_controller_for FooBarCommand, :new_action => :start, :create_action => :doit') }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it_should_behave_like 'a generator with a module', 'app/controllers'
|
49
|
+
it_should_behave_like 'a generator with output to routes', 'command :foo_bar'
|
50
|
+
end
|
51
|
+
end
|