survey-gizmo-ruby 5.0.3 → 5.0.4
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 +4 -4
- data/README.md +10 -6
- data/lib/survey_gizmo/api/account_teams.rb +10 -12
- data/lib/survey_gizmo/api/answer.rb +45 -48
- data/lib/survey_gizmo/api/campaign.rb +2 -3
- data/lib/survey_gizmo/api/contact.rb +2 -3
- data/lib/survey_gizmo/api/email_message.rb +2 -3
- data/lib/survey_gizmo/api/option.rb +2 -3
- data/lib/survey_gizmo/api/page.rb +2 -3
- data/lib/survey_gizmo/api/question.rb +2 -3
- data/lib/survey_gizmo/api/response.rb +4 -4
- data/lib/survey_gizmo/api/survey.rb +6 -8
- data/lib/survey_gizmo/configuration.rb +3 -0
- data/lib/survey_gizmo/connection.rb +2 -4
- data/lib/survey_gizmo/version.rb +1 -1
- data/survey-gizmo-ruby.gemspec +3 -3
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2d8dfa46ed2f287166d32c156466b1ff39d84b7
|
4
|
+
data.tar.gz: c22d6cb33d3e3a57fe6d848e33011dd9c5f860ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89cda081f559f84fb5c19493ddb11e2f48bd0d8c4ff26d76ab6f4d8320428dc5dbfc7561cbbf929a67fb4217cae391414b269eeb6a330c2a7fb3f9549d1986eb
|
7
|
+
data.tar.gz: 06cac087f8f21a42fe5a6e2c535d0e407fac2d86fa39967778942e68ce469419dadb7e56308a47a95e48c1e87d5241788d9465792b7356d48805bf2372995f2d
|
data/README.md
CHANGED
@@ -58,6 +58,9 @@ SurveyGizmo.configure do |config|
|
|
58
58
|
|
59
59
|
# Optional - Defaults to 50, maximum 500. Setting too high may cause SurveyGizmo to start throwing timeouts.
|
60
60
|
config.results_per_page = 100
|
61
|
+
|
62
|
+
# Optional - Defaults to 300 seconds
|
63
|
+
config.timeout_seconds = 600
|
61
64
|
end
|
62
65
|
```
|
63
66
|
|
@@ -78,7 +81,8 @@ Pester.configure do |config|
|
|
78
81
|
config.environments[:survey_gizmo_ruby][:retry_error_classes] = [MyExceptionClass, MyOtherExceptionClass]
|
79
82
|
end
|
80
83
|
|
81
|
-
# To set Pester to retry on ALL exception classes, do this
|
84
|
+
# To set Pester to retry on ALL exception classes, do this:
|
85
|
+
# (use with caution! Can include exceptions Rails likes to throw on SIGHUP)
|
82
86
|
Pester.configure do |config|
|
83
87
|
config.environments[:survey_gizmo_ruby][:retry_error_classes] = nil
|
84
88
|
end
|
@@ -121,9 +125,9 @@ questions = survey.questions
|
|
121
125
|
questions = survey.actual_questions
|
122
126
|
|
123
127
|
# Create a question for your survey. The returned object will be given an :id parameter by SG.
|
124
|
-
question = SurveyGizmo::API::Question.create(survey_id: survey.id, title: 'Do
|
128
|
+
question = SurveyGizmo::API::Question.create(survey_id: survey.id, title: 'Do u ruby?', type: 'checkbox')
|
125
129
|
# Update a question
|
126
|
-
question.title = "Do
|
130
|
+
question.title = "Do u <3 Ruby?"
|
127
131
|
question.save
|
128
132
|
# Destroy a question
|
129
133
|
question.destroy
|
@@ -131,8 +135,8 @@ question.destroy
|
|
131
135
|
# Iterate over all your Responses
|
132
136
|
survey.responses.each { |response| do_something_with(response) }
|
133
137
|
# Use filters to limit results - this example will iterate over page 3 of completed, non test data
|
134
|
-
# SurveyResponses submitted within the past 3 days for contact 999. It demonstrates how to use some of
|
135
|
-
# built in filters/generators as well as how to construct a filter.
|
138
|
+
# SurveyResponses submitted within the past 3 days for contact 999. It demonstrates how to use some of
|
139
|
+
# the gem's built in filters/generators as well as how to construct a filter.
|
136
140
|
# See: http://apihelp.surveygizmo.com/help/article/link/filters for more info on filters
|
137
141
|
filters = [
|
138
142
|
SurveyGizmo::API::Response::NO_TEST_DATA,
|
@@ -197,7 +201,7 @@ class SomeObject
|
|
197
201
|
get: '/something/:id',
|
198
202
|
update: '/something/weird/:id',
|
199
203
|
create: '/something',
|
200
|
-
delete: /something/delete/:id'
|
204
|
+
delete: '/something/delete/:id'
|
201
205
|
}
|
202
206
|
end
|
203
207
|
```
|
@@ -1,19 +1,17 @@
|
|
1
1
|
# This REST endpoint is only available to accounts with admin privileges
|
2
2
|
# This code is untested.
|
3
3
|
|
4
|
-
module SurveyGizmo
|
5
|
-
|
6
|
-
|
7
|
-
include SurveyGizmo::Resource
|
4
|
+
module SurveyGizmo::API
|
5
|
+
class AccountTeams
|
6
|
+
include SurveyGizmo::Resource
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
attribute :id, Integer
|
9
|
+
attribute :teamid, Integer
|
10
|
+
attribute :teamname, String
|
11
|
+
attribute :color, String
|
12
|
+
attribute :default_role, String
|
13
|
+
attribute :status, String
|
15
14
|
|
16
|
-
|
17
|
-
end
|
15
|
+
@route = '/accountteams'
|
18
16
|
end
|
19
17
|
end
|
@@ -1,59 +1,56 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
|
3
|
-
|
4
|
-
include Virtus.model
|
1
|
+
module SurveyGizmo::API
|
2
|
+
class Answer
|
3
|
+
include Virtus.model
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
attribute :key, String
|
6
|
+
attribute :value, String
|
7
|
+
attribute :survey_id, Integer
|
8
|
+
attribute :response_id, Integer
|
9
|
+
attribute :question_id, Integer
|
10
|
+
attribute :option_id, Integer
|
11
|
+
attribute :submitted_at, DateTime
|
12
|
+
attribute :answer_text, String
|
13
|
+
attribute :other_text, String
|
14
|
+
attribute :question_pipe, String
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
def initialize(attrs = {})
|
17
|
+
self.attributes = attrs
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
case key
|
20
|
+
when /\[question\((\d+)\),\s*option\((\d+|"\d+-other")\)\]/
|
21
|
+
self.question_id, self.option_id = $1, $2
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
when /\[question\((\d+)\),\s*question_pipe\("(.*)"\)\]/
|
29
|
-
@question_id = $1
|
30
|
-
@question_pipe = $2
|
31
|
-
when /\[question\((\d+)\)\]/
|
32
|
-
@question_id = $1
|
33
|
-
else
|
34
|
-
fail "Can't recognize pattern for #{attrs[:key]} => #{attrs[:value]} - you may have to parse your answers manually."
|
35
|
-
end
|
36
|
-
|
37
|
-
self.question_id = @question_id.to_i
|
38
|
-
if @option_id
|
39
|
-
fail "Bad option_id #{option_id}!" if option_id.to_i == 0 && option_id != '0'
|
40
|
-
self.option_id = @option_id.to_i
|
23
|
+
if option_id =~ /-other/
|
24
|
+
option_id.delete!('-other"')
|
25
|
+
self.other_text = value
|
41
26
|
end
|
27
|
+
when /\[question\((\d+)\),\s*question_pipe\("(.*)"\)\]/
|
28
|
+
self.question_id, self.question_pipe = $1, $2
|
29
|
+
when /\[question\((\d+)\)\]/
|
30
|
+
self.question_id = $1
|
31
|
+
else
|
32
|
+
fail "Can't recognize pattern for #{attrs[:key]} => #{attrs[:value]} - you may have to parse your answers manually."
|
42
33
|
end
|
43
34
|
|
44
|
-
|
45
|
-
|
46
|
-
{
|
47
|
-
|
48
|
-
question_id: question_id,
|
49
|
-
option_id: option_id,
|
50
|
-
question_pipe: question_pipe,
|
51
|
-
submitted_at: submitted_at,
|
52
|
-
survey_id: survey_id,
|
53
|
-
other_text: other_text,
|
54
|
-
answer_text: option_id || other_text ? nil : answer_text
|
55
|
-
}.reject { |k,v| v.nil? }
|
35
|
+
self.question_id = question_id.to_i
|
36
|
+
if option_id
|
37
|
+
fail "Bad option_id #{option_id} (class: #{option_id.class}) for #{attrs}!" if option_id.to_i == 0 && option_id != '0' && option_id != 0
|
38
|
+
self.option_id = option_id.to_i
|
56
39
|
end
|
57
40
|
end
|
41
|
+
|
42
|
+
# Strips out the answer_text when there is a valid option_id
|
43
|
+
def to_hash
|
44
|
+
{
|
45
|
+
response_id: response_id,
|
46
|
+
question_id: question_id,
|
47
|
+
option_id: option_id,
|
48
|
+
question_pipe: question_pipe,
|
49
|
+
submitted_at: submitted_at,
|
50
|
+
survey_id: survey_id,
|
51
|
+
other_text: other_text,
|
52
|
+
answer_text: option_id || other_text ? nil : answer_text
|
53
|
+
}.reject { |k, v| v.nil? }
|
54
|
+
end
|
58
55
|
end
|
59
56
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
1
|
+
module SurveyGizmo::API
|
3
2
|
class Campaign
|
4
3
|
include SurveyGizmo::Resource
|
5
4
|
|
@@ -29,4 +28,4 @@ module SurveyGizmo; module API
|
|
29
28
|
Contact.all(conditions.merge(children_params).merge(all_pages: !conditions[:page]))
|
30
29
|
end
|
31
30
|
end
|
32
|
-
end
|
31
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
1
|
+
module SurveyGizmo::API
|
3
2
|
class Contact
|
4
3
|
include SurveyGizmo::Resource
|
5
4
|
|
@@ -38,4 +37,4 @@ module SurveyGizmo; module API
|
|
38
37
|
|
39
38
|
@route = '/survey/:survey_id/surveycampaign/:campaign_id/contact'
|
40
39
|
end
|
41
|
-
end
|
40
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
1
|
+
module SurveyGizmo::API
|
3
2
|
class EmailMessage
|
4
3
|
include SurveyGizmo::Resource
|
5
4
|
|
@@ -22,4 +21,4 @@ module SurveyGizmo; module API
|
|
22
21
|
|
23
22
|
@route = '/survey/:survey_id/surveycampaign/:campaign_id/emailmessage'
|
24
23
|
end
|
25
|
-
end
|
24
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
1
|
+
module SurveyGizmo::API
|
3
2
|
class Option
|
4
3
|
include SurveyGizmo::Resource
|
5
4
|
include SurveyGizmo::MultilingualTitle
|
@@ -13,4 +12,4 @@ module SurveyGizmo; module API
|
|
13
12
|
|
14
13
|
@route = '/survey/:survey_id/surveypage/:page_id/surveyquestion/:question_id/surveyoption'
|
15
14
|
end
|
16
|
-
end
|
15
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'survey_gizmo/api/question'
|
2
2
|
|
3
|
-
module SurveyGizmo
|
4
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
3
|
+
module SurveyGizmo::API
|
5
4
|
class Page
|
6
5
|
include SurveyGizmo::Resource
|
7
6
|
include SurveyGizmo::MultilingualTitle
|
@@ -33,4 +32,4 @@ module SurveyGizmo; module API
|
|
33
32
|
@questions = with_subquestions.each { |q| q.attributes = children_params }
|
34
33
|
end
|
35
34
|
end
|
36
|
-
end
|
35
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'survey_gizmo/api/option'
|
2
2
|
|
3
|
-
module SurveyGizmo
|
4
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
3
|
+
module SurveyGizmo::API
|
5
4
|
class Question
|
6
5
|
include SurveyGizmo::Resource
|
7
6
|
include SurveyGizmo::MultilingualTitle
|
@@ -59,4 +58,4 @@ module SurveyGizmo; module API
|
|
59
58
|
end
|
60
59
|
end
|
61
60
|
end
|
62
|
-
end
|
61
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
module SurveyGizmo
|
2
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
1
|
+
module SurveyGizmo::API
|
3
2
|
class Response
|
4
3
|
include SurveyGizmo::Resource
|
5
4
|
|
@@ -40,7 +39,8 @@ module SurveyGizmo; module API
|
|
40
39
|
answers.select do |k,v|
|
41
40
|
next false unless v.is_a?(FalseClass) || v.present?
|
42
41
|
|
43
|
-
# Strip out "Other" answers that don't actually have the "other" text
|
42
|
+
# Strip out "Other" answers that don't actually have the "other" text (they come back as two responses - one
|
43
|
+
# for the "Other" option_id, and then a whole separate response for the text given as an "Other" response.
|
44
44
|
if k =~ /\[question\((\d+)\),\s*option\((\d+)\)\]/
|
45
45
|
!answers.keys.any? { |key| key =~ /\[question\((#{$1})\),\s*option\("(#{$2})-other"\)\]/ }
|
46
46
|
else
|
@@ -49,4 +49,4 @@ module SurveyGizmo; module API
|
|
49
49
|
end.map { |k,v| Answer.new(children_params.merge(key: k, value: v, answer_text: v, submitted_at: submitted_at)) }
|
50
50
|
end
|
51
51
|
end
|
52
|
-
end
|
52
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'survey_gizmo/api/page'
|
2
2
|
|
3
|
-
module SurveyGizmo
|
4
|
-
# @see SurveyGizmo::Resource::ClassMethods
|
3
|
+
module SurveyGizmo::API
|
5
4
|
class Survey
|
6
5
|
include SurveyGizmo::Resource
|
7
6
|
|
@@ -22,16 +21,15 @@ module SurveyGizmo; module API
|
|
22
21
|
attribute :created_on, DateTime
|
23
22
|
attribute :modified_on, DateTime
|
24
23
|
attribute :copy, Boolean
|
25
|
-
#
|
26
|
-
# types to Survey.all and Survey.first and cause an incorrect reload
|
24
|
+
# See comment in the #pages method for why this :pages can't be an attribute
|
27
25
|
# attribute :pages, Array[Page]
|
28
26
|
|
29
27
|
@route = '/survey'
|
30
28
|
|
31
29
|
def pages
|
32
|
-
# SurveyGizmo sends down the page info to .first requests but NOT to .all requests, so we must load pages
|
33
|
-
# We should be able to just .reload this Survey BUT we can't make :pages a Virtus attribute without
|
34
|
-
# call to this method during Survey.save
|
30
|
+
# SurveyGizmo sends down the page info to .first requests but NOT to .all requests, so we must load pages
|
31
|
+
# manually. We should be able to just .reload this Survey BUT we can't make :pages a Virtus attribute without
|
32
|
+
# requiring a call to this method during Survey.save
|
35
33
|
@pages ||= Page.all(children_params.merge(all_pages: true)).to_a
|
36
34
|
@pages.each { |p| p.attributes = children_params }
|
37
35
|
end
|
@@ -84,4 +82,4 @@ module SurveyGizmo; module API
|
|
84
82
|
@campaigns ||= Campaign.all(children_params.merge(all_pages: true)).to_a
|
85
83
|
end
|
86
84
|
end
|
87
|
-
end
|
85
|
+
end
|
@@ -58,6 +58,7 @@ module SurveyGizmo
|
|
58
58
|
DEFAULT_REST_API_URL = 'https://restapi.surveygizmo.com'
|
59
59
|
DEFAULT_API_VERSION = 'v4'
|
60
60
|
DEFAULT_RESULTS_PER_PAGE = 50
|
61
|
+
DEFAULT_TIMEOUT_SECONDS = 300
|
61
62
|
|
62
63
|
attr_accessor :user
|
63
64
|
attr_accessor :password
|
@@ -67,11 +68,13 @@ module SurveyGizmo
|
|
67
68
|
attr_accessor :api_version
|
68
69
|
attr_accessor :logger
|
69
70
|
attr_accessor :results_per_page
|
71
|
+
attr_accessor :timeout_seconds
|
70
72
|
|
71
73
|
def initialize
|
72
74
|
@api_url = DEFAULT_REST_API_URL
|
73
75
|
@api_version = DEFAULT_API_VERSION
|
74
76
|
@results_per_page = DEFAULT_RESULTS_PER_PAGE
|
77
|
+
@timeout_seconds = DEFAULT_TIMEOUT_SECONDS
|
75
78
|
@logger = SurveyGizmo::Logger.new(STDOUT)
|
76
79
|
@api_debug = ENV['GIZMO_DEBUG'].to_s =~ /^(true|t|yes|y|1)$/i
|
77
80
|
end
|
@@ -2,8 +2,6 @@ require 'active_support/core_ext/module/delegation'
|
|
2
2
|
|
3
3
|
module SurveyGizmo
|
4
4
|
class Connection
|
5
|
-
TIMEOUT_SECONDS = 300
|
6
|
-
|
7
5
|
class << self
|
8
6
|
delegate :put, :get, :delete, :post, to: :connection
|
9
7
|
|
@@ -18,8 +16,8 @@ module SurveyGizmo
|
|
18
16
|
url: SurveyGizmo.configuration.api_url,
|
19
17
|
params: { 'user:md5' => "#{SurveyGizmo.configuration.user}:#{Digest::MD5.hexdigest(SurveyGizmo.configuration.password)}" },
|
20
18
|
request: {
|
21
|
-
timeout:
|
22
|
-
open_timeout:
|
19
|
+
timeout: SurveyGizmo.configuration.timeout_seconds,
|
20
|
+
open_timeout: SurveyGizmo.configuration.timeout_seconds
|
23
21
|
}
|
24
22
|
}
|
25
23
|
|
data/lib/survey_gizmo/version.rb
CHANGED
data/survey-gizmo-ruby.gemspec
CHANGED
@@ -11,15 +11,15 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.email = ['adrien.jarthon@dimelo.com']
|
12
12
|
gem.description = 'Gem to use the SurveyGizmo.com REST API, v3+'
|
13
13
|
gem.summary = 'Gem to use the SurveyGizmo.com REST API, v3+'
|
14
|
-
gem.homepage = 'http://github.com/
|
14
|
+
gem.homepage = 'http://github.com/jarthod/survey-gizmo-ruby'
|
15
15
|
gem.licenses = ['MIT']
|
16
16
|
gem.required_ruby_version = '>= 1.9'
|
17
17
|
|
18
18
|
gem.add_dependency 'activesupport', '>= 3.0'
|
19
19
|
gem.add_dependency 'addressable', '~> 2'
|
20
20
|
gem.add_dependency 'awesome_print', '~> 1'
|
21
|
-
gem.add_dependency 'faraday', '~> 0.9'
|
22
|
-
gem.add_dependency 'faraday_middleware'
|
21
|
+
gem.add_dependency 'faraday', '>= 0.9.1', '~> 0.9'
|
22
|
+
gem.add_dependency 'faraday_middleware', '~> 0.10'
|
23
23
|
gem.add_dependency 'i18n'
|
24
24
|
gem.add_dependency 'pester', '>= 1.0.0'
|
25
25
|
gem.add_dependency 'virtus', '>= 1.0.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: survey-gizmo-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kabari Hendrick
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-01-
|
14
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -59,6 +59,9 @@ dependencies:
|
|
59
59
|
name: faraday
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 0.9.1
|
62
65
|
- - "~>"
|
63
66
|
- !ruby/object:Gem::Version
|
64
67
|
version: '0.9'
|
@@ -66,6 +69,9 @@ dependencies:
|
|
66
69
|
prerelease: false
|
67
70
|
version_requirements: !ruby/object:Gem::Requirement
|
68
71
|
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.9.1
|
69
75
|
- - "~>"
|
70
76
|
- !ruby/object:Gem::Version
|
71
77
|
version: '0.9'
|
@@ -73,16 +79,16 @@ dependencies:
|
|
73
79
|
name: faraday_middleware
|
74
80
|
requirement: !ruby/object:Gem::Requirement
|
75
81
|
requirements:
|
76
|
-
- - "
|
82
|
+
- - "~>"
|
77
83
|
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
84
|
+
version: '0.10'
|
79
85
|
type: :runtime
|
80
86
|
prerelease: false
|
81
87
|
version_requirements: !ruby/object:Gem::Requirement
|
82
88
|
requirements:
|
83
|
-
- - "
|
89
|
+
- - "~>"
|
84
90
|
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
91
|
+
version: '0.10'
|
86
92
|
- !ruby/object:Gem::Dependency
|
87
93
|
name: i18n
|
88
94
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,7 +232,7 @@ files:
|
|
226
232
|
- spec/test_json/question.json
|
227
233
|
- spec/test_json/survey.json
|
228
234
|
- survey-gizmo-ruby.gemspec
|
229
|
-
homepage: http://github.com/
|
235
|
+
homepage: http://github.com/jarthod/survey-gizmo-ruby
|
230
236
|
licenses:
|
231
237
|
- MIT
|
232
238
|
metadata: {}
|