HornsAndHooves-flat_map 0.2.0 → 0.2.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 +4 -4
- data/.simplecov +42 -0
- data/Gemfile +2 -1
- data/HornsAndHooves-flat_map.gemspec +1 -1
- data/README.markdown +2 -0
- data/lib/flat_map/open_mapper/attribute_methods.rb +46 -4
- data/lib/flat_map/open_mapper/mounting.rb +13 -0
- data/lib/flat_map/version.rb +1 -1
- data/spec/flat_map/mapper/attribute_methods_spec.rb +8 -0
- data/spec/flat_map/mapper/mounting_spec.rb +33 -13
- data/spec/spec_helper.rb +2 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f3b82b7ae0f88b1c76017b5ac2410dee62efeed
|
4
|
+
data.tar.gz: 5f72a1ca80df379ddfd7dfeb22b8b8d1530c8b0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62115ee9279c68f7ed109ed43b769fb28669d9f6a3c884d69fb8680e41cc20b2139f2993578b73a9b79a924de5d790bde331755190d6f6fbd77467c3ad40f511
|
7
|
+
data.tar.gz: 50f70f29acdc63ba0de90725f79694e877ca983dcd84bea897e9defa9c7463fcff6dd62ee48233e7981d55eae9e50735ec4ad23905c071f7d2a5f69ec29e558c
|
data/.simplecov
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require "simplecov-rcov-text"
|
2
|
+
require "colorize"
|
3
|
+
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
5
|
+
SimpleCov::Formatter::RcovTextFormatter,
|
6
|
+
SimpleCov::Formatter::HTMLFormatter
|
7
|
+
]
|
8
|
+
SimpleCov.start do
|
9
|
+
add_filter "/spec/"
|
10
|
+
|
11
|
+
# Fail the build when coverage is weak:
|
12
|
+
at_exit do
|
13
|
+
SimpleCov.result.format!
|
14
|
+
threshold, actual = 100.0, SimpleCov.result.covered_percent
|
15
|
+
if actual < threshold then # FAIL
|
16
|
+
msg = "\nLow coverage: "
|
17
|
+
msg << "#{actual}%".colorize(:red)
|
18
|
+
msg << ' is ' << 'under'.colorize(:red) << ' the threshold: '
|
19
|
+
msg << "#{threshold}%.".colorize(:green)
|
20
|
+
msg << "\n"
|
21
|
+
$stderr.puts msg
|
22
|
+
exit 1
|
23
|
+
else # PASS
|
24
|
+
# Precision: three decimal places:
|
25
|
+
actual_trunc = (actual * 1000).floor / 1000.0
|
26
|
+
msg = "\nCoverage: "
|
27
|
+
msg << "#{actual}%".colorize(:green)
|
28
|
+
if actual_trunc > threshold
|
29
|
+
msg << ' is ' << 'over'.colorize(:green) << ' the threshold: '
|
30
|
+
msg << "#{threshold}%. ".colorize(color: :yellow, mode: :bold)
|
31
|
+
msg << 'Please update the threshold to: '
|
32
|
+
msg << "#{actual_trunc}% ".colorize(color: :green, mode: :bold)
|
33
|
+
msg << 'in ./.simplecov.'
|
34
|
+
else
|
35
|
+
msg << ' is ' << 'at'.colorize(:green) << ' the threshold: '
|
36
|
+
msg << "#{threshold}%.".colorize(:green)
|
37
|
+
end
|
38
|
+
msg << "\n"
|
39
|
+
$stdout.puts msg
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/Gemfile
CHANGED
@@ -6,15 +6,16 @@ gemspec
|
|
6
6
|
group :development do
|
7
7
|
gem 'redcarpet'
|
8
8
|
gem 'yard'
|
9
|
-
gem 'pry'
|
10
9
|
end
|
11
10
|
|
12
11
|
group :development, :test do
|
13
12
|
# code metrics:
|
14
13
|
gem "metric_fu"
|
14
|
+
gem "pry"
|
15
15
|
end
|
16
16
|
|
17
17
|
group :test do
|
18
|
+
gem 'colorize' , :require => false
|
18
19
|
gem 'simplecov' , :require => false
|
19
20
|
gem 'simplecov-rcov-text', :require => false
|
20
21
|
end
|
@@ -5,7 +5,7 @@ require "flat_map/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "HornsAndHooves-flat_map"
|
7
7
|
s.version = FlatMap::VERSION
|
8
|
-
s.authors = ["Artem Kuzko", "Zachary Belzer", "Sergey Potapov"]
|
8
|
+
s.authors = ["HornsAndHooves", "Artem Kuzko", "Zachary Belzer", "Sergey Potapov"]
|
9
9
|
s.email = ["a.kuzko@gmail.com", "zbelzer@gmail.com", "blake131313@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/HornsAndHooves/flat_map"
|
11
11
|
s.licenses = ["LICENSE"]
|
data/README.markdown
CHANGED
@@ -15,22 +15,64 @@ module FlatMap
|
|
15
15
|
if name == :to_ary ||
|
16
16
|
@attribute_methods_defined ||
|
17
17
|
self.class.protected_instance_methods.include?(name)
|
18
|
-
|
18
|
+
super
|
19
|
+
else
|
20
|
+
mappings = all_mappings
|
21
|
+
|
22
|
+
if mapped_name?(mappings, name)
|
23
|
+
define_attribute_methods(mappings)
|
24
|
+
|
25
|
+
send(name, *args, &block)
|
26
|
+
else
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Look for methods that might be dynamically defined and define them for lookup.
|
33
|
+
def respond_to_missing?(name, include_private = false)
|
34
|
+
# Added magically by Ruby 1.9.3
|
35
|
+
if name == :to_ary || name == :empty?
|
36
|
+
false
|
37
|
+
else
|
38
|
+
unless @attribute_methods_defined
|
39
|
+
define_attribute_methods(all_mappings)
|
40
|
+
end
|
41
|
+
|
42
|
+
mapped_name?(all_mappings, name)
|
19
43
|
end
|
44
|
+
end
|
20
45
|
|
21
|
-
|
46
|
+
# Is the name given part of the attribute mappings?
|
47
|
+
#
|
48
|
+
# @param [Array<FlatMap::Mapping>] mappings
|
49
|
+
# @param [String] name
|
50
|
+
# @return Boolean
|
51
|
+
def mapped_name?(mappings, name)
|
22
52
|
valid_names = mappings.map do |mapping|
|
23
53
|
full_name = mapping.full_name
|
24
54
|
[full_name, "#{full_name}=".to_sym]
|
25
55
|
end
|
26
56
|
valid_names.flatten!
|
27
57
|
|
28
|
-
|
58
|
+
valid_names.include?(name)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Return the list of all mapped attributes
|
62
|
+
#
|
63
|
+
# @return [Array<String>]
|
64
|
+
def attribute_names
|
65
|
+
all_mappings.map { |mapping| mapping.full_name }
|
66
|
+
end
|
29
67
|
|
68
|
+
# Actually define the attribute methods on this object.
|
69
|
+
#
|
70
|
+
# @param [Array<FlatMap::Mapping>] mappings list of mappings
|
71
|
+
def define_attribute_methods(mappings)
|
30
72
|
extend attribute_methods(mappings)
|
31
73
|
@attribute_methods_defined = true
|
32
|
-
send(name, *args, &block)
|
33
74
|
end
|
75
|
+
private :define_attribute_methods
|
34
76
|
|
35
77
|
# Define anonymous module with reader and writer methods for
|
36
78
|
# all the +mappings+ being passed.
|
@@ -164,5 +164,18 @@ module FlatMap
|
|
164
164
|
return super if mounting.nil?
|
165
165
|
mounting.send(name, *args, &block)
|
166
166
|
end
|
167
|
+
|
168
|
+
# Look for methods that might be dynamically defined and define them for lookup.
|
169
|
+
def respond_to_missing?(name, include_private = false)
|
170
|
+
# Added magically by Ruby 1.9.3
|
171
|
+
if name == :to_ary || name == :empty?
|
172
|
+
false
|
173
|
+
else
|
174
|
+
return true if mapping(name).present?
|
175
|
+
|
176
|
+
mounting = all_mountings.find{ |mount| mount.respond_to?(name) }
|
177
|
+
return false if mounting.nil?
|
178
|
+
end
|
179
|
+
end
|
167
180
|
end
|
168
181
|
end
|
data/lib/flat_map/version.rb
CHANGED
@@ -16,6 +16,14 @@ module FlatMap
|
|
16
16
|
target.attr_b = 'b'
|
17
17
|
end
|
18
18
|
|
19
|
+
it 'correctly responds to dynamic methods' do
|
20
|
+
mapper.respond_to?(:attr_a=).should be true
|
21
|
+
mapper.method(:attr_a=).should_not be nil
|
22
|
+
|
23
|
+
mapper.respond_to?(:attr_b=).should be true
|
24
|
+
mapper.method(:attr_b=).should_not be nil
|
25
|
+
end
|
26
|
+
|
19
27
|
it 'should be able to read values via method calls' do
|
20
28
|
mapper.attr_a.should == 'a'
|
21
29
|
mapper.attr_b.should == 'b'
|
@@ -95,19 +95,39 @@ module FlatMap
|
|
95
95
|
mapper.mounting(:undefined_mount).should be_nil
|
96
96
|
end
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
98
|
+
describe "#read" do
|
99
|
+
it 'should add mounted mappers to a result' do
|
100
|
+
mapper.read.should == {
|
101
|
+
:host_attr => 'attr',
|
102
|
+
:attr_a => 'a',
|
103
|
+
:mapped_attr_b => 'b'
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should define dynamic writer methods' do
|
108
|
+
mapper.respond_to?(:attr_a).should be true
|
109
|
+
mapper.method(:attr_a).should_not be nil
|
110
|
+
|
111
|
+
mapper.respond_to?(:mapped_attr_b).should be true
|
112
|
+
mapper.method(:mapped_attr_b).should_not be nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#write" do
|
117
|
+
it 'should define dynamic writer methods' do
|
118
|
+
mapper.respond_to?(:attr_a=).should be true
|
119
|
+
mapper.method(:attr_a=).should_not be nil
|
120
|
+
|
121
|
+
mapper.respond_to?(:mapped_attr_b=).should be true
|
122
|
+
mapper.method(:mapped_attr_b=).should_not be nil
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should pass values to mounted mappers' do
|
126
|
+
target = MountingSpec.mount_target
|
127
|
+
mapper.write :attr_a => 'A', :mapped_attr_b => 'B'
|
128
|
+
target.attr_a.should == 'A'
|
129
|
+
target.attr_b.should == 'B'
|
130
|
+
end
|
111
131
|
end
|
112
132
|
|
113
133
|
it 'should delegate missing methods to mounted mappers' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: HornsAndHooves-flat_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- HornsAndHooves
|
7
8
|
- Artem Kuzko
|
8
9
|
- Zachary Belzer
|
9
10
|
- Sergey Potapov
|
@@ -112,6 +113,7 @@ files:
|
|
112
113
|
- ".rspec"
|
113
114
|
- ".ruby-gemset"
|
114
115
|
- ".ruby-version"
|
116
|
+
- ".simplecov"
|
115
117
|
- ".travis.yml"
|
116
118
|
- Gemfile
|
117
119
|
- HornsAndHooves-flat_map.gemspec
|