postgres_ext 2.1.3 → 2.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +13 -22
  4. data/CHANGELOG.md +45 -0
  5. data/README.md +13 -0
  6. data/Rakefile +83 -7
  7. data/docs/querying.md +76 -6
  8. data/lib/postgres_ext/active_record/relation/predicate_builder.rb +2 -2
  9. data/lib/postgres_ext/active_record/relation/query_methods.rb +44 -11
  10. data/lib/postgres_ext/arel/predications.rb +10 -0
  11. data/lib/postgres_ext/arel/visitors/to_sql.rb +1 -1
  12. data/lib/postgres_ext/version.rb +1 -1
  13. data/postgres_ext.gemspec +4 -2
  14. data/test/arel/array_test.rb +92 -0
  15. data/{spec/arel/inet_spec.rb → test/arel/inet_test.rb} +6 -6
  16. data/{spec/queries/array_queries_spec.rb → test/queries/array_queries_test.rb} +22 -14
  17. data/test/queries/common_table_expression_test.rb +49 -0
  18. data/{spec/queries/contains_querie_spec.rb → test/queries/contains_test.rb} +5 -5
  19. data/test/queries/sanity_test.rb +32 -0
  20. data/test/queries/window_functions_test.rb +64 -0
  21. data/test/test_helper.rb +38 -0
  22. metadata +74 -150
  23. data/spec/arel/array_spec.rb +0 -77
  24. data/spec/arel/rank_spec.rb +0 -0
  25. data/spec/dummy/.gitignore +0 -15
  26. data/spec/dummy/README.rdoc +0 -261
  27. data/spec/dummy/Rakefile +0 -7
  28. data/spec/dummy/app/assets/images/rails.png +0 -0
  29. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  30. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  31. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  32. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  33. data/spec/dummy/app/mailers/.gitkeep +0 -0
  34. data/spec/dummy/app/models/.gitkeep +0 -0
  35. data/spec/dummy/app/models/person.rb +0 -2
  36. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  37. data/spec/dummy/config.ru +0 -4
  38. data/spec/dummy/config/application.rb +0 -56
  39. data/spec/dummy/config/boot.rb +0 -6
  40. data/spec/dummy/config/database.yml.example +0 -14
  41. data/spec/dummy/config/environment.rb +0 -5
  42. data/spec/dummy/config/environments/development.rb +0 -33
  43. data/spec/dummy/config/environments/production.rb +0 -68
  44. data/spec/dummy/config/environments/test.rb +0 -33
  45. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  46. data/spec/dummy/config/initializers/inflections.rb +0 -15
  47. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  48. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  49. data/spec/dummy/config/initializers/session_store.rb +0 -8
  50. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  51. data/spec/dummy/config/locales/en.yml +0 -5
  52. data/spec/dummy/config/routes.rb +0 -58
  53. data/spec/dummy/db/migrate/20120501163758_create_people.rb +0 -15
  54. data/spec/dummy/db/schema.rb +0 -31
  55. data/spec/dummy/db/seeds.rb +0 -7
  56. data/spec/dummy/lib/assets/.gitkeep +0 -0
  57. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  58. data/spec/dummy/log/.gitkeep +0 -0
  59. data/spec/dummy/public/404.html +0 -26
  60. data/spec/dummy/public/422.html +0 -26
  61. data/spec/dummy/public/500.html +0 -25
  62. data/spec/dummy/public/favicon.ico +0 -0
  63. data/spec/dummy/public/index.html +0 -241
  64. data/spec/dummy/public/robots.txt +0 -5
  65. data/spec/dummy/script/rails +0 -6
  66. data/spec/dummy/spec/factories/people.rb +0 -7
  67. data/spec/dummy/test/fixtures/.gitkeep +0 -0
  68. data/spec/dummy/test/functional/.gitkeep +0 -0
  69. data/spec/dummy/test/integration/.gitkeep +0 -0
  70. data/spec/dummy/test/performance/browsing_test.rb +0 -12
  71. data/spec/dummy/test/test_helper.rb +0 -13
  72. data/spec/dummy/test/unit/.gitkeep +0 -0
  73. data/spec/dummy/vendor/assets/javascripts/.gitkeep +0 -0
  74. data/spec/dummy/vendor/assets/stylesheets/.gitkeep +0 -0
  75. data/spec/dummy/vendor/plugins/.gitkeep +0 -0
  76. data/spec/queries/common_table_expression_spec.rb +0 -36
  77. data/spec/queries/sanity_spec.rb +0 -17
  78. data/spec/queries/window_functions_spec.rb +0 -54
  79. data/spec/spec_helper.rb +0 -36
@@ -0,0 +1,38 @@
1
+ require 'active_record'
2
+ require 'minitest/autorun'
3
+ require 'bourne'
4
+ require 'postgres_ext'
5
+ require 'database_cleaner'
6
+ unless ENV['CI'] || RUBY_PLATFORM =~ /java/
7
+ require 'byebug'
8
+ end
9
+
10
+ require 'dotenv'
11
+ Dotenv.load
12
+
13
+ ActiveRecord::Base.establish_connection
14
+
15
+ class Person < ActiveRecord::Base
16
+ has_many :hm_tags, class_name: 'Tag'
17
+ has_and_belongs_to_many :habtm_tags, class_name: 'Tag'
18
+ end
19
+
20
+ class Tag < ActiveRecord::Base
21
+ belongs_to :person
22
+ end
23
+
24
+ DatabaseCleaner.strategy = :deletion
25
+
26
+ class MiniTest::Spec
27
+ class << self
28
+ alias :context :describe
29
+ end
30
+
31
+ before do
32
+ DatabaseCleaner.start
33
+ end
34
+
35
+ after do
36
+ DatabaseCleaner.clean
37
+ end
38
+ end
metadata CHANGED
@@ -1,125 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postgres_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan McClain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-23 00:00:00.000000000 Z
11
+ date: 2014-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
20
  type: :runtime
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: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: arel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.1
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
40
  version: 4.0.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pg_array_parser
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.9
48
48
  type: :runtime
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.0.9
55
55
  - !ruby/object:Gem::Dependency
56
- name: rails
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 4.0.0
61
+ version: 10.1.0
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
- version: 4.0.0
68
+ version: 10.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rspec-rails
84
+ name: m
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
- version: 2.12.0
89
+ version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
- version: 2.12.0
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bourne
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
103
  version: 1.3.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ~>
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: 1.3.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: database_cleaner
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - '>='
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: dotenv
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
102
130
  - !ruby/object:Gem::Version
103
131
  version: '0'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
- - - '>='
136
+ - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: pg
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - ~>
143
+ - - "~>"
116
144
  - !ruby/object:Gem::Version
117
145
  version: 0.13.2
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - ~>
150
+ - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: 0.13.2
125
153
  description: Adds missing native PostgreSQL data types to ActiveRecord and convenient
@@ -130,9 +158,9 @@ executables: []
130
158
  extensions: []
131
159
  extra_rdoc_files: []
132
160
  files:
133
- - .gitignore
134
- - .rspec
135
- - .travis.yml
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".travis.yml"
136
164
  - CHANGELOG.md
137
165
  - CONTRIBUTING.md
138
166
  - Gemfile
@@ -156,66 +184,14 @@ files:
156
184
  - lib/postgres_ext/arel/visitors/visitor.rb
157
185
  - lib/postgres_ext/version.rb
158
186
  - postgres_ext.gemspec
159
- - spec/arel/array_spec.rb
160
- - spec/arel/inet_spec.rb
161
- - spec/arel/rank_spec.rb
162
- - spec/dummy/.gitignore
163
- - spec/dummy/README.rdoc
164
- - spec/dummy/Rakefile
165
- - spec/dummy/app/assets/images/rails.png
166
- - spec/dummy/app/assets/javascripts/application.js
167
- - spec/dummy/app/assets/stylesheets/application.css
168
- - spec/dummy/app/controllers/application_controller.rb
169
- - spec/dummy/app/helpers/application_helper.rb
170
- - spec/dummy/app/mailers/.gitkeep
171
- - spec/dummy/app/models/.gitkeep
172
- - spec/dummy/app/models/person.rb
173
- - spec/dummy/app/views/layouts/application.html.erb
174
- - spec/dummy/config.ru
175
- - spec/dummy/config/application.rb
176
- - spec/dummy/config/boot.rb
177
- - spec/dummy/config/database.yml.example
178
- - spec/dummy/config/environment.rb
179
- - spec/dummy/config/environments/development.rb
180
- - spec/dummy/config/environments/production.rb
181
- - spec/dummy/config/environments/test.rb
182
- - spec/dummy/config/initializers/backtrace_silencers.rb
183
- - spec/dummy/config/initializers/inflections.rb
184
- - spec/dummy/config/initializers/mime_types.rb
185
- - spec/dummy/config/initializers/secret_token.rb
186
- - spec/dummy/config/initializers/session_store.rb
187
- - spec/dummy/config/initializers/wrap_parameters.rb
188
- - spec/dummy/config/locales/en.yml
189
- - spec/dummy/config/routes.rb
190
- - spec/dummy/db/migrate/20120501163758_create_people.rb
191
- - spec/dummy/db/schema.rb
192
- - spec/dummy/db/seeds.rb
193
- - spec/dummy/lib/assets/.gitkeep
194
- - spec/dummy/lib/tasks/.gitkeep
195
- - spec/dummy/log/.gitkeep
196
- - spec/dummy/public/404.html
197
- - spec/dummy/public/422.html
198
- - spec/dummy/public/500.html
199
- - spec/dummy/public/favicon.ico
200
- - spec/dummy/public/index.html
201
- - spec/dummy/public/robots.txt
202
- - spec/dummy/script/rails
203
- - spec/dummy/spec/factories/people.rb
204
- - spec/dummy/test/fixtures/.gitkeep
205
- - spec/dummy/test/functional/.gitkeep
206
- - spec/dummy/test/integration/.gitkeep
207
- - spec/dummy/test/performance/browsing_test.rb
208
- - spec/dummy/test/test_helper.rb
209
- - spec/dummy/test/unit/.gitkeep
210
- - spec/dummy/vendor/assets/javascripts/.gitkeep
211
- - spec/dummy/vendor/assets/stylesheets/.gitkeep
212
- - spec/dummy/vendor/plugins/.gitkeep
213
- - spec/queries/array_queries_spec.rb
214
- - spec/queries/common_table_expression_spec.rb
215
- - spec/queries/contains_querie_spec.rb
216
- - spec/queries/sanity_spec.rb
217
- - spec/queries/window_functions_spec.rb
218
- - spec/spec_helper.rb
187
+ - test/arel/array_test.rb
188
+ - test/arel/inet_test.rb
189
+ - test/queries/array_queries_test.rb
190
+ - test/queries/common_table_expression_test.rb
191
+ - test/queries/contains_test.rb
192
+ - test/queries/sanity_test.rb
193
+ - test/queries/window_functions_test.rb
194
+ - test/test_helper.rb
219
195
  homepage: ''
220
196
  licenses:
221
197
  - MIT
@@ -226,78 +202,26 @@ require_paths:
226
202
  - lib
227
203
  required_ruby_version: !ruby/object:Gem::Requirement
228
204
  requirements:
229
- - - '>='
205
+ - - ">="
230
206
  - !ruby/object:Gem::Version
231
207
  version: '0'
232
208
  required_rubygems_version: !ruby/object:Gem::Requirement
233
209
  requirements:
234
- - - '>='
210
+ - - ">="
235
211
  - !ruby/object:Gem::Version
236
212
  version: '0'
237
213
  requirements: []
238
214
  rubyforge_project:
239
- rubygems_version: 2.1.0
215
+ rubygems_version: 2.2.0
240
216
  signing_key:
241
217
  specification_version: 4
242
218
  summary: Extends ActiveRecord to handle native PostgreSQL data types
243
219
  test_files:
244
- - spec/arel/array_spec.rb
245
- - spec/arel/inet_spec.rb
246
- - spec/arel/rank_spec.rb
247
- - spec/dummy/.gitignore
248
- - spec/dummy/README.rdoc
249
- - spec/dummy/Rakefile
250
- - spec/dummy/app/assets/images/rails.png
251
- - spec/dummy/app/assets/javascripts/application.js
252
- - spec/dummy/app/assets/stylesheets/application.css
253
- - spec/dummy/app/controllers/application_controller.rb
254
- - spec/dummy/app/helpers/application_helper.rb
255
- - spec/dummy/app/mailers/.gitkeep
256
- - spec/dummy/app/models/.gitkeep
257
- - spec/dummy/app/models/person.rb
258
- - spec/dummy/app/views/layouts/application.html.erb
259
- - spec/dummy/config.ru
260
- - spec/dummy/config/application.rb
261
- - spec/dummy/config/boot.rb
262
- - spec/dummy/config/database.yml.example
263
- - spec/dummy/config/environment.rb
264
- - spec/dummy/config/environments/development.rb
265
- - spec/dummy/config/environments/production.rb
266
- - spec/dummy/config/environments/test.rb
267
- - spec/dummy/config/initializers/backtrace_silencers.rb
268
- - spec/dummy/config/initializers/inflections.rb
269
- - spec/dummy/config/initializers/mime_types.rb
270
- - spec/dummy/config/initializers/secret_token.rb
271
- - spec/dummy/config/initializers/session_store.rb
272
- - spec/dummy/config/initializers/wrap_parameters.rb
273
- - spec/dummy/config/locales/en.yml
274
- - spec/dummy/config/routes.rb
275
- - spec/dummy/db/migrate/20120501163758_create_people.rb
276
- - spec/dummy/db/schema.rb
277
- - spec/dummy/db/seeds.rb
278
- - spec/dummy/lib/assets/.gitkeep
279
- - spec/dummy/lib/tasks/.gitkeep
280
- - spec/dummy/log/.gitkeep
281
- - spec/dummy/public/404.html
282
- - spec/dummy/public/422.html
283
- - spec/dummy/public/500.html
284
- - spec/dummy/public/favicon.ico
285
- - spec/dummy/public/index.html
286
- - spec/dummy/public/robots.txt
287
- - spec/dummy/script/rails
288
- - spec/dummy/spec/factories/people.rb
289
- - spec/dummy/test/fixtures/.gitkeep
290
- - spec/dummy/test/functional/.gitkeep
291
- - spec/dummy/test/integration/.gitkeep
292
- - spec/dummy/test/performance/browsing_test.rb
293
- - spec/dummy/test/test_helper.rb
294
- - spec/dummy/test/unit/.gitkeep
295
- - spec/dummy/vendor/assets/javascripts/.gitkeep
296
- - spec/dummy/vendor/assets/stylesheets/.gitkeep
297
- - spec/dummy/vendor/plugins/.gitkeep
298
- - spec/queries/array_queries_spec.rb
299
- - spec/queries/common_table_expression_spec.rb
300
- - spec/queries/contains_querie_spec.rb
301
- - spec/queries/sanity_spec.rb
302
- - spec/queries/window_functions_spec.rb
303
- - spec/spec_helper.rb
220
+ - test/arel/array_test.rb
221
+ - test/arel/inet_test.rb
222
+ - test/queries/array_queries_test.rb
223
+ - test/queries/common_table_expression_test.rb
224
+ - test/queries/contains_test.rb
225
+ - test/queries/sanity_test.rb
226
+ - test/queries/window_functions_test.rb
227
+ - test/test_helper.rb
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Array Column Predicates' do
4
- describe 'Array Overlap' do
5
- it 'converts Arel overlap statment' do
6
- arel_table = Person.arel_table
7
-
8
- arel_table.where(arel_table[:tags].overlap(['tag','tag 2'])).to_sql.should match /&& '\{"tag","tag 2"\}'/
9
- end
10
-
11
- it 'converts Arel overlap statment' do
12
- arel_table = Person.arel_table
13
-
14
- arel_table.where(arel_table[:tag_ids].overlap([1,2])).to_sql.should match /&& '\{1,2\}'/
15
- end
16
-
17
- it 'works with count (and other predicates)' do
18
- arel_table = Person.arel_table
19
-
20
- Person.where(arel_table[:tag_ids].overlap([1,2])).count.should eq 0
21
- end
22
-
23
- it 'returns matched records' do
24
- one = Person.create!(:tags => ['one'])
25
- two = Person.create!(:tags => ['two'])
26
- arel_table = Person.arel_table
27
-
28
- query = arel_table.where(arel_table[:tags].overlap(['one'])).project(Arel.sql('*'))
29
- Person.find_by_sql(query.to_sql).should include(one)
30
-
31
- query = arel_table.where(arel_table[:tags].overlap(['two'])).project(Arel.sql('*'))
32
- Person.find_by_sql(query.to_sql).should include(two)
33
-
34
- query = arel_table.where(arel_table[:tags].overlap(['two','one'])).project(Arel.sql('*'))
35
- Person.find_by_sql(query.to_sql).should include(two)
36
- Person.find_by_sql(query.to_sql).should include(one)
37
- end
38
- end
39
-
40
- describe 'Array Contains' do
41
- it 'converts Arel contains statement and escapes strings' do
42
- arel_table = Person.arel_table
43
-
44
- arel_table.where(arel_table[:tags].contains(['tag','tag 2'])).to_sql.should match /@> '\{"tag","tag 2"\}'/
45
- end
46
-
47
- it 'converts Arel contains statement with numbers' do
48
- arel_table = Person.arel_table
49
-
50
- arel_table.where(arel_table[:tag_ids].contains([1,2])).to_sql.should match /@> '\{1,2\}'/
51
- end
52
-
53
- it 'works with count (and other predicates)' do
54
- arel_table = Person.arel_table
55
-
56
- Person.where(arel_table[:tag_ids].contains([1,2])).count.should eq 0
57
- end
58
-
59
- it 'returns matched records' do
60
- one = Person.create!(:tags => ['one', 'two', 'three'])
61
- two = Person.create!(:tags => ['one', 'three'])
62
- arel_table = Person.arel_table
63
-
64
- query = arel_table.where(arel_table[:tags].contains(['one', 'two'])).project(Arel.sql('*'))
65
- Person.find_by_sql(query.to_sql).should include one
66
- Person.find_by_sql(query.to_sql).should_not include two
67
-
68
- query = arel_table.where(arel_table[:tags].contains(['one', 'three'])).project(Arel.sql('*'))
69
- Person.find_by_sql(query.to_sql).should include one
70
- Person.find_by_sql(query.to_sql).should include two
71
-
72
- query = arel_table.where(arel_table[:tags].contains(['two'])).project(Arel.sql('*'))
73
- Person.find_by_sql(query.to_sql).should include one
74
- Person.find_by_sql(query.to_sql).should_not include two
75
- end
76
- end
77
- end