oop 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb9d1bf13e5c147e22eefb62768d3bfdc9bb5a38
4
- data.tar.gz: a5f6928033fccdc27467099fd810df0a8155e27f
3
+ metadata.gz: 2aaca8a6b423ff2bccc411180331c5c8c1be89ff
4
+ data.tar.gz: 19fee614c4f7c83a4201230669fb736d5657025e
5
5
  SHA512:
6
- metadata.gz: ef4a599ef3f32cbc7707bdafa193ba20f2e60384966b2146b0c4ce818e5e33b455b09295f2a5087e266ca6464eeac1837d2322cb7465bd8e3efcefe3c8376a22
7
- data.tar.gz: 1711dc7c27cbdc2f3c0167ea50a1d3b28d40a741a48528feafa193615e48ad1385d29dfab6d096961d6a862e334d0193ea7fb4450255b68d8b81e409d0d0954c
6
+ metadata.gz: 4e38453713fe1d67ed64443835e8db36341852e00e59201ba4720d8d62660a14f7e39bc59d2558432b27ec88a896a74b62297c31074453fd5665306d3020dc08
7
+ data.tar.gz: 32cddc73ed98d112b2a4e1a560ec0576be8bf7be6aee183ac3b247930d82cec4ae72710eea5d783a80003e3dd7d9f2c3d9ac10d1e9fa052a0d4118a069d179b5
@@ -3,16 +3,22 @@ require 'oop/value'
3
3
 
4
4
  module OOP
5
5
  class BasicRules
6
- def trusted_values
7
- []
6
+ def self.instance
7
+ @instance ||= new
8
+ end
9
+
10
+ def self.cast_to_value(arg)
11
+ self.instance.cast_to_value(arg)
8
12
  end
9
13
 
10
14
  def cast_to_value(arg)
15
+ if arg.respond_to?(:super_mega_private_oop_method_valid?) && arg.super_mega_private_oop_method_valid?
16
+ return arg
17
+ end
18
+
11
19
  case arg
12
20
  when Value, TrueClass, FalseClass, NilClass, Proc then
13
21
  arg
14
- when *trusted_values
15
- arg
16
22
  when Hash then
17
23
  Hash[arg.map{|k,v| [cast_to_value(k), cast_to_value(v)] }.to_h].freeze
18
24
  when Array then
data/lib/oop/ext.rb CHANGED
@@ -1,14 +1,10 @@
1
1
  require 'oop/basic_rules'
2
2
  require 'oop/value_provider'
3
+ require 'oop/value_interface'
3
4
  require 'oop/value_communications'
4
5
 
5
6
  class Class
6
- def acts_as_value(rules = OOP::BasicRules.new, provider = OOP::ValueProvider.new)
7
+ def acts_as_value
7
8
  include OOP::ValueCommunications
8
- value_caster rules
9
- value_provider provider
10
- define_singleton_method :constructor do |*parts, &block|
11
- value_contructor(rules, *parts, &block)
12
- end
13
9
  end
14
10
  end
@@ -1,33 +1,26 @@
1
1
  require 'oop/basic_rules'
2
- require 'oop/value_provider'
3
2
 
4
3
  module OOP
5
4
  module ValueCommunications
6
5
  module ClassMethods
7
- def value_caster(new_caster)
8
- @value_caster = new_caster
9
- end
10
- def value_provider(new_provider)
11
- @value_provider = new_provider
12
- end
13
6
  def message(meth, &block)
14
7
  define_method(meth) do |*args, &blk|
15
8
  args = args.map do |arg|
16
- value_caster.cast_to_value(arg)
9
+ BasicRules.cast_to_value(arg)
17
10
  end
18
- value_caster.cast_to_value(self.instance_exec(*(args + [blk]), &block))
11
+ BasicRules.cast_to_value(self.instance_exec(*(args + [blk]), &block))
19
12
  end
20
13
  end
21
14
 
22
- def import(*imports)
23
- imports.each do |import|
24
- define_method(import.to_sym) do
25
- value_provider.send(import)
15
+ def import(imports)
16
+ imports.each do |name, import|
17
+ define_method(name.to_sym) do
18
+ BasicRules.cast_to_value(import)
26
19
  end
27
20
  end
28
21
  end
29
22
 
30
- def value_contructor(rules, *parts, &block)
23
+ def constructor(*parts, &block)
31
24
  define_method(:initialize) do |opts={}|
32
25
  opts ||= {}
33
26
  if block
@@ -45,7 +38,7 @@ module OOP
45
38
  @opts = opts;
46
39
  opts.each do |k, v|
47
40
  k = k.to_sym
48
- @opts[rules.cast_to_value(k)] = rules.cast_to_value(v)
41
+ @opts[BasicRules.cast_to_value(k)] = BasicRules.cast_to_value(v)
49
42
  end
50
43
  end
51
44
  parts.each do |p|
@@ -54,27 +47,14 @@ module OOP
54
47
  end
55
48
  end
56
49
  end
50
+ end
57
51
 
58
- def get_value_provider
59
- @value_provider || ValueProvider.new
60
- end
61
- def get_value_caster
62
- @value_caster || BasicRules.new
63
- end
52
+ def super_mega_private_oop_method_valid?
53
+ true
64
54
  end
65
55
 
66
56
  def self.included(klass)
67
57
  klass.extend(ClassMethods)
68
58
  end
69
-
70
- private
71
-
72
- def value_caster
73
- self.class.get_value_caster
74
- end
75
-
76
- def value_provider
77
- self.class.get_value_provider
78
- end
79
59
  end
80
60
  end
@@ -0,0 +1,7 @@
1
+ module OOP
2
+ module ValueInterface
3
+ def super_mega_private_oop_method_valid?
4
+ true
5
+ end
6
+ end
7
+ end
data/lib/oop/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OOP
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oop
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
  - Serguei Filimonov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-09 00:00:00.000000000 Z
11
+ date: 2016-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,6 +78,7 @@ files:
78
78
  - lib/oop/tools.rb
79
79
  - lib/oop/value.rb
80
80
  - lib/oop/value_communications.rb
81
+ - lib/oop/value_interface.rb
81
82
  - lib/oop/value_provider.rb
82
83
  - lib/oop/version.rb
83
84
  - oop.gemspec