redress 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: ae54aefaea2030d1a65f9ae21a2a9963f9c42419
4
- data.tar.gz: 26c2f1c1b2e22857d8de318f0a8b4ab129f29462
3
+ metadata.gz: 41402aaf89ea4b30ca985c6748259e94f43a3bf0
4
+ data.tar.gz: f38303010581b1cc238927768afe86e48bbab4ba
5
5
  SHA512:
6
- metadata.gz: 163a1f58f0d429d8b04f0179e5ce82dc5d001993a422157dc3e50ef86bd9314783cefea8f571214639dd1c26221e0ee9007d0ef15f69786635de04100a91819b
7
- data.tar.gz: 59ea7e648d34e13b43ebaa7a413d141d9fd065bf71460856936d1ce00364fd4d56a545b234cd29df4732cf88eda07279cb3b057a6c7a363bcb5c562395d78f2b
6
+ metadata.gz: 372b234a3fc2d5723938e4486aa1cde2876013c67b6e3d2195ed89ead3928c6504a724262cdcb81e4149dc495d1c36b632d4018483010f8ecdb8ed20d34e2518
7
+ data.tar.gz: 4f51c86618c0e981532cdb4728a9910d8692a0011d77397c7ff316bc35091e09249cf362c18c5229b2c6125e7e484950b1983da220c3969b7539bbf164fc03e3
data/README.md CHANGED
@@ -6,16 +6,14 @@
6
6
  [![Coverage Status](https://coveralls.io/repos/github/galetahub/redress/badge.svg?branch=master)](https://coveralls.io/github/galetahub/redress?branch=master)
7
7
  [![Dependency Status](https://gemnasium.com/badges/github.com/galetahub/redress.svg)](https://gemnasium.com/github.com/galetahub/redress)
8
8
 
9
- ## Motivation
9
+ ## Motivation (Command pattern)
10
10
 
11
- TODO:
11
+ The command pattern is sometimes called a service object, an operation, an action, and probably more names that I’m not aware of. Whatever the name we gave it, the purpose of such a pattern is rather simple: take a business action and put it behind an object with a simple interface.
12
12
 
13
13
  <!-- Tocer[start]: Auto-generated, don't remove. -->
14
14
 
15
15
  ## Table of Contents
16
16
 
17
- - [Features](#features)
18
- - [Screencasts](#screencasts)
19
17
  - [Requirements](#requirements)
20
18
  - [Setup](#setup)
21
19
  - [Usage](#usage)
@@ -29,13 +27,13 @@ TODO:
29
27
 
30
28
  <!-- Tocer[finish]: Auto-generated, don't remove. -->
31
29
 
32
- ## Features
33
-
34
- TODO:
35
-
36
30
  ## Requirements
37
31
 
38
32
  0. [Ruby 2.3](https://www.ruby-lang.org)
33
+ 1. wisper
34
+ 2. fast_attributes
35
+ 3. hashie
36
+ 4. activemodel
39
37
 
40
38
  ## Setup
41
39
 
@@ -59,11 +57,32 @@ class ApplicationForm < Redress::Form
59
57
  end
60
58
  ```
61
59
 
60
+ Let's define simple form:
61
+
62
+ ``` ruby
63
+ class SimpleForm < ApplicationForm
64
+ mimic :user
65
+
66
+ schema do
67
+ attribute :name, String
68
+ attribute :email, String
69
+ attribute :name_with_email, String
70
+ end
71
+
72
+ validates :name, presence: true
73
+ validates :email, presence: true
74
+
75
+ def map_model(user)
76
+ self.name_with_email = "#{user.name} <#{user.email}>"
77
+ end
78
+ end
79
+ ```
80
+
62
81
  ### Commands
63
82
 
64
83
  ``` ruby
65
84
  # app/commands/application_command.rb
66
- require 'redress/form'
85
+ require 'redress/command'
67
86
 
68
87
  class ApplicationCommand < Redress::Commad
69
88
  end
@@ -73,7 +92,7 @@ Or if you are using ActiveRecord:
73
92
 
74
93
  ``` ruby
75
94
  # app/commands/application_command.rb
76
- require 'redress/form'
95
+ require 'redress/command'
77
96
 
78
97
  class ApplicationCommand < Redress::Commad
79
98
  def transaction(&block)
@@ -82,6 +101,50 @@ class ApplicationCommand < Redress::Commad
82
101
  end
83
102
  ```
84
103
 
104
+ Simple command for user registration:
105
+
106
+ ``` ruby
107
+ # app/commands/users/create_command.rb
108
+ module Users
109
+ class CreateCommand < ApplicationCommand
110
+ def initialize(form)
111
+ @form = form
112
+ end
113
+
114
+ def call
115
+ return broadcast(:invalid, @form) if @form.invalid?
116
+
117
+ user = User.create(@form.attributes)
118
+
119
+ broadcast(:ok, user)
120
+ end
121
+ end
122
+ end
123
+ ```
124
+
125
+ ### Controllers
126
+
127
+ ``` ruby
128
+ # app/controllers/users_controller.rb
129
+ class UsersController < Account::BaseController
130
+ respond_to :json, only: :update
131
+
132
+ def new
133
+ @user_form = SimpleForm.new
134
+ end
135
+
136
+ def create
137
+ @user_form = SimpleForm.from_params(params)
138
+
139
+ Users::CreateCommand.call(@user_form) do |c|
140
+ c.on(:ok) { head status: 201 }
141
+ c.on(:invalid) { |form| render status: 422, json: { errors: form.errors } }
142
+ end
143
+ end
144
+ end
145
+
146
+ ```
147
+
85
148
  ## Tests
86
149
 
87
150
  To test, run:
@@ -12,7 +12,7 @@ module Redress
12
12
  end
13
13
 
14
14
  def self.version
15
- "0.1.0"
15
+ "0.1.1"
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -45,6 +45,7 @@ module Redress
45
45
  new_key = key.to_s
46
46
  next unless new_key.start_with?(prefix)
47
47
 
48
+ new_key = new_key.dup if new_key.frozen?
48
49
  new_key.slice!(full_prefix)
49
50
 
50
51
  hash[new_key] = value
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redress
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Galeta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-30 00:00:00.000000000 Z
11
+ date: 2017-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wisper