readymade 0.1.5 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aefd7011aa28dd0d0e9d5c1d219bc27d2ccbce37d3f28ffc6139a488847c9d8d
4
- data.tar.gz: 2d5698abc2a38900d633f52315bfd5b05014eb77a6db7958d62146f3cda6be7c
3
+ metadata.gz: d3200170eaca31067b42086203dd8c87a137ebf61cd37e7619c698cb59518fa1
4
+ data.tar.gz: b39ad5ddedfda056fbffddb7fc9d9e2449aae85cf41cb62ec67f521b2dab41fa
5
5
  SHA512:
6
- metadata.gz: d35e1e55adebd637434ebcae14bdfb99203f6cf4807fa940f019edf87a2c4f14bf36bc7d45dd8af1385740ca06e4445bcaa6ad8b3b18cc4f3e4eef3897d63624
7
- data.tar.gz: f09669c314759e0b72e9754e0a842f87fcf8a280a94c7994801f9851e739a40b0dc7144c69628bc461b4588a9e13284c29039a3682c7e842d50839c5ca5a2ac6
6
+ metadata.gz: f724c7a36056919214a775e22f7c11e0546bb5cc5efad9ffe6cc141d3df9efc169441d4cb3141704308d1607a067772150c13c6ee74ba616b37ddb751f09f678
7
+ data.tar.gz: 1b05d7f2797eaabfc128d1869b5d52218be2bd28713af743c05ce9ad02195ad825e4174d1a2920032c9d88ef06b33ed0b1fadbbed58c8834dfe2ca94e8160b43
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.1.6] - 2021-12-20
5
+
6
+ ### Features
7
+
8
+ * Add Readymade::Controller::Serialization
9
+
4
10
  ## [0.1.5] - 2021-12-07
5
11
 
6
12
  ### Improvements
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- readymade (0.1.4)
4
+ readymade (0.1.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,70 @@
1
+ require 'active_support/concern'
2
+
3
+ module Readymade
4
+ module Controller
5
+ module Serialization
6
+ extend ActiveSupport::Concern
7
+
8
+ def record_response(record, *args)
9
+ options = args.extract_options!
10
+ return render_json({}, :not_found) if record.nil?
11
+
12
+ hash = serialize_record(record, options)
13
+
14
+ status = if record.errors.none?
15
+ options[:status] || :ok
16
+ else
17
+ hash[:errors] = record.errors.messages
18
+ :bad_request
19
+ end
20
+ render_json(hash, status)
21
+ end
22
+
23
+ def collection_response(collection, *args)
24
+ options = args.extract_options!
25
+
26
+ render_json(
27
+ {
28
+ items: serialize_collection(paginate(collection, options), options),
29
+ count: collection.count
30
+ },
31
+ options[:status] || :ok
32
+ )
33
+ end
34
+
35
+ def render_json(message, status)
36
+ render json: message, status: status
37
+ end
38
+
39
+ def serialize_collection(collection, options = {})
40
+ serializer = options.delete(:serializer) || "#{collection.klass.name}Serializer".constantize
41
+ serializer.render_as_hash(collection, options)
42
+ end
43
+
44
+ def serialize_record(record, options = {})
45
+ serializer = options.delete(:serializer) || "#{record.class.name}Serializer".constantize
46
+ serializer.render_as_hash(record, { root: :data }.merge!(options))
47
+ end
48
+
49
+ def operation_response(response_obj, options = {})
50
+ message, status = case response_obj.status.to_sym
51
+ when :success, :ok
52
+ [
53
+ if response_obj.data[:record].present?
54
+ serialize_record(response_obj.data[:record],
55
+ options)
56
+ else
57
+ {}
58
+ end,
59
+ :ok
60
+ ]
61
+ when :validation_fail, :bad_request
62
+ [{ errors: response_obj.data[:errors] }, :bad_request]
63
+ else
64
+ [response_obj.status.to_sym, {}]
65
+ end
66
+ render_json(message, status)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -2,6 +2,5 @@
2
2
 
3
3
  module Readymade
4
4
  class InstantForm < Form
5
-
6
5
  end
7
6
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Readymade
4
- VERSION = '0.1.5'
4
+ VERSION = '0.1.6'
5
5
  end
data/lib/readymade.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'readymade/controller/serialization'
3
4
  require 'readymade/action'
4
5
  require 'readymade/form'
5
6
  require 'readymade/instant_form'
data/readymade.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
27
  end
28
+ spec.files << 'lib/readymade/controller/serialization.rb'
28
29
  spec.bindir = 'exe'
29
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
31
  spec.require_paths = ['lib']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readymade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - OrestF
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
11
+ date: 2021-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -73,6 +73,7 @@ files:
73
73
  - bin/setup
74
74
  - lib/readymade.rb
75
75
  - lib/readymade/action.rb
76
+ - lib/readymade/controller/serialization.rb
76
77
  - lib/readymade/form.rb
77
78
  - lib/readymade/instant_form.rb
78
79
  - lib/readymade/operation.rb
@@ -101,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
104
  requirements: []
104
- rubygems_version: 3.1.4
105
+ rubygems_version: 3.1.6
105
106
  signing_key:
106
107
  specification_version: 4
107
108
  summary: Set of base classes for ABDI architecture