apidiesel 0.1.1 → 0.1.2

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: 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
  - - ">="