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.
@@ -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
@@ -1,10 +1,10 @@
1
1
  module NiftyServices
2
2
  module Util
3
- module_function
4
- def normalized_callback_name(callback_name, prefix = '_callback')
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, prefix].join
6
+ [cb_name, suffix].join
8
7
  end
8
+ module_function :normalized_callback_name
9
9
  end
10
10
  end
@@ -1,3 +1,3 @@
1
1
  module NiftyServices
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -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.add_runtime_dependency 'activesupport', '>= 4.2.2'
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.5
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: 2016-07-18 00:00:00.000000000 Z
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: activesupport
70
+ name: i18n
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 4.2.2
76
- type: :runtime
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: 4.2.2
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/callbacks_interface.rb
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.1
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