Class: NsOptions::Option

Inherits:
Object
  • Object
show all
Defined in:
lib/ns-options/option.rb

Defined Under Namespace

Classes: CoerceError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type_class = nil, rules = nil) ⇒ Option

Returns a new instance of Option.



30
31
32
33
34
35
36
# File 'lib/ns-options/option.rb', line 30

def initialize(name, type_class=nil, rules=nil)
  @name, @rules = name, (rules || {})
  @type_class = type_class || Object
  @rules[:args] ||= []

  self.reset
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



28
29
30
# File 'lib/ns-options/option.rb', line 28

def name
  @name
end

#rulesObject

Returns the value of attribute rules.



28
29
30
# File 'lib/ns-options/option.rb', line 28

def rules
  @rules
end

#type_classObject

Returns the value of attribute type_class.



28
29
30
# File 'lib/ns-options/option.rb', line 28

def type_class
  @type_class
end

#valueObject

if reading a lazy_proc, call the proc and return its coerced return val otherwise, just return the stored value



40
41
42
# File 'lib/ns-options/option.rb', line 40

def value
  @value
end

Class Method Details

.args(args, default_type_class = nil) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/ns-options/option.rb', line 19

def self.args(args, default_type_class=nil)
  [ self.rules(args.last.kind_of?(::Hash) ? args.pop : {}),
    # if a nil type_class is given, just use Object
    # this makes the option accept any value with no type coercion
    (args[1] || default_type_class || Object),
    args[0].to_s
  ].reverse
end

.rules(rules) ⇒ Object



12
13
14
15
16
17
# File 'lib/ns-options/option.rb', line 12

def self.rules(rules)
  # make sure any given `:args` rule is an array
  (rules || {}).tap do |r|
    r[:args] = (r[:args] ? [*r[:args]] : [])
  end
end

Instance Method Details

#==(other) ⇒ Object



61
62
63
64
65
# File 'lib/ns-options/option.rb', line 61

def ==(other)
  [ :name, :type_class, :rules, :value ].inject(true) do |bool, attribute|
    bool && (self.send(attribute) == other.send(attribute))
  end
end

#is_set?Boolean

Returns:



53
54
55
# File 'lib/ns-options/option.rb', line 53

def is_set?
  self.value.respond_to?(:is_set?) ? self.value.is_set? : !self.value.nil?
end

#required?Boolean

Returns:



57
58
59
# File 'lib/ns-options/option.rb', line 57

def required?
  !!self.rules[:required]
end

#resetObject



49
50
51
# File 'lib/ns-options/option.rb', line 49

def reset
  save_value NsOptions.distinct_value(self.rules[:default])
end