apidiesel 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: def62c1af888b8e8b6f85817415b289dbbad9096
4
- data.tar.gz: 0715e50f02634518ffdbd07b3994ec8e8b165918
3
+ metadata.gz: 94c0a261f4ccfcd6025dfde175bc042a418928b3
4
+ data.tar.gz: f34f072965617508439a5c676dd04f5fc43c3304
5
5
  SHA512:
6
- metadata.gz: 551528a0457520bc8f974b4703a083f3292e88214117966e16d8d41737ae1c0bc282040978dc4f5b85cdcc1bee8d3d3000713c1168d878cd3419f1ec20f1b1b8
7
- data.tar.gz: 614b06def512b127a7228866b183280357c2488099e9683d1517994e1b14b1e1e28f9907278d90401378fa169b1a0c27c86433c87ef1003b699b26a0bc38cc15
6
+ metadata.gz: d8f8bb9bd49c8b4ce07c0f22c390d32a82119561f9fc437adf24f954b7ea983cb4c802b43c9c5c3c5c55fff7522bd3a5dedcc09d7d12ff6983a1adfa3a70a96f
7
+ data.tar.gz: bd2b116e023ff02f989f633f3c806b320b12e4716950ac4d529a23011c4c11d5bdd72a380736e3d9329dc468597e1306c115c6f24717bab846541c95b1c447ec
data/apidiesel.gemspec CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.required_ruby_version = '~> 2.0'
22
+
21
23
  spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
22
24
  spec.add_runtime_dependency 'httpi', '>= 2.4.1'
23
25
 
@@ -7,6 +7,7 @@ module Apidiesel
7
7
  # accessors for class instance variables
8
8
  # (class-level variables, not shared with subclasses)
9
9
  class << self
10
+ attr_reader :url_args
10
11
 
11
12
  # Hash for storing validation closures. These closures are called with the request
12
13
  # parameters before the request is made and have the opportunity to check and modify them.
@@ -49,11 +50,13 @@ module Apidiesel
49
50
  # Falls back to the Api setting if blank.
50
51
  #
51
52
  # @param [String] value
52
- def url(value = nil)
53
+ def url(value = nil, **args)
54
+ return @url unless value || args.any?
55
+
53
56
  if value
54
- @url = value
57
+ @url = URI.parse(value)
55
58
  else
56
- @url
59
+ @url_args = args
57
60
  end
58
61
  end
59
62
 
@@ -122,7 +125,15 @@ module Apidiesel
122
125
  end
123
126
 
124
127
  def url
125
- self.class.url || @api.class.url
128
+ url = self.class.url || @api.class.url
129
+
130
+ if self.class.url_args
131
+ self.class.url_args.each do |key, value|
132
+ url.send("#{key}=", value)
133
+ end
134
+ end
135
+
136
+ url
126
137
  end
127
138
 
128
139
  def http_method
data/lib/apidiesel/api.rb CHANGED
@@ -55,7 +55,7 @@ module Apidiesel
55
55
  # @param [String] value
56
56
  def url(base_url = nil)
57
57
  if base_url
58
- config[:url] = base_url
58
+ config[:url] = URI.parse(base_url)
59
59
  else
60
60
  config[:url]
61
61
  end
data/lib/apidiesel/dsl.rb CHANGED
@@ -63,6 +63,7 @@ module Apidiesel
63
63
  # @param [Hash] *args
64
64
  # @option *args [Boolean] :optional (false) defines whether this parameter may be omitted
65
65
  # @option *args [Symbol] :optional_if_present param_name is optional, if the parameter given here is present instead
66
+ # @option *args [Symbol] :required_if_present param_name is required if param_name is also present
66
67
  # @option *args [Symbol] :submitted_as submit param_name to the API under the name given here
67
68
  # @option *args [Object] :default a default parameter to be set when no value is specified
68
69
  # @option *args [Enumerable] :allowed_values only accept the values in this Enumerable.
@@ -101,6 +102,25 @@ module Apidiesel
101
102
  validation_builder(:to_s, param_name, *args)
102
103
  end
103
104
 
105
+ # Defines a date, time or datetime parameter.
106
+ #
107
+ #
108
+ # @example
109
+ # expects do
110
+ # datetime :starts_at, format: '%d-%m-%Y'
111
+ # end
112
+ #
113
+ # @param (see #string)
114
+ # @option *args [String] :format strftime format string
115
+ # @option (see #string)
116
+ def datetime(param_name, **args)
117
+ if args[:format]
118
+ args[:processor] = ->(value) { value.try(:strftime, args[:format]) }
119
+ end
120
+
121
+ validation_builder(:strftime, param_name, **args)
122
+ end
123
+
104
124
  protected
105
125
 
106
126
  def validation_builder(duck_typing_check, param_name, *args)
@@ -115,6 +135,10 @@ module Apidiesel
115
135
  options[:optional] = true unless given_params[ options[:optional_if_present] ].blank?
116
136
  end
117
137
 
138
+ if options.has_key?(:required_if_present)
139
+ options[:optional] = given_params[ options[:required_if_present] ].present? ? false : true
140
+ end
141
+
118
142
  unless options.has_key?(:optional) && options[:optional] == true
119
143
  raise Apidiesel::InputError, "missing arg: #{param_name} - options: #{options.inspect}" unless given_params.has_key?(param_name) && !given_params[param_name].blank?
120
144
  raise Apidiesel::InputError, "invalid arg #{param_name}: must respond to #{duck_typing_check}" unless given_params[param_name].respond_to?(duck_typing_check)
@@ -130,6 +154,10 @@ module Apidiesel
130
154
  end
131
155
  end
132
156
 
157
+ if options[:processor]
158
+ given_params[param_name] = options[:processor].call(given_params[param_name])
159
+ end
160
+
133
161
  if options[:submitted_as]
134
162
  processed_params[ options[:submitted_as] ] = given_params[param_name]
135
163
  else
@@ -11,7 +11,7 @@ module Apidiesel
11
11
  # instance, as given to the handlers #run method
12
12
  #
13
13
  def execute_request(request:, payload:, api_config:)
14
- http_request = HTTPI::Request.new(request.action.url)
14
+ http_request = HTTPI::Request.new(request.action.url.try(:to_s))
15
15
  http_request.body = payload
16
16
 
17
17
  http_request.auth.ssl.verify_mode = api_config[:ssl_verify_mode] || :peer
@@ -31,7 +31,7 @@ module Apidiesel
31
31
  [
32
32
  "Apidiesel::Request",
33
33
  action.http_method.to_s.upcase,
34
- action.url,
34
+ action.url.try(:to_s),
35
35
  action.endpoint,
36
36
  parameters.collect { |key, value| "#{key}: #{value}"}.join(',')
37
37
  ].join(' ')
@@ -1,3 +1,3 @@
1
1
  module Apidiesel
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/apidiesel.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'uri'
1
2
  require 'httpi'
2
3
 
3
4
  HTTPI.log = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apidiesel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan-Christian Foeh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-10 00:00:00.000000000 Z
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -103,9 +103,9 @@ require_paths:
103
103
  - lib
104
104
  required_ruby_version: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - ">="
106
+ - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '0'
108
+ version: '2.0'
109
109
  required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - ">="