rails-patterns 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af39ea7538e043642610c2ea2ff35a9fa5c8a0e7
4
- data.tar.gz: ff3231a21b94a92280acf664497a40b3039f7140
3
+ metadata.gz: c0527dc116049d1579ba19deadf9ad643b0abf9b
4
+ data.tar.gz: 52f5f8cae780e21a3a91b7b82602d71814883a3c
5
5
  SHA512:
6
- metadata.gz: c3653e8ce337a6225ad14162600f8b2a462321fcca8595f8f1463920935749e17b48d3f7359530dff528bc7ff3f7175ddaa23b7ac1203903ff42b296bfb8c51d
7
- data.tar.gz: 37f4e6cb0fc581140dfee9372386b9d37b77a092d63d798fb98d8617475ac249d2e8f49aa9d8092ae5630e3de5e48a0aa6677ed7d62e89429a788c9fb51e44f2
6
+ metadata.gz: 58005bd76bfb7d2c30d83025343765b201994e1b4161e0e7c04b37a54ed5e88a98180afde2d4c46f8e70e4dd51ad06c0733bd073d47a5647721d7dbda43f0b49
7
+ data.tar.gz: b461d4fa96a92acb04a56ccc202a41aa79cbdb2948a0c94f5a56ebc3bd228c277a5db17331c6e690a9bdade2b84fe4a6ae008e835c84556ede60b4a038f991b9
data/README.md CHANGED
@@ -4,7 +4,7 @@ A collection of lightweight, standardized, rails-oriented patterns.
4
4
 
5
5
  - [Query - complex querying on active record relation](#query)
6
6
  - [Service - useful for handling processes involving multiple steps](#service)
7
- - [Collection - when in need to add a method that relates to the collection a whole](#collection)
7
+ - [Collection - when in need to add a method that relates to the collection as whole](#collection)
8
8
  - [Form - when you need a place for callbacks, want to replace strong parameters or handle virtual/composite resources](#form)
9
9
 
10
10
  ## Installation
@@ -82,7 +82,7 @@ end
82
82
  ### When to use it
83
83
 
84
84
  Service objects are commonly used to mitigate problems with model callbacks that interact with external classes ([read more...](http://samuelmullen.com/2013/05/the-problem-with-rails-callbacks/)).
85
- Service objects are also useful for handling processes involving multiple steps. E.g. a controller that performs more than one operation on its subject (usually a model instance) is a possible candidate for Extract ServiceObject (or Extract FormObject) refactoring.
85
+ Service objects are also useful for handling processes involving multiple steps. E.g. a controller that performs more than one operation on its subject (usually a model instance) is a possible candidate for Extract ServiceObject (or Extract FormObject) refactoring. In many cases service object can be used as scaffolding for [replace method with object refactoring](https://sourcemaking.com/refactoring/replace-method-with-method-object).
86
86
 
87
87
  ### Assumptions and rules
88
88
 
@@ -93,6 +93,10 @@ Service objects are also useful for handling processes involving multiple steps.
93
93
  * It is recommended for `#call` method to be the only public method of service object (besides state readers)
94
94
  * It is recommended to name service object classes after commands (e.g. `ActivateUser` instead of `UserActivation`)
95
95
 
96
+ ### Other
97
+
98
+ A bit higher level of abstraction is provided by [business_process gem](https://github.com/Selleo/business_process).
99
+
96
100
  ### Examples
97
101
 
98
102
  #### Declaration
@@ -162,7 +166,7 @@ class CustomerEventsByTypeCollection < Patterns::Collection
162
166
  subject.
163
167
  events.
164
168
  group_by(&:type).
165
- transform_values{ |event| event.public_send(options.fetch(:label_method, "description")) }
169
+ transform_values{ |events| events.map{ |e| e.public_send(options.fetch(:label_method, "description")) }}
166
170
  end
167
171
  end
168
172
  ```
@@ -183,6 +187,7 @@ Form objects, just like service objects, are commonly used to mitigate problems
183
187
  Form objects can also be used as replacement for `ActionController::StrongParameters` strategy, as all writable attributes are re-defined within each form.
184
188
  Finally form objects can be used as wrappers for virtual (with no model representation) or composite (saving multiple models at once) resources.
185
189
  In the latter case this may act as replacement for `ActiveRecord::NestedAttributes`.
190
+ In some cases FormObject can be used as scaffolding for [replace method with object refactoring](https://sourcemaking.com/refactoring/replace-method-with-method-object).
186
191
 
187
192
  ### Assumptions and rules
188
193
 
@@ -191,7 +196,7 @@ In the latter case this may act as replacement for `ActiveRecord::NestedAttribut
191
196
  * Forms can be initialized using `.new`.
192
197
  * Forms accept optional resource object as first constructor argument.
193
198
  * Forms accept optional attributes hash as latter constructor argument.
194
- * forms have to implement `#persist` method that returns falsey (if failed) or truthy (if succeeded) value.
199
+ * Forms have to implement `#persist` method that returns falsey (if failed) or truthy (if succeeded) value.
195
200
  * Forms provide access to first constructor argument using `#resource`.
196
201
  * Forms are saved using their `#save` or `#save!` methods.
197
202
  * Forms will attempt to pre-populate their fields using `resource#attributes` and public getters for `resource`
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
@@ -50,7 +50,7 @@ module Patterns
50
50
  end
51
51
 
52
52
  def persisted?
53
- if resource&.respond_to?(:persisted?)
53
+ if resource.present? && resource.respond_to?(:persisted?)
54
54
  resource.persisted?
55
55
  else
56
56
  false
@@ -77,7 +77,7 @@ module Patterns
77
77
 
78
78
  def param_key
79
79
  param_key = self.class.param_key
80
- param_key ||= resource&.respond_to?(:model_name) && resource.model_name.param_key
80
+ param_key ||= resource.present? && resource.respond_to?(:model_name) && resource.model_name.param_key
81
81
  raise NoParamKey if param_key.blank?
82
82
  param_key
83
83
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: rails-patterns 0.4.0 ruby lib
5
+ # stub: rails-patterns 0.4.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "rails-patterns".freeze
9
- s.version = "0.4.0"
9
+ s.version = "0.4.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Stevo".freeze]
14
- s.date = "2017-04-21"
14
+ s.date = "2017-05-09"
15
15
  s.description = "A collection of lightweight, standardized, rails-oriented patterns.".freeze
16
16
  s.email = "b.kosmowski@selleo.com".freeze
17
17
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-patterns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stevo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-21 00:00:00.000000000 Z
11
+ date: 2017-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord