adequate_exposure 0.3.0 → 0.4.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: 9c0b98b45275a2969fdf0e5e3816d30681355c7f
4
- data.tar.gz: 50b5e87966249713a1bf28dc21770996d1b0a4ec
3
+ metadata.gz: 5915dfaad2605bed7254feedffb99c2127dacfbc
4
+ data.tar.gz: 3f18159d981648e7bfb9f0856dcf08c43ebc419f
5
5
  SHA512:
6
- metadata.gz: 93c096e3def6f624250401c00096b16fefeb8ca9fc11d13b1aa0c457db4b81178cb890f152b4ce4f9f922a535f6b72cd960b43b81fd4c36186f6f2dc9e6dd15b
7
- data.tar.gz: 4a57bb49d5911ed55607e884d8561bb1b82ef009b60ccf54c5e427704e6ed3c60c9c85aabc2adfdf4438146987d5ffceea298ed397df4f602eec322bf32cd7d5
6
+ metadata.gz: 423058f319f76c5d7b6c05b93401b32f3febf8d435d265156206f8fe904dd95a59c1fdd35eb598d9f3ad7fc85bb715bb3b5e8913ec5c694fc6e86341ad16bc12
7
+ data.tar.gz: 8cda1d9cb3b2c6607d3947bb46150e4c8d50182bac4f2a67ce2842387ec5a61df5b255213f03314218aa56e30afb47cde6e4a036974d7c441efd29f687679ebe
data/README.md CHANGED
@@ -34,6 +34,46 @@ ID and try to perform `Thing.find(id)`. If the ID isn't found, it'll call
34
34
  `Thing.new(things_params)`. The result will be memoized in an `@exposed_thing`
35
35
  instance variable.
36
36
 
37
+ ## Example Controller
38
+
39
+ Here's what a standard Rails 4 CRUD controller using Adequate Exposure might look like:
40
+
41
+ ```ruby
42
+ class ThingsController < ApplicationController
43
+ expose :things, ->{ Thing.all }
44
+ expose :thing
45
+
46
+ def create
47
+ if thing.save
48
+ redirect_to thing_path(thing)
49
+ else
50
+ render :new
51
+ end
52
+ end
53
+
54
+ def update
55
+ if thing.update(thing_params)
56
+ redirect_to thing_path(thing)
57
+ else
58
+ render :edit
59
+ end
60
+ end
61
+
62
+ def destroy
63
+ thing.destroy
64
+ redirect_to things_path
65
+ end
66
+
67
+ private
68
+
69
+ def thing_params
70
+ params.require(:thing).permit(:foo, :bar)
71
+ end
72
+ end
73
+ ```
74
+
75
+ ## Under the Hood
76
+
37
77
  The default resolving workflow is pretty powerful and customizable. It could be
38
78
  expressed with the following pseudocode:
39
79
 
@@ -273,7 +313,6 @@ expose :thing, with: [:cool_find, :cool_build]
273
313
  expose :another_thing, with: :cool_build
274
314
  ```
275
315
 
276
-
277
316
  ## Contributing
278
317
 
279
318
  1. Fork it (https://github.com/rwz/adequate_exposure/fork)
@@ -1,7 +1,6 @@
1
1
  module AdequateExposure
2
2
  module Behavior
3
3
  def fetch
4
- computed_scope = scope(model)
5
4
  instance = id ? find(id, computed_scope) : build(build_params, computed_scope)
6
5
  decorate(instance)
7
6
  end
@@ -52,5 +51,9 @@ module AdequateExposure
52
51
  def model_param_key
53
52
  model.name.underscore
54
53
  end
54
+
55
+ def computed_scope
56
+ scope(model)
57
+ end
55
58
  end
56
59
  end
@@ -74,7 +74,9 @@ module AdequateExposure
74
74
  exposure_name = options.fetch(:name)
75
75
 
76
76
  if from = options.delete(:from)
77
- merge_lambda_option :fetch, ->{ send(from).send(exposure_name) }
77
+ merge_lambda_option :build, ->{ send(from).send(exposure_name) }
78
+ merge_lambda_option :model, ->{ nil }
79
+ merge_lambda_option :id, ->{ nil }
78
80
  end
79
81
  end
80
82
 
@@ -159,7 +161,7 @@ module AdequateExposure
159
161
  end
160
162
 
161
163
  def assert_singleton_option(name)
162
- if options.except(name, :name).any? && options.key?(name)
164
+ if options.except(name, :name, :decorate).any? && options.key?(name)
163
165
  fail ArgumentError, "Using #{name.inspect} option with other options doesn't make sense"
164
166
  end
165
167
  end
@@ -1,3 +1,3 @@
1
1
  module AdequateExposure
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -348,10 +348,9 @@ describe AdequateExposure::Controller do
348
348
 
349
349
  context "from option" do
350
350
  it "allows scope to be called from method" do
351
- post = double("Post")
352
351
  comments = double("Comments")
352
+ post = double("Post", comments: comments)
353
353
  allow(controller).to receive(:post).and_return(post)
354
- expect(post).to receive(:comments).and_return(comments)
355
354
  expose :comments, from: :post
356
355
 
357
356
  expect(controller.comments).to eq(comments)
@@ -361,5 +360,15 @@ describe AdequateExposure::Controller do
361
360
  action = ->{ expose :thing, from: :foo, parent: :bar }
362
361
  expect(&action).to raise_error(ArgumentError, "Using :from option with other options doesn't make sense")
363
362
  end
363
+
364
+ it "should still work with decorate option" do
365
+ decorated_thing = double("DecoratedThing")
366
+ thing = double("Thing")
367
+ foo = double("Foo", thing: thing)
368
+ expect(controller).to receive(:foo).and_return(foo)
369
+ expect(controller).to receive(:decorate).with(thing).and_return(decorated_thing)
370
+ expose :thing, from: :foo, decorate: ->(thing){ decorate(thing) }
371
+ expect(controller.thing).to eq(decorated_thing)
372
+ end
364
373
  end
365
374
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adequate_exposure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pravosud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-29 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties