hermod 2.1.0 → 2.2.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
  SHA1:
3
- metadata.gz: f734b2b05f6e0c454ade409a61f9eb18da49d9ca
4
- data.tar.gz: b5feefa69f5f93cc380c7841248b2a30b947b43e
3
+ metadata.gz: f824eee43c5ddbc599aebe96158698b9861b1b38
4
+ data.tar.gz: 51b60d86ba5750414a51d383757cab4ee9f8af39
5
5
  SHA512:
6
- metadata.gz: 0caa25fac9dc0cc74b4f624b480bb7d900f6d625910af7c39758e62ca1d217b96643e8733deefd63a781c41c77460fb6058ee23d75c20d82f22c8c773bc4b4a1
7
- data.tar.gz: d680e1797b1316cd5af0ed76b7d4f0c74f25c7147e2e51b99fb7e8d1c0387d6ca0c39b38d3bdd59e90cf14f22e40ca6d4c8634993a0bb289fcffa53bdbeadb5d
6
+ metadata.gz: a675232e7799a9b03d64f6c4a96043dbaf27cf4f8d31b3e1d01933c920570078d4a22f73c4df5e8e10fe06ba4f1ccc9078d7827469ef0ffbdbdce376ba3c5772
7
+ data.tar.gz: 8a2cc8a477aab48de66149eb98a54401e56971168e5d656b1d9b9cef52c6f439a3aa1879a706a2f5f491ec8135b7a47287fe87be657a822ac5f9958889ea771a
data/.travis.yml CHANGED
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
  bundler_args: --without test
3
3
  rvm:
4
- - 2.1.6
5
- - 2.2.2
6
- - ruby-head
4
+ - 2.1.8
5
+ - 2.2.4
6
+ - 2.3.0
7
7
  gemfile:
8
8
  - gemfiles/activesupport-3.2
9
9
  - gemfiles/activesupport-4.0
data/README.md CHANGED
@@ -266,6 +266,35 @@ end
266
266
  </Example>
267
267
  ```
268
268
 
269
+ #### DateTime Nodes
270
+
271
+ Datetime nodes let you send through a date and a time to HMRC. It will be
272
+ converted to the given datetime format which you can specify as a format
273
+ string in the `formats` option passed to the `Hermod::XmlSection.build`
274
+ call. Anything that responds to `strftime` can be passed to the node.
275
+ Anything else will cause an `Hermod::InvalidInputError` exception to be raised.
276
+
277
+ *Building an XmlSection*
278
+ ```ruby
279
+ Example = Hermod::XmlSection.build(formats: {datetime: "%Y-%m-%d %H:%M:%S"}) do |builder|
280
+ builder.datetime_node :published
281
+ end
282
+ ```
283
+
284
+ *Using that XmlSection*
285
+ ```ruby
286
+ Example.new do |example|
287
+ example.published DateTime.new(2014, 9, 3, 10, 42, 50)
288
+ end
289
+ ```
290
+
291
+ *The Resulting XML*
292
+ ```xml
293
+ <Example>
294
+ <Published>2014-09-03 10:42:50</Published>
295
+ </Example>
296
+ ```
297
+
269
298
  #### Yes Nodes
270
299
 
271
300
  Yes nodes allow you to send a boolean value to HMRC provided that value is
@@ -1,3 +1,3 @@
1
1
  module Hermod
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -79,7 +79,8 @@ module Hermod
79
79
  def self.formats
80
80
  @formats ||= {
81
81
  date: "%Y-%m-%d",
82
- money: "%.2f"
82
+ datetime: "%Y-%m-%d %H:%M:%S",
83
+ money: "%.2f",
83
84
  }
84
85
  end
85
86
 
@@ -112,6 +112,23 @@ module Hermod
112
112
  end
113
113
  end
114
114
 
115
+ # Public: defines a node for sending a datetime to HMRC
116
+ #
117
+ # name - the name of the node. This will become the name of the method on the XmlSection.
118
+ # options - a hash of options used to set up validations.
119
+ #
120
+ # Returns nothing you should rely on
121
+ def datetime_node(name, options={})
122
+ validators = [].tap do |validators|
123
+ validators << Validators::ValuePresence.new unless options.delete(:optional)
124
+ validators << Validators::TypeChecker.new(DateTime) { |value| value.respond_to? :strftime }
125
+ end
126
+
127
+ create_method(name, [], validators, options) do |value, attributes|
128
+ [(value ? value.strftime(format_for(:datetime)) : nil), attributes]
129
+ end
130
+ end
131
+
115
132
  # Public: defines a node for sending a boolean to HMRC. It will only be
116
133
  # sent if the boolean is true.
117
134
  #
@@ -0,0 +1,32 @@
1
+ require "minitest_helper"
2
+
3
+ module Hermod
4
+ describe XmlSection do
5
+
6
+ DateTimeXml = XmlSection.build do |builder|
7
+ builder.datetime_node :published
8
+ builder.datetime_node :redacted, optional: true
9
+ end
10
+
11
+ describe "Date nodes" do
12
+ subject do
13
+ DateTimeXml.new do |dummy|
14
+ dummy.published DateTime.new(2015, 3, 14, 12, 30, 56)
15
+ end
16
+ end
17
+
18
+ it "should format the datetime with the given format string" do
19
+ value_of_node("Published").must_equal "2015-03-14 12:30:56"
20
+ end
21
+
22
+ it "should raise an error if given something that isn't a date" do
23
+ proc { subject.redacted "yesterday" }.must_raise InvalidInputError
24
+ end
25
+
26
+ it "should ignore blank dates if the date is optional" do
27
+ subject.redacted nil
28
+ nodes("Redacted").must_be_empty
29
+ end
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hermod
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Mills
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-30 00:00:00.000000000 Z
11
+ date: 2016-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libxml-ruby
@@ -175,6 +175,7 @@ files:
175
175
  - spec/hermod/validators/value_presence_spec.rb
176
176
  - spec/hermod/validators/whole_units_spec.rb
177
177
  - spec/hermod/xml_section_builder/date_node_spec.rb
178
+ - spec/hermod/xml_section_builder/datetime_node_spec.rb
178
179
  - spec/hermod/xml_section_builder/integer_node_spec.rb
179
180
  - spec/hermod/xml_section_builder/monetary_node_spec.rb
180
181
  - spec/hermod/xml_section_builder/parent_node_spec.rb
@@ -204,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
205
  version: '0'
205
206
  requirements: []
206
207
  rubyforge_project:
207
- rubygems_version: 2.4.8
208
+ rubygems_version: 2.2.5
208
209
  signing_key:
209
210
  specification_version: 4
210
211
  summary: A Ruby library for talking to the HMRC Government Gateway.
@@ -220,6 +221,7 @@ test_files:
220
221
  - spec/hermod/validators/value_presence_spec.rb
221
222
  - spec/hermod/validators/whole_units_spec.rb
222
223
  - spec/hermod/xml_section_builder/date_node_spec.rb
224
+ - spec/hermod/xml_section_builder/datetime_node_spec.rb
223
225
  - spec/hermod/xml_section_builder/integer_node_spec.rb
224
226
  - spec/hermod/xml_section_builder/monetary_node_spec.rb
225
227
  - spec/hermod/xml_section_builder/parent_node_spec.rb