nifty_services 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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