dof 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 71cd14922fb4ae55bce6c6bb13a4ec712cd6b3eada9fdc4d1b60dd3e92910bf5
4
+ data.tar.gz: 0dd8e99c443220e7c30dd80d0533bc1990291556347ec651066ff572e72c0ced
5
+ SHA512:
6
+ metadata.gz: 18869f525f4370ac4ea2c3062dac09e77def696528205b9d30bccec65861a76b14a744ed66c50ce5ce81b06c007e938557e1bfdfaca48811d1795a943e229ebd
7
+ data.tar.gz: b112b02349dcd2f3f55c8d8c91c85bab99b28b924eaba939b440361a31202e6f84fb923c9c23ef863088d82f209fbf9aaff72a5693aacca91572dde4738c2958
@@ -0,0 +1,67 @@
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: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ - name: Set up Ruby
24
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
+ # uses: ruby/setup-ruby@v1
27
+ uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
28
+ with:
29
+ ruby-version: 2.6
30
+ - name: Install dependencies
31
+ run: bundle install
32
+ - name: Run tests
33
+ run: bundle exec rake
34
+
35
+ build:
36
+ name: Build + Publish
37
+ runs-on: ubuntu-latest
38
+
39
+ steps:
40
+ - uses: actions/checkout@v2
41
+ - name: Set up Ruby 2.6
42
+ uses: actions/setup-ruby@v1
43
+ with:
44
+ ruby-version: 2.6.x
45
+
46
+ - name: Publish to GPR
47
+ run: |
48
+ mkdir -p $HOME/.gem
49
+ touch $HOME/.gem/credentials
50
+ chmod 0600 $HOME/.gem/credentials
51
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
52
+ gem build *.gemspec
53
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
54
+ env:
55
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
56
+ OWNER: ${{ github.repository_owner }}
57
+
58
+ - name: Publish to RubyGems
59
+ run: |
60
+ mkdir -p $HOME/.gem
61
+ touch $HOME/.gem/credentials
62
+ chmod 0600 $HOME/.gem/credentials
63
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
64
+ gem build *.gemspec
65
+ gem push *.gem
66
+ env:
67
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.1
7
+ before_install: gem install bundler -v 1.17.3
@@ -0,0 +1,33 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "DOF/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "dof"
8
+ spec.version = DOF::VERSION
9
+ spec.authors = ["Yellowme"]
10
+ spec.email = ["hola@yellowme.mx"]
11
+
12
+ spec.summary = %q{A simple service to consume Mexican DOF data}
13
+ spec.homepage = "https://github.com/yellowme/DOF"
14
+
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ end
21
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_dependency "faraday", "~> 1.0.0"
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.17"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency 'app_version_tasks'
31
+ spec.add_development_dependency 'simplecov', '~> 0.17'
32
+ spec.add_development_dependency 'webmock', '~> 3.7'
33
+ end
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in DOF.gemspec
6
+ gemspec
@@ -0,0 +1,61 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ Dof (1.0.0)
5
+ faraday (~> 1.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.7.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
12
+ app_version_tasks (0.2.5)
13
+ git (~> 1.3)
14
+ crack (0.4.4)
15
+ diff-lcs (1.4.4)
16
+ docile (1.3.2)
17
+ faraday (1.0.1)
18
+ multipart-post (>= 1.2, < 3)
19
+ git (1.7.0)
20
+ rchardet (~> 1.8)
21
+ hashdiff (1.0.1)
22
+ multipart-post (2.1.1)
23
+ public_suffix (4.0.6)
24
+ rake (10.5.0)
25
+ rchardet (1.8.0)
26
+ rspec (3.9.0)
27
+ rspec-core (~> 3.9.0)
28
+ rspec-expectations (~> 3.9.0)
29
+ rspec-mocks (~> 3.9.0)
30
+ rspec-core (3.9.3)
31
+ rspec-support (~> 3.9.3)
32
+ rspec-expectations (3.9.2)
33
+ diff-lcs (>= 1.2.0, < 2.0)
34
+ rspec-support (~> 3.9.0)
35
+ rspec-mocks (3.9.1)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.9.0)
38
+ rspec-support (3.9.3)
39
+ simplecov (0.19.0)
40
+ docile (~> 1.1)
41
+ simplecov-html (~> 0.11)
42
+ simplecov-html (0.12.3)
43
+ webmock (3.9.1)
44
+ addressable (>= 2.3.6)
45
+ crack (>= 0.3.2)
46
+ hashdiff (>= 0.4.0, < 2.0.0)
47
+
48
+ PLATFORMS
49
+ ruby
50
+
51
+ DEPENDENCIES
52
+ Dof!
53
+ app_version_tasks
54
+ bundler (~> 1.17)
55
+ rake (~> 10.0)
56
+ rspec (~> 3.0)
57
+ simplecov (~> 0.17)
58
+ webmock (~> 3.7)
59
+
60
+ BUNDLED WITH
61
+ 1.17.3
@@ -0,0 +1,76 @@
1
+ # DOF
2
+ A simple gem to interact with the Mexican DOF open data service
3
+
4
+ ## Installation
5
+
6
+ Add this line to your application's Gemfile:
7
+
8
+ ```ruby
9
+ gem 'dof'
10
+ ```
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install dof
19
+
20
+ ## Usage
21
+
22
+ Add a new initializer and add the following lines
23
+ ```ruby
24
+ require "DOF"
25
+
26
+ DOF.config do |c|
27
+ c.base_uri = "https://sidofqa.segob.gob.mx/dof/sidof/"
28
+ end
29
+ ```
30
+
31
+ ### Querying the current USD exchange rate
32
+
33
+ To get the current (daily) exchange rate call `USD_exchange_rate`
34
+
35
+ ```ruby
36
+ DOF::Indicator.USD_exchange_rate
37
+ ```
38
+
39
+ This will return an `RequestResponse` object with the following attributes:
40
+
41
+ ```ruby
42
+ # An array of indicator objects
43
+ :indicators
44
+ # A request response confirmation
45
+ :response_code
46
+ # response status eg: 200/500
47
+ :response_status
48
+ # number of indicators found
49
+ :total_indicators
50
+ ```
51
+
52
+ ### Querying the current UDIS exchange rate
53
+
54
+ To get the current (daily) exchange rate call `UDIS_exchange_rate`
55
+
56
+ ```ruby
57
+ DOF::Indicator.UDIS_exchange_rate
58
+ ```
59
+
60
+ ### Querying indicators by date range
61
+
62
+ You can call `USD_exchange_rate` and `UDIS_exchange_rate` with date params
63
+
64
+ ```ruby
65
+ DOF::Indicator.USD_exchange_rate(date: initial_date, end_date: end_date)
66
+ ```
67
+
68
+ The accepted date formats are:
69
+ * `String` in *mm/dd/YYYY* format
70
+ * `String` in *mm-dd-YYYY* format
71
+ * `String` in *mm.dd.YYYY* format
72
+ * `Date` type, eg: *Date.today*
73
+
74
+ ## Contributing
75
+
76
+ Bug reports and pull requests are welcome on GitHub at https://github.com/yellowme/DOF.
@@ -0,0 +1,14 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require 'app_version_tasks'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+
9
+ spec = Gem::Specification.find_by_name 'app_version_tasks'
10
+ load "#{spec.gem_dir}/lib/tasks/app_version_tasks.rake"
11
+ AppVersionTasks.configure do |config|
12
+ config.application_name = 'dof'
13
+ config.version_file_path = File.join('lib', 'DOF', 'version.rb')
14
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "DOF"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,30 @@
1
+ require "DOF/version"
2
+ require "DOF/connection"
3
+ require "DOF/client"
4
+ require "DOF/endpoints"
5
+ require "DOF/indicator"
6
+ require "DOF/indicator_codes"
7
+ require "DOF/responses/request_response"
8
+ require "DOF/responses/indicator_response"
9
+ require "DOF/date_formatter"
10
+ require "DOF/errors/base_error"
11
+ require "DOF/errors/precondition_failed"
12
+ require "DOF/errors/network_error"
13
+
14
+ module DOF
15
+ def self.config
16
+ yield self
17
+ end
18
+
19
+ def self.version
20
+ @version
21
+ end
22
+
23
+ def self.base_uri
24
+ @base_uri
25
+ end
26
+
27
+ def self.base_uri=(base_uri)
28
+ @base_uri = base_uri
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ module DOF
2
+ module Client
3
+ def self.get(path:, body: nil, headers: {})
4
+ response = DOF.connection.get path, body, headers
5
+ JSON.parse(response.body)
6
+ rescue Faraday::ConnectionFailed, Faraday::TimeoutError
7
+ raise DOF::Errors::NetworkError
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'faraday'
2
+ module DOF
3
+ def self.connection
4
+ Faraday.new(url: DOF.base_uri ) do |faraday|
5
+ faraday.response :logger
6
+ faraday.adapter Faraday.default_adapter
7
+ faraday.use Faraday::Response::RaiseError
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module DOF
2
+ module DateFormatter
3
+ DATE_FORMAT = '^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'
4
+
5
+ def self.format(date)
6
+ formatted_date = ''
7
+
8
+ if ((date.is_a? String) && date.match(DATE_FORMAT)) || (date.is_a? Date)
9
+ formatted_date = Date.parse(date.to_s).strftime("%d-%m-%Y")
10
+ else
11
+ raise Errors::PreconditionFailed.new("The date has incorrect format")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module DOF
2
+ module Endpoints
3
+ INDICATORS = "indicadores"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module DOF
2
+ module Errors
3
+ class BaseError < StandardError
4
+ attr_accessor :code, :detail
5
+
6
+ def initialize(message = '', code: '', detail: '')
7
+ @code = code
8
+ @detail = detail
9
+ super("#{code} #{message}")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module DOF
2
+ module Errors
3
+ class NetworkError < BaseError; end
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module DOF
2
+ module Errors
3
+ class PreconditionFailed < BaseError; end
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ module DOF
2
+ class Indicator
3
+ class << self
4
+
5
+ def USD_exchange_rate(date: Date.today, end_date: date)
6
+ raw_response = get(Indicator_Codes::USD, date, end_date)
7
+ response = Responses::RequestResponse.new(raw_response)
8
+ end
9
+
10
+ def UDIS_exchange_rate(date: Date.today, end_date: date)
11
+ raw_response = get(Indicator_Codes::UDIS, date, end_date)
12
+ response = Responses::RequestResponse.new(raw_response)
13
+ end
14
+
15
+ private
16
+
17
+ def get(indicator, initial_date, end_date)
18
+ initial_date = DateFormatter.format(initial_date)
19
+ end_date = DateFormatter.format(end_date)
20
+
21
+ Client.get path: "#{Endpoints::INDICATORS}/#{indicator}/#{initial_date}/#{end_date}"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ module DOF
2
+ class Indicator_Codes
3
+ USD = "158".freeze
4
+ UDIS = "159".freeze
5
+ end
6
+ end
@@ -0,0 +1,20 @@
1
+ require 'bigdecimal'
2
+
3
+ module DOF
4
+ module Responses
5
+ class IndicatorResponse
6
+
7
+ attr_reader :indicador_code
8
+ attr_reader :indicador_type_code
9
+ attr_reader :date
10
+ attr_reader :value
11
+
12
+ def initialize(data)
13
+ @indicador_code = data["codIndicador"]
14
+ @indicador_type_code = data["codTipoIndicador"]
15
+ @date = data["fecha"]
16
+ @value = BigDecimal(data["valor"])
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ module DOF
2
+ module Responses
3
+ class RequestResponse
4
+ NO_ERROR_CODE = 200
5
+
6
+ attr_reader :indicators
7
+ attr_reader :response_code
8
+ attr_reader :response_status
9
+ attr_reader :total_indicators
10
+
11
+ def initialize(response)
12
+ parse_response(response)
13
+ end
14
+
15
+ def parse_response(response)
16
+ @response_code = response["messageCode"]
17
+ @response_status = response["response"]
18
+ @total_indicators = response["TotalIndicadores"]
19
+ @indicators = []
20
+
21
+ build_indicator(response["ListaIndicadores"])
22
+ end
23
+
24
+ def build_indicator(data)
25
+ data.each do |indicator|
26
+ @indicators << Responses::IndicatorResponse.new(indicator)
27
+ end
28
+ end
29
+
30
+ def successful?
31
+ @response_code == NO_ERROR_CODE
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module DOF
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dof
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Yellowme
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.17'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.17'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: app_version_tasks
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.17'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.17'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.7'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.7'
111
+ description:
112
+ email:
113
+ - hola@yellowme.mx
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".github/workflows/ruby.yml"
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".travis.yml"
122
+ - DOF.gemspec
123
+ - Gemfile
124
+ - Gemfile.lock
125
+ - README.md
126
+ - Rakefile
127
+ - bin/console
128
+ - bin/setup
129
+ - lib/DOF.rb
130
+ - lib/DOF/client.rb
131
+ - lib/DOF/connection.rb
132
+ - lib/DOF/date_formatter.rb
133
+ - lib/DOF/endpoints.rb
134
+ - lib/DOF/errors/base_error.rb
135
+ - lib/DOF/errors/network_error.rb
136
+ - lib/DOF/errors/precondition_failed.rb
137
+ - lib/DOF/indicator.rb
138
+ - lib/DOF/indicator_codes.rb
139
+ - lib/DOF/responses/indicator_response.rb
140
+ - lib/DOF/responses/request_response.rb
141
+ - lib/DOF/version.rb
142
+ homepage: https://github.com/yellowme/DOF
143
+ licenses: []
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubygems_version: 3.0.3
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: A simple service to consume Mexican DOF data
164
+ test_files: []