oop 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e0d5bf847d6a7863bd8b327808ff4b9524393c1
4
- data.tar.gz: 073dd1e1db6b5d6f85879720324e9f06ad8b838c
3
+ metadata.gz: bb9d1bf13e5c147e22eefb62768d3bfdc9bb5a38
4
+ data.tar.gz: a5f6928033fccdc27467099fd810df0a8155e27f
5
5
  SHA512:
6
- metadata.gz: aa5f6e7b129cc16c6962144dab3ce79194cf63d6de205c30682e72e1ae238d155fe12403d1f94e8a30f3843bddc35554a632fa308989ab4ba029eb6178b6cc07
7
- data.tar.gz: 7a53ce080511e3fb5eaf369ae128d1d4cd45606449f17575823243234d90d494b1433c92f2643acb97e5c92063eebf606cfe3b2ec2d0f2019409e3827b11ddf5
6
+ metadata.gz: ef4a599ef3f32cbc7707bdafa193ba20f2e60384966b2146b0c4ce818e5e33b455b09295f2a5087e266ca6464eeac1837d2322cb7465bd8e3efcefe3c8376a22
7
+ data.tar.gz: 1711dc7c27cbdc2f3c0167ea50a1d3b28d40a741a48528feafa193615e48ad1385d29dfab6d096961d6a862e334d0193ea7fb4450255b68d8b81e409d0d0954c
@@ -6,10 +6,13 @@ module OOP
6
6
  def trusted_values
7
7
  []
8
8
  end
9
+
9
10
  def cast_to_value(arg)
10
11
  case arg
11
12
  when Value, TrueClass, FalseClass, NilClass, Proc then
12
13
  arg
14
+ when *trusted_values
15
+ arg
13
16
  when Hash then
14
17
  Hash[arg.map{|k,v| [cast_to_value(k), cast_to_value(v)] }.to_h].freeze
15
18
  when Array then
data/lib/oop/ext.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'oop/basic_rules'
2
+ require 'oop/value_provider'
3
+ require 'oop/value_communications'
4
+
5
+ class Class
6
+ def acts_as_value(rules = OOP::BasicRules.new, provider = OOP::ValueProvider.new)
7
+ 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
+ end
14
+ end
@@ -0,0 +1,80 @@
1
+ require 'oop/basic_rules'
2
+ require 'oop/value_provider'
3
+
4
+ module OOP
5
+ module ValueCommunications
6
+ 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
+ def message(meth, &block)
14
+ define_method(meth) do |*args, &blk|
15
+ args = args.map do |arg|
16
+ value_caster.cast_to_value(arg)
17
+ end
18
+ value_caster.cast_to_value(self.instance_exec(*(args + [blk]), &block))
19
+ end
20
+ end
21
+
22
+ def import(*imports)
23
+ imports.each do |import|
24
+ define_method(import.to_sym) do
25
+ value_provider.send(import)
26
+ end
27
+ end
28
+ end
29
+
30
+ def value_contructor(rules, *parts, &block)
31
+ define_method(:initialize) do |opts={}|
32
+ opts ||= {}
33
+ if block
34
+ block.call(opts)
35
+ end
36
+ extra_args = (opts.keys - parts)
37
+ missing_args = parts.select do |k|
38
+ !opts.has_key?(k) && !opts.has_key?(k)
39
+ end
40
+ if extra_args.any?
41
+ raise "extra args: #{extra_args}"
42
+ elsif missing_args.any?
43
+ raise "missing args: #{missing_args}"
44
+ end
45
+ @opts = opts;
46
+ opts.each do |k, v|
47
+ k = k.to_sym
48
+ @opts[rules.cast_to_value(k)] = rules.cast_to_value(v)
49
+ end
50
+ end
51
+ parts.each do |p|
52
+ define_method(p.to_sym) do
53
+ @opts[p]
54
+ end
55
+ end
56
+ end
57
+
58
+ def get_value_provider
59
+ @value_provider || ValueProvider.new
60
+ end
61
+ def get_value_caster
62
+ @value_caster || BasicRules.new
63
+ end
64
+ end
65
+
66
+ def self.included(klass)
67
+ klass.extend(ClassMethods)
68
+ 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
+ end
80
+ end
@@ -0,0 +1,26 @@
1
+ module OOP
2
+ class ValueProvider
3
+
4
+ class FileLib
5
+ def self.basename(f)
6
+ File.basename(f)
7
+ end
8
+ end
9
+ def file
10
+ FileLib
11
+ end
12
+
13
+ class JSONLib
14
+ def self.parse(s)
15
+ JSON.parse(s)
16
+ end
17
+ end
18
+ def json
19
+ JSONLib
20
+ end
21
+
22
+ def math
23
+ Math
24
+ end
25
+ end
26
+ end
data/lib/oop/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OOP
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.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.2.0
4
+ version: 0.3.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-02-13 00:00:00.000000000 Z
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,9 +73,12 @@ files:
73
73
  - lib/oop/basic_rules.rb
74
74
  - lib/oop/boundary.rb
75
75
  - lib/oop/cell.rb
76
+ - lib/oop/ext.rb
76
77
  - lib/oop/non_value_arg.rb
77
78
  - lib/oop/tools.rb
78
79
  - lib/oop/value.rb
80
+ - lib/oop/value_communications.rb
81
+ - lib/oop/value_provider.rb
79
82
  - lib/oop/version.rb
80
83
  - oop.gemspec
81
84
  homepage: https://github.com/sergueif/oop
@@ -98,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
101
  version: '0'
99
102
  requirements: []
100
103
  rubyforge_project:
101
- rubygems_version: 2.4.5
104
+ rubygems_version: 2.5.1
102
105
  signing_key:
103
106
  specification_version: 4
104
107
  summary: My take on how to write simpler Ruby code.