pavlov 0.1.7.1 → 0.1.8
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/lib/generators/pavlov/install_generator.rb +1 -1
- data/lib/generators/pavlov/templates/backend/backend.rb +1 -1
- data/lib/pavlov.rb +6 -16
- data/lib/pavlov/alpha_compatibility.rb +8 -11
- data/lib/pavlov/engine.rb +1 -1
- data/lib/pavlov/helpers.rb +1 -1
- data/lib/pavlov/operation.rb +19 -4
- data/lib/pavlov/operation_finder.rb +32 -0
- data/lib/pavlov/support/inflector.rb +15 -0
- data/lib/pavlov/version.rb +1 -1
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1b5c84ab82aad4e0ff3231c23c2ecb6c8511165
|
4
|
+
data.tar.gz: b031d26eb86570328beee0ace26d0594cb2bffd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0db1daccbeaac3214a1383fa6efe0e883cd3f32d5c7fd201ffe4903c4889fbbd23e70c0e80988c6c245ea4bc1e985b68e6a20fa26d4bda17b2382ef2f77f15b1
|
7
|
+
data.tar.gz: 4a599d76b32385939a5699a3d6082753436691303d68e894108ada5ab3bd5639b1f4fe1bff6a18f3812643db4000ac4a9a6e67306901e92521de60d8464ee055
|
data/lib/pavlov.rb
CHANGED
@@ -1,14 +1,6 @@
|
|
1
|
-
|
2
|
-
# this method is also available as constantize in Rails,
|
3
|
-
# but we want to be able to write classes and/or tests without Rails
|
4
|
-
def self.get_class_by_string classname
|
5
|
-
classname.constantize
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.string_to_classname string
|
9
|
-
string.to_s.camelize
|
10
|
-
end
|
1
|
+
require 'pavlov/support/inflector'
|
11
2
|
|
3
|
+
module Pavlov
|
12
4
|
def self.command command_name, *args
|
13
5
|
klass = class_for_command(command_name)
|
14
6
|
klass.new(*args).call
|
@@ -27,22 +19,20 @@ module Pavlov
|
|
27
19
|
private
|
28
20
|
|
29
21
|
def self.class_for_command command_name
|
30
|
-
|
31
|
-
get_class_by_string(class_name)
|
22
|
+
OperationFinder.find(Commands, command_name)
|
32
23
|
end
|
33
24
|
|
34
25
|
def self.class_for_interactor interactor_name
|
35
|
-
|
36
|
-
get_class_by_string(class_name)
|
26
|
+
OperationFinder.find(Interactors, interactor_name)
|
37
27
|
end
|
38
28
|
|
39
29
|
def self.class_for_query query_name
|
40
|
-
|
41
|
-
get_class_by_string(class_name)
|
30
|
+
OperationFinder.find(Queries, query_name)
|
42
31
|
end
|
43
32
|
end
|
44
33
|
|
45
34
|
require_relative 'pavlov/engine' if defined?(Rails)
|
35
|
+
require_relative 'pavlov/operation_finder'
|
46
36
|
require_relative 'pavlov/helpers'
|
47
37
|
require_relative 'pavlov/access_denied'
|
48
38
|
require_relative 'pavlov/operation'
|
@@ -8,50 +8,50 @@ module Pavlov
|
|
8
8
|
def validate_hexadecimal_string param_name, param
|
9
9
|
return if param.is_a?(String) && /\A[\da-fA-F]+\Z/.match(param)
|
10
10
|
|
11
|
-
|
11
|
+
errors.add param_name, 'should be an hexadecimal string.'
|
12
12
|
end
|
13
13
|
|
14
14
|
def validate_regex param_name, param, regex, message
|
15
15
|
return if regex.match param
|
16
16
|
|
17
|
-
|
17
|
+
errors.add param_name, "#{message}"
|
18
18
|
end
|
19
19
|
|
20
20
|
def validate_integer param_name, param, opts = {}
|
21
21
|
return if opts[:allow_blank] && param.blank?
|
22
22
|
return if param.is_a?(Integer)
|
23
23
|
|
24
|
-
|
24
|
+
errors.add param_name, 'should be an integer.'
|
25
25
|
end
|
26
26
|
|
27
27
|
def validate_in_set param_name, param, set
|
28
28
|
return if set.include? param
|
29
29
|
|
30
|
-
|
30
|
+
errors.add param_name, 'should be on of these values: #{set.inspect}.'
|
31
31
|
end
|
32
32
|
|
33
33
|
def validate_string param_name, param
|
34
34
|
return if param.is_a?(String)
|
35
35
|
|
36
|
-
|
36
|
+
errors.add param_name, 'should be a string.'
|
37
37
|
end
|
38
38
|
|
39
39
|
def validate_nonempty_string param_name, param
|
40
40
|
return if param.is_a?(String) && !param.empty?
|
41
41
|
|
42
|
-
|
42
|
+
errors.add param_name, 'should be a nonempty string.'
|
43
43
|
end
|
44
44
|
|
45
45
|
def validate_integer_string param_name, param
|
46
46
|
return if param.is_a?(String) && /\A\d+\Z/.match(param)
|
47
47
|
|
48
|
-
|
48
|
+
errors.add param_name, 'should be an integer string.'
|
49
49
|
end
|
50
50
|
|
51
51
|
def validate_not_nil param_name, param
|
52
52
|
return unless param.nil?
|
53
53
|
|
54
|
-
|
54
|
+
errors.add param_name, 'should not be nil.'
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -63,9 +63,6 @@ module Pavlov
|
|
63
63
|
args.each do |argument|
|
64
64
|
attribute argument, Object, default: nil
|
65
65
|
end
|
66
|
-
|
67
|
-
# Add attribute for pavlov_options
|
68
|
-
attribute :pavlov_options, Hash, default: {}
|
69
66
|
end
|
70
67
|
end
|
71
68
|
end
|
data/lib/pavlov/engine.rb
CHANGED
data/lib/pavlov/helpers.rb
CHANGED
@@ -20,7 +20,7 @@ module Pavlov
|
|
20
20
|
|
21
21
|
def with_pavlov_options hash
|
22
22
|
if pavlov_options != {}
|
23
|
-
if hash.
|
23
|
+
if hash.key? 'pavlov_options'
|
24
24
|
hash[:pavlov_options] = pavlov_options.merge(hash[:pavlov_options])
|
25
25
|
else
|
26
26
|
hash[:pavlov_options] = pavlov_options
|
data/lib/pavlov/operation.rb
CHANGED
@@ -3,6 +3,10 @@ require 'pavlov/helpers'
|
|
3
3
|
require 'virtus'
|
4
4
|
require_relative 'access_denied'
|
5
5
|
|
6
|
+
require 'active_model'
|
7
|
+
require 'active_model/naming'
|
8
|
+
require 'active_model/errors'
|
9
|
+
|
6
10
|
module Pavlov
|
7
11
|
class ValidationError < StandardError
|
8
12
|
end
|
@@ -10,17 +14,28 @@ module Pavlov
|
|
10
14
|
module Operation
|
11
15
|
extend Pavlov::Concern
|
12
16
|
include Pavlov::Helpers
|
13
|
-
|
17
|
+
|
18
|
+
included do
|
19
|
+
include Virtus
|
20
|
+
extend ActiveModel::Naming
|
21
|
+
extend ActiveModel::Translation
|
22
|
+
|
23
|
+
attribute :pavlov_options, Hash, default: {}
|
24
|
+
end
|
25
|
+
|
26
|
+
def errors
|
27
|
+
@errors ||= ActiveModel::Errors.new(self)
|
28
|
+
end
|
14
29
|
|
15
30
|
def valid?
|
16
31
|
check_validation
|
17
|
-
|
32
|
+
errors.empty?
|
18
33
|
rescue Pavlov::ValidationError
|
19
34
|
false
|
20
35
|
end
|
21
36
|
|
22
37
|
def call(*args, &block)
|
23
|
-
|
38
|
+
raise Pavlov::ValidationError, 'Some validations fail, cannot execute' unless valid?
|
24
39
|
check_authorization
|
25
40
|
execute(*args, &block)
|
26
41
|
end
|
@@ -42,7 +57,7 @@ module Pavlov
|
|
42
57
|
|
43
58
|
def missing_arguments
|
44
59
|
attribute_set.select do |attribute|
|
45
|
-
!attribute.options.
|
60
|
+
!attribute.options.key?(:default) && send(attribute.name).nil?
|
46
61
|
end
|
47
62
|
end
|
48
63
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'pavlov/support/inflector'
|
2
|
+
|
3
|
+
module Pavlov
|
4
|
+
class OperationFinder
|
5
|
+
attr_reader :namespace
|
6
|
+
|
7
|
+
def self.find(namespace, operation_name)
|
8
|
+
operation_lookup_list = Inflector.camelize(operation_name.to_s).split('::')
|
9
|
+
operation_lookup_list.reduce(namespace) do |current_namespace, namespace_or_operation_name|
|
10
|
+
new(current_namespace).send(namespace_or_operation_name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(namespace)
|
15
|
+
@namespace = namespace
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(name, attributes = {})
|
19
|
+
find_klass(name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def respond_to_missing?(name, include_private = false)
|
23
|
+
find_klass(name)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def find_klass(name)
|
29
|
+
namespace.const_get(Inflector.camelize(name.to_s), false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'backports/rails/string'
|
2
|
+
|
3
|
+
module Pavlov
|
4
|
+
class Inflector
|
5
|
+
def self.camelize(string, first_letter = :upper)
|
6
|
+
# Feel free to reimplement if you want to get rid of backports dependency.
|
7
|
+
string.camelize
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.constantize(string)
|
11
|
+
# Feel free to reimplement if you want to get rid of backports dependency.
|
12
|
+
string.constantize
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/pavlov/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pavlov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2013-
|
16
|
+
date: 2013-10-01 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: virtus
|
@@ -29,6 +29,34 @@ dependencies:
|
|
29
29
|
- - '='
|
30
30
|
- !ruby/object:Gem::Version
|
31
31
|
version: 0.5.5
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: backports
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '3.3'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.3'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activemodel
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 3.2.7
|
53
|
+
type: :runtime
|
54
|
+
prerelease: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 3.2.7
|
32
60
|
- !ruby/object:Gem::Dependency
|
33
61
|
name: rspec
|
34
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,7 +215,9 @@ files:
|
|
187
215
|
- lib/pavlov/helpers.rb
|
188
216
|
- lib/pavlov/interactor.rb
|
189
217
|
- lib/pavlov/operation.rb
|
218
|
+
- lib/pavlov/operation_finder.rb
|
190
219
|
- lib/pavlov/query.rb
|
220
|
+
- lib/pavlov/support/inflector.rb
|
191
221
|
- lib/pavlov/version.rb
|
192
222
|
homepage: https://github.com/Factlink/pavlov/
|
193
223
|
licenses:
|