adaptive 0.0.1
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 +7 -0
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +32 -0
- data/adaptive.gemspec +19 -0
- data/lib/adaptive.rb +2 -0
- data/lib/adaptive/hash.rb +32 -0
- data/spec/lib/adaptive_spec.rb +92 -0
- data/spec/spec_helper.rb +5 -0
- metadata +97 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7f06b9047fcdfc278213e2d9bd60793fc3713f51
|
4
|
+
data.tar.gz: e67ed1d6eeadcad3ee078ac81b907bac45bd7f31
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5fb061714b7fb9f7d177c4ecb8aeeb5a7196195460d56500f0be84877e4e287687d16ba416e7fec1b3938629345d95427a353c1fcecb10bf5474c4560cd6b23f
|
7
|
+
data.tar.gz: 0a49bf055c4311e9f703ded419d7c39c44f16bc7137308e717d6faee4ef31a02cadbe37137c598ca539e1550d0a4961ceb3af27be381774aaa5afb73c40d76c8
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
coverage
|
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p247
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
id (0.0.1)
|
5
|
+
optional
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.2.4)
|
11
|
+
multi_json (1.7.8)
|
12
|
+
optional (0.0.7)
|
13
|
+
rspec (2.14.1)
|
14
|
+
rspec-core (~> 2.14.0)
|
15
|
+
rspec-expectations (~> 2.14.0)
|
16
|
+
rspec-mocks (~> 2.14.0)
|
17
|
+
rspec-core (2.14.4)
|
18
|
+
rspec-expectations (2.14.1)
|
19
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
20
|
+
rspec-mocks (2.14.3)
|
21
|
+
simplecov (0.7.1)
|
22
|
+
multi_json (~> 1.0)
|
23
|
+
simplecov-html (~> 0.7.1)
|
24
|
+
simplecov-html (0.7.1)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
id!
|
31
|
+
rspec
|
32
|
+
simplecov
|
data/adaptive.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'adaptive'
|
3
|
+
s.version = '0.0.1'
|
4
|
+
s.date = '2013-08-09'
|
5
|
+
s.summary = "Simple adapting utilty"
|
6
|
+
s.description = "Developed at On The Beach Ltd. Contact radek.molenda@onthebeach.co.uk"
|
7
|
+
s.authors = ["Radek Molenda"]
|
8
|
+
s.email = ['radek.molenda@gmail.com']
|
9
|
+
s.files = `git ls-files`.split($\)
|
10
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
s.homepage = 'http://github.com/onthebeach/adaptive'
|
13
|
+
|
14
|
+
s.add_dependency "optional"
|
15
|
+
|
16
|
+
s.add_development_dependency "rspec"
|
17
|
+
s.add_development_dependency "simplecov"
|
18
|
+
|
19
|
+
end
|
data/lib/adaptive.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Adaptive
|
2
|
+
module Hash
|
3
|
+
|
4
|
+
def adapt_to_hash
|
5
|
+
::Hash[adaptive.map{|k, methods| [k.to_s, resolve(object, methods)]}]
|
6
|
+
end
|
7
|
+
alias_method :adapt, :adapt_to_hash
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def chained_methods(methods)
|
12
|
+
methods.split(".")
|
13
|
+
end
|
14
|
+
|
15
|
+
def resolve(object, methods)
|
16
|
+
object.map_through(*chained_methods(methods)).flatten.value_or(nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
def object
|
20
|
+
Option[to_adapt]
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_adapt
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def adaptive
|
28
|
+
raise NotImplementedError, "#{self.class.name} must implement #adaptive"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Address
|
4
|
+
def self.of(person)
|
5
|
+
Struct.new(:street, :city).new("34 Mountain Hill", "Chicago")
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class SomePerson
|
10
|
+
include Adaptive::Hash
|
11
|
+
|
12
|
+
def name
|
13
|
+
Some["John"]
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def adaptive
|
18
|
+
{
|
19
|
+
full_name: "name"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Person
|
25
|
+
include Adaptive::Hash
|
26
|
+
|
27
|
+
def name
|
28
|
+
"John"
|
29
|
+
end
|
30
|
+
|
31
|
+
def surname
|
32
|
+
"Doe"
|
33
|
+
end
|
34
|
+
|
35
|
+
def address
|
36
|
+
Address.of(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def adaptive
|
41
|
+
{
|
42
|
+
full_name: "full_name",
|
43
|
+
street: "address.street",
|
44
|
+
city: "address.city"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def full_name
|
49
|
+
"#{name} #{surname}"
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class Empty
|
55
|
+
include Adaptive::Hash
|
56
|
+
end
|
57
|
+
|
58
|
+
describe Adaptive::Hash do
|
59
|
+
describe "obligatory methods" do
|
60
|
+
let(:empty_class) { Empty.new }
|
61
|
+
|
62
|
+
it "should have private #adaptive defined" do
|
63
|
+
expect{empty_class.send(:adaptive)}.to raise_error NotImplementedError, "Empty must implement #adaptive"
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#adapt" do
|
69
|
+
let(:person) { Person.new }
|
70
|
+
let(:adapted) { {"full_name" => "John Doe",
|
71
|
+
"street" => "34 Mountain Hill",
|
72
|
+
"city" => "Chicago"} }
|
73
|
+
|
74
|
+
subject { person.adapt }
|
75
|
+
|
76
|
+
it { should eq adapted }
|
77
|
+
|
78
|
+
describe "#adapt_to_hash" do
|
79
|
+
|
80
|
+
subject { person.adapt_to_hash }
|
81
|
+
|
82
|
+
it { should eq adapted }
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when some values are optional" do
|
86
|
+
let(:person) { SomePerson.new }
|
87
|
+
|
88
|
+
it { should eq({ "full_name" => "John" }) }
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adaptive
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Radek Molenda
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: optional
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Developed at On The Beach Ltd. Contact radek.molenda@onthebeach.co.uk
|
56
|
+
email:
|
57
|
+
- radek.molenda@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- .rspec
|
64
|
+
- .ruby-version
|
65
|
+
- Gemfile
|
66
|
+
- Gemfile.lock
|
67
|
+
- adaptive.gemspec
|
68
|
+
- lib/adaptive.rb
|
69
|
+
- lib/adaptive/hash.rb
|
70
|
+
- spec/lib/adaptive_spec.rb
|
71
|
+
- spec/spec_helper.rb
|
72
|
+
homepage: http://github.com/onthebeach/adaptive
|
73
|
+
licenses: []
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.0.3
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: Simple adapting utilty
|
95
|
+
test_files:
|
96
|
+
- spec/lib/adaptive_spec.rb
|
97
|
+
- spec/spec_helper.rb
|