active_forms 0.2.1 → 0.3.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.
Files changed (41) hide show
  1. data/.gitignore +15 -19
  2. data/.travis.yml +10 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +3 -1
  5. data/README.md +31 -0
  6. data/Rakefile +3 -49
  7. data/active_forms.gemspec +16 -81
  8. data/lib/active_forms.rb +41 -15
  9. data/lib/active_forms/application.rb +3 -1
  10. data/lib/active_forms/application_print.rb +2 -0
  11. data/lib/active_forms/configuration.rb +3 -1
  12. data/lib/active_forms/entry.rb +51 -0
  13. data/lib/active_forms/entry_printout.rb +22 -0
  14. data/lib/active_forms/form.rb +3 -1
  15. data/lib/active_forms/form_version.rb +19 -0
  16. data/lib/active_forms/mapper.rb +2 -0
  17. data/lib/active_forms/request.rb +27 -8
  18. data/lib/active_forms/token.rb +18 -0
  19. data/lib/active_forms/version.rb +3 -0
  20. data/test/active_forms/application_print_test.rb +2 -0
  21. data/test/active_forms/application_test.rb +2 -0
  22. data/test/active_forms/entry_printout_test.rb +60 -0
  23. data/test/active_forms/entry_test.rb +125 -0
  24. data/test/active_forms/form_test.rb +2 -0
  25. data/test/active_forms/form_version_test.rb +37 -0
  26. data/test/active_forms/mapper_test.rb +2 -0
  27. data/test/active_forms/request_test.rb +14 -12
  28. data/test/active_forms/token_test.rb +33 -0
  29. data/test/active_forms_test.rb +2 -0
  30. data/test/fixtures/get_entries.xml +22 -0
  31. data/test/fixtures/get_entries_single.xml +14 -0
  32. data/test/fixtures/get_entrydata.xml +38 -0
  33. data/test/fixtures/get_entryprintout.xml +15 -0
  34. data/test/fixtures/get_formaccesstokens.xml +12 -0
  35. data/test/fixtures/get_forminfo.xml +21 -0
  36. data/test/fixtures/post_entrydata.xml +12 -0
  37. data/test/test_helper.rb +5 -4
  38. metadata +99 -32
  39. data/.document +0 -5
  40. data/README.rdoc +0 -7
  41. data/VERSION +0 -1
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  class ActiveForms::Form < ActiveForms::Mapper
2
4
  columns :name, :code, :url, :status, :activeReleaseCode, :activeReleaseName, :title, :isPrintable
3
5
 
@@ -8,7 +10,7 @@ class ActiveForms::Form < ActiveForms::Mapper
8
10
  hashes = response["forms"]["form"]
9
11
  hashes = [hashes] if hashes.is_a?(Hash)
10
12
 
11
- objects = hashes.map { |attributes| new(attributes) }
13
+ objects = hashes.nil? ? [] : hashes.map { |attributes| new(attributes) }
12
14
  end
13
15
  end
14
16
 
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+
3
+ class ActiveForms::FormVersion < ActiveForms::Mapper
4
+ columns :name, :code, :url, :mailIntegration, :accessType, :authKey, :status,
5
+ :description, :creationDate, :isPrintable
6
+
7
+ class << self
8
+ # required params:
9
+ # apiFormCode
10
+ def all(params = {})
11
+ response = ActiveForms::Request.get("forminfo", params)
12
+
13
+ hashes = response["formInfo"]["formVersion"]
14
+ hashes = [hashes] if hashes.is_a?(Hash)
15
+
16
+ objects = hashes.nil? ? [] : hashes.map { |attributes| new(attributes) }
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  module ActiveForms
2
4
  class Mapper
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'digest/sha1'
2
4
  require 'cgi'
3
5
  require 'httparty'
@@ -37,16 +39,22 @@ module ActiveForms
37
39
  end
38
40
 
39
41
  @api_params["apiKey"] = ActiveForms.configuration.api_key
40
- @api_params["apiVersion"] = "1.0"
41
- @api_params["apiTimestamp"] ||= Time.now.utc.iso8601(3)
42
+ @api_params["apiVersion"] = "3.0"
43
+ @api_params["apiTimestamp"] ||= Time.now.strftime('%Y-%m-%dT%H:%M:%S.000 %z')
42
44
  @api_params["apiSig"] = api_sig
43
45
 
44
46
  @uri = build_uri
45
47
  end
46
48
 
47
49
  def perform
48
- response = HTTParty.send(http_method.downcase, uri)
49
- raise_error(response)
50
+ ActiveForms.log("[ActiveForms] Request: #{http_method.upcase} #{uri}")
51
+ begin
52
+ response = HTTParty.send(http_method.downcase, uri)
53
+ verify_response(response)
54
+ rescue
55
+ response = HTTParty.send(http_method.downcase, uri)
56
+ verify_response(response)
57
+ end
50
58
  response
51
59
  end
52
60
 
@@ -54,7 +62,13 @@ module ActiveForms
54
62
 
55
63
  def build_uri
56
64
  params = http_method == "GET" ? @params.map { |k, v| "#{k}=#{CGI::escape(v)}" } : []
57
- api_params = @api_params.map { |k, v| "#{k}=#{v}" }
65
+ api_params = @api_params.map do |k, v|
66
+ if k == 'apiTimestamp'
67
+ "#{k}=#{CGI::escape(v)}"
68
+ else
69
+ "#{k}=#{v}"
70
+ end
71
+ end
58
72
 
59
73
  url_with_path + "?" + [params, api_params].flatten.join("&")
60
74
  end
@@ -76,10 +90,15 @@ module ActiveForms
76
90
  Digest::SHA1.hexdigest(string)
77
91
  end
78
92
 
79
- def raise_error(response)
93
+ def verify_response(response)
94
+ ActiveForms.log("[ActiveForms] Response: #{response}")
80
95
  if response["error"]
81
- klass = ("ActiveForms::" << response["error"]["code"].downcase.camelize).constantize
82
- raise klass.new(response["error"]["message"])
96
+ begin
97
+ klass = ("ActiveForms::" << response["error"]["code"].downcase.camelize).constantize
98
+ raise klass.new(response["error"]["message"])
99
+ rescue NameError, NoMethodError
100
+ raise("Unknown exception: #{response["error"].inspect}")
101
+ end
83
102
  end
84
103
  end
85
104
  end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ class ActiveForms::Token < ActiveForms::Mapper
4
+ columns :value
5
+
6
+ class << self
7
+ # required params:
8
+ # apiFormCode
9
+ def all(params = {})
10
+ response = ActiveForms::Request.get('formaccesstokens', params)
11
+
12
+ hashes = response['formAccessTokens']['token']
13
+ hashes = [hashes] if hashes.is_a?(Hash)
14
+
15
+ objects = hashes.nil? ? [] : hashes.map { |attributes| new(attributes) }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveForms
2
+ VERSION = "0.3.0"
3
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ActiveForms::ApplicationPrintTest < Test::Unit::TestCase
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ActiveForms::ApplicationTest < Test::Unit::TestCase
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+
5
+ class ActiveForms::EntryPrintoutTest < Test::Unit::TestCase
6
+ context "" do
7
+ setup do
8
+ configure
9
+ end
10
+
11
+ context "instance" do
12
+ setup do
13
+ @entry = ActiveForms::EntryPrintout.new(
14
+ :number => "1234",
15
+ :form_code => "credit_card_entry",
16
+ :form_version_code => "version_1",
17
+ :date => "2007-08-23T12:43:03",
18
+ :status => "sent",
19
+ :content_type => "application/pdf",
20
+ :print_content => "wAARCAMABAADASIA"
21
+ )
22
+ end
23
+
24
+ should "have correctly built attributes" do
25
+ attributes = {
26
+ "number" => "1234",
27
+ "form_code" => "credit_card_entry",
28
+ "form_version_code" => "version_1",
29
+ "date" => "2007-08-23T12:43:03",
30
+ "status" => "sent",
31
+ "content_type" => "application/pdf",
32
+ "print_content" => "wAARCAMABAADASIA"
33
+ }
34
+
35
+ assert_equal attributes, @entry.attributes
36
+ end
37
+ end
38
+
39
+ context "when sent ActiveForms::EntryPrintout.find with form code and application number" do
40
+ setup do
41
+ stub_get(/entryprintout/, success_response("get_entryprintout"))
42
+ @entry_printout = ActiveForms::EntryPrintout.find(:formCode => "credit_card_entry", :number => "23456")
43
+ end
44
+
45
+ should "respond with ActiveForms::EntryPrintout instance" do
46
+ entry_printout = ActiveForms::EntryPrintout.new(
47
+ :number => "23456",
48
+ :formCode => "credit_card_entry",
49
+ :formVersionCode => "version_1",
50
+ :date => "2007-08-23T12:43:03",
51
+ :status => "sent",
52
+ :contentType => "application/pdf",
53
+ :printoutContent => "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMABAADASIA"
54
+ )
55
+
56
+ assert_equal entry_printout, @entry_printout
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,125 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+
5
+ class ActiveForms::EntryTest < Test::Unit::TestCase
6
+ context "" do
7
+ setup do
8
+ configure
9
+ end
10
+
11
+ context "instance" do
12
+ setup do
13
+ @entry = ActiveForms::Entry.new(
14
+ :number => "1234",
15
+ :form_code => "credit_card_entry",
16
+ :field_data => {
17
+ :last_name => "Kowalski",
18
+ :ubezpieczenie => ["ubezpieczenie_karty", "na_zycie"]
19
+ }
20
+ )
21
+ end
22
+
23
+ should "have correctly built attributes" do
24
+ attributes = {
25
+ "number" => "1234",
26
+ "form_code" => "credit_card_entry",
27
+ "field_data" => {
28
+ "last_name" => "Kowalski",
29
+ "ubezpieczenie" => ["ubezpieczenie_karty", "na_zycie"]
30
+ }
31
+ }
32
+
33
+ assert_equal attributes, @entry.attributes
34
+ end
35
+ end
36
+
37
+ context "when sent ActiveForms::Entry.all with multi-response" do
38
+ setup do
39
+ stub_get(/entries/, success_response("get_entries"))
40
+ @entries = ActiveForms::Entry.all
41
+ end
42
+
43
+ should "respond with array of entry instances" do
44
+ entry1 = ActiveForms::Entry.new(
45
+ :number => "12234",
46
+ :formCode => "credit_card_entry",
47
+ :formVersionCode => "version_1",
48
+ :date => "2007-08-23T12:43:03",
49
+ :status => "sent",
50
+ :isPrintable => "true"
51
+ )
52
+
53
+ entry2 = ActiveForms::Entry.new(
54
+ :number => "12235",
55
+ :formCode => "credit_card_entry",
56
+ :formVersionCode => "version_1",
57
+ :date => "2007-08-23T12:44:03",
58
+ :status => "sent",
59
+ :isPrintable => "true"
60
+ )
61
+
62
+ assert @entries.include?(entry1)
63
+ assert @entries.include?(entry2)
64
+ assert_equal 2, @entries.size
65
+ end
66
+ end
67
+
68
+ context "when sent ActiveForms::Entry.all with single-response" do
69
+ setup do
70
+ stub_get(/entries/, success_response("get_entries_single"))
71
+ @entries = ActiveForms::Entry.all
72
+ end
73
+
74
+ should "respond with array of entry instances" do
75
+ entry = ActiveForms::Entry.new(
76
+ :number => "12234",
77
+ :formCode => "credit_card_entry",
78
+ :formVersionCode => "version_1",
79
+ :date => "2007-08-23T12:43:03",
80
+ :status => "sent",
81
+ :isPrintable => "true"
82
+ )
83
+
84
+ assert_equal [entry], @entries
85
+ end
86
+ end
87
+
88
+ context "when post entry data by ActiveForms::Entry.create" do
89
+ setup do
90
+ stub_post(/entrydata/, success_response("post_entrydata"))
91
+ @entry = ActiveForms::Entry.create :apiFormCode => 'credit_card_entry'
92
+ end
93
+
94
+ should "respond instance of ActiveForms::Entry and accessToken" do
95
+ entry = ActiveForms::Entry.new(
96
+ :number => "12234",
97
+ :formCode => "credit_card_entry",
98
+ :formVersionCode => "version_1",
99
+ :date => "2008-01-01T00:00:00.00+0000",
100
+ :status => "saved",
101
+ :isPrintable => "true",
102
+ :accessToken => "43r9j34f9j3"
103
+ )
104
+ assert_equal entry, @entry
105
+ end
106
+ end
107
+
108
+ context "when sent ActiveForms::Entry.destroy on got entry" do
109
+ setup do
110
+ @response = { :status => ["204", "No content"], :content_type => "text/xml"}
111
+ stub_delete(/entrydata/, @response)
112
+ stub_get(/entries/, success_response("get_entries"))
113
+ @entries = ActiveForms::Entry.all
114
+ end
115
+
116
+ should "respond with 204 status" do
117
+ @entries.each do |entrydata|
118
+ assert entrydata.destroy
119
+ assert ActiveForms::Entry.delete({ :apiFormCode => entrydata.formCode, :apiNumber => entrydata.number })
120
+ end
121
+ end
122
+ end
123
+
124
+ end
125
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ActiveForms::FormTest < Test::Unit::TestCase
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+
5
+ class ActiveForms::FormVersionTest < Test::Unit::TestCase
6
+ context "" do
7
+ setup do
8
+ configure
9
+ end
10
+
11
+ context "when send ActiveForms::FormVersion.all with multi-response" do
12
+ setup do
13
+ stub_get(/forminfo/, success_response("get_forminfo"))
14
+ @versions = ActiveForms::FormVersion.all :apiFormCode => 'hipoteka'
15
+ end
16
+
17
+ should "get all versions of form" do
18
+ formVersion1 = ActiveForms::FormVersion.new(
19
+ :code => "1.0", :name => "Podstawowa", :status => "active",
20
+ :description => "Pierwsza wersja wniosku",
21
+ :creationDate => "2007-01-01 12:00:00+0100", :isPrintable => "false")
22
+ formVersion2 = ActiveForms::FormVersion.new(
23
+ :code => "1.1", :name => "Poprawki", :status => "inactive",
24
+ :description => "Druga wersja wniosku",
25
+ :creationDate => "2007-01-02 12:00:00+0100", :isPrintable => "true")
26
+ formVersion3 = ActiveForms::FormVersion.new(
27
+ :code => "1.2", :name => "Poprawki 2", :status => "inactive",
28
+ :description => "Trzecia wersja wniosku",
29
+ :creationDate => "2007-01-03 12:00:00+0100", :isPrintable => "true")
30
+
31
+ assert @versions.include?(formVersion1)
32
+ assert @versions.include?(formVersion2)
33
+ assert @versions.include?(formVersion3)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ActiveForms::MapperTest < Test::Unit::TestCase
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ActiveForms::RequestTest < Test::Unit::TestCase
@@ -6,12 +8,12 @@ class ActiveForms::RequestTest < Test::Unit::TestCase
6
8
 
7
9
  context "GET request" do
8
10
  setup do
9
- @request = ActiveForms::Request.new(:get, "forms", :param => "a&b value", :apiTimestamp => Time.parse("2010-02-18T01:18:19.218Z").utc.iso8601(3), :apiParam => "apiValue", :apiKey => "fake", :apiVersion => "fake", :apiSig => "fake")
11
+ @request = ActiveForms::Request.new(:get, "forms", :param => "a&b value", :apiTimestamp => "2010-02-18T01:18:19.210+0200", :apiParam => "apiValue", :apiKey => "fake", :apiVersion => "fake", :apiSig => "fake")
10
12
  end
11
13
 
12
14
  should "recognize params and apiParams" do
13
15
  assert_equal "a&b value", @request.params["param"]
14
- assert_equal "2010-02-18T01:18:19.218Z", @request.api_params["apiTimestamp"]
16
+ assert_equal "2010-02-18T01:18:19.210+0200", @request.api_params["apiTimestamp"]
15
17
  end
16
18
 
17
19
  should "set apiKey, apiVersion and apiSig params by itself" do
@@ -21,11 +23,11 @@ class ActiveForms::RequestTest < Test::Unit::TestCase
21
23
  end
22
24
 
23
25
  should "have apiSig counted" do
24
- assert_equal "8069430fe9aabbc2c2fcc895cd423f2a83085185", @request.api_params["apiSig"]
26
+ assert_equal "4d249bdd51f7da5fa4c9bfbdfc44ff5df291862b", @request.api_params["apiSig"]
25
27
  end
26
28
 
27
29
  should "have correct uri" do
28
- assert_same_uri "https://api.example.com/client/forms?apiSig=8069430fe9aabbc2c2fcc895cd423f2a83085185&apiKey=123456&apiTimestamp=2010-02-18T01:18:19.218Z&apiVersion=1.0&param=a%26b+value&apiParam=apiValue", @request.uri
30
+ assert_same_uri "https://api.example.com/client/forms?apiSig=4d249bdd51f7da5fa4c9bfbdfc44ff5df291862b&apiKey=123456&apiTimestamp=2010-02-18T01%3A18%3A19.210%2B0200&apiVersion=3.0&param=a%26b+value&apiParam=apiValue", @request.uri
29
31
  end
30
32
 
31
33
  should "have params escaped in uri" do
@@ -60,15 +62,15 @@ class ActiveForms::RequestTest < Test::Unit::TestCase
60
62
 
61
63
  context "POST request" do
62
64
  setup do
63
- @request = ActiveForms::Request.new(:post, "forms", :param => "a&b value", :apiTimestamp => Time.parse("2010-02-18T01:18:19.218Z").utc.iso8601(3), :apiParam => "apiValue")
65
+ @request = ActiveForms::Request.new(:post, "forms", :param => "a&b value", :apiTimestamp => "2010-02-18T01:18:19.218+0200", :apiParam => "apiValue")
64
66
  end
65
67
 
66
68
  should "have api_sig counted" do
67
- assert_equal "fa9c81c5fcdf078528730ff765044f7d4dbcaa8e", @request.api_params["apiSig"]
69
+ assert_equal "eaeb701de3bb1450859ef16eb9fda5c7db407e38", @request.api_params["apiSig"]
68
70
  end
69
71
 
70
72
  should "have correct uri" do
71
- assert_same_uri "https://api.example.com/client/forms?apiSig=fa9c81c5fcdf078528730ff765044f7d4dbcaa8e&apiKey=123456&apiTimestamp=2010-02-18T01:18:19.218Z&apiVersion=1.0&apiParam=apiValue", @request.uri
73
+ assert_same_uri "https://api.example.com/client/forms?apiSig=eaeb701de3bb1450859ef16eb9fda5c7db407e38&apiKey=123456&apiTimestamp=2010-02-18T01%3A18%3A19.218%2B0200&apiVersion=3.0&apiParam=apiValue", @request.uri
72
74
  end
73
75
  end
74
76
 
@@ -80,21 +82,21 @@ class ActiveForms::RequestTest < Test::Unit::TestCase
80
82
 
81
83
  should "be equivalent to Request.new(:post, path).perform" do
82
84
  request = ActiveForms::Request.new(:post, "forms", :param => "value")
83
- assert_equal @response, request.perform
85
+ assert_equal @response.parsed_response, request.perform.parsed_response
84
86
  end
85
87
  end
86
88
 
87
89
  context "DELETE request" do
88
90
  setup do
89
- @request = ActiveForms::Request.new(:delete, "forms", :param => "a&b value", :apiTimestamp => Time.parse("2010-02-18T01:18:19.218Z").utc.iso8601(3), :apiParam => "apiValue")
91
+ @request = ActiveForms::Request.new(:delete, "forms", :param => "a&b value", :apiTimestamp => "2010-02-18T01:18:19.218+0200", :apiParam => "apiValue")
90
92
  end
91
93
 
92
94
  should "have api_sig counted" do
93
- assert_equal "ac5efc63ff1382765fdc29940cf6fb7119f9c763", @request.api_params["apiSig"]
95
+ assert_equal "3d82ae9adde6db7cf3b4ef0d35e411f0cc6b1e42", @request.api_params["apiSig"]
94
96
  end
95
97
 
96
98
  should "have correct uri" do
97
- assert_same_uri "https://api.example.com/client/forms?apiSig=ac5efc63ff1382765fdc29940cf6fb7119f9c763&apiKey=123456&apiTimestamp=2010-02-18T01:18:19.218Z&apiVersion=1.0&apiParam=apiValue", @request.uri
99
+ assert_same_uri "https://api.example.com/client/forms?apiSig=3d82ae9adde6db7cf3b4ef0d35e411f0cc6b1e42&apiKey=123456&apiTimestamp=2010-02-18T01%3A18%3A19.218%2B0200&apiVersion=3.0&apiParam=apiValue", @request.uri
98
100
  end
99
101
  end
100
102
 
@@ -106,7 +108,7 @@ class ActiveForms::RequestTest < Test::Unit::TestCase
106
108
 
107
109
  should "be equivalent to Request.new(:delete, path).perform" do
108
110
  request = ActiveForms::Request.new(:delete, "forms", :param => "value")
109
- assert_equal @response, request.perform
111
+ assert_equal @response.parsed_response, request.perform.parsed_response
110
112
  end
111
113
  end
112
114
  end