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
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'bundler/setup'
|
|
2
|
+
Bundler.setup
|
|
3
|
+
|
|
4
|
+
require 'riveter'
|
|
5
|
+
|
|
6
|
+
# NB: sync these requires from the Railtie
|
|
7
|
+
require 'riveter/form_builder_extensions'
|
|
8
|
+
require 'riveter/command_routes'
|
|
9
|
+
require 'riveter/enquiry_routes'
|
|
10
|
+
|
|
11
|
+
require 'rails/all'
|
|
12
|
+
require 'rails/generators'
|
|
13
|
+
require 'haml'
|
|
14
|
+
|
|
15
|
+
require 'rspec/autorun'
|
|
16
|
+
require 'shoulda/matchers'
|
|
17
|
+
require 'ammeter/init'
|
|
18
|
+
require 'simplecov'
|
|
19
|
+
require 'pry'
|
|
20
|
+
|
|
21
|
+
SimpleCov.start do
|
|
22
|
+
# add_filter 'spec'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class TestApp < Rails::Application
|
|
26
|
+
config.root = File.dirname(__FILE__)
|
|
27
|
+
end
|
|
28
|
+
Rails.application = TestApp
|
|
29
|
+
|
|
30
|
+
module Rails
|
|
31
|
+
def self.root
|
|
32
|
+
@root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'rails'))
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
Rails.application.config.root = Rails.root
|
|
36
|
+
|
|
37
|
+
# Call configure to load the settings from
|
|
38
|
+
# Rails.application.config.generators to Rails::Generators
|
|
39
|
+
Rails::Generators.configure! Rails.application.config.generators
|
|
40
|
+
|
|
41
|
+
# require supporting ruby files with custom matchers and macros, etc
|
|
42
|
+
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f }
|
|
43
|
+
|
|
44
|
+
# configure Rspec
|
|
45
|
+
RSpec.configure do |config|
|
|
46
|
+
# config.order = :random
|
|
47
|
+
config.fail_fast = (ENV["FAIL_FAST"] == 1)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# require examples, must happen after configure for RSpec 3
|
|
51
|
+
Dir[File.expand_path("../examples/**/*.rb", __FILE__)].each {|f| require f }
|
|
52
|
+
|
|
53
|
+
# I18n.enforce_available_locales will default to true in the future.
|
|
54
|
+
I18n.enforce_available_locales = true if I18n.respond_to?(:enforce_available_locales)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class TestClassWithAttributes
|
|
2
|
+
include Riveter::Attributes
|
|
3
|
+
|
|
4
|
+
attr_string :string, :default => 'A'
|
|
5
|
+
attr_text :text, :default => 'b'
|
|
6
|
+
attr_integer :integer, :default => 1
|
|
7
|
+
attr_decimal :decimal, :default => 9.998
|
|
8
|
+
attr_date :date, :default => Date.new(2010, 1, 12)
|
|
9
|
+
attr_time :time, :default => Time.new(2010, 1, 12, 14, 56)
|
|
10
|
+
attr_boolean :boolean, :default => true
|
|
11
|
+
attr_enum :enum, TestEnum, :default => TestEnum::Member1
|
|
12
|
+
attr_array :array, :default => [1, 2, 3]
|
|
13
|
+
attr_hash :hash, :default => {:a => :b}
|
|
14
|
+
attr_model :model, TestModel, :default => TestModel
|
|
15
|
+
attr_object :object, :default => 'whatever'
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'action_controller'
|
|
2
|
+
require_relative 'test_command'
|
|
3
|
+
|
|
4
|
+
class TestCommandController < ActionController::Base
|
|
5
|
+
include Riveter::CommandController
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class TestTestCommandController < ActionController::Base
|
|
9
|
+
include Riveter::CommandController
|
|
10
|
+
|
|
11
|
+
command_controller_for TestCommand
|
|
12
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'action_controller'
|
|
2
|
+
require_relative 'test_enquiry'
|
|
3
|
+
|
|
4
|
+
class TestEnquiryController < ActionController::Base
|
|
5
|
+
include Riveter::EnquiryController
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class TestTestEnquiryController < ActionController::Base
|
|
9
|
+
include Riveter::EnquiryController
|
|
10
|
+
|
|
11
|
+
enquiry_controller_for TestEnquiry
|
|
12
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class TestModelWithAttributeDefaultValues
|
|
2
|
+
|
|
3
|
+
# stub ActiveRecord::Base methods
|
|
4
|
+
|
|
5
|
+
def self.after_initialize(method_or_proc)
|
|
6
|
+
@@after_initialize_method_or_proc = method_or_proc
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def initialize(*args)
|
|
10
|
+
args.extract_options!.each do |key, value|
|
|
11
|
+
self.send("#{key}=", value)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
@@after_initialize_method_or_proc.respond_to?(:call) ?
|
|
15
|
+
@@after_initialize_method_or_proc.call(self) :
|
|
16
|
+
send(@@after_initialize_method_or_proc)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def read_attribute(attrib)
|
|
20
|
+
self.send(attrib)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def write_attribute(attrib, value)
|
|
24
|
+
self.send("#{attrib}=", value)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
include Riveter::AttributeDefaultValues
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
RSpec::Matchers.define :validate_booleaness_of do |attribute|
|
|
2
|
+
match do |model|
|
|
3
|
+
ValidatorDetector.detect(model, attribute, Riveter::BooleanessValidator)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
failure_message_for_should do |actual|
|
|
7
|
+
"expect #{attribute} to validate booleaness of"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
failure_message_for_should_not do |actual|
|
|
11
|
+
"expect #{attribute} to not validate booleaness of"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
description do
|
|
15
|
+
"expect #{attribute} to validate booleaness of"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
RSpec::Matchers.define :validate_timeliness_of do |attribute|
|
|
2
|
+
match do |model|
|
|
3
|
+
ValidatorDetector.detect(model, attribute, ActiveModel::Validations::TimelinessValidator)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
failure_message_for_should do |actual|
|
|
7
|
+
"expect #{attribute} to validate timeliness of"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
failure_message_for_should_not do |actual|
|
|
11
|
+
"expect #{attribute} to not validate timeliness of"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
description do
|
|
15
|
+
"expect #{attribute} to validate timeliness of"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module ValidatorDetector
|
|
2
|
+
class << self
|
|
3
|
+
def detect(model, attribute, validator_class)
|
|
4
|
+
# a naive implementation based on whether the respective validator
|
|
5
|
+
# is in the list of validators for the given attribute
|
|
6
|
+
# and whether it is "active" based on the `if` and `unless` options
|
|
7
|
+
|
|
8
|
+
model._validators[attribute.to_sym].detect do |validator|
|
|
9
|
+
validator.class == validator_class &&
|
|
10
|
+
validator.attributes.include?(attribute) &&
|
|
11
|
+
is_validator_applied?(validator)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def is_validator_applied?(validator)
|
|
16
|
+
#
|
|
17
|
+
# NOTE: this isn't foolproof, since the logic of the method (or Proc)
|
|
18
|
+
# could depend on the state of the model instance or some other logic
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
# NOTE: also doesn't take into account the "on" conditional (I.e. only when creating or updating the model)
|
|
22
|
+
|
|
23
|
+
# See http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates
|
|
24
|
+
|
|
25
|
+
# determine whether the validator has an :if or :unless applied
|
|
26
|
+
method = validator.options[:if] || validator.options[:unless]
|
|
27
|
+
|
|
28
|
+
# next, evaluate the condition to determine whether the validator is active
|
|
29
|
+
# NOTE: any errors are ignored, and the default therefore is false
|
|
30
|
+
if method.instance_of?(Symbol) || method.instance_of?(String)
|
|
31
|
+
# it's a model method, so evalulate within context
|
|
32
|
+
self.new().instance_eval do
|
|
33
|
+
send(method, self) rescue false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
elsif method.instance_of?(Proc)
|
|
37
|
+
# it's a lambda, so invoke within context
|
|
38
|
+
self.new().instance_eval do
|
|
39
|
+
method.call(self) rescue false
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
else
|
|
43
|
+
# default is applied
|
|
44
|
+
true
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|