methodic 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1707f3f27d5350def0846240d4c4f7582b05b2b1f3b6aac5b7d9415be25f81fc
4
+ data.tar.gz: 74cbf27c2cbbb5cb62864200b8589d68ecc9a40ea723a1dbe97dfaa0b0a5e630
5
+ SHA512:
6
+ metadata.gz: 6b9bbf2c528d99307321a8d687be03907aabbd8cba955feddfe739744ae1fc22f020a8f95cb5b30cd003700774bee08945a1a82f4d10f1d533c45719a4f04bf1
7
+ data.tar.gz: 8749230565c40f51376ac2a444e7422297f87186184e2f14edd3769b02cbd3960df19f00fc5cef84083826def98615ccc0655f15c367b079fd98874fb07bd4ba
data/ChangeLog CHANGED
@@ -16,6 +16,8 @@ methodic :
16
16
  - version 1.1 (RC2)
17
17
  Romain GEORGES
18
18
  - stable version ( production ready)
19
- - version 1.2 (stable)
19
+ - version 1.2 (depricated)
20
20
  Romain GEORGES
21
21
  - NEW : conditions support see manual
22
+ - version 1.3 (STABLE)
23
+ - update for compatibility
data/Gemfile CHANGED
@@ -4,5 +4,4 @@ gem "rspec", :require => "spec"
4
4
  gem "rake"
5
5
  gem "yard"
6
6
  gem "rdoc"
7
- gem "rcov"
8
7
  gem "roodi"
@@ -1,32 +1,39 @@
1
- =Methodic
1
+ # Methodic
2
2
 
3
- == Content
3
+ ## Content
4
4
 
5
- Author:: Romain GEORGES <romain@ultragreen.net>
6
- Version:: 1.2
7
- WWW:: http://www.ultragreen.net/projects/methodic
5
+ * Author : Romain GEORGES <romain@ultragreen.net>
6
+ * Version : 1.2
7
+ * WWW : http://www.ultragreen.net/projects/methodic
8
8
 
9
- == Description
9
+
10
+ [![Build Status](https://travis-ci.org/lecid/methodic.png?branch=master)](https://travis-ci.org/lecid/methodic) [![CodeClimate](https://codeclimate.com/github/lecid/methodic.png)](https://codeclimate.com/github/lecid/methodic)
11
+ [![Dependency Status](https://gemnasium.com/lecid/methodic.png)](https://gemnasium.com/lecid/methodic)
12
+ [![Gem Version](https://badge.fury.io/rb/methodic.png)](http://badge.fury.io/rb/methodic)
13
+
14
+ ## Description
10
15
 
11
16
  Methodic is a macro-like utility to help test, validate, control options passed by an Hash param to a method, it could help you to merge with defaults values,
12
17
  It raise explained exceptions and return false if the validations steps failed.
13
18
 
14
- == Installation
19
+ ## Installation
15
20
 
16
21
  In a valid Ruby environment :
17
22
 
23
+ ```
18
24
  $ sudo zsh
19
25
  # gem ins methodic
20
-
21
- == Implementation
26
+ ```
27
+ ## Implementation
22
28
 
23
29
  * [Methodic]
24
30
  * [Methodic::Options]
25
31
 
26
- == Example
32
+ ## Examples
27
33
 
28
- === Without known options control
34
+ ### Without known options control
29
35
 
36
+ ```ruby
30
37
  require 'rubygems'
31
38
  require 'methodic'
32
39
  [...]
@@ -45,9 +52,11 @@ In a valid Ruby environment :
45
52
  # processing method
46
53
  end
47
54
  [...]
55
+ ```
48
56
 
49
- === With known options control
57
+ ### With known options control
50
58
 
59
+ ```ruby
51
60
  require 'rubygems'
52
61
  require 'methodic'
53
62
  [...]
@@ -67,8 +76,9 @@ In a valid Ruby environment :
67
76
  # processing method
68
77
  end
69
78
  [...]
79
+ ```
70
80
 
71
- === Remarque about conditions
81
+ ### Remarque about conditions
72
82
 
73
83
 
74
84
  * Condition MUST :
@@ -80,7 +90,7 @@ In a valid Ruby environment :
80
90
 
81
91
  * Make your condition like
82
92
 
83
-
93
+ ```ruby
84
94
  aCond = Proc::new do |option|
85
95
  case options
86
96
  when .... then ...
@@ -88,10 +98,10 @@ In a valid Ruby environment :
88
98
  else ...
89
99
  end
90
100
  end
91
-
101
+ ```
92
102
 
93
103
 
94
- == Copyright
104
+ ## Copyright
95
105
 
96
106
  <pre>Methodic (c) 2012-2013 Romain GEORGES <romain@ultragreen.net> for Ultragreen Software </pre>
97
107
 
data/Rakefile CHANGED
@@ -1,19 +1,19 @@
1
+ # coding: utf-8
2
+ require "bundler/gem_tasks"
1
3
  require 'rubygems'
2
-
3
4
  require 'rspec'
4
5
  require 'rake'
5
6
  require "rake/clean"
6
7
  require "rubygems/package_task"
7
8
  require "rdoc/task"
8
- require 'code_statistics'
9
9
  require 'rspec/core/rake_task'
10
10
  require 'yard'
11
11
  require 'yard/rake/yardoc_task.rb'
12
12
  require "rake/tasklib"
13
13
  require "roodi"
14
14
  require "roodi_task"
15
-
16
-
15
+ require 'code_statistics'
16
+
17
17
  RoodiTask.new() do | t |
18
18
  t.patterns = %w(lib/**/*.rb)
19
19
  t.config = "ultragreen_roodi_coding_convention.yml"
@@ -32,12 +32,12 @@ RSpec::Core::RakeTask.new('spec')
32
32
 
33
33
 
34
34
  YARD::Rake::YardocTask.new do |t|
35
- t.files = [ 'lib/**/*.rb', '-', 'doc/**/*','spec/**/*_spec.rb']
35
+ t.files = [ 'lib/**/*.rb', '-', 'doc/**/*','spec/**/*_spec.rb']
36
36
  t.options += ['--title', "Gem Documentation"]
37
37
  t.options += ['-o', "yardoc"]
38
38
  t.options += ['-r', "doc/manual.rdoc"]
39
39
  end
40
- YARD::Config.load_plugin('yard-rspec')
40
+ YARD::Config.load_plugin('yard-rspec')
41
41
 
42
42
  namespace :yardoc do
43
43
  task :clobber do
@@ -60,4 +60,10 @@ Rake::RDocTask.new('rdoc') do |d|
60
60
  d.options << '--line-numbers' << '--diagram' << '-SHN'
61
61
  end
62
62
 
63
- task :default => [:gem]
63
+ task :default => [:gem]
64
+
65
+ task :stage do
66
+ Rake::Task["clean"].invoke
67
+ Rake::Task["clobber"].invoke
68
+ Rake::Task["install"].invoke
69
+ end
@@ -1,17 +1,18 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: undecided -*-
3
- # Copyright Ultragreen (c) 2012-2�013
1
+ # coding: utf-8
2
+ # Copyright Ultragreen (c) 2012-2Â013
4
3
  #---
5
- # Author : Romain GEORGES
6
- # type : gem component library
4
+ # Author : Romain GEORGES
5
+ # type : gem component library
7
6
  # obj : Methodic Module
8
7
  #---
9
8
 
10
- # inherited List class from Array to patch push for uniqness carateristique
9
+ require 'drb'
10
+
11
+ # inherited List class from Array to patch push for uniqness carateristique
11
12
  class List < Array
12
13
 
13
14
  # override of push for uniqness and flatten return
14
- def push(*value)
15
+ def push(*value)
15
16
  super(value)
16
17
  self.flatten!
17
18
  self.uniq!
@@ -30,12 +31,12 @@ class List < Array
30
31
  end
31
32
 
32
33
 
33
- # module Methodic
34
+ # module Methodic
34
35
  # @author Romain GEORGES <romain@ultragreen.net>
35
36
  # @see http://www.ultragreen.net/projects/methodic
36
37
  # @version 0.2
37
38
  # @note this module include a class, but please use the module method Methodic::get_options to Build a Methodic::Options instance
38
- # @example Complete usage
39
+ # @example Complete usage
39
40
  # require 'rubygems'
40
41
  # require 'methodic'
41
42
  # [...]
@@ -44,7 +45,7 @@ end
44
45
  # myOptions = Methodic::get_options(_options,true) do |m|
45
46
  # m.specify_known_options [:country,:name,:surname,:age]
46
47
  # m.specify_default_value :country => 'France'
47
- # aCond = Proc::new {|option| case options when 'Doe' then true else false end }
48
+ # aCond = Proc::new {|option| case options when 'Doe' then true else false end }
48
49
  # m.specify_condition_for :name => aCond
49
50
  # m.specify_classes_of :name => String, :surname => String, :age => Fixnum, :country => String
50
51
  # m.specify_presence_of :name
@@ -60,7 +61,7 @@ module Methodic
60
61
  # class Options
61
62
  # an Options utility class
62
63
  # @note please do not instantiate with Options::new use Methodic::get_options
63
- # @example Complete usage
64
+ # @example Complete usage
64
65
  # require 'rubygems'
65
66
  # require 'methodic'
66
67
  # [...]
@@ -69,7 +70,7 @@ module Methodic
69
70
  # myOptions = Methodic::get_options(_options,true) do |m|
70
71
  # m.specify_known_options [:country,:name,:surname,:age]
71
72
  # m.specify_default_value :country => 'France'
72
- # aCond = Proc::new {|option| case options when 'Doe' then true else false end }
73
+ # aCond = Proc::new {|option| case options when 'Doe' then true else false end }
73
74
  # m.specify_condition_for :name => aCond
74
75
  # m.specify_classes_of :name => String, :surname => String, :age => Fixnum, :country => String
75
76
  # m.specify_presence_of :name
@@ -87,17 +88,17 @@ module Methodic
87
88
  # myOptions.known = [:name]
88
89
  # myOptions.known.push :surname
89
90
  # @example reading
90
- # p myOptions.known
91
+ # p myOptions.known
91
92
  # => [ :name, :surname ]
92
- # @attr [Hash] the list of all options assumed for a method
93
+ # @attr [Hash] the list of all options assumed for a method
93
94
  attr_accessor :known
94
-
95
+
95
96
  # @example writing
96
97
  # myOptions = Methodic::get_options(options)
97
98
  # myOptions.classes = {:name => String }
98
99
  # myOptions.classes[:surname] = String
99
100
  # @example reading
100
- # p myOptions.classes
101
+ # p myOptions.classes
101
102
  # => { :name => String, :surname => String }
102
103
  # @attr [Hash] classes a hash table of some options associated with their corresponding types or classes
103
104
  attr_accessor :classes
@@ -108,7 +109,7 @@ module Methodic
108
109
  # myOptions.mandatories = [:name]
109
110
  # myOptions.mandatories.push :surname
110
111
  # @example reading
111
- # p myOptions.mandatories
112
+ # p myOptions.mandatories
112
113
  # => [ :name, :surname ]
113
114
  attr_accessor :mandatories
114
115
 
@@ -118,7 +119,7 @@ module Methodic
118
119
  # myOptions.defaults = {:name => 'John' }
119
120
  # myOptions.defaults[:surname] = 'Doe'
120
121
  # @example reading
121
- # p myOptions.defaults
122
+ # p myOptions.defaults
122
123
  # => { :name => 'John', :surname => 'Doe' }
123
124
  attr_accessor :defaults
124
125
 
@@ -128,17 +129,18 @@ module Methodic
128
129
  # myOptions.formats = {:name => /\w+/ }
129
130
  # myOptions.formats[:surname] = /\w+/
130
131
  # @example reading
131
- # p myOptions.defaults
132
+ # p myOptions.defaults
132
133
  # => { :name => /\w+/, :surname => /\w+/ }
133
134
  attr_accessor :formats
134
-
135
+ attr_accessor :toto
136
+
135
137
  # @attr [Hash] conditions a hash table of some conditions with their corresponding
136
138
  # @example writing
137
139
  # myOptions = Methodic::get_options(options)
138
140
  # myOptions.conditions = {:name => aProcObject }
139
141
  # myOptions.conditions[:surname] = aProcObject
140
142
  # @example reading
141
- # p myOptions.defaults
143
+ # p myOptions.defaults
142
144
  # => { :name => /\w+/, :surname => /\w+/ }
143
145
  attr_accessor :conditions
144
146
 
@@ -151,9 +153,18 @@ module Methodic
151
153
  # @return [Options] self
152
154
  def initialize(_options = {},_validate_known_options = false)
153
155
 
154
- raise ArgumentError::new('Argument _options must be a Hash') unless _options.class == Hash or _options.class == Methodic::Options # ;) reintrance and cascading
155
- raise ArgumentError::new('keys must be Symbol') unless _options.keys.select{|i| i.class == Symbol }.size == _options.keys.size
156
- self.replace _options
156
+ raise ArgumentError::new('Argument _options must be a Hash') unless _options.class == Hash or _options.class == Methodic::Options or _options.class == DRb::DRbObject
157
+ # ;) reintrance and cascading
158
+ raise ArgumentError::new('keys must be Symbol') unless _options.keys.select{|i| i.class == Symbol }.size == _options.keys.size
159
+ if _options.class == DRb::DRbObject then
160
+ self.clear
161
+ _options.each do |key,value|
162
+ self[key] = value
163
+ end
164
+ else
165
+ self.replace _options
166
+ end
167
+
157
168
  @conditions = Hash::new
158
169
  @defaults = Hash::new
159
170
  @formats = Hash::new
@@ -163,7 +174,7 @@ module Methodic
163
174
  @validate_known_options = _validate_known_options
164
175
  yield self if block_given?
165
176
  end
166
-
177
+
167
178
 
168
179
  # read only accessor on the [Hash] slef keys
169
180
  # @return [Array] self.keys the keys of The Options object itself
@@ -171,13 +182,13 @@ module Methodic
171
182
  # options = {:name => 'Doe', :surname => 'John'}
172
183
  # p myOptions = Methodic::get_options(options)
173
184
  # => { :name => String, :surname => String }
174
- # p myOptions.options
185
+ # p myOptions.options
175
186
  # => [:name, :surname]
176
- def options
187
+ def options
177
188
  return self.keys
178
189
  end
179
190
 
180
-
191
+
181
192
  # pretty accessor for specifying the default(s) value(s) for options
182
193
  # @param [Hash] values a value definition, keys are symbols
183
194
  # @return [hash] @defaults merged with values
@@ -190,7 +201,7 @@ module Methodic
190
201
  return @defaults
191
202
  end
192
203
  alias :specify_defaults_values :specify_default_value
193
-
204
+
194
205
  # pretty accessor for specifying classes of options
195
206
  # @param [Hash] values a value definition, keys are symbols
196
207
  # @return [hash] @classes merged with values
@@ -221,19 +232,19 @@ module Methodic
221
232
  alias :specify_conditions_for :specify_condition_for
222
233
 
223
234
 
224
-
235
+
225
236
  # pretty accessor for specifying mandatories options
226
237
  # @param [Array] values a Array of symbols or a unique symbol
227
238
  # @return [Array] @mandatories merged with values
228
239
  # @example usage
229
240
  # myOptions = Methodic::get_options(_options)
230
- # myOptions.specify_presence_of :name
241
+ # myOptions.specify_presence_of :name
231
242
  # myOptions.specify_presences_of [ :name, :surname ]
232
- def specify_presence_of(*values)
243
+ def specify_presence_of(*values)
233
244
  @mandatories << values
234
245
  @mandatories.flatten!
235
246
  @mandatories.uniq!
236
- return @mandatories
247
+ return @mandatories
237
248
  end
238
249
  alias :specify_presences_of :specify_presence_of
239
250
 
@@ -243,16 +254,16 @@ module Methodic
243
254
  # @return [Array] @known merged with values
244
255
  # @example usage
245
256
  # myOptions = Methodic::get_options(_options)
246
- # myOptions.specify_known_option :name
257
+ # myOptions.specify_known_option :name
247
258
  # myOptions.specify_known_options [ :name, :surname ]
248
- def specify_known_option(*values)
259
+ def specify_known_option(*values)
249
260
  @known << values
250
261
  @known.flatten!
251
262
  @known.uniq!
252
- return @known
263
+ return @known
253
264
  end
254
265
  alias :specify_known_options :specify_known_option
255
-
266
+
256
267
  # pretty accessor for specifying the format of options
257
268
  # @param [Hash] values a value definition, keys are symbols
258
269
  # @return [hash] @formats merged with values
@@ -266,19 +277,19 @@ module Methodic
266
277
  return @formats
267
278
  end
268
279
  alias :specify_formats_of :specify_format_of
269
-
270
-
271
- # default values merge method
272
- # merge @defaults with self
280
+
281
+
282
+ # default values merge method
283
+ # merge @defaults with self
273
284
  # @return [self|Options]
274
285
  # @example usage
275
286
  # myOptions = Methodic::get_options(:name = 'Walker')
276
287
  # myOptions.specify_default_value_of :surname => 'John'
277
- # p myOptions
288
+ # p myOptions
278
289
  # # =>{:surname=>"John", :name=>"Doe"}
279
290
  # myOptions.merge
280
291
  # p myOptions
281
- # # =>{:surname=>"John", :name=>"Walker"}
292
+ # # =>{:surname=>"John", :name=>"Walker"}
282
293
  def merge_with_defaults
283
294
  self.replace( @defaults.merge self)
284
295
  return self
@@ -296,19 +307,20 @@ module Methodic
296
307
  table.push validate_presences unless @mandatories.empty?
297
308
  table.push validate_formats unless @formats.empty?
298
309
  table.push validate_conditions unless @conditions.empty?
299
- return true unless table.include?(false)
310
+ return true unless table.include?(false)
300
311
  end
301
312
  alias :validate! :validate
302
-
313
+
314
+ # here become private
303
315
  private
304
316
  # private method for the formats validation step
305
317
  def validate_formats
306
318
  self.each do |option,value|
307
319
  if @formats.key? option then
308
- raise ArgumentError::new("Option : #{option} don't match /#{@formats[option]}/") and return false unless value =~ @formats[option]
320
+ raise ArgumentError::new("Option : #{option} don't match /#{@formats[option]}/") and return false unless value =~ @formats[option]
309
321
  end
310
322
  end
311
-
323
+
312
324
  return true
313
325
  end
314
326
 
@@ -367,6 +379,6 @@ module Methodic
367
379
  def Methodic::get_options(_options = {},_validate_known_options=false)
368
380
  return Methodic::Options::new(_options,_validate_known_options)
369
381
  end
370
-
382
+
371
383
 
372
384
  end