apipie-rails 0.5.18 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 827ccd7271b49556c90c5bf516ac782ecf7fa38fa380bada85c6ec5c3ac7f5e3
4
- data.tar.gz: e989cb29115cc40c0e1033b4800caef2cc9bccac43a6bffd43f0bb974bc68a5f
3
+ metadata.gz: 94b525fc29d73244428ef1e25397219f80e703701497ad82c507e9fe0c321300
4
+ data.tar.gz: 7ba3ffeceb46eb8115d1733820e87bef5a1c1be64bc19a5225c20eae430a476c
5
5
  SHA512:
6
- metadata.gz: e1fae727ae94f9083a1b02984f660ff189e30aa5eee2d9792f3d233cce46472bff8a19b077c3863be167f8738016d96c421b50dbfe3c29604397eb7aa5fbb13d
7
- data.tar.gz: 71df5da3fd578b00518cc2121d2a32a9c664ac681cb52d266412759c25c5a46ef49a5d40e45006ac28f6d1ce8dd1676e0b44589f6b7869e77b2b3d04f4686195
6
+ metadata.gz: 6eab6988a8d9bebb72a66096e2dbe22f04f83ab5e25070e1cb2b6176c13153b23e3499829af1f378ece9d07abfad18756ce845632ecf9711b6108fab1b8335a4
7
+ data.tar.gz: 8efcdcbf133414f77cb1cf9c15f34162ad395d42117275b74a68c9b4848723174dc4d79cf1b4c6739fe775324aa94da6d16b38f5fd62b33e0577539483fe8ea4
@@ -0,0 +1,50 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: build
9
+
10
+ on: [push, pull_request]
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-20.04
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby:
19
+ - 2.6
20
+ - 2.7
21
+ - '3.0'
22
+ - 3.1
23
+ gemfile:
24
+ - Gemfile.rails42
25
+ - Gemfile.rails52 # Min ruby 2.2.2
26
+ - Gemfile.rails60 # Min ruby 2.5.0
27
+ - Gemfile.rails61 # Min ruby 2.5.0
28
+ exclude:
29
+ - gemfile: Gemfile.rails42
30
+ ruby: 2.7
31
+ - gemfile: Gemfile.rails42
32
+ ruby: '3.0'
33
+ - gemfile: Gemfile.rails42
34
+ ruby: 3.1
35
+ - gemfile: Gemfile.rails52
36
+ ruby: 2.7
37
+ - gemfile: Gemfile.rails52
38
+ ruby: '3.0'
39
+ - gemfile: Gemfile.rails52
40
+ ruby: 3.1
41
+
42
+ env:
43
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}
44
+ steps:
45
+ - uses: actions/checkout@v2
46
+ - uses: ruby/setup-ruby@v1
47
+ with:
48
+ ruby-version: ${{ matrix.ruby }}
49
+ bundler-cache: true
50
+ - run: bundle exec rspec
data/.gitignore CHANGED
@@ -12,3 +12,4 @@ Gemfile.local
12
12
  .ruby-gemset
13
13
 
14
14
  .DS_Store
15
+ rel-eng/.ipynb_checkpoints
data/CHANGELOG.md CHANGED
@@ -1,7 +1,30 @@
1
1
  Changelog
2
2
  ===========
3
3
 
4
- [v0.5.17](https://github.com/Apipie/apipie-rails/tree/v0.5.18) (2020-05-20)
4
+ ## [v0.6.0](https://github.com/Apipie/apipie-rails/tree/v0.6.0) (2022-03-29)
5
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.5.20...v0.6.0)
6
+ * Ruby 3.0 fixes [#716](https://github.com/Apipie/apipie-rails/pull/716) (hank-spokeo)
7
+ * only depends on actionpack and activesupport [#741](https://github.com/Apipie/apipie-rails/pull/741) (Mathieu Jobin)
8
+ * language fix, fallback to default locale [#726](https://github.com/Apipie/apipie-rails/pull/726) (Alex Coomans)
9
+
10
+ ## [v0.5.20](https://github.com/Apipie/apipie-rails/tree/v0.5.20) (2022-03-16)
11
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.5.19...v0.5.20)
12
+ * Update rel-eng (Oleh Fedorenko)
13
+ * Deprecate travis, run tests on github actions [#740](https://github.com/Apipie/apipie-rails/pull/740) (Mathieu Jobin)
14
+ * Update validator.rb [#739](https://github.com/Apipie/apipie-rails/pull/739) (Dmytro Budnyk)
15
+ * Fix wrong number of arguments for recorder#process [#725](https://github.com/Apipie/apipie-rails/pull/725) (rob mathews)
16
+ * Change "an" to "a" [#723](https://github.com/Apipie/apipie-rails/pull/723) (Naokimi)
17
+
18
+ ## [v0.5.19](https://github.com/Apipie/apipie-rails/tree/v0.5.19) (2021-07-25)
19
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.5.18...v0.5.19)
20
+ * Add rel-eng notebook (Oleh Fedorenko)
21
+ * Correct the word parâmentros for brazilian portuguese [#687](https://github.com/Apipie/apipie-rails/pull/687) (Diego Noronha)
22
+ * Fix depreciated file.exists. [#721](https://github.com/Apipie/apipie-rails/pull/721) (Diane Delallée)
23
+ * Fix typo in changelog [#703](https://github.com/Apipie/apipie-rails/pull/703) (Pavel Rodionov)
24
+ * Add rails 6.1 support in doc generation [#702](https://github.com/Apipie/apipie-rails/pull/702) (andrew-newell)
25
+
26
+
27
+ [v0.5.18](https://github.com/Apipie/apipie-rails/tree/v0.5.18) (2020-05-20)
5
28
  --------
6
29
 
7
30
  [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.5.17...v0.5.18)
data/Gemfile CHANGED
@@ -1 +1 @@
1
- ./Gemfile.rails50
1
+ Gemfile.rails61
data/README.rst CHANGED
@@ -387,20 +387,20 @@ Example:
387
387
  end
388
388
  end
389
389
 
390
- api :POST, "/users", "Create an user"
390
+ api :POST, "/users", "Create a user"
391
391
  param_group :user
392
392
  def create
393
393
  # ...
394
394
  end
395
395
 
396
- api :PUT, "/users/:id", "Update an user"
396
+ api :PUT, "/users/:id", "Update a user"
397
397
  param_group :user
398
398
  def update
399
399
  # ...
400
400
  end
401
401
 
402
402
  # v2/users_controller.rb
403
- api :POST, "/users", "Create an user"
403
+ api :POST, "/users", "Create a user"
404
404
  param_group :user, V1::UsersController
405
405
  def create
406
406
  # ...
@@ -434,7 +434,7 @@ Example
434
434
  end
435
435
  end
436
436
 
437
- api :POST, "/users", "Create an user"
437
+ api :POST, "/users", "Create a user"
438
438
  param_group :user
439
439
  def create
440
440
  # ...
@@ -446,7 +446,7 @@ Example
446
446
  # ...
447
447
  end
448
448
 
449
- api :PUT, "/users/:id", "Update an user"
449
+ api :PUT, "/users/:id", "Update a user"
450
450
  param_group :user
451
451
  def update
452
452
  # ...
data/apipie-rails.gemspec CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |s|
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_dependency "rails", ">= 4.1"
19
+ s.add_dependency "actionpack", ">= 4.1"
20
+ s.add_dependency "activesupport", ">= 4.1"
20
21
  s.add_development_dependency "rspec-rails", "~> 3.0"
21
22
  s.add_development_dependency "sqlite3"
22
23
  s.add_development_dependency "minitest"
@@ -100,7 +100,7 @@ module Apipie
100
100
  [:resource, :method, :version].each do |par|
101
101
  if params[par]
102
102
  splitted = params[par].split('.')
103
- if splitted.length > 1 && Apipie.configuration.languages.include?(splitted.last)
103
+ if splitted.length > 1 && (Apipie.configuration.languages.include?(splitted.last) || Apipie.configuration.default_locale == splitted.last)
104
104
  lang = splitted.last
105
105
  params[par].sub!(".#{lang}", '')
106
106
  end
@@ -16,7 +16,7 @@
16
16
  optional: opcional
17
17
  nil_allowed: nulo permitido
18
18
  param_name: Nome parâmetro
19
- params: Parâmentros
19
+ params: Parâmetros
20
20
  examples: Exemplos
21
21
  metadata: Metadado
22
22
  errors: Erros
@@ -1,8 +1,9 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gemspec
3
+ gemspec path: '..'
4
4
 
5
- gem 'rails', '~> 4.2.5'
5
+ gem 'actionpack', '~> 4.2.5'
6
+ gem 'activesupport', '~> 4.2.5'
6
7
  gem 'mime-types', '~> 2.99.3'
7
8
  gem 'sqlite3', '~> 1.3.6'
8
9
 
@@ -11,4 +12,4 @@ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.1.0')
11
12
  gem 'rdoc', '~> 4.2.2'
12
13
  end
13
14
 
14
- gem 'test_engine', path: 'spec/dummy/components/test_engine', group: :test
15
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -0,0 +1,122 @@
1
+ PATH
2
+ remote: ../spec/dummy/components/test_engine
3
+ specs:
4
+ test_engine (0.0.1)
5
+
6
+ PATH
7
+ remote: ..
8
+ specs:
9
+ apipie-rails (0.5.20)
10
+ actionpack (>= 4.1)
11
+ activesupport (>= 4.1)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ RedCloth (4.3.2)
17
+ actionpack (4.2.11.3)
18
+ actionview (= 4.2.11.3)
19
+ activesupport (= 4.2.11.3)
20
+ rack (~> 1.6)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
+ actionview (4.2.11.3)
25
+ activesupport (= 4.2.11.3)
26
+ builder (~> 3.1)
27
+ erubis (~> 2.7.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
30
+ activesupport (4.2.11.3)
31
+ i18n (~> 0.7)
32
+ minitest (~> 5.1)
33
+ thread_safe (~> 0.3, >= 0.3.4)
34
+ tzinfo (~> 1.1)
35
+ addressable (2.8.0)
36
+ public_suffix (>= 2.0.2, < 5.0)
37
+ builder (3.2.4)
38
+ concurrent-ruby (1.1.10)
39
+ crass (1.0.6)
40
+ diff-lcs (1.5.0)
41
+ erubis (2.7.0)
42
+ i18n (0.9.5)
43
+ concurrent-ruby (~> 1.0)
44
+ json-schema (2.8.1)
45
+ addressable (>= 2.4)
46
+ loofah (2.15.0)
47
+ crass (~> 1.0.2)
48
+ nokogiri (>= 1.5.9)
49
+ maruku (0.7.3)
50
+ mime-types (2.99.3)
51
+ mini_portile2 (2.8.0)
52
+ minitest (5.15.0)
53
+ nokogiri (1.13.3)
54
+ mini_portile2 (~> 2.8.0)
55
+ racc (~> 1.4)
56
+ psych (4.0.3)
57
+ stringio
58
+ public_suffix (4.0.6)
59
+ racc (1.6.0)
60
+ rack (1.6.13)
61
+ rack-test (0.6.3)
62
+ rack (>= 1.0)
63
+ rails-deprecated_sanitizer (1.0.4)
64
+ activesupport (>= 4.2.0.alpha)
65
+ rails-dom-testing (1.0.9)
66
+ activesupport (>= 4.2.0, < 5.0)
67
+ nokogiri (~> 1.6)
68
+ rails-deprecated_sanitizer (>= 1.0.1)
69
+ rails-html-sanitizer (1.4.2)
70
+ loofah (~> 2.3)
71
+ railties (4.2.11.3)
72
+ actionpack (= 4.2.11.3)
73
+ activesupport (= 4.2.11.3)
74
+ rake (>= 0.8.7)
75
+ thor (>= 0.18.1, < 2.0)
76
+ rake (13.0.6)
77
+ rdoc (6.4.0)
78
+ psych (>= 4.0.0)
79
+ rspec-core (3.9.3)
80
+ rspec-support (~> 3.9.3)
81
+ rspec-expectations (3.9.4)
82
+ diff-lcs (>= 1.2.0, < 2.0)
83
+ rspec-support (~> 3.9.0)
84
+ rspec-mocks (3.9.1)
85
+ diff-lcs (>= 1.2.0, < 2.0)
86
+ rspec-support (~> 3.9.0)
87
+ rspec-rails (3.9.1)
88
+ actionpack (>= 3.0)
89
+ activesupport (>= 3.0)
90
+ railties (>= 3.0)
91
+ rspec-core (~> 3.9.0)
92
+ rspec-expectations (~> 3.9.0)
93
+ rspec-mocks (~> 3.9.0)
94
+ rspec-support (~> 3.9.0)
95
+ rspec-support (3.9.4)
96
+ sqlite3 (1.3.13)
97
+ stringio (3.0.1)
98
+ thor (1.2.1)
99
+ thread_safe (0.3.6)
100
+ tzinfo (1.2.9)
101
+ thread_safe (~> 0.1)
102
+
103
+ PLATFORMS
104
+ ruby
105
+
106
+ DEPENDENCIES
107
+ RedCloth
108
+ actionpack (~> 4.2.5)
109
+ activesupport (~> 4.2.5)
110
+ apipie-rails!
111
+ json-schema (~> 2.8)
112
+ maruku
113
+ mime-types (~> 2.99.3)
114
+ minitest
115
+ rake
116
+ rdoc
117
+ rspec-rails (~> 3.0)
118
+ sqlite3 (~> 1.3.6)
119
+ test_engine!
120
+
121
+ BUNDLED WITH
122
+ 1.17.3
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 5.2.6'
6
+ gem 'activesupport', '~> 5.2.6'
7
+ gem 'mime-types', '~> 2.99.3'
8
+ gem 'rails-controller-testing'
9
+
10
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -0,0 +1,17 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 6.0.4'
6
+ gem 'activesupport', '~> 6.0.4'
7
+ gem 'mime-types', '~> 3.0'
8
+ gem 'rails-controller-testing'
9
+ gem 'rspec-rails', '~> 5.0'
10
+
11
+ # net-smtp not included by default in Ruby 3.1
12
+ # Will be fixed by https://github.com/mikel/mail/pull/1439
13
+ if Gem.ruby_version >= Gem::Version.new("3.1.0")
14
+ gem 'net-smtp', require: false
15
+ end
16
+
17
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -0,0 +1,17 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 6.1.5'
6
+ gem 'activesupport', '~> 6.1.5'
7
+ gem 'mime-types', '~> 3.0'
8
+ gem 'rails-controller-testing'
9
+ gem 'rspec-rails', '~> 5.0'
10
+
11
+ # net-smtp not included by default in Ruby 3.1
12
+ # Will be fixed by https://github.com/mikel/mail/pull/1439
13
+ if Gem.ruby_version >= Gem::Version.new("3.1.0")
14
+ gem 'net-smtp', require: false
15
+ end
16
+
17
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -150,8 +150,8 @@ module Apipie
150
150
  end
151
151
 
152
152
  module FunctionalTestRecording
153
- def process(*args) # action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
154
- ret = super(*args)
153
+ def process(*, **) # action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
154
+ ret = super
155
155
  if Apipie.configuration.record
156
156
  Apipie::Extractor.call_recorder.analyze_functional_test(self)
157
157
  Apipie::Extractor.call_finished
@@ -160,6 +160,7 @@ module Apipie
160
160
  ensure
161
161
  Apipie::Extractor.clean_call_recorder
162
162
  end
163
+ ruby2_keywords :process if respond_to?(:ruby2_keywords, true)
163
164
  end
164
165
  end
165
166
  end
@@ -3,7 +3,7 @@ module Apipie
3
3
 
4
4
  module Validator
5
5
 
6
- # to create new validator, inherit from Apipie::Validator::Base
6
+ # to create new validator, inherit from Apipie::Validator::BaseValidator
7
7
  # and implement class method build and instance method validate
8
8
  class BaseValidator
9
9
 
@@ -1,3 +1,3 @@
1
1
  module Apipie
2
- VERSION = '0.5.18'
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/apipie-rails.rb CHANGED
@@ -23,7 +23,3 @@ require "apipie/railtie"
23
23
  require 'apipie/extractor'
24
24
  require "apipie/version"
25
25
  require "apipie/swagger_generator"
26
-
27
- if Rails.version.start_with?("3.0")
28
- warn 'Warning: apipie-rails is not going to support Rails 3.0 anymore in future versions'
29
- end
@@ -172,7 +172,12 @@ namespace :apipie do
172
172
  layouts_paths = [File.expand_path("../../../app/views/layouts", __FILE__)]
173
173
  layouts_paths.unshift("#{Rails.root}/app/views/layouts") if File.directory?("#{Rails.root}/app/views/layouts/apipie")
174
174
 
175
- @apipie_renderer = ActionView::Base.new(base_paths + layouts_paths)
175
+ if ActionView::Base.respond_to?(:with_empty_template_cache) && ActionView::Base.respond_to?(:with_view_paths)
176
+ @apipie_renderer = ActionView::Base.with_empty_template_cache.with_view_paths(base_paths + layouts_paths)
177
+ else
178
+ @apipie_renderer = ActionView::Base.new(base_paths + layouts_paths)
179
+ end
180
+
176
181
  @apipie_renderer.singleton_class.send(:include, ApipieHelper)
177
182
  return @apipie_renderer
178
183
  end
@@ -210,14 +215,14 @@ namespace :apipie do
210
215
  end
211
216
 
212
217
  def generate_json_page(file_base, doc, lang = nil)
213
- FileUtils.mkdir_p(file_base) unless File.exists?(file_base)
218
+ FileUtils.mkdir_p(file_base) unless File.exist?(file_base)
214
219
 
215
220
  filename = "schema_apipie#{lang_ext(lang)}.json"
216
221
  File.open("#{file_base}/#{filename}", 'w') { |file| file.write(JSON.pretty_generate(doc)) }
217
222
  end
218
223
 
219
224
  def generate_swagger_json_page(file_base, doc, sfx="", lang = nil)
220
- FileUtils.mkdir_p(file_base) unless File.exists?(file_base)
225
+ FileUtils.mkdir_p(file_base) unless File.exist?(file_base)
221
226
 
222
227
  path = Pathname.new("#{file_base}/schema_swagger#{sfx}#{lang_ext(lang)}.json")
223
228
  File.open(path, 'w') { |file| file.write(JSON.pretty_generate(doc)) }
@@ -226,21 +231,21 @@ namespace :apipie do
226
231
  end
227
232
 
228
233
  def generate_one_page(file_base, doc, lang = nil)
229
- FileUtils.mkdir_p(File.dirname(file_base)) unless File.exists?(File.dirname(file_base))
234
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
230
235
 
231
236
  render_page("#{file_base}-onepage#{lang_ext(lang)}.html", "static", {:doc => doc[:docs],
232
237
  :language => lang, :languages => Apipie.configuration.languages})
233
238
  end
234
239
 
235
240
  def generate_plain_page(file_base, doc, lang = nil)
236
- FileUtils.mkdir_p(File.dirname(file_base)) unless File.exists?(File.dirname(file_base))
241
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
237
242
 
238
243
  render_page("#{file_base}-plain#{lang_ext(lang)}.html", "plain", {:doc => doc[:docs],
239
244
  :language => lang, :languages => Apipie.configuration.languages}, nil)
240
245
  end
241
246
 
242
247
  def generate_index_page(file_base, doc, include_json = false, show_versions = false, lang = nil)
243
- FileUtils.mkdir_p(File.dirname(file_base)) unless File.exists?(File.dirname(file_base))
248
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
244
249
  versions = show_versions && Apipie.available_versions
245
250
  render_page("#{file_base}#{lang_ext(lang)}.html", "index", {:doc => doc[:docs],
246
251
  :versions => versions, :language => lang, :languages => Apipie.configuration.languages})
@@ -251,7 +256,7 @@ namespace :apipie do
251
256
  def generate_resource_pages(version, file_base, doc, include_json = false, lang = nil)
252
257
  doc[:docs][:resources].each do |resource_name, _|
253
258
  resource_file_base = File.join(file_base, resource_name.to_s)
254
- FileUtils.mkdir_p(File.dirname(resource_file_base)) unless File.exists?(File.dirname(resource_file_base))
259
+ FileUtils.mkdir_p(File.dirname(resource_file_base)) unless File.exist?(File.dirname(resource_file_base))
255
260
 
256
261
  doc = Apipie.to_json(version, resource_name, nil, lang)
257
262
  doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
@@ -265,7 +270,7 @@ namespace :apipie do
265
270
  doc[:docs][:resources].each do |resource_name, resource_params|
266
271
  resource_params[:methods].each do |method|
267
272
  method_file_base = File.join(file_base, resource_name.to_s, method[:name].to_s)
268
- FileUtils.mkdir_p(File.dirname(method_file_base)) unless File.exists?(File.dirname(method_file_base))
273
+ FileUtils.mkdir_p(File.dirname(method_file_base)) unless File.exist?(File.dirname(method_file_base))
269
274
 
270
275
  doc = Apipie.to_json(version, resource_name, method[:name], lang)
271
276
  doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
@@ -329,7 +334,7 @@ MESSAGE
329
334
  desc "Convert your examples from the old yaml into the new json format"
330
335
  task :convert_examples => :environment do
331
336
  yaml_examples_file = File.join(Rails.root, Apipie.configuration.doc_path, "apipie_examples.yml")
332
- if File.exists?(yaml_examples_file)
337
+ if File.exist?(yaml_examples_file)
333
338
  #if SafeYAML gem is enabled, it will load examples as an array of Hash, instead of hash
334
339
  if defined? SafeYAML
335
340
  examples = YAML.load_file(yaml_examples_file, :safe=>false)