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 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.