readymade 0.1.5 → 0.1.6

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
  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