tradesman 0.2.2 → 0.3.0

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