riveter 0.0.1 → 0.0.3
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 +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
|
+
[](http://badge.fury.io/rb/riveter)
|
4
|
+
[](http://travis-ci.org/virtualstaticvoid/riveter)
|
5
|
+
[](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
|