less_interactions 0.0.13 → 0.0.14

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: 34aa2f840ecab85c20a3a6a75f1758bc3734eb5e
4
- data.tar.gz: 23a353b9e6d5441145c9efc4509cde3d9c1293c3
3
+ metadata.gz: 80d11c1484566f3f643bb2825130f84eceff5ecf
4
+ data.tar.gz: 330847040474b05548a2e6c52a42365d5d30bc2d
5
5
  SHA512:
6
- metadata.gz: f9eca2a62694b726972bfcba44bcdd781117001e7a60080ba7c578ba2c50cdc98fba76034f30fec035546caa40c6eae6761be6634ac31a5dde14b692c1b67e88
7
- data.tar.gz: 70780de5e069055e1f326db722efb00fda2573b5fbe35d7780bab70ff80e17e55bfadc66baa100a0863b90c9c474b7b4405ab99a6013438ffbb79e5c6148d037
6
+ metadata.gz: 2c61d1c2d65b49fa9a7cd3b0383f7adec2ba90bedb68f69126fb9b261ab426f613052e6cca9a18c76b92dbb5ec59d26d411f38b0762ff711f953ff2d223b4b58
7
+ data.tar.gz: 01ddf8061f5eeed178d44e30e174f9cd1654a50179d32a70fb610d21e82d16ae838ba2010afbcb7c2003352dd524b72fd6ffb731299e3a4c8cea649e9157887b
data/README.rdoc CHANGED
@@ -19,7 +19,7 @@ Rails is great, but if you build a rails app of any size you start running into
19
19
  * What are all the side effects of calling this method?
20
20
 
21
21
 
22
- == Dear jesus and baby jesus, what do I do?!
22
+ == What do I do?!
23
23
 
24
24
  Less::Interactions are a place to put all of your business logic and still get all the rails goodness you love.
25
25
 
@@ -79,6 +79,8 @@ After:
79
79
  expects :some_other_thing_the_interaction_needs, allow_nil: true
80
80
  expects :business
81
81
  expects :user
82
+ #only one of these is required
83
+ expects_any :need_this, :or, :this
82
84
 
83
85
  # method chain in use case is easy to see.
84
86
  def run
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{less_interactions}
8
- s.version = "0.0.13"
8
+ s.version = "0.0.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Eugen Minciu", "Steven Bristol"]
@@ -18,6 +18,8 @@ module Less
18
18
  n.each do |name, val|
19
19
  nils[name] = nil
20
20
  end
21
+ self.class.any_expectations.flatten.each {|e| nils[e] = nil}
22
+
21
23
  nils.merge(options).each do |name, value|
22
24
  instance_variable_set "@#{name}", value
23
25
  if respond_to?( "#{name}=" ) && !value.nil?
@@ -32,7 +34,7 @@ module Less
32
34
  #
33
35
  # The default implementation raises an {InvalidInteractionError}
34
36
  def run
35
- raise InvalidInteractionError, "You most override the run instance method in #{self.class}"
37
+ raise InvalidInteractionError, "You must override the run instance method in #{self.class}"
36
38
  end
37
39
 
38
40
  def init
@@ -46,7 +48,7 @@ module Less
46
48
  def self.run(context = {}, options = {})
47
49
  me = new(context, options)
48
50
  me.init
49
- raise MissingParameterError unless me.send :expectations_met?
51
+ me.send :expectations_met?
50
52
  me.run
51
53
  end
52
54
 
@@ -64,27 +66,61 @@ module Less
64
66
  else
65
67
  options = {}
66
68
  end
67
- parameters.each do |param|
68
- methods = (self.instance_methods + self.private_instance_methods)
69
- self.send(:attr_reader, param.to_sym) unless methods.member?(param.to_sym)
70
- add_expectation(param, options)
69
+ __setup_expecations parameters do |parameter|
70
+ add_expectation(parameter, options)
71
+ end
72
+ end
73
+
74
+ def self.expects_any *parameters
75
+ __setup_expecations parameters do |parameter|
71
76
  end
77
+ add_any_expectation(parameters)
72
78
  end
73
79
 
74
80
 
75
81
 
76
82
  private
77
83
 
84
+ def self.__setup_expecations parameters
85
+ parameters.each do |param|
86
+ methods = (self.instance_methods + self.private_instance_methods)
87
+ self.send(:attr_reader, param.to_sym) unless methods.member?(param.to_sym)
88
+ yield param if block_given?
89
+ end
90
+ end
91
+
78
92
  def self.add_expectation(parameter, options)
79
93
  expectations[parameter] = options
80
94
  end
81
95
 
96
+ def self.add_any_expectation(parameters)
97
+ any_expectations << parameters
98
+ end
99
+
82
100
  def expectations_met?
101
+ __expects_mets? && __expects_any_mets?
102
+ end
103
+
104
+ def __expects_any_mets?
105
+ self.class.any_expectations.each do |any_set|
106
+ if any_set.all? {|e| instance_variable_get("@#{e}").nil?}
107
+ raise MissingParameterError, "Parameters empty :#{any_set.to_s} (At least one of these must not be nil)"
108
+ end
109
+ end
110
+ true
111
+ end
112
+
113
+ def __expects_mets?
83
114
  self.class.expectations.each do |param, param_options|
84
115
  unless param_options[:allow_nil]
85
116
  raise MissingParameterError, "Parameter empty :#{param.to_s}" if instance_variable_get("@#{param}").nil?
86
117
  end
87
118
  end
119
+ true
120
+ end
121
+
122
+ def self.any_expectations
123
+ @any_expectations ||= []
88
124
  end
89
125
 
90
126
  def self.expectations
@@ -182,4 +182,22 @@ class InteractionTest < Test::Unit::TestCase
182
182
  x = OverrideIt.new(int: 1).run
183
183
  assert_equal "1", x.send(:int)
184
184
  end
185
+
186
+
187
+ should "fail if all expects_any parameters are nil" do
188
+ class AnyInteractionWithAllNilParameters < Less::Interaction
189
+ expects_any :title, :a, :b
190
+ def run; end
191
+ end
192
+ assert_raise(MissingParameterError) { AnyInteractionWithAllNilParameters.run() }
193
+ end
194
+
195
+ should "pass if any expects_any parameters is not nil" do
196
+ class AnyInteractionWithOneNonNilParameter < Less::Interaction
197
+ expects_any :title, :a, :b
198
+ def run; true; end
199
+ end
200
+ assert AnyInteractionWithOneNonNilParameter.run(:b => 1)
201
+ end
202
+
185
203
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: less_interactions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugen Minciu