grape-entity-matchers 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 201e83f92394d4a476dbf384884eb5dc8cdc0b50
4
- data.tar.gz: 8136e5e27b4b231d2ee8e734225c3ac43cc1e39d
3
+ metadata.gz: 81fbcbd04980d0e342d096b311b5592e2e0647d1
4
+ data.tar.gz: e5af49a9acdb697686260d67405f9c4331cfe9cc
5
5
  SHA512:
6
- metadata.gz: 8c9497164c4e20a6af1c37c6e448eec8d7b843a34928fb5c3e035df400ecbca1dd98306061e7a6bf55046965a7162c853de2df6d11d71cc7d7ab65c85d2320c5
7
- data.tar.gz: 277cd43f7d4e174c877915022831adad4b0479e59c054e0405f7a55983655e2e18d3966a962dc7a9dd60bb4bdd4e74230903ab72330b58d41870d3d3021527a0
6
+ metadata.gz: 7f966c2003667145459b5ba190e870f17480638025bb9768cf70ab159b2cd0f06ec14acd5d2035f53f05d5136e26b71b303101afa4ce5343ba911465707e8975
7
+ data.tar.gz: 2cd1ae0092b63c43dd1b490f47fefe3a085ba0e4751f214c45631368faf5d72c054501e75fc6a67bc5fcd5ba12842d910758a0877389a261c6f8e959effe59ed
data/CHANGELOG.markdown CHANGED
@@ -1,8 +1,16 @@
1
1
  Next Release
2
2
  ============
3
- * move support from rspec 2.x to rspec 3.x
4
3
  * add support for minitest
5
4
 
5
+ 1.0.1 (07/30/2015)
6
+ ============
7
+ * added fix for double from @zephyr-dev
8
+ * added formatters from @cveneziani
9
+
10
+ 1.0.0 (07/30/2014)
11
+ ============
12
+ * move support from rspec 2.x to rspec 3.x
13
+
6
14
  0.4.1 (02/22/2014)
7
15
  ============
8
16
  * fix error when an entity contains itself nested by nil-ing out the nested version.
data/README.markdown CHANGED
@@ -13,23 +13,23 @@ Currently compatible Rspec 3.
13
13
  Here are some examples of the matchers in use:
14
14
 
15
15
  ``` ruby
16
- it { should represent(:date_of_birth).as(:brithday) }
17
- it { should_not represent(:name).as(:brithday) }
18
- it { should_not represent(:date_of_birth) }
19
-
20
- it { should represent(:secret).when( :authorized? => true ) }
21
- it { should_not represent(:secret).when( :authorized? => false ) }
22
-
23
- it { should represent(:super_dooper_secret).as(:top_secret).when( :authorized? => true ) }
24
- it { should_not represent(:super_dooper_secret).as(:top_secret).when( :authorized? => false ) }
25
-
26
- it { should represent(:dog).using(PetEntity) }
27
- it { should represent(:cat).as(:kitty).using(PetEntity) }
16
+ it { is_expected.to represent(:date_of_birth).as(:brithday) }
17
+ it { is_expected.to_not represent(:name).as(:brithday) }
18
+ it { is_expected.to_not represent(:date_of_birth) }
19
+
20
+ it { is_expected.to represent(:secret).when( :authorized? => true ) }
21
+ it { is_expected.to_not represent(:secret).when( :authorized? => false ) }
22
+
23
+ it { is_expected.to represent(:super_dooper_secret).as(:top_secret).when( :authorized? => true ) }
24
+ it { is_expected.to_not represent(:super_dooper_secret).as(:top_secret).when( :authorized? => false ) }
25
+
26
+ it { is_expected.to represent(:dog).using(PetEntity) }
27
+ it { is_expected.to represent(:cat).as(:kitty).using(PetEntity) }
28
28
  ```
29
29
 
30
- ## Support Rspec 2.0.0
30
+ ## Support for Rspec 2.0.0
31
31
 
32
- Rspec 2.0.0 is no longer support in future releases. For Rspec 2 use version 0.4.0.
32
+ Rspec 2.0.0 is no longer supported. For Rspec 2 use version 0.4.0.
33
33
 
34
34
  ## Minitest
35
35
 
@@ -63,4 +63,4 @@ MIT License. See LICENSE for details.
63
63
 
64
64
  ## Copyright
65
65
 
66
- Copyright (c) 2013 Mark Madsen, and AGiLE ANiMAL INC.
66
+ Copyright (c) 2014 Mark Madsen, and AGiLE ANiMAL INC.
@@ -15,9 +15,9 @@ Gem::Specification.new do |s|
15
15
  s.rubyforge_project = "grape-entity-matchers"
16
16
 
17
17
  s.add_runtime_dependency 'grape-entity', '~> 0.4.0'
18
- s.add_runtime_dependency 'rspec', '>= 3.0.0.beta'
18
+ s.add_runtime_dependency 'rspec', '>= 3.2.0'
19
+
19
20
 
20
-
21
21
  s.add_development_dependency 'rake'
22
22
  s.add_development_dependency 'maruku'
23
23
  s.add_development_dependency 'yard'
@@ -6,33 +6,39 @@ module GrapeEntityMatchers
6
6
  def represent(representable)
7
7
  RepresentMatcher.new(representable)
8
8
  end
9
-
9
+
10
10
  class RepresentMatcher
11
+ include ::RSpec::Mocks::ExampleMethods
11
12
  def initialize(representable)
12
13
  @expected_representable = representable
13
14
  RSpec::Mocks::setup
14
15
  end
15
-
16
+
16
17
  def matches?(subject)
17
18
  @subject = subject
18
19
 
19
20
  check_methods && verify_exposure && check_value
20
21
  end
21
-
22
+
22
23
  def as(representation)
23
24
  @actual_representation = representation
24
25
  self
25
26
  end
26
-
27
+
28
+ def format_with(formatter)
29
+ @formatter = formatter
30
+ self
31
+ end
32
+
27
33
  def when(conditions)
28
34
  @conditions = conditions
29
35
  self
30
36
  end
31
-
37
+
32
38
  def using(other_entity)
33
39
  @other_entity = other_entity
34
- @represented_attribute = double("RepresetedAttribute")
35
- @other_entity.exposures.keys.each do |key|
40
+ @represented_attribute = double("RepresentedAttribute")
41
+ @other_entity.exposures.keys.each do |key|
36
42
  allow(@represented_attribute ).to receive(key).and_return( @other_entity.exposures[key].nil? ? :value : nil)
37
43
  end
38
44
  self
@@ -54,7 +60,7 @@ module GrapeEntityMatchers
54
60
  message << "#{@subject} didn't return the correct value for #{@expected_representable}. (#{@serialized_hash[@actual_representation || @expected_representable] } != #{@represented_attribute || :value})" unless check_value
55
61
  message
56
62
  end
57
-
63
+
58
64
  def failure_message_when_negated
59
65
  message = ""
60
66
  message << "Didn't expect #{@subject} to expose #{@expected_representable} correctly: #{@subject.exposures[@expected_representable]} \n" if verify_exposure
@@ -74,28 +80,28 @@ module GrapeEntityMatchers
74
80
  def description
75
81
  "Ensures that #{@subject} properly obtains the value of #{@expected_representable} from a mock class."
76
82
  end
77
-
83
+
78
84
  private
79
85
 
80
86
  def limit_exposure_to_method(entity, method)
81
- allow(entity).to receive(:valid_exposures).and_return(
87
+ allow(entity).to receive(:valid_exposures).and_return(
82
88
  entity.exposures.slice(method)
83
89
  )
84
90
  end
85
-
91
+
86
92
  def check_methods
87
- @representee = double("RepresetedObject")
93
+ @representee = double("RepresentedObject")
88
94
  @represented_attribute ||= :value
89
95
 
90
- allow(@representee).to receive(@expected_representable).and_return(@represented_attribute)
96
+ allow(@representee).to receive(@expected_representable).and_return(@represented_attribute)
91
97
  expect(@representee).to receive(@conditions.keys.first).and_return(@conditions.values.first) unless @conditions.nil?
92
-
98
+
93
99
  representation = @subject.represent(@representee)
94
100
 
95
101
  @serialized_hash = if @root
96
- limit_exposure_to_method(representation[@root.to_s], @expected_representable)
102
+ limit_exposure_to_method(representation[@root.to_s], @expected_representable)
97
103
  representation[@root.to_s].serializable_hash
98
- else
104
+ else
99
105
  limit_exposure_to_method(representation, @expected_representable)
100
106
  representation.serializable_hash
101
107
  end
@@ -107,14 +113,15 @@ module GrapeEntityMatchers
107
113
  # here one can use #{e} to construct an error message
108
114
  methods_called = false
109
115
  end
110
-
116
+
111
117
  methods_called
112
118
  end
113
-
119
+
114
120
  def verify_exposure
115
121
  hash = {}
116
122
  hash[:using] = @other_entity unless @other_entity.nil?
117
123
  hash[:as] = @actual_representation unless @actual_representation.nil?
124
+ hash[:format_with] = @formatter if @formatter
118
125
 
119
126
  if @conditions.nil?
120
127
  @subject.exposures[@expected_representable] == hash
@@ -124,12 +131,12 @@ module GrapeEntityMatchers
124
131
  exposures.delete(:if) != nil && exposures == hash
125
132
  end
126
133
  end
127
-
134
+
128
135
  def check_value
129
136
  if @other_entity
130
137
  other_representation = @other_entity.represent(@represented_attribute)
131
138
 
132
- other_representation.exposures.keys.each do |key|
139
+ other_representation.exposures.keys.each do |key|
133
140
  allow(other_representation).to receive(key).and_return( other_representation.exposures[key].nil? ? :value : nil)
134
141
  end
135
142
 
@@ -1,3 +1,3 @@
1
1
  module GrapeEntityMatchers
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -9,7 +9,11 @@ describe GrapeEntityMatchers do
9
9
  class Person
10
10
  include Grape::Entity::DSL
11
11
  entity :name, :age do
12
- expose :date_of_birth, :as => :birthday
12
+ format_with(:date_formatter) do |date|
13
+ date
14
+ end
15
+
16
+ expose :date_of_birth, :as => :birthday, :format_with => :date_formatter
13
17
  expose :cat, :as => :feline, :using => PetEntity
14
18
  expose :dog, :using => PetEntity
15
19
  expose :secret, :if => lambda{ |person, options| person.authorized? }
@@ -32,41 +36,41 @@ describe GrapeEntityMatchers do
32
36
  subject(:entity) { Person::Entity }
33
37
 
34
38
  # TODO: move the tests to this format to shadow the thoughtbot tests.
35
- # it { should represent(:name) }
36
- context "should ensure the representation includes the specified property" do
37
- it { should represent :name}
39
+ # it { is_expected.to represent(:name) }
40
+ context "ensure the representation includes the specified property" do
41
+ it { is_expected.to represent :name}
38
42
  end
39
-
40
- it { should represent :name}
41
-
42
- it { should represent(:date_of_birth).as(:birthday) }
43
-
44
- it { should_not represent(:t_shirt_size) }
45
- it { should_not represent(:t_shirt_size).as(:birthday) }
46
- it { should_not represent(:name).as(:brithday) }
47
- it { should_not represent(:date_of_birth) }
48
-
49
- it { should represent(:secret).when( :authorized? => true ) }
50
- it { should_not represent(:secret).when( :authorized? => false ) }
51
43
 
52
- it { should represent(:super_dooper_secret).as(:top_secret).when( :authorized? => true ) }
53
- it { should_not represent(:super_dooper_secret).as(:top_secret).when( :authorized? => false ) }
54
- it { should_not represent(:super_dooper_secret).when( :authorized? => true ) }
55
-
56
- it { should represent(:dog).using(PetEntity) }
57
- it { should represent(:cat).as(:feline).using(PetEntity) }
58
- it { should_not represent(:cat).using(PetEntity) }
44
+ it { is_expected.to represent :name}
45
+
46
+ it { is_expected.to represent(:date_of_birth).as(:birthday).format_with(:date_formatter) }
47
+
48
+ it { is_expected.to_not represent(:t_shirt_size) }
49
+ it { is_expected.to_not represent(:t_shirt_size).as(:birthday) }
50
+ it { is_expected.to_not represent(:name).as(:brithday) }
51
+ it { is_expected.to_not represent(:date_of_birth) }
52
+
53
+ it { is_expected.to represent(:secret).when( :authorized? => true ) }
54
+ it { is_expected.to_not represent(:secret).when( :authorized? => false ) }
55
+
56
+ it { is_expected.to represent(:super_dooper_secret).as(:top_secret).when( :authorized? => true ) }
57
+ it { is_expected.to_not represent(:super_dooper_secret).as(:top_secret).when( :authorized? => false ) }
58
+ it { is_expected.to_not represent(:super_dooper_secret).when( :authorized? => true ) }
59
+
60
+ it { is_expected.to represent(:dog).using(PetEntity) }
61
+ it { is_expected.to represent(:cat).as(:feline).using(PetEntity) }
62
+ it { is_expected.to_not represent(:cat).using(PetEntity) }
59
63
 
60
64
  end
61
65
 
62
66
  context 'matchers within a root' do
63
67
  subject(:entity) { Vet }
64
- it { should represent(:name).with_root('vet') }
68
+ it { is_expected.to represent(:name).with_root('vet') }
65
69
  end
66
70
 
67
71
  context 'matchers with with a tree structure' do
68
72
  subject(:entity) { ItemEntity }
69
- it { should represent(:name).as(:title) }
70
- it { should represent(:sub_items).as(:children).using(ItemEntity) }
73
+ it { is_expected.to represent(:name).as(:title) }
74
+ it { is_expected.to represent(:sub_items).as(:children).using(ItemEntity) }
71
75
  end
72
76
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-entity-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Madsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-30 00:00:00.000000000 Z
11
+ date: 2015-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape-entity
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.0.beta
33
+ version: 3.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.0.beta
40
+ version: 3.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  version: '0'
140
140
  requirements: []
141
141
  rubyforge_project: grape-entity-matchers
142
- rubygems_version: 2.2.2
142
+ rubygems_version: 2.4.5
143
143
  signing_key:
144
144
  specification_version: 4
145
145
  summary: Shoulda-like matchers for Grape Entity.