oop 0.1.2 → 0.2.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/oop/tools.rb +19 -2
  3. data/lib/oop/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b1bc5413988e59c81e35971a4009fcee97823f4
4
- data.tar.gz: 02f74b58e4a55041fe1bd7054717dc31612e51d7
3
+ metadata.gz: 1e0d5bf847d6a7863bd8b327808ff4b9524393c1
4
+ data.tar.gz: 073dd1e1db6b5d6f85879720324e9f06ad8b838c
5
5
  SHA512:
6
- metadata.gz: 2ee55376633dee2764e593b8ccfecc417d4cd6e34e26e35be9f0ddfe2f98107324abae844aeb8b25b949c0c6ffb06a73f33bfbde1780458ad0a54a8a65d22d5c
7
- data.tar.gz: 8eb3b1929b4121af4b74c1a52dd2dce36a30c3af31f96c14f7dfcda94e67cce836bed7c68efb2e57a16f43b7a5cb95d19ff9c588be665605a8eedf9109fcbcae
6
+ metadata.gz: aa5f6e7b129cc16c6962144dab3ce79194cf63d6de205c30682e72e1ae238d155fe12403d1f94e8a30f3843bddc35554a632fa308989ab4ba029eb6178b6cc07
7
+ data.tar.gz: 7a53ce080511e3fb5eaf369ae128d1d4cd45606449f17575823243234d90d494b1433c92f2643acb97e5c92063eebf606cfe3b2ec2d0f2019409e3827b11ddf5
data/lib/oop/tools.rb CHANGED
@@ -10,13 +10,30 @@ module OOP
10
10
  end
11
11
  end
12
12
  def konstructor(*parts, &block)
13
- parts = parts.first if parts.first.is_a?(Hash)
13
+ parts_hsh = if parts.last.is_a?(Hash)
14
+ *parts, hsh = parts
15
+ parts += hsh.keys
16
+ parts.reduce({}){|m,e| m[e] = nil; m}.merge(hsh)
17
+ else
18
+ parts.reduce({}){|m,e| m[e] = nil; m}
19
+ end
14
20
  define_method(:initialize) do |opts|
15
21
  if block
16
22
  opts = block.call(opts) || raise("#{self} invalid with #{opts}")
17
23
  end
18
24
 
25
+ opts = opts.map{|k,v| [k.to_sym, v] }.to_h
19
26
  @opts = {}
27
+ extra_args = (opts.keys - parts)
28
+ missing_args = parts.select do |k|
29
+ !opts.has_key?(k) && !parts_hsh.has_key?(k)
30
+ end
31
+ if extra_args.any?
32
+ raise "extra args: #{extra_args}"
33
+ elsif missing_args.any?
34
+ raise "missing args: #{missing_args}"
35
+ end
36
+
20
37
  opts.each do |k, v|
21
38
  k = k.to_sym
22
39
  if self.is_a? Value
@@ -27,7 +44,7 @@ module OOP
27
44
  end
28
45
  @opts
29
46
  end
30
- parts.each do |part, defaultt|
47
+ parts_hsh.each do |part, defaultt|
31
48
  part = part.to_sym
32
49
  define_method(part) do
33
50
  @opts[part] ||= defaultt
data/lib/oop/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OOP
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.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.1.2
4
+ version: 0.2.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-12 00:00:00.000000000 Z
11
+ date: 2016-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler