rails_ops 1.0.0.beta3 → 1.0.0.beta4

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: 6e73b572936a8b96e078c9643cda027cc2153cb3
4
- data.tar.gz: 795bc1c05411d76172846bd426a97088b9b90bb8
3
+ metadata.gz: 200bc5c12a821e07b6d10cfd18d1349c3005a1b3
4
+ data.tar.gz: 7dbf7c447bb0a472e28583ea0dc69d4f89ca185a
5
5
  SHA512:
6
- metadata.gz: c965f3510959ead719a946a9468ed483e4a96fda98926b9aeb813e32fbd334929e418a11850064365c5c0c0a9d0595ecf00852cc4236ccd9b60a48ee3f617e12
7
- data.tar.gz: 369a5561ed04ea12c2065dcbb57e859b329d17d6c9c76d78f223c5ccc9b7a57803b120082ea6f16f2e09dd94d74433f13d10b06f3589d150f8f77ef24bef335f
6
+ metadata.gz: 488428cdb605dd24250003a2d917200f46c86eab3906777489efcb19bca117c7e028a76412042e5a43f261c03c47726cd9780ba83f66ff2a2c92d2908e2e9f30
7
+ data.tar.gz: 417abae7e58449757d96885f22ab2ab92b70bb5ad08a27523d55c320e3f8b869ecba128f929a06bb431ca1ef5a5c963e3e8f2e16831733066359a3d949a90bd0
data/README.md CHANGED
@@ -7,9 +7,9 @@ rails_ops
7
7
 
8
8
  This Gem introduces an additional service layer for Rails: *Operations*. An
9
9
  operation is in most cases a *business action* or *use case* and may or may not
10
- involve one or multiple models. Rails Ops allow creating more modular
11
- applications by splitting them up into its different operations. Each operation
12
- is specified in a single, testable class.
10
+ involve one or multiple models. Rails Ops allows creating more modular
11
+ applications by splitting them up into their different operations. Each
12
+ operation is specified in a single, testable class.
13
13
 
14
14
  To achieve this goal, this Gem provides the following building blocks:
15
15
 
@@ -23,13 +23,13 @@ Operation Basics
23
23
 
24
24
  ### Placing and naming operations
25
25
 
26
- - Operations generally reside in `app/operations` and can be nested using various
27
- subdirectories. They're all inside of the `Operations` namespace.
26
+ - Operations generally reside in `app/operations` and can be nested using
27
+ various subdirectories. They're all inside of the `Operations` namespace.
28
28
 
29
29
  - Operations operating on a specific model should generally be namespaced with
30
30
  the model's class name. So for instance, the operation `Create` for the `User`
31
- model should generally live under `app/operations/user/create.rb` and therefore
32
- be called `Operations::User::Create`.
31
+ model should generally live under `app/operations/user/create.rb` and
32
+ therefore should be called `Operations::User::Create`.
33
33
 
34
34
  - Operations inheriting from other operations should generally be nested within
35
35
  their parent operation. See the next section for more details.
@@ -51,8 +51,8 @@ When declaring an operation within a namespace,
51
51
  - Determine whether the namespace you're using is a module or a class. Make sure
52
52
  you don't accidentally redefine a module as a class or vice-versa.
53
53
 
54
- - If the operation resides within a module, make a module definition on the first
55
- line and the operation class on the second. Example:
54
+ - If the operation resides within a module, make a module definition on the
55
+ first line and the operation class on the second. Example:
56
56
 
57
57
  ```ruby
58
58
  module Operations::Frontend::Navigation
@@ -958,7 +958,7 @@ source code for implementation details.
958
958
  ## Model authorization
959
959
 
960
960
  While you can use the standard `authorize!` method (see chapter *Authorization*)
961
- for authorizing models, RailsOps provides you a more convenient integration.
961
+ for authorizing models, RailsOps provides a more convenient integration.
962
962
 
963
963
  ### Basic authorization
964
964
 
@@ -966,7 +966,7 @@ Model authorization can be performed via the operation instance methods
966
966
  `authorize_model!` and `authorize_model_with_authorize_only!` (see chapter
967
967
  *Authorization* for more information on the difference between these two).
968
968
 
969
- There two methods provide a simple wrapper around `authorize!` and
969
+ These two methods provide a simple wrapper around `authorize!` and
970
970
  `authorize_only!` that casts the given model class or instance to an active
971
971
  record object. This is necessary if the given model class or instance is a
972
972
  (possibly anonymous) extension of an active record class for certain
@@ -1213,6 +1213,15 @@ while more specific operations can use `:update` or whatever. If we really need
1213
1213
  to check for `:read` when updating an object, it can be implemented in the
1214
1214
  ability class.
1215
1215
 
1216
+ ## Change log
1217
+
1218
+ ### 1.0.0.beta4
1219
+
1220
+ * Fix a bug where nested models are saved at build time in update operations in
1221
+ some cases.
1222
+
1223
+ * Start of change log.
1224
+
1216
1225
  ## Copyright
1217
1226
 
1218
1227
  Copyright (c) 2017 Sitrox. See `LICENSE` for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.beta3
1
+ 1.0.0.beta4
@@ -34,6 +34,7 @@ module RailsOps
34
34
  return @op
35
35
  end
36
36
 
37
+ # Determines whether an operation has been set.
37
38
  def op?
38
39
  !!@op
39
40
  end
@@ -65,20 +66,30 @@ module RailsOps
65
66
  return success
66
67
  end
67
68
 
69
+ # Returns the current operation's `model`. Fails with an exception if the
70
+ # current operation does not respond to the `model` (i.e. is not a model
71
+ # operation).
68
72
  def model
69
73
  return @model if @model
70
74
  fail 'Current operation does not support `model` method.' unless op.respond_to?(:model)
71
75
  return op.model
72
76
  end
73
77
 
78
+ # Filters the `params` hash for use with RailsOps. This removes certain
79
+ # web-specific parameters based on `EXCEPT_PARAMS`.
74
80
  def filter_op_params(params)
75
81
  (params || {}).except(*EXCEPT_PARAMS)
76
82
  end
77
83
 
84
+ # Filters operation params using `filter_op_params`, permits them using
85
+ # strong params and converts them to a hash. This method can be overridden
86
+ # for passing custom params to an operation for an entire controller.
78
87
  def op_params
79
88
  filter_op_params(params.permit!).to_h
80
89
  end
81
90
 
91
+ # Constructs and returns the operation context used for instantiating
92
+ # operations from within this controller.
82
93
  def op_context
83
94
  @op_context ||= begin
84
95
  context = RailsOps::Context.new
@@ -137,14 +137,18 @@ module RailsOps::Mixins::Model::Nesting
137
137
  # Instantiate nested operation
138
138
  @nested_model_ops[attribute] = sub_op(config[:klass], wrapped_params)
139
139
 
140
- # Inject model of nested operation to our own model
140
+ # Inject model of nested operation to our own model. We directly set the
141
+ # association's target instead of using the standard setter method as the
142
+ # latter one can save the models in some occasions.
141
143
  nested_model = @nested_model_ops[attribute].model
142
- model.send("#{attribute}=", nested_model)
144
+ model.association(attribute).target = nested_model
143
145
 
144
146
  # Inject our own model to model of nested operation (if the inverse
145
- # reflection can be resolved)
147
+ # reflection can be resolved). We directly set the association's target
148
+ # instead of using the standard setter method as the latter one can save
149
+ # the models in some occasions.
146
150
  if (inverse_reflection = model.class.reflect_on_association(attribute).inverse_of)
147
- nested_model.send("#{inverse_reflection.name}=", model)
151
+ nested_model.association(inverse_reflection.name).target = model
148
152
  end
149
153
  end
150
154
  end
data/rails_ops.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: rails_ops 1.0.0.beta3 ruby lib
2
+ # stub: rails_ops 1.0.0.beta4 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "rails_ops".freeze
6
- s.version = "1.0.0.beta3"
6
+ s.version = "1.0.0.beta4"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2017-06-20"
11
+ s.date = "2017-11-16"
12
12
  s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/rails_ops.rb".freeze, "lib/rails_ops/authorization_backend/abstract.rb".freeze, "lib/rails_ops/authorization_backend/can_can_can.rb".freeze, "lib/rails_ops/configuration.rb".freeze, "lib/rails_ops/context.rb".freeze, "lib/rails_ops/controller_mixin.rb".freeze, "lib/rails_ops/exceptions.rb".freeze, "lib/rails_ops/hooked_job.rb".freeze, "lib/rails_ops/hookup.rb".freeze, "lib/rails_ops/hookup/dsl.rb".freeze, "lib/rails_ops/hookup/dsl_validator.rb".freeze, "lib/rails_ops/hookup/hook.rb".freeze, "lib/rails_ops/log_subscriber.rb".freeze, "lib/rails_ops/mixins.rb".freeze, "lib/rails_ops/mixins/authorization.rb".freeze, "lib/rails_ops/mixins/log_settings.rb".freeze, "lib/rails_ops/mixins/model.rb".freeze, "lib/rails_ops/mixins/model/authorization.rb".freeze, "lib/rails_ops/mixins/model/nesting.rb".freeze, "lib/rails_ops/mixins/policies.rb".freeze, "lib/rails_ops/mixins/require_context.rb".freeze, "lib/rails_ops/mixins/routes.rb".freeze, "lib/rails_ops/mixins/schema_validation.rb".freeze, "lib/rails_ops/mixins/sub_ops.rb".freeze, "lib/rails_ops/model_casting.rb".freeze, "lib/rails_ops/model_mixins.rb".freeze, "lib/rails_ops/model_mixins/ar_extension.rb".freeze, "lib/rails_ops/model_mixins/parent_op.rb".freeze, "lib/rails_ops/model_mixins/protected_attributes.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb".freeze, "lib/rails_ops/model_mixins/virtual_has_one.rb".freeze, "lib/rails_ops/operation.rb".freeze, "lib/rails_ops/operation/model.rb".freeze, "lib/rails_ops/operation/model/create.rb".freeze, "lib/rails_ops/operation/model/destroy.rb".freeze, "lib/rails_ops/operation/model/load.rb".freeze, "lib/rails_ops/operation/model/update.rb".freeze, "lib/rails_ops/patches/active_type_patch.rb".freeze, "lib/rails_ops/profiler.rb".freeze, "lib/rails_ops/profiler/node.rb".freeze, "lib/rails_ops/railtie.rb".freeze, "lib/rails_ops/scoped_env.rb".freeze, "lib/rails_ops/virtual_model.rb".freeze, "rails_ops.gemspec".freeze, "test/test_helper.rb".freeze]
13
13
  s.rubygems_version = "2.6.6".freeze
14
14
  s.summary = "An operations service layer for rails projects.".freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_ops
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta3
4
+ version: 1.0.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  version: 1.3.1
246
246
  requirements: []
247
247
  rubyforge_project:
248
- rubygems_version: 2.6.11
248
+ rubygems_version: 2.6.14
249
249
  signing_key:
250
250
  specification_version: 4
251
251
  summary: An operations service layer for rails projects.