recursive_struct 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1d8e96302cefbcfc2d0fc28c31d288aaee093fd9
4
- data.tar.gz: d728bae8d15cc3847b1590d0f4ebdad8697e498a
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTJiYTU0MjJjNTUzOTM3YmExOWI5MWE3MDdlMTc1NzVjMDM3OTE0ZQ==
5
+ data.tar.gz: !binary |-
6
+ ZDVmZTI4M2NmN2M1MDNmMjI0NTJkMjdlOTE3NDliZWM5MGJhZTgyNg==
5
7
  SHA512:
6
- metadata.gz: 8f0ae8be56f1b970daf92cf2605511e3275b3a6d5276f0f514bbff81ac4f9b51b62168e02e92e8a179b17ce047f42032eb2bdc1aa3a107e91bd378d60446a672
7
- data.tar.gz: 1364cecaea37296da503e65094a729e1a57744e6f75ae4cd8b7e7e772cb69cfb5b6feffbe438e5d9cad06fa1950b2f9c92f7863ea8ec32c5a2c26c0eb6a99942
8
+ metadata.gz: !binary |-
9
+ OGZiMjA5NDQxOGFmZjM2YzBlMzM5ZWIxNzg2N2QxNGQzYzJjMzk3NjM0NTEw
10
+ NzYyMmZjYzBiNWJiZmQ5YjA2MTQwYzczNDM0MDEzNjQ1OTNhZTQzY2VlZWM0
11
+ MWE2NTlmYTlkNDMwZTA1OWYyOTE4MzA4YWVmMjMwMjllZDE5YTU=
12
+ data.tar.gz: !binary |-
13
+ NTM2NWJjY2M4NmY1OGUyZDlmN2JmNWM2Y2RlYzYzYTBmNmNkMzA0NzJkMjg5
14
+ ZGNmYzk1NTgxYWQ5NzM2YjEyZTNmZGZjOGE4ZjlkYWYyYjYzNTgxZWMyMWE2
15
+ MzA4YzcwMzkxNWQzNGQ1NmI3MzI2N2FmMTcwNTUxZGFkOGU0Y2Q=
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm: 2.1.5
3
+ script: bundle exec rspec spec
4
+ deploy:
5
+ provider: rubygems
6
+ api_key:
7
+ secure: X5NHfH+P8ebpXjtXm8J7KFLjZwDOkFmKBeNnW3Vm9CW81nVrG4r1ymOvp1hD1pjOPjBfF8tWmCcLxBgnU++pm1Cz98GxOOTeKZ77iC/CNPZhyor8ANnxqdUkK0sNlpVOn80O+22DBKpUT1Wf21wxsxhQlrnNJuPsBE111EcnkzI=
8
+ notifications:
9
+ email: false
@@ -1,3 +1,3 @@
1
- class RecursiveStruct < OpenStruct
2
- VERSION = "0.0.2"
1
+ class RecursiveStruct
2
+ VERSION = '0.0.3'
3
3
  end
@@ -1,14 +1,43 @@
1
- class RecursiveStruct < OpenStruct
1
+ class RecursiveStruct
2
2
  def initialize(hash = nil)
3
- @table = {}
4
-
5
3
  if hash
6
4
  hash.each do |key, value|
7
- value = self.class.new(value) if value.is_a?(Hash)
8
- @table[key.to_sym] = value
9
-
10
- new_ostruct_member(key)
5
+ add_data(key, process(value))
11
6
  end
12
7
  end
13
8
  end
9
+
10
+ def method_missing(name, *args)
11
+ key = name.to_s
12
+
13
+ if key.chomp!('=') && args.length == 1
14
+ add_data(key, process(args.first))
15
+ else
16
+ super(name, *args)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def process(value)
23
+ value.is_a?(Hash) ? self.class.new(value) : value
24
+ end
25
+
26
+ def data
27
+ @data ||= {}
28
+ end
29
+
30
+ def add_data(key, value)
31
+ key = key.to_sym
32
+
33
+ data[key] = value
34
+ define_methods(key)
35
+ end
36
+
37
+ def define_methods(key)
38
+ unless respond_to?(key)
39
+ define_singleton_method(key) { data[key] }
40
+ define_singleton_method("#{key}=") { |value| data[key] = value }
41
+ end
42
+ end
14
43
  end
@@ -1,7 +1,6 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'ostruct'
5
4
  require 'recursive_struct/version'
6
5
 
7
6
  Gem::Specification.new do |spec|
@@ -9,8 +8,8 @@ Gem::Specification.new do |spec|
9
8
  spec.version = RecursiveStruct::VERSION
10
9
  spec.authors = ["Phillip Boksz"]
11
10
  spec.email = ["pboksz@gmail.com"]
12
- spec.summary = "A gem to create recursive open structs."
13
- spec.description = "A gem to create recursive open structs."
11
+ spec.summary = "A gem to create recursive structs similar to open struct."
12
+ spec.description = spec.summary
14
13
  spec.license = "MIT"
15
14
  spec.homepage = "https://github.com/pboksz/recursive_struct"
16
15
 
@@ -18,7 +17,7 @@ Gem::Specification.new do |spec|
18
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ["lib"]
21
- spec.required_ruby_version = '>= 1.8.7'
20
+ spec.required_ruby_version = '>= 1.9'
22
21
 
23
22
  spec.add_development_dependency "bundler", "~> 1.7"
24
23
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RecursiveStruct do
4
+ let(:hash) { nil }
4
5
  subject { RecursiveStruct.new(hash) }
5
6
 
6
7
  describe 'hash is nil' do
7
- let(:hash) { nil }
8
8
  it { expect(subject).to be_a RecursiveStruct }
9
9
  end
10
10
 
@@ -46,4 +46,27 @@ describe RecursiveStruct do
46
46
  it { expect(subject.one).to be_an Array }
47
47
  end
48
48
  end
49
+
50
+ describe '#method_missing' do
51
+ describe 'valid setter' do
52
+ describe 'single value' do
53
+ before { subject.one = true }
54
+ it { expect(subject.one).to be_true }
55
+ end
56
+
57
+ describe 'array value' do
58
+ before { subject.one = [1, 2] }
59
+ it { expect(subject.one).not_to be_empty }
60
+ end
61
+
62
+ describe 'hash value' do
63
+ before { subject.one = { two: true } }
64
+ it { expect(subject.one.two).to be_true }
65
+ end
66
+ end
67
+
68
+ describe 'invalid method' do
69
+ it { expect { subject.one }.to raise_error NoMethodError }
70
+ end
71
+ end
49
72
  end
metadata CHANGED
@@ -1,80 +1,81 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recursive_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phillip Boksz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2'
69
- description: A gem to create recursive open structs.
69
+ description: A gem to create recursive structs similar to open struct.
70
70
  email:
71
71
  - pboksz@gmail.com
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - ".gitignore"
77
- - ".rspec"
76
+ - .gitignore
77
+ - .rspec
78
+ - .travis.yml
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md
@@ -94,12 +95,12 @@ require_paths:
94
95
  - lib
95
96
  required_ruby_version: !ruby/object:Gem::Requirement
96
97
  requirements:
97
- - - ">="
98
+ - - ! '>='
98
99
  - !ruby/object:Gem::Version
99
- version: 1.8.7
100
+ version: '1.9'
100
101
  required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  requirements:
102
- - - ">="
103
+ - - ! '>='
103
104
  - !ruby/object:Gem::Version
104
105
  version: '0'
105
106
  requirements: []
@@ -107,7 +108,7 @@ rubyforge_project:
107
108
  rubygems_version: 2.4.2
108
109
  signing_key:
109
110
  specification_version: 4
110
- summary: A gem to create recursive open structs.
111
+ summary: A gem to create recursive structs similar to open struct.
111
112
  test_files:
112
113
  - spec/recursive_struct_spec.rb
113
114
  - spec/spec_helper.rb