active_stripper 0.1.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/lib/active_stripper.rb +94 -0
- data/lib/active_stripper/helpers.rb +67 -0
- data/lib/active_stripper/version.rb +3 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cb13381584a43b9d0d5cd2a1c09d2483b2189cce
|
4
|
+
data.tar.gz: cdd4e9b489b8d72623d50581215bb63f38336991
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed21f7847a0f5ed0609c363970c1cdf89e23357cabb5dc72f66acaf898e93fcb6ca69badee626735734e2bb3e5a32a15494bf3f90f6eb69953330b4193788b29
|
7
|
+
data.tar.gz: 69151cf3a0670d8b8a8e6aab8e6e0d498ba264f825eb9c296a7897ca45ebfeeb2d8a38cd701093f6fe0f14a1091f2a6752f61350207313e691249c8215c76cb3
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require "active_stripper/version"
|
2
|
+
require "active_stripper/helpers"
|
3
|
+
|
4
|
+
module ActiveStripper # Pun intended
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
#
|
11
|
+
# Iterate over `iterable_operators` and apply each of them on `val`
|
12
|
+
#
|
13
|
+
# @param [String] val String to manipulate
|
14
|
+
# @param [Hash/Array] iterable_operators Methods details to use on `val`
|
15
|
+
# @param [Object] base Instance including the current module
|
16
|
+
#
|
17
|
+
# @return [String] Modified String
|
18
|
+
#
|
19
|
+
def self.iterable_apply(val, iterable_operators, base)
|
20
|
+
iterable_operators.each do | operator_name, operator_args |
|
21
|
+
|
22
|
+
val = case
|
23
|
+
when !operator_args
|
24
|
+
ActiveStripper.method_apply(val, operator_name, base)
|
25
|
+
when operator_args[:module]
|
26
|
+
Module.const_get(operator_args[:module])
|
27
|
+
.send(operator_name, val)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
return val
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Look up for method `operator` in ActiveStripper::Helpers and current
|
36
|
+
# class and call it
|
37
|
+
#
|
38
|
+
# @param [String] val Value to modify
|
39
|
+
# @param [String/Symbol] operator Method name to execute
|
40
|
+
# @param [Object] base Instance including the current module
|
41
|
+
#
|
42
|
+
# @return [String] Modifies value
|
43
|
+
#
|
44
|
+
def self.method_apply(val, operator, base)
|
45
|
+
case
|
46
|
+
when operator.class.name === "Proc"
|
47
|
+
operator.call(val)
|
48
|
+
when ActiveStripper::Helpers.respond_to?(operator)
|
49
|
+
ActiveStripper::Helpers.send(operator, val)
|
50
|
+
when base.respond_to?(operator)
|
51
|
+
base.send(operator, val)
|
52
|
+
else
|
53
|
+
val
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
module ClassMethods
|
58
|
+
|
59
|
+
#
|
60
|
+
# Helper to use in your Class
|
61
|
+
#
|
62
|
+
# @param [Array<Any>] *args List of attributes to use for setter generation
|
63
|
+
# Length must be > 2,
|
64
|
+
# last argument is the preprocessor to run on value
|
65
|
+
#
|
66
|
+
def strip_value_from(*args)
|
67
|
+
raise if args.count < 2
|
68
|
+
operator = args.pop
|
69
|
+
|
70
|
+
args = args.reject { | field | self.respond_to?(field) }
|
71
|
+
|
72
|
+
# Dynamically generate an anonymous module to be prepended
|
73
|
+
mod = Module.new do
|
74
|
+
args.each do | field |
|
75
|
+
|
76
|
+
define_method :"#{field}=" do | val |
|
77
|
+
val = case operator.class.name
|
78
|
+
when "Proc"
|
79
|
+
operator.call(val)
|
80
|
+
when "Hash", "Array"
|
81
|
+
ActiveStripper.iterable_apply(val, operator, self)
|
82
|
+
when "String", "Symbol"
|
83
|
+
ActiveStripper.method_apply(val, operator, self)
|
84
|
+
end
|
85
|
+
|
86
|
+
super(val)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
prepend mod
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module ActiveStripper
|
2
|
+
module Helpers
|
3
|
+
class << self
|
4
|
+
|
5
|
+
#
|
6
|
+
# Apply String#strip to value
|
7
|
+
#
|
8
|
+
# @param [String] val String to strip
|
9
|
+
#
|
10
|
+
# @return [String] Stripped value
|
11
|
+
#
|
12
|
+
def white_space_stripper(val)
|
13
|
+
return if !val
|
14
|
+
return val.strip
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Replace double spaces with single space
|
19
|
+
#
|
20
|
+
# @param [String] val String to clean up
|
21
|
+
#
|
22
|
+
# @return [String] Cleaned up string
|
23
|
+
#
|
24
|
+
def multiple_space_stripper(val)
|
25
|
+
return if !val
|
26
|
+
return val.gsub(/\s+/, " ")
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Remove all trailing spaces at the end of the string
|
31
|
+
#
|
32
|
+
# @param [String] val String to clean up
|
33
|
+
#
|
34
|
+
# @return [String] Cleaned up string
|
35
|
+
#
|
36
|
+
def end_space_stripper(val)
|
37
|
+
return if !val
|
38
|
+
return val.gsub(/\s+$/, "")
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Remove all trailong spaces at the beginning of the string
|
43
|
+
#
|
44
|
+
# @param [String] val String to clean up
|
45
|
+
#
|
46
|
+
# @return [String] Cleaned up string
|
47
|
+
#
|
48
|
+
def start_space_stripper(val)
|
49
|
+
return if !val
|
50
|
+
return val.gsub(/^\s+/, "")
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Lower case the entire string through String#downcase
|
55
|
+
#
|
56
|
+
# @param [String] val String to lower
|
57
|
+
#
|
58
|
+
# @return [String] Lowered case string
|
59
|
+
#
|
60
|
+
def to_lower_stripper(val)
|
61
|
+
return if !val
|
62
|
+
return val.downcase
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_stripper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- François TCHENG
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: |2-
|
56
|
+
|
57
|
+
Strip or preprocess Active Record / Object attributes by creating custom setter through module prepending.
|
58
|
+
Work with any Object in ruby and still allow custom setter to be defined inside the class.
|
59
|
+
For exemple, can lowercase an email field during attribute setting for ActiveRecord instances
|
60
|
+
instead of having to hook on validation hook on ActiveRecord.
|
61
|
+
email:
|
62
|
+
- tcheng.f@gmail.com
|
63
|
+
executables: []
|
64
|
+
extensions: []
|
65
|
+
extra_rdoc_files: []
|
66
|
+
files:
|
67
|
+
- "./lib/active_stripper.rb"
|
68
|
+
- "./lib/active_stripper/helpers.rb"
|
69
|
+
- "./lib/active_stripper/version.rb"
|
70
|
+
homepage: https://github.com/nekogami/active_stripper
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.4.5.1
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Strip or preprocess Active Record / Object attributes with prepended setter
|
94
|
+
test_files: []
|
95
|
+
has_rdoc:
|