aylien_text_api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +28 -0
  5. data/LICENSE +13 -0
  6. data/README.md +67 -0
  7. data/Rakefile +8 -0
  8. data/aylien_text_api.gemspec +24 -0
  9. data/config/app_config.yml.example +7 -0
  10. data/lib/aylien_text_api.rb +23 -0
  11. data/lib/aylien_text_api/client.rb +246 -0
  12. data/lib/aylien_text_api/configuration.rb +57 -0
  13. data/lib/aylien_text_api/connection.rb +71 -0
  14. data/lib/aylien_text_api/error.rb +110 -0
  15. data/lib/aylien_text_api/version.rb +17 -0
  16. data/spec/fixtures/aylien_text_api/client/classify_with_invalid_client.yml +36 -0
  17. data/spec/fixtures/aylien_text_api/client/classify_with_invalid_params.yml +40 -0
  18. data/spec/fixtures/aylien_text_api/client/classify_with_text.yml +48 -0
  19. data/spec/fixtures/aylien_text_api/client/classify_with_unauthenticated_client.yml +40 -0
  20. data/spec/fixtures/aylien_text_api/client/classify_with_valid_url.yml +98 -0
  21. data/spec/fixtures/aylien_text_api/client/classify_with_value_as_text.yml +48 -0
  22. data/spec/fixtures/aylien_text_api/client/classify_with_value_as_valid_url.yml +98 -0
  23. data/spec/fixtures/aylien_text_api/client/concepts_with_invalid_client.yml +36 -0
  24. data/spec/fixtures/aylien_text_api/client/concepts_with_invalid_params.yml +40 -0
  25. data/spec/fixtures/aylien_text_api/client/concepts_with_text.yml +44 -0
  26. data/spec/fixtures/aylien_text_api/client/concepts_with_unauthenticated_client.yml +40 -0
  27. data/spec/fixtures/aylien_text_api/client/concepts_with_valid_url.yml +63 -0
  28. data/spec/fixtures/aylien_text_api/client/concepts_with_value_as_text.yml +44 -0
  29. data/spec/fixtures/aylien_text_api/client/concepts_with_value_as_valid_url.yml +63 -0
  30. data/spec/fixtures/aylien_text_api/client/entities_with_invalid_client.yml +36 -0
  31. data/spec/fixtures/aylien_text_api/client/entities_with_invalid_params.yml +40 -0
  32. data/spec/fixtures/aylien_text_api/client/entities_with_text.yml +43 -0
  33. data/spec/fixtures/aylien_text_api/client/entities_with_unauthenticated_client.yml +40 -0
  34. data/spec/fixtures/aylien_text_api/client/entities_with_valid_url.yml +302 -0
  35. data/spec/fixtures/aylien_text_api/client/entities_with_value_as_text.yml +43 -0
  36. data/spec/fixtures/aylien_text_api/client/entities_with_value_as_valid_url.yml +302 -0
  37. data/spec/fixtures/aylien_text_api/client/extract_with_invalid_client.yml +36 -0
  38. data/spec/fixtures/aylien_text_api/client/extract_with_invalid_params.yml +40 -0
  39. data/spec/fixtures/aylien_text_api/client/extract_with_unauthenticated_client.yml +40 -0
  40. data/spec/fixtures/aylien_text_api/client/extract_with_valid_url.yml +185 -0
  41. data/spec/fixtures/aylien_text_api/client/extract_with_value_as_text.yml +40 -0
  42. data/spec/fixtures/aylien_text_api/client/extract_with_value_as_valid_url.yml +185 -0
  43. data/spec/fixtures/aylien_text_api/client/hashtags_with_invalid_client.yml +36 -0
  44. data/spec/fixtures/aylien_text_api/client/hashtags_with_invalid_params.yml +40 -0
  45. data/spec/fixtures/aylien_text_api/client/hashtags_with_text.yml +48 -0
  46. data/spec/fixtures/aylien_text_api/client/hashtags_with_unauthenticated_client.yml +40 -0
  47. data/spec/fixtures/aylien_text_api/client/hashtags_with_valid_url.yml +58 -0
  48. data/spec/fixtures/aylien_text_api/client/hashtags_with_value_as_text.yml +48 -0
  49. data/spec/fixtures/aylien_text_api/client/hashtags_with_value_as_valid_url.yml +58 -0
  50. data/spec/fixtures/aylien_text_api/client/language_with_invalid_client.yml +36 -0
  51. data/spec/fixtures/aylien_text_api/client/language_with_invalid_params.yml +40 -0
  52. data/spec/fixtures/aylien_text_api/client/language_with_unauthenticated_client.yml +40 -0
  53. data/spec/fixtures/aylien_text_api/client/language_with_valid_text.yml +41 -0
  54. data/spec/fixtures/aylien_text_api/client/language_with_valid_url.yml +57 -0
  55. data/spec/fixtures/aylien_text_api/client/language_with_value_as_text.yml +41 -0
  56. data/spec/fixtures/aylien_text_api/client/language_with_value_as_valid_url.yml +57 -0
  57. data/spec/fixtures/aylien_text_api/client/related_with_invalid_client.yml +36 -0
  58. data/spec/fixtures/aylien_text_api/client/related_with_invalid_params.yml +40 -0
  59. data/spec/fixtures/aylien_text_api/client/related_with_phrase.yml +60 -0
  60. data/spec/fixtures/aylien_text_api/client/related_with_unauthenticated_client.yml +40 -0
  61. data/spec/fixtures/aylien_text_api/client/related_with_value_as_phrase.yml +60 -0
  62. data/spec/fixtures/aylien_text_api/client/related_with_value_as_valid_url.yml +40 -0
  63. data/spec/fixtures/aylien_text_api/client/sentiment_with_invalid_client.yml +36 -0
  64. data/spec/fixtures/aylien_text_api/client/sentiment_with_invalid_params.yml +40 -0
  65. data/spec/fixtures/aylien_text_api/client/sentiment_with_text.yml +53 -0
  66. data/spec/fixtures/aylien_text_api/client/sentiment_with_unauthenticated_client.yml +40 -0
  67. data/spec/fixtures/aylien_text_api/client/sentiment_with_valid_url.yml +57 -0
  68. data/spec/fixtures/aylien_text_api/client/sentiment_with_value_as_text.yml +53 -0
  69. data/spec/fixtures/aylien_text_api/client/sentiment_with_value_as_valid_url.yml +57 -0
  70. data/spec/fixtures/aylien_text_api/client/summarize_with_invalid_client.yml +36 -0
  71. data/spec/fixtures/aylien_text_api/client/summarize_with_invalid_params.yml +41 -0
  72. data/spec/fixtures/aylien_text_api/client/summarize_with_title_and_text.yml +78 -0
  73. data/spec/fixtures/aylien_text_api/client/summarize_with_unauthenticated_client.yml +40 -0
  74. data/spec/fixtures/aylien_text_api/client/summarize_with_valid_url.yml +65 -0
  75. data/spec/fixtures/aylien_text_api/client/summarize_with_value_as_text_and_title.yml +78 -0
  76. data/spec/fixtures/aylien_text_api/client/summarize_with_value_as_text_and_without_title.yml +41 -0
  77. data/spec/fixtures/aylien_text_api/client/summarize_with_value_as_valid_url.yml +65 -0
  78. data/spec/lib/aylien_text_api/classify.rb +86 -0
  79. data/spec/lib/aylien_text_api/client_spec.rb +23 -0
  80. data/spec/lib/aylien_text_api/concepts.rb +81 -0
  81. data/spec/lib/aylien_text_api/entities.rb +81 -0
  82. data/spec/lib/aylien_text_api/extract.rb +81 -0
  83. data/spec/lib/aylien_text_api/hashtags.rb +87 -0
  84. data/spec/lib/aylien_text_api/language.rb +79 -0
  85. data/spec/lib/aylien_text_api/related.rb +80 -0
  86. data/spec/lib/aylien_text_api/sentiment.rb +91 -0
  87. data/spec/lib/aylien_text_api/summarize.rb +95 -0
  88. data/spec/spec_helper.rb +16 -0
  89. metadata +193 -0
@@ -0,0 +1,95 @@
1
+ describe "Summarize endpoint" do
2
+ before do
3
+ @url = "http://www.bbc.com/sport/0/football/25912393"
4
+ @text = %q[Batman has always been my favourite superhero ever since the first time I heard about him because he his human with no powers, also he is much more questionable than any other superhero. The story of the film is about Batman, Lieutenant James Gordon, and new district attorney Harvey Dent beginning to succeed in rounding up the criminals that plague Gotham City. They are unexpectedly challenged when a mysterious criminal mastermind known as the Joker appears in Gotham. Batman's struggle against the Joker becomes deeply personal, forcing him to "confront everything he believes" and to improve his technology (which introduces the recreation of the Batcycle, known as the Batpod and the Batsuit was redesigned) to stop the madman's campaign of destruction. During the course of the film, a love triangle develops between Bruce Wayne, Dent and Rachel Dawes. There are now six Batman films and I must say that The Dark Knight is the best out of all of them. The title is good because that is what Batman actually is. It has been 3 years for the adventure to continue from Batman Begins but that entire wait was worth it. Gotham city is very Gothic looking and is very haunting and visionary. The whole movie is charged with pulse-pounding suspense, ingenious special effects and riveting performances from a first-rate cast especially from Heath Ledger who gave an Oscar nomination performance for best supporting-actor. It is a shame that he can't see his terrific work on-screen. The cinematography is excellent which is made so dark & sinister that really did suit the mood for the film. Usually sequels don't turn out to be better than the original but The Dark Knight is one of those rare sequels that surpasses the original like The Godfather 2. I also really liked the poster where the building is on fire in a Bat symbol & Batman is standing in front of it. Christopher Nolan is a brilliant director and his film Memento is one of my most favourite films. He hasn't made 10 movies yet and 3 of them are already on the IMDb top 250. Overall The Dark Knight is the kind of movie that will make the audience cheer in the end instead of throwing fruit & vegetables on the screen.]
5
+ @title = "Batman at his best and beyond"
6
+ end
7
+
8
+ it "shouldn't be nil with valid url" do
9
+ VCR.use_cassette('summarize_with_valid_url') do
10
+ result = @client.summarize(url: @url)
11
+ result.wont_be_nil
12
+ end
13
+ end
14
+
15
+ it "shouldn't be nil with title and text" do
16
+ VCR.use_cassette('summarize_with_title_and_text') do
17
+ result = @client.summarize(title: @title, text: @text)
18
+ result.wont_be_nil
19
+ end
20
+ end
21
+
22
+ it "shouldn't be nil with value as valid url" do
23
+ VCR.use_cassette('summarize_with_value_as_valid_url') do
24
+ result = @client.summarize(@url)
25
+ result.wont_be_nil
26
+ end
27
+ end
28
+
29
+ it "shouldn't be nil with value as text and title" do
30
+ VCR.use_cassette('summarize_with_value_as_text_and_title') do
31
+ result = @client.summarize(@text, title: @title)
32
+ result.wont_be_nil
33
+ end
34
+ end
35
+
36
+ it "should be nil with value as text and without title" do
37
+ VCR.use_cassette('summarize_with_value_as_text_and_without_title') do
38
+ result = @client.summarize(@text)
39
+ result.must_be_nil
40
+ end
41
+ end
42
+
43
+ it "should be nil with invalid params" do
44
+ VCR.use_cassette('summarize_with_invalid_params') do
45
+ result = @client.summarize(wrong_param: @text)
46
+ result.must_be_nil
47
+ end
48
+ end
49
+
50
+ it "should be nil with unauthenticated client" do
51
+ VCR.use_cassette('summarize_with_unauthenticated_client') do
52
+ result = @unauthenticated_client.summarize(text: @text)
53
+ result.must_be_nil
54
+ end
55
+ end
56
+
57
+ it "should raise Forbidden with unauthenticated client" do
58
+ VCR.use_cassette('summarize_with_unauthenticated_client') do
59
+ proc {
60
+ @unauthenticated_client.summarize!(text: @text)
61
+ }.must_raise AylienTextApi::Error::Forbidden
62
+ end
63
+ end
64
+
65
+ it "should be nil with invalid client" do
66
+ VCR.use_cassette('summarize_with_invalid_client') do
67
+ result = @invalid_client.summarize(url: @url)
68
+ result.must_be_nil
69
+ end
70
+ end
71
+
72
+ it "should raise Forbidden with invalid client" do
73
+ VCR.use_cassette('summarize_with_invalid_client') do
74
+ proc {
75
+ @invalid_client.summarize!(url: @url)
76
+ }.must_raise AylienTextApi::Error::Forbidden
77
+ end
78
+ end
79
+
80
+ it "should raise BadRequest with value as text and without title" do
81
+ VCR.use_cassette('summarize_with_value_as_text_and_without_title') do
82
+ proc {
83
+ @client.summarize!(@text)
84
+ }.must_raise AylienTextApi::Error::BadRequest
85
+ end
86
+ end
87
+
88
+ it "should raise BadRequest with invalid params" do
89
+ VCR.use_cassette('summarize_with_invalid_params') do
90
+ proc {
91
+ @client.summarize!(wrong_param: @text)
92
+ }.must_raise AylienTextApi::Error::BadRequest
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../lib/aylien_text_api'
2
+
3
+ #dependencies
4
+ require 'minitest/autorun'
5
+ require 'webmock/minitest'
6
+ require 'vcr'
7
+
8
+ CONFIG = YAML.load(File.read(File.expand_path('../../config/app_config.yml', __FILE__)))
9
+
10
+ #VCR config
11
+ VCR.configure do |c|
12
+ c.cassette_library_dir = 'spec/fixtures/aylien_text_api/client'
13
+ c.hook_into :webmock
14
+ c.filter_sensitive_data('<PASSWORD>') {CONFIG["text_api"]["correct_keys"]["app_id"]}
15
+ c.filter_sensitive_data('<PASSWORD>') {CONFIG["text_api"]["correct_keys"]["app_key"]}
16
+ end
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aylien_text_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Aylien Inc.
8
+ - Hamed Ramezanian
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-12-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '10.4'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '10.4'
28
+ - !ruby/object:Gem::Dependency
29
+ name: minitest
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '5.4'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '5.4'
42
+ - !ruby/object:Gem::Dependency
43
+ name: vcr
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.9'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.9'
56
+ - !ruby/object:Gem::Dependency
57
+ name: webmock
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.20'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.20'
70
+ description: Aylien Text API is a package of nine different Natural Language Processing,
71
+ Information Retrieval and Machine Learning APIs that can be quickly and easily adapted
72
+ to your processes and applications.
73
+ email:
74
+ - hello@aylien.com
75
+ - hamed.r.nik@gmail.com
76
+ executables: []
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - ".gitignore"
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - LICENSE
84
+ - README.md
85
+ - Rakefile
86
+ - aylien_text_api.gemspec
87
+ - config/app_config.yml.example
88
+ - lib/aylien_text_api.rb
89
+ - lib/aylien_text_api/client.rb
90
+ - lib/aylien_text_api/configuration.rb
91
+ - lib/aylien_text_api/connection.rb
92
+ - lib/aylien_text_api/error.rb
93
+ - lib/aylien_text_api/version.rb
94
+ - spec/fixtures/aylien_text_api/client/classify_with_invalid_client.yml
95
+ - spec/fixtures/aylien_text_api/client/classify_with_invalid_params.yml
96
+ - spec/fixtures/aylien_text_api/client/classify_with_text.yml
97
+ - spec/fixtures/aylien_text_api/client/classify_with_unauthenticated_client.yml
98
+ - spec/fixtures/aylien_text_api/client/classify_with_valid_url.yml
99
+ - spec/fixtures/aylien_text_api/client/classify_with_value_as_text.yml
100
+ - spec/fixtures/aylien_text_api/client/classify_with_value_as_valid_url.yml
101
+ - spec/fixtures/aylien_text_api/client/concepts_with_invalid_client.yml
102
+ - spec/fixtures/aylien_text_api/client/concepts_with_invalid_params.yml
103
+ - spec/fixtures/aylien_text_api/client/concepts_with_text.yml
104
+ - spec/fixtures/aylien_text_api/client/concepts_with_unauthenticated_client.yml
105
+ - spec/fixtures/aylien_text_api/client/concepts_with_valid_url.yml
106
+ - spec/fixtures/aylien_text_api/client/concepts_with_value_as_text.yml
107
+ - spec/fixtures/aylien_text_api/client/concepts_with_value_as_valid_url.yml
108
+ - spec/fixtures/aylien_text_api/client/entities_with_invalid_client.yml
109
+ - spec/fixtures/aylien_text_api/client/entities_with_invalid_params.yml
110
+ - spec/fixtures/aylien_text_api/client/entities_with_text.yml
111
+ - spec/fixtures/aylien_text_api/client/entities_with_unauthenticated_client.yml
112
+ - spec/fixtures/aylien_text_api/client/entities_with_valid_url.yml
113
+ - spec/fixtures/aylien_text_api/client/entities_with_value_as_text.yml
114
+ - spec/fixtures/aylien_text_api/client/entities_with_value_as_valid_url.yml
115
+ - spec/fixtures/aylien_text_api/client/extract_with_invalid_client.yml
116
+ - spec/fixtures/aylien_text_api/client/extract_with_invalid_params.yml
117
+ - spec/fixtures/aylien_text_api/client/extract_with_unauthenticated_client.yml
118
+ - spec/fixtures/aylien_text_api/client/extract_with_valid_url.yml
119
+ - spec/fixtures/aylien_text_api/client/extract_with_value_as_text.yml
120
+ - spec/fixtures/aylien_text_api/client/extract_with_value_as_valid_url.yml
121
+ - spec/fixtures/aylien_text_api/client/hashtags_with_invalid_client.yml
122
+ - spec/fixtures/aylien_text_api/client/hashtags_with_invalid_params.yml
123
+ - spec/fixtures/aylien_text_api/client/hashtags_with_text.yml
124
+ - spec/fixtures/aylien_text_api/client/hashtags_with_unauthenticated_client.yml
125
+ - spec/fixtures/aylien_text_api/client/hashtags_with_valid_url.yml
126
+ - spec/fixtures/aylien_text_api/client/hashtags_with_value_as_text.yml
127
+ - spec/fixtures/aylien_text_api/client/hashtags_with_value_as_valid_url.yml
128
+ - spec/fixtures/aylien_text_api/client/language_with_invalid_client.yml
129
+ - spec/fixtures/aylien_text_api/client/language_with_invalid_params.yml
130
+ - spec/fixtures/aylien_text_api/client/language_with_unauthenticated_client.yml
131
+ - spec/fixtures/aylien_text_api/client/language_with_valid_text.yml
132
+ - spec/fixtures/aylien_text_api/client/language_with_valid_url.yml
133
+ - spec/fixtures/aylien_text_api/client/language_with_value_as_text.yml
134
+ - spec/fixtures/aylien_text_api/client/language_with_value_as_valid_url.yml
135
+ - spec/fixtures/aylien_text_api/client/related_with_invalid_client.yml
136
+ - spec/fixtures/aylien_text_api/client/related_with_invalid_params.yml
137
+ - spec/fixtures/aylien_text_api/client/related_with_phrase.yml
138
+ - spec/fixtures/aylien_text_api/client/related_with_unauthenticated_client.yml
139
+ - spec/fixtures/aylien_text_api/client/related_with_value_as_phrase.yml
140
+ - spec/fixtures/aylien_text_api/client/related_with_value_as_valid_url.yml
141
+ - spec/fixtures/aylien_text_api/client/sentiment_with_invalid_client.yml
142
+ - spec/fixtures/aylien_text_api/client/sentiment_with_invalid_params.yml
143
+ - spec/fixtures/aylien_text_api/client/sentiment_with_text.yml
144
+ - spec/fixtures/aylien_text_api/client/sentiment_with_unauthenticated_client.yml
145
+ - spec/fixtures/aylien_text_api/client/sentiment_with_valid_url.yml
146
+ - spec/fixtures/aylien_text_api/client/sentiment_with_value_as_text.yml
147
+ - spec/fixtures/aylien_text_api/client/sentiment_with_value_as_valid_url.yml
148
+ - spec/fixtures/aylien_text_api/client/summarize_with_invalid_client.yml
149
+ - spec/fixtures/aylien_text_api/client/summarize_with_invalid_params.yml
150
+ - spec/fixtures/aylien_text_api/client/summarize_with_title_and_text.yml
151
+ - spec/fixtures/aylien_text_api/client/summarize_with_unauthenticated_client.yml
152
+ - spec/fixtures/aylien_text_api/client/summarize_with_valid_url.yml
153
+ - spec/fixtures/aylien_text_api/client/summarize_with_value_as_text_and_title.yml
154
+ - spec/fixtures/aylien_text_api/client/summarize_with_value_as_text_and_without_title.yml
155
+ - spec/fixtures/aylien_text_api/client/summarize_with_value_as_valid_url.yml
156
+ - spec/lib/aylien_text_api/classify.rb
157
+ - spec/lib/aylien_text_api/client_spec.rb
158
+ - spec/lib/aylien_text_api/concepts.rb
159
+ - spec/lib/aylien_text_api/entities.rb
160
+ - spec/lib/aylien_text_api/extract.rb
161
+ - spec/lib/aylien_text_api/hashtags.rb
162
+ - spec/lib/aylien_text_api/language.rb
163
+ - spec/lib/aylien_text_api/related.rb
164
+ - spec/lib/aylien_text_api/sentiment.rb
165
+ - spec/lib/aylien_text_api/summarize.rb
166
+ - spec/spec_helper.rb
167
+ homepage: https://github.com/AYLIEN/aylien_textapi_ruby
168
+ licenses: []
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.4.4
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: Aylien Text API is a package of nine different Natural Language Processing,
190
+ Information Retrieval and Machine Learning APIs that can be quickly and easily adapted
191
+ to your processes and applications.
192
+ test_files: []
193
+ has_rdoc: