oop 0.2.0 → 0.3.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 +4 -4
- data/lib/oop/basic_rules.rb +3 -0
- data/lib/oop/ext.rb +14 -0
- data/lib/oop/value_communications.rb +80 -0
- data/lib/oop/value_provider.rb +26 -0
- data/lib/oop/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb9d1bf13e5c147e22eefb62768d3bfdc9bb5a38
|
4
|
+
data.tar.gz: a5f6928033fccdc27467099fd810df0a8155e27f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef4a599ef3f32cbc7707bdafa193ba20f2e60384966b2146b0c4ce818e5e33b455b09295f2a5087e266ca6464eeac1837d2322cb7465bd8e3efcefe3c8376a22
|
7
|
+
data.tar.gz: 1711dc7c27cbdc2f3c0167ea50a1d3b28d40a741a48528feafa193615e48ad1385d29dfab6d096961d6a862e334d0193ea7fb4450255b68d8b81e409d0d0954c
|
data/lib/oop/basic_rules.rb
CHANGED
@@ -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
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.
|
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-
|
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.
|
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.
|