riveter 0.0.1
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 +7 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +147 -0
- data/LICENSE.txt +23 -0
- data/README.md +77 -0
- data/Rakefile +7 -0
- data/app/helpers/riveter/command_form_helper.rb +15 -0
- data/app/helpers/riveter/enquiry_form_helper.rb +16 -0
- data/app/helpers/riveter/query_filter_form_helper.rb +16 -0
- data/config/locales/forms.en.yml +25 -0
- data/config/locales/validators.en.yml +26 -0
- data/init.rb +25 -0
- data/lib/generators/erb/TODO +1 -0
- data/lib/generators/haml/command_controller/USAGE +0 -0
- data/lib/generators/haml/command_controller/command_controller_generator.rb +56 -0
- data/lib/generators/haml/command_controller/templates/new.html.haml +26 -0
- data/lib/generators/haml/enquiry_controller/USAGE +0 -0
- data/lib/generators/haml/enquiry_controller/enquiry_controller_generator.rb +56 -0
- data/lib/generators/haml/enquiry_controller/templates/index.html.haml +57 -0
- data/lib/generators/riveter/command/USAGE +0 -0
- data/lib/generators/riveter/command/command_generator.rb +55 -0
- data/lib/generators/riveter/command/templates/command.rb +40 -0
- data/lib/generators/riveter/command/templates/commands.en.yml +57 -0
- data/lib/generators/riveter/command/templates/module.rb +4 -0
- data/lib/generators/riveter/command_controller/USAGE +0 -0
- data/lib/generators/riveter/command_controller/command_controller_generator.rb +40 -0
- data/lib/generators/riveter/command_controller/templates/command_controller.rb +18 -0
- data/lib/generators/riveter/command_controller/templates/module.rb +4 -0
- data/lib/generators/riveter/enquiry/USAGE +0 -0
- data/lib/generators/riveter/enquiry/enquiry_generator.rb +29 -0
- data/lib/generators/riveter/enquiry/templates/enquiry.rb +11 -0
- data/lib/generators/riveter/enquiry/templates/module.rb +4 -0
- data/lib/generators/riveter/enquiry_controller/USAGE +0 -0
- data/lib/generators/riveter/enquiry_controller/enquiry_controller_generator.rb +34 -0
- data/lib/generators/riveter/enquiry_controller/templates/enquiry_controller.rb +9 -0
- data/lib/generators/riveter/enquiry_controller/templates/module.rb +4 -0
- data/lib/generators/riveter/enum/USAGE +41 -0
- data/lib/generators/riveter/enum/enum_generator.rb +51 -0
- data/lib/generators/riveter/enum/templates/enum.rb +17 -0
- data/lib/generators/riveter/enum/templates/enums.en.yml +35 -0
- data/lib/generators/riveter/enum/templates/module.rb +4 -0
- data/lib/generators/riveter/install/USAGE +0 -0
- data/lib/generators/riveter/install/install_generator.rb +14 -0
- data/lib/generators/riveter/presenter/USAGE +0 -0
- data/lib/generators/riveter/presenter/presenter_generator.rb +20 -0
- data/lib/generators/riveter/presenter/templates/module.rb +4 -0
- data/lib/generators/riveter/presenter/templates/presenter.rb +7 -0
- data/lib/generators/riveter/query/USAGE +22 -0
- data/lib/generators/riveter/query/query_generator.rb +20 -0
- data/lib/generators/riveter/query/templates/module.rb +4 -0
- data/lib/generators/riveter/query/templates/query.rb +31 -0
- data/lib/generators/riveter/query_filter/USAGE +0 -0
- data/lib/generators/riveter/query_filter/query_filter_generator.rb +52 -0
- data/lib/generators/riveter/query_filter/templates/module.rb +4 -0
- data/lib/generators/riveter/query_filter/templates/query_filter.rb +40 -0
- data/lib/generators/riveter/query_filter/templates/query_filters.en.yml +49 -0
- data/lib/generators/riveter/service/USAGE +0 -0
- data/lib/generators/riveter/service/service_generator.rb +20 -0
- data/lib/generators/riveter/service/templates/module.rb +4 -0
- data/lib/generators/riveter/service/templates/service.rb +12 -0
- data/lib/generators/riveter/worker/USAGE +0 -0
- data/lib/generators/riveter/worker/templates/module.rb +4 -0
- data/lib/generators/riveter/worker/templates/worker.rb +7 -0
- data/lib/generators/riveter/worker/worker_generator.rb +20 -0
- data/lib/generators/rspec/command/USAGE +0 -0
- data/lib/generators/rspec/command/command_generator.rb +11 -0
- data/lib/generators/rspec/command/templates/command_spec.rb +8 -0
- data/lib/generators/rspec/command_controller/USAGE +0 -0
- data/lib/generators/rspec/command_controller/command_controller_generator.rb +21 -0
- data/lib/generators/rspec/command_controller/templates/command_controller_spec.rb +70 -0
- data/lib/generators/rspec/enquiry/USAGE +0 -0
- data/lib/generators/rspec/enquiry/enquiry_generator.rb +11 -0
- data/lib/generators/rspec/enquiry/templates/enquiry_spec.rb +69 -0
- data/lib/generators/rspec/enquiry_controller/USAGE +0 -0
- data/lib/generators/rspec/enquiry_controller/enquiry_controller_generator.rb +16 -0
- data/lib/generators/rspec/enquiry_controller/templates/enquiry_controller_spec.rb +32 -0
- data/lib/generators/rspec/enum/USAGE +0 -0
- data/lib/generators/rspec/enum/enum_generator.rb +11 -0
- data/lib/generators/rspec/enum/templates/enum_spec.rb +8 -0
- data/lib/generators/rspec/presenter/USAGE +0 -0
- data/lib/generators/rspec/presenter/presenter_generator.rb +11 -0
- data/lib/generators/rspec/presenter/templates/presenter_spec.rb +8 -0
- data/lib/generators/rspec/query/USAGE +0 -0
- data/lib/generators/rspec/query/query_generator.rb +11 -0
- data/lib/generators/rspec/query/templates/query_spec.rb +41 -0
- data/lib/generators/rspec/query_filter/USAGE +0 -0
- data/lib/generators/rspec/query_filter/query_filter_generator.rb +11 -0
- data/lib/generators/rspec/query_filter/templates/query_filter_spec.rb +8 -0
- data/lib/generators/rspec/service/USAGE +0 -0
- data/lib/generators/rspec/service/service_generator.rb +11 -0
- data/lib/generators/rspec/service/templates/service_spec.rb +8 -0
- data/lib/generators/rspec/worker/USAGE +0 -0
- data/lib/generators/rspec/worker/templates/worker_spec.rb +8 -0
- data/lib/generators/rspec/worker/worker_generator.rb +11 -0
- data/lib/generators/test_unit/TODO +1 -0
- data/lib/riveter/associated_type_registry.rb +63 -0
- data/lib/riveter/attribute_default_values.rb +67 -0
- data/lib/riveter/attributes.rb +443 -0
- data/lib/riveter/booleaness_validator.rb +20 -0
- data/lib/riveter/command.rb +59 -0
- data/lib/riveter/command_controller.rb +93 -0
- data/lib/riveter/command_routes.rb +73 -0
- data/lib/riveter/core_extensions.rb +246 -0
- data/lib/riveter/email_validator.rb +20 -0
- data/lib/riveter/enquiry.rb +137 -0
- data/lib/riveter/enquiry_controller.rb +80 -0
- data/lib/riveter/enquiry_routes.rb +69 -0
- data/lib/riveter/enumerated.rb +107 -0
- data/lib/riveter/errors.rb +11 -0
- data/lib/riveter/form_builder_extensions.rb +21 -0
- data/lib/riveter/hash_with_dependency.rb +12 -0
- data/lib/riveter/presenter.rb +73 -0
- data/lib/riveter/query.rb +45 -0
- data/lib/riveter/query_filter.rb +22 -0
- data/lib/riveter/rails/engine.rb +6 -0
- data/lib/riveter/rails/railtie.rb +50 -0
- data/lib/riveter/service.rb +45 -0
- data/lib/riveter/spec_helper.rb +55 -0
- data/lib/riveter/tasks/.keep +0 -0
- data/lib/riveter/version.rb +3 -0
- data/lib/riveter/worker.rb +20 -0
- data/lib/riveter.rb +47 -0
- data/riveter.gemspec +40 -0
- data/spec/examples/attribute_examples.rb +57 -0
- data/spec/generators/haml/command_controller/command_controller_generator_spec.rb +34 -0
- data/spec/generators/haml/enquiry_controller/enquiry_controller_generator_spec.rb +34 -0
- data/spec/generators/riveter/command/command_generator_spec.rb +58 -0
- data/spec/generators/riveter/command_controller/command_controller_generator_spec.rb +0 -0
- data/spec/generators/riveter/enquiry/enquiry_generator_spec.rb +0 -0
- data/spec/generators/riveter/query_filter/query_filter_generator_spec.rb +58 -0
- data/spec/riveter/associated_type_registry_spec.rb +158 -0
- data/spec/riveter/attribute_default_value_spec.rb +69 -0
- data/spec/riveter/attributes_spec.rb +228 -0
- data/spec/riveter/command_controller_spec.rb +116 -0
- data/spec/riveter/command_routes_spec.rb +116 -0
- data/spec/riveter/command_spec.rb +66 -0
- data/spec/riveter/core_extensions_spec.rb +209 -0
- data/spec/riveter/enquiry_controller_spec.rb +128 -0
- data/spec/riveter/enquiry_routes_spec.rb +101 -0
- data/spec/riveter/enquiry_spec.rb +299 -0
- data/spec/riveter/enumerated_spec.rb +47 -0
- data/spec/riveter/form_builder_extensions_spec.rb +28 -0
- data/spec/riveter/presenter_spec.rb +131 -0
- data/spec/riveter/query_filter_spec.rb +19 -0
- data/spec/riveter/query_spec.rb +72 -0
- data/spec/riveter/service_spec.rb +49 -0
- data/spec/riveter/spec_helper_spec.rb +21 -0
- data/spec/riveter/worker_spec.rb +11 -0
- data/spec/spec_helper.rb +54 -0
- data/spec/support/test_associated_class.rb +2 -0
- data/spec/support/test_class_with_attributes.rb +17 -0
- data/spec/support/test_command.rb +4 -0
- data/spec/support/test_command_controller.rb +12 -0
- data/spec/support/test_command_routes.rb +3 -0
- data/spec/support/test_enquiry.rb +7 -0
- data/spec/support/test_enquiry_controller.rb +12 -0
- data/spec/support/test_enquiry_routes.rb +3 -0
- data/spec/support/test_enum.rb +8 -0
- data/spec/support/test_form_builder.rb +3 -0
- data/spec/support/test_model.rb +2 -0
- data/spec/support/test_model_with_attribute_default_values.rb +29 -0
- data/spec/support/test_presenter.rb +2 -0
- data/spec/support/test_query.rb +5 -0
- data/spec/support/test_query_filter.rb +4 -0
- data/spec/support/test_service.rb +7 -0
- data/spec/support/validate_booleaness_of_matcher.rb +17 -0
- data/spec/support/validate_timeliness_of_matcher.rb +17 -0
- data/spec/support/validator_detector.rb +48 -0
- metadata +487 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
shared_examples_for "an attribute" do |type, default_value, another_value, *args, &block|
|
|
4
|
+
options = args.extract_options!
|
|
5
|
+
|
|
6
|
+
describe type do
|
|
7
|
+
let(:name) { "a_#{type}" }
|
|
8
|
+
let(:instance) { subject.new() }
|
|
9
|
+
|
|
10
|
+
describe "as attribute" do
|
|
11
|
+
before do
|
|
12
|
+
subject.send :"attr_#{type}", name, *args, options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it { subject.attributes.should include(name.to_s) }
|
|
16
|
+
it { instance.attributes.should include(name.to_s) }
|
|
17
|
+
it { instance.should respond_to(name)}
|
|
18
|
+
it { instance.should respond_to("#{name}=")}
|
|
19
|
+
|
|
20
|
+
it "assigns attribute in initializer" do
|
|
21
|
+
a = subject.new(name => another_value)
|
|
22
|
+
a.send(name).should eq(another_value)
|
|
23
|
+
a.attributes[name].should eq(another_value)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "assigns attribute" do
|
|
27
|
+
a = subject.new()
|
|
28
|
+
a.send("#{name}=", another_value)
|
|
29
|
+
a.attributes[name].should eq(another_value)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "as required attribute" do
|
|
34
|
+
before do
|
|
35
|
+
subject.send :"attr_#{type}", name, *args, options.merge(:required => true)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it { instance.should validate_presence_of(name)}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "with default value" do
|
|
42
|
+
before do
|
|
43
|
+
subject.send :"attr_#{type}", name, *args, options.merge(:default => default_value)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it { instance.send(name).should eq(default_value)}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
shared_examples_for "a class with attributes" do |type|
|
|
52
|
+
|
|
53
|
+
# it's good enough to see whether the type includes
|
|
54
|
+
# the class methods of the attributes module
|
|
55
|
+
it { type.should be_a(Riveter::Attributes::ClassMethods) }
|
|
56
|
+
|
|
57
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'generators/haml/command_controller/command_controller_generator'
|
|
3
|
+
|
|
4
|
+
describe Haml::Generators::CommandControllerGenerator, :type => :generator do
|
|
5
|
+
it "creates the view with defaults" do
|
|
6
|
+
gen = generator %w(create_something)
|
|
7
|
+
expect(gen).to receive(:create_template_file)
|
|
8
|
+
capture(:stdout) { gen.invoke_all }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "creates the view with specified action name" do
|
|
12
|
+
gen = generator %w(create_something create)
|
|
13
|
+
expect(gen).to receive(:create_template_file)
|
|
14
|
+
capture(:stdout) { gen.invoke_all }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "creates the view with specified action name and attributes" do
|
|
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
|
|
22
|
+
|
|
23
|
+
describe "the generated files" do
|
|
24
|
+
before do
|
|
25
|
+
run_generator %w(create_something create name:string:required active:boolean other)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "the view" do
|
|
29
|
+
subject { file('app/views/create_something_command/create.html.haml') }
|
|
30
|
+
|
|
31
|
+
it { should exist }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'generators/haml/enquiry_controller/enquiry_controller_generator'
|
|
3
|
+
|
|
4
|
+
describe Haml::Generators::EnquiryControllerGenerator, :type => :generator do
|
|
5
|
+
it "creates the view with defaults" do
|
|
6
|
+
gen = generator %w(list_something)
|
|
7
|
+
expect(gen).to receive(:create_template_file)
|
|
8
|
+
capture(:stdout) { gen.invoke_all }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "creates the view with specified action name" do
|
|
12
|
+
gen = generator %w(list_something list)
|
|
13
|
+
expect(gen).to receive(:create_template_file)
|
|
14
|
+
capture(:stdout) { gen.invoke_all }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "creates the view with specified action name and attributes" do
|
|
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
|
|
22
|
+
|
|
23
|
+
describe "the generated files" do
|
|
24
|
+
before do
|
|
25
|
+
run_generator %w(list_something list name:string:required active:boolean other)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "the view" do
|
|
29
|
+
subject { file('app/views/list_something_enquiry/list.html.haml') }
|
|
30
|
+
|
|
31
|
+
it { should exist }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'generators/riveter/command/command_generator'
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
|
|
5
|
+
describe Riveter::Generators::CommandGenerator, :type => :generator do
|
|
6
|
+
it "creates the command with defaults" do
|
|
7
|
+
gen = generator %w(create_something --no-command-controller)
|
|
8
|
+
expect(gen).to receive(:create_command_file)
|
|
9
|
+
capture(:stdout) { gen.invoke_all }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "creates the command with specified attributes" do
|
|
13
|
+
gen = generator %w(create_something name:string:required active:boolean other --no-command-controller)
|
|
14
|
+
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
|
+
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
|
+
expect(gen).to receive(:create_locale_file)
|
|
27
|
+
capture(:stdout) { gen.invoke_all }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "skips creating a locale file if it exists" do
|
|
31
|
+
pending
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "the generated files" do
|
|
35
|
+
describe "the command" do
|
|
36
|
+
before do
|
|
37
|
+
run_generator %w(create_something name:string:required active:boolean other --no-command-controller)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
subject { file('app/commands/create_something_command.rb') }
|
|
41
|
+
|
|
42
|
+
it { should exist }
|
|
43
|
+
end
|
|
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)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
subject { file('config/locales/commands.en.yml') }
|
|
53
|
+
|
|
54
|
+
it { should exist }
|
|
55
|
+
it { File.open(file('config/locales/commands.en.yml'), 'r') {|f| f.read }.should eq('empty') }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'generators/riveter/query_filter/query_filter_generator'
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
|
|
5
|
+
describe Riveter::Generators::QueryFilterGenerator, :type => :generator do
|
|
6
|
+
it "creates the query filter with defaults" do
|
|
7
|
+
gen = generator %w(active_items)
|
|
8
|
+
expect(gen).to receive(:create_query_filter_file)
|
|
9
|
+
capture(:stdout) { gen.invoke_all }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "creates the query filter with specified attributes" do
|
|
13
|
+
gen = generator %w(active_items name:string:required active:boolean other)
|
|
14
|
+
expect(gen).to receive(:create_query_filter_file)
|
|
15
|
+
capture(:stdout) { gen.invoke_all }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "creates a module file" do
|
|
19
|
+
gen = generator %w(test_ns/active_items name:string:required active:boolean other)
|
|
20
|
+
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(active_items)
|
|
26
|
+
expect(gen).to receive(:create_locale_file)
|
|
27
|
+
capture(:stdout) { gen.invoke_all }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "skips creating a locale file if it exists" do
|
|
31
|
+
pending
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "the generated files" do
|
|
35
|
+
describe "the query filter" do
|
|
36
|
+
before do
|
|
37
|
+
run_generator %w(active_items name:string:required active:boolean other)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
subject { file('app/query_filters/active_items_query_filter.rb') }
|
|
41
|
+
|
|
42
|
+
it { should exist }
|
|
43
|
+
end
|
|
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/query_filters.en.yml'), 'w') {|f| f.write 'empty' }
|
|
49
|
+
run_generator %w(active_items name:string:required active:boolean other)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
subject { file('config/locales/query_filters.en.yml') }
|
|
53
|
+
|
|
54
|
+
it { should exist }
|
|
55
|
+
it { File.open(file('config/locales/query_filters.en.yml'), 'r') {|f| f.read }.should eq('empty') }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Riveter::AssociatedTypeRegistry do
|
|
4
|
+
subject do
|
|
5
|
+
Class.new().class_eval {
|
|
6
|
+
include Riveter::AssociatedTypeRegistry
|
|
7
|
+
self
|
|
8
|
+
}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "#container" do
|
|
12
|
+
it "should be itself" do
|
|
13
|
+
subject.container.should eq(subject)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
let(:derived_class) {
|
|
17
|
+
Class.new(subject).class_eval {
|
|
18
|
+
register_type self, TestAssociatedClass
|
|
19
|
+
self
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
it "should be the base class for derived classes" do
|
|
24
|
+
derived_class.container.should eq(subject)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "#key_for" do
|
|
29
|
+
it "yields a key for a symbol" do
|
|
30
|
+
subject.key_for(:key).should eq(:key)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "yields a key for a type" do
|
|
34
|
+
subject.key_for(TestAssociatedClass).should eq(:test_associated_class)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "#register_type" do
|
|
39
|
+
it "registers the type for the associated class" do
|
|
40
|
+
expect {
|
|
41
|
+
subject.register_type subject, TestAssociatedClass
|
|
42
|
+
}.to change(subject.registry, :length).by(1)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "#resolve_all" do
|
|
47
|
+
it "should yield an empty array for an unregistered type" do
|
|
48
|
+
subject.resolve_all(Class).should eq([])
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
let!(:derived_classes) {
|
|
52
|
+
2.times.collect {
|
|
53
|
+
Class.new(subject).class_eval {
|
|
54
|
+
register_type self, TestAssociatedClass
|
|
55
|
+
self
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
it "should yield array of types for a registered type" do
|
|
61
|
+
subject.resolve_all(TestAssociatedClass).should eq(derived_classes)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
describe "#resolve" do
|
|
66
|
+
it "should yield nil for an unregistered type" do
|
|
67
|
+
subject.resolve(Class).should be_nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
let!(:derived_classes) {
|
|
71
|
+
2.times.collect {
|
|
72
|
+
Class.new(subject).class_eval {
|
|
73
|
+
register_type self, TestAssociatedClass
|
|
74
|
+
self
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
it "should yield the first associated type for a registered type" do
|
|
80
|
+
subject.resolve(TestAssociatedClass).should eq(derived_classes.first)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe "#resolve!" do
|
|
85
|
+
it "should raise UnregisteredType for an unregistered type" do
|
|
86
|
+
expect {
|
|
87
|
+
subject.resolve!(Class)
|
|
88
|
+
}.to raise_error(Riveter::UnregisteredType)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should include the unknown type in the error" do
|
|
92
|
+
begin
|
|
93
|
+
subject.resolve!(Class)
|
|
94
|
+
rescue Exception => e
|
|
95
|
+
e.type.should eq(Class)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
let!(:derived_class) {
|
|
100
|
+
Class.new(subject).class_eval {
|
|
101
|
+
register_type self, TestAssociatedClass
|
|
102
|
+
self
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
it "should not raise UnregisteredType for a registered type" do
|
|
107
|
+
expect {
|
|
108
|
+
subject.resolve!(TestAssociatedClass)
|
|
109
|
+
}.to_not raise_error
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe "#registry" do
|
|
114
|
+
let!(:first_class) do
|
|
115
|
+
Class.new().class_eval {
|
|
116
|
+
include Riveter::AssociatedTypeRegistry
|
|
117
|
+
self
|
|
118
|
+
}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
let!(:second_class) do
|
|
122
|
+
Class.new().class_eval {
|
|
123
|
+
include Riveter::AssociatedTypeRegistry
|
|
124
|
+
self
|
|
125
|
+
}
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
let!(:derived_first_class) do
|
|
129
|
+
Class.new(first_class).class_eval {
|
|
130
|
+
register_type self, TestAssociatedClass
|
|
131
|
+
self
|
|
132
|
+
}
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
let!(:derived_second_class) do
|
|
136
|
+
Class.new(second_class).class_eval {
|
|
137
|
+
register_type self, TestAssociatedClass
|
|
138
|
+
self
|
|
139
|
+
}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe "each type has an independant registry" do
|
|
143
|
+
it { first_class.registry.should_not eq(second_class.registry) }
|
|
144
|
+
it { derived_first_class.registry.should_not eq(derived_second_class.registry) }
|
|
145
|
+
it { derived_first_class.registry.should eq(first_class.registry) }
|
|
146
|
+
it { derived_second_class.registry.should eq(second_class.registry) }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
describe "registered types" do
|
|
150
|
+
let(:key) { first_class.key_for(TestAssociatedClass) }
|
|
151
|
+
|
|
152
|
+
it { first_class.registry.key?(key).should be_true }
|
|
153
|
+
it { second_class.registry.key?(key).should be_true }
|
|
154
|
+
it { derived_first_class.registry.key?(key).should be_true }
|
|
155
|
+
it { derived_second_class.registry.key?(key).should be_true }
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Riveter::AttributeDefaultValues do
|
|
4
|
+
before do
|
|
5
|
+
TestModelWithAttributeDefaultValues.send :attr_accessor, :prop, :prop1, :prop2
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe "class" do
|
|
9
|
+
subject { TestModelWithAttributeDefaultValues }
|
|
10
|
+
|
|
11
|
+
describe "#default_value_for" do
|
|
12
|
+
it { should respond_to(:default_value_for) }
|
|
13
|
+
|
|
14
|
+
it "should register default value for given attribute" do
|
|
15
|
+
subject.default_value_for :prop, :value
|
|
16
|
+
subject.attribute_defaults[:prop].should eq(:value)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should register default value using a proc for given attribute" do
|
|
20
|
+
subject.default_value_for :prop do :value; end
|
|
21
|
+
subject.attribute_defaults[:prop].should be_a(Proc)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should have own registration" do
|
|
25
|
+
expect {
|
|
26
|
+
Class.new(ActiveRecord::Base).class_eval do |klass|
|
|
27
|
+
include Riveter::AttributeDefaultValues
|
|
28
|
+
|
|
29
|
+
attr_accessor :attr_name
|
|
30
|
+
default_value_for :attr_name, 1
|
|
31
|
+
end
|
|
32
|
+
}.to_not change { subject.attribute_defaults.length }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "#default_values" do
|
|
37
|
+
it { should respond_to(:default_values) }
|
|
38
|
+
|
|
39
|
+
it "should register multiple default values for given attributes" do
|
|
40
|
+
subject.default_values :prop1 => :value, :prop2 => :value
|
|
41
|
+
subject.attribute_defaults[:prop1].should eq(:value)
|
|
42
|
+
subject.attribute_defaults[:prop2].should eq(:value)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should register multiple default values using a procs for given attributes" do
|
|
46
|
+
subject.default_values :prop1 => lambda { :value }, :prop2 => lambda { :value }
|
|
47
|
+
subject.attribute_defaults[:prop1].should be_a(Proc)
|
|
48
|
+
subject.attribute_defaults[:prop2].should be_a(Proc)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "instance" do
|
|
54
|
+
before do
|
|
55
|
+
TestModelWithAttributeDefaultValues.default_values :prop1 => :value1, :prop2 => lambda {|*args| :value2 }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
subject { TestModelWithAttributeDefaultValues.new() }
|
|
59
|
+
|
|
60
|
+
it { subject.prop1.should eq(:value1) }
|
|
61
|
+
it { subject.prop2.should eq(:value2) }
|
|
62
|
+
|
|
63
|
+
it "preserves existing attribute values" do
|
|
64
|
+
instance = TestModelWithAttributeDefaultValues.new(:prop1 => :valueA)
|
|
65
|
+
instance.prop1.should eq(:valueA)
|
|
66
|
+
instance.prop2.should eq(:value2)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|