nifty_services 0.0.5 → 0.0.6
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/.travis.yml +6 -2
- data/README.md +64 -1195
- data/docs/api.md +142 -0
- data/docs/callbacks.md +67 -0
- data/docs/cli.md +13 -0
- data/docs/configuration.md +62 -0
- data/docs/crud_services.md +534 -0
- data/docs/i18n.md +55 -0
- data/docs/services_markup.md +271 -0
- data/docs/usage.md +204 -0
- data/docs/webframeworks_integration.md +145 -0
- data/lib/nifty_services.rb +5 -8
- data/lib/nifty_services/base_action_service.rb +7 -10
- data/lib/nifty_services/base_create_service.rb +35 -45
- data/lib/nifty_services/base_crud_service.rb +18 -43
- data/lib/nifty_services/base_delete_service.rb +22 -21
- data/lib/nifty_services/base_service.rb +52 -42
- data/lib/nifty_services/base_update_service.rb +19 -20
- data/lib/nifty_services/configuration.rb +16 -17
- data/lib/nifty_services/errors.rb +2 -2
- data/lib/nifty_services/extensions/callbacks.rb +173 -0
- data/lib/nifty_services/support/hash.rb +14 -0
- data/lib/nifty_services/support/string.rb +21 -0
- data/lib/nifty_services/util.rb +4 -4
- data/lib/nifty_services/version.rb +1 -1
- data/nifty_services.gemspec +1 -1
- metadata +21 -10
- data/lib/nifty_services/extensions/callbacks_interface.rb +0 -171
@@ -0,0 +1,14 @@
|
|
1
|
+
class Hash
|
2
|
+
unless method_defined?(:symbolize_keys)
|
3
|
+
def symbolize_keys
|
4
|
+
Hash[self.map {|k, v| [k.to_sym, v] }]
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
unless method_defined?(:slice)
|
9
|
+
def slice(*keys)
|
10
|
+
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
11
|
+
keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class String
|
2
|
+
unless method_defined?(:underscore)
|
3
|
+
def underscore
|
4
|
+
return self unless self =~ /[A-Z-]|::/
|
5
|
+
word = self.to_s.gsub('::'.freeze, '/'.freeze)
|
6
|
+
word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)((?=a)b)(?=\b|[^a-z])/) { "#{$1 && '_'.freeze }#{$2.downcase}" }
|
7
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
|
8
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
|
9
|
+
word.tr!("-".freeze, "_".freeze)
|
10
|
+
word.downcase!
|
11
|
+
word
|
12
|
+
end
|
13
|
+
|
14
|
+
unless method_defined?(:camel_case)
|
15
|
+
def camel_case
|
16
|
+
return self if self !~ /_/ && self =~ /[A-Z]+.*/
|
17
|
+
split('_').map{|e| e.capitalize}.join
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/nifty_services/util.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module NiftyServices
|
2
2
|
module Util
|
3
|
-
|
4
|
-
|
5
|
-
cb_name = callback_name.to_s.gsub(%r(\Z#{prefix}), '')
|
3
|
+
def normalized_callback_name(callback_name, suffix = '_callback')
|
4
|
+
cb_name = callback_name.to_s.gsub(%r(\Z#{suffix}), '')
|
6
5
|
|
7
|
-
[cb_name,
|
6
|
+
[cb_name, suffix].join
|
8
7
|
end
|
8
|
+
module_function :normalized_callback_name
|
9
9
|
end
|
10
10
|
end
|
data/nifty_services.gemspec
CHANGED
@@ -24,5 +24,5 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rake", '~> 10.5.0'
|
25
25
|
spec.add_development_dependency "rspec", '~> 3.5.0'
|
26
26
|
spec.add_development_dependency "pry", '~> 0'
|
27
|
-
spec.
|
27
|
+
spec.add_development_dependency "i18n", '~> 0.7.0'
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nifty_services
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Fidelis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: i18n
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
type: :
|
75
|
+
version: 0.7.0
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.7.0
|
83
83
|
description: The dead simple services object oriented layer for Ruby applications
|
84
84
|
to give robustness and cohesion back to your code.
|
85
85
|
email:
|
@@ -99,6 +99,15 @@ files:
|
|
99
99
|
- Rakefile
|
100
100
|
- bin/console
|
101
101
|
- bin/setup
|
102
|
+
- docs/api.md
|
103
|
+
- docs/callbacks.md
|
104
|
+
- docs/cli.md
|
105
|
+
- docs/configuration.md
|
106
|
+
- docs/crud_services.md
|
107
|
+
- docs/i18n.md
|
108
|
+
- docs/services_markup.md
|
109
|
+
- docs/usage.md
|
110
|
+
- docs/webframeworks_integration.md
|
102
111
|
- lib/nifty_services.rb
|
103
112
|
- lib/nifty_services/base_action_service.rb
|
104
113
|
- lib/nifty_services/base_create_service.rb
|
@@ -108,7 +117,9 @@ files:
|
|
108
117
|
- lib/nifty_services/base_update_service.rb
|
109
118
|
- lib/nifty_services/configuration.rb
|
110
119
|
- lib/nifty_services/errors.rb
|
111
|
-
- lib/nifty_services/extensions/
|
120
|
+
- lib/nifty_services/extensions/callbacks.rb
|
121
|
+
- lib/nifty_services/support/hash.rb
|
122
|
+
- lib/nifty_services/support/string.rb
|
112
123
|
- lib/nifty_services/util.rb
|
113
124
|
- lib/nifty_services/version.rb
|
114
125
|
- nifty_services.gemspec
|
@@ -132,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
143
|
version: '0'
|
133
144
|
requirements: []
|
134
145
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.5.
|
146
|
+
rubygems_version: 2.5.2
|
136
147
|
signing_key:
|
137
148
|
specification_version: 4
|
138
149
|
summary: Nifty and awesome service oriented architecture library for Ruby applications.
|
@@ -1,171 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
|
3
|
-
module NiftyServices
|
4
|
-
module Extensions::CallbacksInterface
|
5
|
-
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
CALLBACKS = [
|
9
|
-
:before_initialize,
|
10
|
-
:after_initialize,
|
11
|
-
:before_execute,
|
12
|
-
:after_execute,
|
13
|
-
:before_error,
|
14
|
-
:after_error,
|
15
|
-
:before_success,
|
16
|
-
:after_success,
|
17
|
-
:before_create,
|
18
|
-
:after_create,
|
19
|
-
:before_update,
|
20
|
-
:after_update,
|
21
|
-
:before_delete,
|
22
|
-
:after_delete,
|
23
|
-
:before_action,
|
24
|
-
:after_action
|
25
|
-
].freeze
|
26
|
-
|
27
|
-
class_methods do
|
28
|
-
@@registered_callbacks = Hash.new {|k,v| k[v] = Hash.new }
|
29
|
-
|
30
|
-
def register_callback(callback_name, method_name, &block)
|
31
|
-
method_name = Util.normalized_callback_name(method_name)
|
32
|
-
|
33
|
-
@@registered_callbacks[self.name.to_sym][callback_name] ||= []
|
34
|
-
@@registered_callbacks[self.name.to_sym][callback_name] << method_name
|
35
|
-
|
36
|
-
register_callback_action(method_name, &block)
|
37
|
-
end
|
38
|
-
|
39
|
-
def register_callback_action(callback_name, &block)
|
40
|
-
define_method(callback_name, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
CALLBACKS.each do |callback_name|
|
44
|
-
define_method callback_name do |&block|
|
45
|
-
register_callback_action(callback_name, &block)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
included do
|
51
|
-
CALLBACKS.each do |callback_name|
|
52
|
-
# empty method call (just returns nil)
|
53
|
-
define_method callback_name, -> {}
|
54
|
-
end
|
55
|
-
|
56
|
-
def callback_fired?(callback_name)
|
57
|
-
return (
|
58
|
-
callback_fired_in?(@fired_callbacks, callback_name) ||
|
59
|
-
callback_fired_in?(@custom_fired_callbacks, callback_name) ||
|
60
|
-
callback_fired_in?(@custom_fired_callbacks, "#{callback_name}_callback")
|
61
|
-
)
|
62
|
-
end
|
63
|
-
|
64
|
-
alias :callback_called? :callback_fired?
|
65
|
-
|
66
|
-
def register_callback(callback_name, method_name, &block)
|
67
|
-
method_name = normalized_callback_name(method_name).to_sym
|
68
|
-
|
69
|
-
@registered_callbacks[callback_name.to_sym] << method_name
|
70
|
-
register_callback_action(callback_name, &block)
|
71
|
-
end
|
72
|
-
|
73
|
-
def register_callback_action(callback_name, &block)
|
74
|
-
cb_name = normalized_callback_name(callback_name).to_sym
|
75
|
-
@callbacks_actions[cb_name.to_sym] = block
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
def callbacks_setup
|
80
|
-
return nil if @callbacks_setup
|
81
|
-
|
82
|
-
@fired_callbacks, @custom_fired_callbacks = {}, {}
|
83
|
-
@callbacks_actions = {}
|
84
|
-
@registered_callbacks = Hash.new {|k,v| k[v] = [] }
|
85
|
-
|
86
|
-
@callbacks_setup = true
|
87
|
-
end
|
88
|
-
|
89
|
-
def call_callback(callback_name)
|
90
|
-
callback_name = callback_name.to_s.underscore.to_sym
|
91
|
-
|
92
|
-
if has_callback?(callback_name)
|
93
|
-
@fired_callbacks[callback_name.to_sym] = true
|
94
|
-
|
95
|
-
invoke_callback(method(callback_name))
|
96
|
-
call_registered_callbacks_for(callback_name)
|
97
|
-
end
|
98
|
-
|
99
|
-
# allow chained methods
|
100
|
-
self
|
101
|
-
end
|
102
|
-
|
103
|
-
def has_callback?(callback_name)
|
104
|
-
_callback_name = normalized_callback_name(callback_name).to_sym
|
105
|
-
# include private methods
|
106
|
-
respond_to?(callback_name, true) || respond_to?(_callback_name, true)
|
107
|
-
end
|
108
|
-
|
109
|
-
def with_before_and_after_callbacks(callback_basename, &block)
|
110
|
-
callbacks_setup
|
111
|
-
|
112
|
-
call_callback(:"before_#{callback_basename}")
|
113
|
-
|
114
|
-
block_response = yield(block) if block_given?
|
115
|
-
|
116
|
-
call_callback(:"after_#{callback_basename}")
|
117
|
-
|
118
|
-
block_response
|
119
|
-
end
|
120
|
-
|
121
|
-
def call_registered_callbacks_for(callback_name)
|
122
|
-
instance_call_all_custom_registered_callbacks_for(callback_name)
|
123
|
-
class_call_all_custom_registered_callbacks_for(callback_name)
|
124
|
-
end
|
125
|
-
|
126
|
-
def instance_call_all_custom_registered_callbacks_for(callback_name)
|
127
|
-
@fired_callbacks[callback_name] = true
|
128
|
-
|
129
|
-
callbacks = @registered_callbacks[callback_name.to_sym]
|
130
|
-
|
131
|
-
callbacks.each do |cb|
|
132
|
-
if callback = @callbacks_actions[cb.to_sym]
|
133
|
-
@custom_fired_callbacks[cb.to_sym] = true
|
134
|
-
invoke_callback(callback)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def class_call_all_custom_registered_callbacks_for(callback_name)
|
140
|
-
classes_chain = self.class.ancestors.map(&:to_s).grep /\ANiftyServices/
|
141
|
-
klasses = @@registered_callbacks.keys.map(&:to_s) & classes_chain
|
142
|
-
|
143
|
-
klasses.each do |klass|
|
144
|
-
class_call_all_custom_registered_callbacks_for_class(klass, callback_name)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def class_call_all_custom_registered_callbacks_for_class(class_name, callback_name)
|
149
|
-
class_callbacks = @@registered_callbacks[class_name.to_sym]
|
150
|
-
callbacks = class_callbacks[callback_name.to_sym] || []
|
151
|
-
|
152
|
-
callbacks.each do |cb|
|
153
|
-
@custom_fired_callbacks[cb.to_sym] = true
|
154
|
-
invoke_callback(method(cb))
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def callback_fired_in?(callback_list, callback_name)
|
159
|
-
return callback_list[callback_name.to_sym].present?
|
160
|
-
end
|
161
|
-
|
162
|
-
def normalized_callback_name(callback_name, prefix = '_callback')
|
163
|
-
Util.normalized_callback_name(callback_name, prefix)
|
164
|
-
end
|
165
|
-
|
166
|
-
def invoke_callback(method)
|
167
|
-
method.call
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|