fanforce-internal-validations 0.1.0
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 +15 -0
- data/.gitignore +22 -0
- data/Gemfile +2 -0
- data/README.md +4 -0
- data/Rakefile +16 -0
- data/fanforce-internal-validations.gemspec +21 -0
- data/lib/fanforce/validations/validations.rb +106 -0
- data/lib/fanforce/validations/version.rb +5 -0
- data/lib/fanforce/validations.rb +5 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTdjZTk0Y2Y3M2YwZDhjMGFiN2MxMjMyMGE1MGI2MDcwNzNjZjkxMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODJkMzlhM2VmYjExMWYwNjYwYWEzY2JjNWU5NDcyZDdlODkzOTNkMg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MTFjNGNhMTA2MmJlMjk0ZWJiMGMxMjdmM2EzODM3OGNiNjMxNWYxZDFhNWFl
|
10
|
+
NDNiZTNlYmIxMGY3MWFkN2U2MmQ1ZTNiNTM3ZmNlZWMwMzNiYTU4OTZhZmE4
|
11
|
+
NGYyNTlkMjg1MDZmMzc4NTMwOGI5MjRmNGJhZmU0YzhlNDAyNTc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MWRmZTExYTQ4YmEyZGZlM2EzNWJkMGZkYTU0YTZhYzUzMjY4NjdlYTIwNmRl
|
14
|
+
NmQxZmQ2MDgzMTZiNGIwNDQ0ODg1NmRlOTdkODc4N2VjOWE2Yzc2N2E3ODhh
|
15
|
+
Mzc2ZmUzNjA5MjQxN2I0MDY0ZjllMmUwNGFhMDQzNWIxYWVlMTA=
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
|
15
|
+
# YARD artifacts
|
16
|
+
.yardoc
|
17
|
+
_yardoc
|
18
|
+
doc/
|
19
|
+
.DS_Store
|
20
|
+
.idea/
|
21
|
+
.idea/*
|
22
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
# Default Rake task is compile
|
7
|
+
#task :default => :compile
|
8
|
+
|
9
|
+
########################################################################
|
10
|
+
|
11
|
+
Rake::TestTask.new do |t|
|
12
|
+
t.libs.push "lib"
|
13
|
+
t.libs.push "test"
|
14
|
+
t.pattern = 'test/**/*_test.rb'
|
15
|
+
t.verbose = false
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'fanforce/validations/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'fanforce-internal-validations'
|
8
|
+
gem.version = Fanforce::Validations::VERSION
|
9
|
+
gem.date = '2012-10-19'
|
10
|
+
gem.summary = %q{Internal validations library used by the Fanforce codebase.}
|
11
|
+
gem.authors = ['Caleb Clark']
|
12
|
+
gem.email = ['cclark@fanforce.com']
|
13
|
+
gem.homepage = 'http://github.com/mlabs/fanforce-internal-validations'
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
+
gem.require_paths = ['lib']
|
18
|
+
|
19
|
+
gem.add_runtime_dependency 'fanforce-internal-utils'
|
20
|
+
gem.add_runtime_dependency 'fanforce-internal-errors'
|
21
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'fanforce/errors'
|
2
|
+
require 'fanforce/utils'
|
3
|
+
|
4
|
+
module Fanforce::Validations
|
5
|
+
include Fanforce::Utils
|
6
|
+
extend Fanforce::Validations
|
7
|
+
def self.included(base) base.extend(self) end
|
8
|
+
|
9
|
+
def extract_validation_params(opts)
|
10
|
+
return opts.delete(:params) if is_present?(opts[:params])
|
11
|
+
return self.params if self.respond_to?(:params)
|
12
|
+
Fanforce.env[:request_params] || {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse_validation_field_name(field, i, opts, params)
|
16
|
+
name = opts[:fields][i] if is_present?(opts[:fields])
|
17
|
+
name = field if is_blank?(name) and field.is_a?(Symbol)
|
18
|
+
name = :unknown if is_blank?(name)
|
19
|
+
name.to_sym
|
20
|
+
end
|
21
|
+
|
22
|
+
def validates_presence_of(*args)
|
23
|
+
opts = extract_options!(args)
|
24
|
+
params = extract_validation_params(opts)
|
25
|
+
fields_to_validate = args.is_a?(Array) ? args : [args]
|
26
|
+
|
27
|
+
invalid_fields = []
|
28
|
+
fields_to_validate.each_with_index do |field_to_validate, i|
|
29
|
+
if !(field_to_validate.is_a?(Symbol) ? is_present?(params[field_to_validate]) : is_present?(field_to_validate))
|
30
|
+
invalid_fields << parse_validation_field_name(field_to_validate, i, opts, params)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
return true if invalid_fields.size == 0
|
34
|
+
|
35
|
+
errors = invalid_fields.inject([]) {|result, f| result << format_validation_error(opts, f, :missing_field) }
|
36
|
+
raise_validation_error(opts, errors, Fanforce::Error::CorruptRequest)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validates_presence_of_any(*args)
|
40
|
+
opts = extract_options!(args)
|
41
|
+
params = extract_validation_params(opts)
|
42
|
+
fields_to_validate = args.is_a?(Array) ? args : [args]
|
43
|
+
|
44
|
+
invalid_fields = []
|
45
|
+
fields_to_validate.each_with_index do |field_to_validate, i|
|
46
|
+
if !(field_to_validate.is_a?(Symbol) ? is_present?(params[field_to_validate]) : is_present?(field_to_validate))
|
47
|
+
invalid_fields << parse_validation_field_name(field_to_validate, i, opts, params)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
return true if invalid_fields.size < fields_to_validate.size
|
51
|
+
|
52
|
+
errors = [format_validation_error(opts, invalid_fields, :invalid_data)]
|
53
|
+
raise_validation_error(opts, errors, Fanforce::Error::CorruptRequest)
|
54
|
+
end
|
55
|
+
|
56
|
+
def validates_presence_of_all(*args)
|
57
|
+
validates_presence_of(args)
|
58
|
+
end
|
59
|
+
|
60
|
+
def validates_true(*args)
|
61
|
+
opts = extract_options!(args)
|
62
|
+
params = extract_validation_params(opts)
|
63
|
+
bools_to_validate = args.is_a?(Array) ? args : [args]
|
64
|
+
|
65
|
+
invalid_fields = []
|
66
|
+
bools_to_validate.each_with_index do |bool_is_true, i|
|
67
|
+
if !bool_is_true
|
68
|
+
invalid_fields << parse_validation_field_name(nil, i, opts, nil)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
return true if invalid_fields.size == 0
|
72
|
+
|
73
|
+
errors = invalid_fields.inject([]) {|result, f| result << format_validation_error(opts, f, :invalid_data) }
|
74
|
+
raise_validation_error(opts, errors, Fanforce::Error::RequestFailed)
|
75
|
+
end
|
76
|
+
|
77
|
+
def raise_validation_error(opts, errors, default_error_class)
|
78
|
+
raise (opts[:error_class] || default_error_class).new(errors)
|
79
|
+
end
|
80
|
+
|
81
|
+
def format_validation_error(opts, fields, default_error_code=nil)
|
82
|
+
error = {
|
83
|
+
resource: is_present?(opts[:resource]) ? opts[:resource] : self.class.name.demodulize.tableize.singularize,
|
84
|
+
code: is_present?(opts[:code]) ? opts[:code] : default_error_code,
|
85
|
+
message: opts[:message]
|
86
|
+
}
|
87
|
+
fields.is_a?(Array) ? error.update(fields: fields) : error.update(field: fields)
|
88
|
+
end
|
89
|
+
|
90
|
+
def extract_options!(args)
|
91
|
+
if args.last.is_a?(::Hash)
|
92
|
+
opts = args.pop.symbolize_keys
|
93
|
+
if is_present?(opts[:field]) and opts[:fields].is_a?(Array)
|
94
|
+
opts[:fields] << opts.delete(:field)
|
95
|
+
elsif is_present?(opts[:field])
|
96
|
+
opts[:fields] = [opts.delete(:field)]
|
97
|
+
end
|
98
|
+
return opts
|
99
|
+
elsif args.last.is_a?(::String)
|
100
|
+
{msg: args.pop.to_s}
|
101
|
+
else
|
102
|
+
{}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fanforce-internal-validations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Caleb Clark
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2012-10-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fanforce-internal-utils
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: fanforce-internal-errors
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- cclark@fanforce.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- fanforce-internal-validations.gemspec
|
53
|
+
- lib/fanforce/validations.rb
|
54
|
+
- lib/fanforce/validations/validations.rb
|
55
|
+
- lib/fanforce/validations/version.rb
|
56
|
+
homepage: http://github.com/mlabs/fanforce-internal-validations
|
57
|
+
licenses: []
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.0.3
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: Internal validations library used by the Fanforce codebase.
|
79
|
+
test_files: []
|