rlet 0.6.1 → 0.7.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 +4 -4
- data/README.md +29 -1
- data/lib/rlet/expose.rb +62 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d8831d96794b32700eb7377a96e984db93826ca
|
4
|
+
data.tar.gz: 38aafb34b173433c9d7878623c7d4b8a4fe05a6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 092ffe94952422d38a1c2a61c6e97cd0a0a5e8f521545b19abe8699311b038d7df49947c19d5a36fbe93c21a12fa7ad34f9bd4287e4b0129f2ad42f71991b0d2
|
7
|
+
data.tar.gz: 27cc34e82f63d86c55a89ea976ba98121427c09c5f54f6475229a3d5f06aa3e4f66d1a589d8c256fe191f4167d0afcd9c00dd36f86cc15235aae3472cd560a05
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
This library contains a library for RSpec-style let() declartions for lazy evaluation,
|
4
4
|
concerns, and a few functional operators.
|
5
5
|
|
6
|
-
Unlike ruby-let, or what is proposed here
|
6
|
+
Unlike ruby-let, or what is proposed here [https://www.opensourcery.com/blog/zack-hobson/objectlet-ruby](https://www.opensourcery.com/blog/zack-hobson/objectlet-ruby)
|
7
7
|
this does not actually mimic the let of functional programming.
|
8
8
|
|
9
9
|
Here, `let()` defines a method in the class. The values are memoized. This allows for both
|
@@ -53,6 +53,34 @@ The gems contain two modules, Let and Concern. You can use them like so:
|
|
53
53
|
Concern is embedded from ActiveSupport. If ActiveSupport::Concern is loaded, it will use that. This
|
54
54
|
allows one to use concerns without having ActiveSupport as a dependency.
|
55
55
|
|
56
|
+
Additionally, to expose `let()` with instance variables for use in templates, you can use `expose`
|
57
|
+
|
58
|
+
require 'rlet'
|
59
|
+
require 'rlet/expose'
|
60
|
+
|
61
|
+
class ContactsController
|
62
|
+
include Let
|
63
|
+
include RLet::Expose
|
64
|
+
include RestfulResource
|
65
|
+
|
66
|
+
let(:model) { Contact }
|
67
|
+
|
68
|
+
expose :resource, only: :show
|
69
|
+
|
70
|
+
def show
|
71
|
+
respond_with resource
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
module RestfulResource
|
76
|
+
extend Concern
|
77
|
+
|
78
|
+
included do
|
79
|
+
let(:resource) { model.find(id) }
|
80
|
+
let(:id) { params[:id] }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
56
84
|
### LazyOptions
|
57
85
|
|
58
86
|
One pattern that comes up is creating a class which takes an option as an initializer, and then
|
data/lib/rlet/expose.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# Include this module if you want to expose methods as instance
|
2
|
+
# variables for Rails templates
|
3
|
+
#
|
4
|
+
# Since let variables are not exposed to the view,
|
5
|
+
# this allows ou to define instance variables to pass
|
6
|
+
# to the view.
|
7
|
+
#
|
8
|
+
# Example:
|
9
|
+
# class UsersController < ActiveController::Base
|
10
|
+
# include RLet::Expose
|
11
|
+
# include RLet::Let
|
12
|
+
#
|
13
|
+
# let(:user) { current_user }
|
14
|
+
# expose :user # Assigns @user = self.user
|
15
|
+
#
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# Other examples:
|
19
|
+
#
|
20
|
+
# expose :user, :options
|
21
|
+
# expose :user, only: [ :create, :show ]
|
22
|
+
# expose :user, :options, except: :destroy
|
23
|
+
#
|
24
|
+
# You can also use this in ApplicationController:
|
25
|
+
#
|
26
|
+
# require 'rlet/let'
|
27
|
+
# require 'rlet/expose'
|
28
|
+
#
|
29
|
+
# class ApplicationController < ActionController::Base
|
30
|
+
# include RLet::Let
|
31
|
+
# include RLet::Expose
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
#
|
35
|
+
# Considerations:
|
36
|
+
#
|
37
|
+
# This is implemented using a before_filter. So when you expose an
|
38
|
+
# rlet, it will -always- be evaluated. Be careful of what you expose
|
39
|
+
# and which controller actions to expose it to.
|
40
|
+
module RLet
|
41
|
+
module Expose
|
42
|
+
extend Concern
|
43
|
+
|
44
|
+
module ClassMethods
|
45
|
+
# expose :user
|
46
|
+
# expose :user, :options
|
47
|
+
# expose :user, only: [ :create, :show ]
|
48
|
+
# expose :user, :options, except: :destroy
|
49
|
+
def expose(*lvars)
|
50
|
+
options = lvars.last.is_a?(Hash) ? lvars.pop : {}
|
51
|
+
lvars.each do |lvar|
|
52
|
+
self.before_filter(options) do |controller|
|
53
|
+
controller.instance_eval do
|
54
|
+
self.instance_variable_set("@#{lvar}", self.send(lvar))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end # expose
|
59
|
+
|
60
|
+
end # ClassMethods
|
61
|
+
end # Expose
|
62
|
+
end # RLet
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rlet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ho-Sheng Hsiao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Use rspec's let() outside of rspec with concerns and functional operators
|
14
14
|
email:
|
@@ -21,6 +21,7 @@ files:
|
|
21
21
|
- README.md
|
22
22
|
- lib/rlet.rb
|
23
23
|
- lib/rlet/concern.rb
|
24
|
+
- lib/rlet/expose.rb
|
24
25
|
- lib/rlet/functional.rb
|
25
26
|
- lib/rlet/lazy_options.rb
|
26
27
|
- lib/rlet/let.rb
|