tradesman 0.2.2 → 0.3.0

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: 10cf2e227726b33ce09753d78bdb487c9d1594e2
4
- data.tar.gz: a50b212a8093cfc8ff40c63274f8645274543e4d
3
+ metadata.gz: db5c2d7076e95ba6d615b720841bd7060498fd41
4
+ data.tar.gz: 8e3c89647d347d22d91f8b6674b97365ce0615b9
5
5
  SHA512:
6
- metadata.gz: 029a024e2a5a2133e3b1bd5b2707ab2806de70b0973cae0b3082fc7c480596403bce5760be9f17e6ae2dcdafec2084baf4631955b02e854195f4bd0d00a541f7
7
- data.tar.gz: 7b33640366ea1882fc5d8493fe28c4f40c257fc6b6976b947773f808d1f013868487ffe0d56323e170c0eb0023d6954d5cadad3fc63f67f77186d096ad788af4
6
+ metadata.gz: 7fda495879e02cc5199b8327879fae9fa7acbacd1aa2f6e3b94a8391482d3fb82b2a3a1e130006e3df9fcf0ddeeefdb423ad4f1b2e7b597d7c7fefeb473e3d9b
7
+ data.tar.gz: d6868892dc9f4441426dbe234e3bafe40c38f83788e592b34e5a7caba9410071f280156e7466babd790c8989fcd3cd6ae86dae11d19d467c988d8d92f676a8aa
data/README.md CHANGED
@@ -13,7 +13,7 @@ outcome.success? #=> true
13
13
  outcome.result #=> User Entity
14
14
 
15
15
  # Passing a block - Well-suited for Controllers
16
- Tradesman::UpdateUser.run(params[:id], user_update_params) do
16
+ Tradesman::UpdateUser.run({ id: params[:id] }.merge(user_update_params)) do
17
17
  success do |result|
18
18
  render(text: 'true', status: 200)
19
19
  end
@@ -28,10 +28,10 @@ Tradesman::UpdateUser.run(params[:id], user_update_params) do
28
28
  end
29
29
 
30
30
  # Can also Delete
31
- Tradesman::DeleteUser.run(params[:id])
31
+ Tradesman::DeleteUser.run(id: params[:id])
32
32
 
33
33
  # Or Create as a child of an existing record
34
- Tradesman::CreateUserForEmployer.run(employer_id, user_params)
34
+ Tradesman::CreateUserForEmployer.run({ parent_id: employer_id }.merge(user_params))
35
35
  ```
36
36
 
37
37
  ## Why is this necessary?
@@ -68,7 +68,7 @@ Tradesman is designed to handle the above and a few other common use-cases to re
68
68
 
69
69
  Tradesman version of the above:
70
70
  ```ruby
71
- Tradesman::UpdateUser.run(params[:id], user_params) do
71
+ Tradesman::UpdateUser.run(user_params) do
72
72
  success do |result|
73
73
  @user = result
74
74
  render 'user'
@@ -80,6 +80,74 @@ Tradesman::UpdateUser.run(params[:id], user_params) do
80
80
 
81
81
  failure { |result| render(text: 'false', status: 400) } # If you prefer one-liners
82
82
  end
83
+
84
+ private
85
+
86
+ def user_params
87
+ params.permit(:id, :first_name, :last_name)
88
+ end
83
89
  ```
84
90
 
85
91
  The Tradesman version says exactly what it does, is cruft free, and is much quicker to test (more on that later).
92
+
93
+ ## Config
94
+
95
+ **Define your adapter**
96
+
97
+ _config/initializers/tradesman.rb_
98
+ ```ruby
99
+ Tradesman.configure { |config| config.adapter = :active_record }
100
+ ```
101
+
102
+ **Development Mode and Model Namespaces**
103
+
104
+ Rails' lazy-loading in the development environment makes a bit more configuration necessary, particularly if you have wrapped your models in namespaces.
105
+
106
+ Consider:
107
+ ```ruby
108
+ module MyNamespace
109
+ class Employer < ActiveRecord::Base
110
+ has_many :users
111
+ end
112
+ end
113
+
114
+ module MyOtherNamespace
115
+ class User < ActiveRecord::Base
116
+ belongs_to :employer
117
+ end
118
+ end
119
+ ```
120
+
121
+ In order to help Tradesman lazy load these models, you need to enable development mode and configure any namespaces:
122
+
123
+ _config/initializers/tradesman.rb_
124
+ ```ruby
125
+ Tradesman.configure do |config|
126
+ config.adapter = :active_record
127
+ config.development_mode = Rails.env.development?
128
+ config.namespaces = [MyNamespace, MyOtherNamespace]
129
+ end
130
+ ```
131
+
132
+ **Reset Tradesman** _(Can be done at runtime or in tests)_
133
+ ```ruby
134
+ Tradesman.reset
135
+ ```
136
+
137
+ ## Adapters
138
+
139
+ Tradesman sits on top of [Horza](https://github.com/onfido/horza/), and can use any of its adapters.
140
+
141
+ ## Edge Cases
142
+
143
+ **Models ending with double 's'**
144
+
145
+ Some models end with a double 's', ie `Address`, `Business`. Rails has a well documented inability to properly inflect this type of word.
146
+ There is a simple fix:
147
+
148
+ ```ruby
149
+ # config/initializers/inflections.rb
150
+ ActiveSupport::Inflector.inflections do |inflect|
151
+ inflect.singular(/ess$/i, 'ess')
152
+ end
153
+ ```
@@ -20,11 +20,21 @@ module Tradesman
20
20
  end
21
21
 
22
22
  class Config
23
- attr_accessor :adapter
23
+ attr_accessor :adapter, :namespaces
24
24
 
25
- def set_adapter(adapter)
25
+ def adapter=(adapter)
26
26
  Horza.configure { |config| config.adapter = adapter }
27
27
  @adapter = Horza.adapter
28
28
  end
29
+
30
+ def development_mode=(mode)
31
+ Horza.configure { |config| config.development_mode = mode }
32
+ end
33
+
34
+ def namespaces=(namespaces)
35
+ fail Tradesman::Errors::Base.new 'namespaces must be an array' unless namespaces.is_a? Array
36
+ Horza.configure { |config| config.namespaces = namespaces }
37
+ @namespaces = namespaces
38
+ end
29
39
  end
30
40
  end
@@ -32,7 +32,7 @@ end
32
32
 
33
33
  describe Tradesman do
34
34
  let(:adapter) { :active_record }
35
- before { Tradesman.configure { |config| config.set_adapter(adapter) } }
35
+ before { Tradesman.configure { |config| config.adapter = adapter } }
36
36
  after do
37
37
  TradesmanSpec::User.delete_all
38
38
  TradesmanSpec::StrictUser.delete_all
@@ -56,6 +56,40 @@ describe Tradesman do
56
56
  end
57
57
  end
58
58
 
59
+ context 'namespaces' do
60
+ context 'when no namespaces are set' do
61
+ it 'does not forward namespaces to Horza' do
62
+ expect(Horza.configuration.namespaces.empty?).to be true
63
+ end
64
+ end
65
+ context 'when namespaces are set' do
66
+ before do
67
+ Tradesman.configure { |config| config.namespaces = [TradesmanSpec] }
68
+ end
69
+
70
+ it 'forwards namespaces to Horza' do
71
+ expect(Horza.configuration.namespaces).to eq [TradesmanSpec]
72
+ end
73
+ end
74
+ end
75
+
76
+ context 'development_mode' do
77
+ context 'when development_mode is not set' do
78
+ it 'does not forward namespaces to Horza' do
79
+ expect(Horza.configuration.development_mode).to be nil
80
+ end
81
+ end
82
+ context 'when namespaces are set' do
83
+ before do
84
+ Tradesman.configure { |config| config.development_mode = true }
85
+ end
86
+
87
+ it 'forwards namespaces to Horza' do
88
+ expect(Horza.configuration.development_mode).to be true
89
+ end
90
+ end
91
+ end
92
+
59
93
  context '#run' do
60
94
  context 'Create' do
61
95
  context 'when parameters are valid' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tradesman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Turner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-08 00:00:00.000000000 Z
12
+ date: 2015-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: horza
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.3.2
20
+ version: 0.3.3
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.3.2
27
+ version: 0.3.3
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: tzu
30
30
  requirement: !ruby/object:Gem::Requirement