ask_awesomely 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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/README.md +474 -0
- data/Rakefile +11 -0
- data/ask_awesomely.gemspec +27 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/ask_awesomely.rb +31 -0
- data/lib/ask_awesomely/api_client.rb +56 -0
- data/lib/ask_awesomely/choice.rb +10 -0
- data/lib/ask_awesomely/configuration.rb +30 -0
- data/lib/ask_awesomely/dsl.rb +50 -0
- data/lib/ask_awesomely/embeddable.rb +30 -0
- data/lib/ask_awesomely/embeds/drawer.erb +3 -0
- data/lib/ask_awesomely/embeds/fullscreen.erb +28 -0
- data/lib/ask_awesomely/embeds/modal.erb +3 -0
- data/lib/ask_awesomely/embeds/widget.erb +3 -0
- data/lib/ask_awesomely/field.rb +18 -0
- data/lib/ask_awesomely/field/dropdown.rb +18 -0
- data/lib/ask_awesomely/field/email.rb +5 -0
- data/lib/ask_awesomely/field/field.rb +68 -0
- data/lib/ask_awesomely/field/legal.rb +4 -0
- data/lib/ask_awesomely/field/long_text.rb +9 -0
- data/lib/ask_awesomely/field/multiple_choice.rb +30 -0
- data/lib/ask_awesomely/field/number.rb +22 -0
- data/lib/ask_awesomely/field/opinion_scale.rb +40 -0
- data/lib/ask_awesomely/field/picture_choice.rb +34 -0
- data/lib/ask_awesomely/field/rating.rb +31 -0
- data/lib/ask_awesomely/field/short_text.rb +9 -0
- data/lib/ask_awesomely/field/statement.rb +21 -0
- data/lib/ask_awesomely/field/website.rb +4 -0
- data/lib/ask_awesomely/field/yes_no.rb +4 -0
- data/lib/ask_awesomely/picture.rb +41 -0
- data/lib/ask_awesomely/s3.rb +51 -0
- data/lib/ask_awesomely/typeform.rb +43 -0
- data/lib/ask_awesomely/version.rb +3 -0
- metadata +166 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::MultipleChoice < Field::Field
|
3
|
+
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
@state.choices = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def choice(label)
|
10
|
+
@state.choices << Choice.new(label: label)
|
11
|
+
end
|
12
|
+
|
13
|
+
def allow_multiple_selections
|
14
|
+
@state.allow_multiple_selections = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def randomize
|
18
|
+
@state.randomize = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def can_specify_other
|
22
|
+
@state.add_other_choice = true
|
23
|
+
end
|
24
|
+
|
25
|
+
def align_vertically
|
26
|
+
@state.vertical_alignment = true
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::Number < Field::Field
|
3
|
+
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def min(min)
|
9
|
+
@state.min = min
|
10
|
+
end
|
11
|
+
|
12
|
+
def max(max)
|
13
|
+
@state.max = max
|
14
|
+
end
|
15
|
+
|
16
|
+
def between(range)
|
17
|
+
min(range.begin)
|
18
|
+
max(range.end)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::OpinionScale < Field::Field
|
3
|
+
|
4
|
+
POSSIBLE_STEPS = 5..11
|
5
|
+
|
6
|
+
def initialize(*)
|
7
|
+
super
|
8
|
+
@state.label = {
|
9
|
+
left: nil,
|
10
|
+
center: nil,
|
11
|
+
right: nil
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def steps(steps)
|
16
|
+
unless POSSIBLE_STEPS.cover?(steps)
|
17
|
+
raise ArgumentError, "number of steps must be between #{POSSIBLE_STEPS.begin} and #{POSSIBLE_STEPS.end}"
|
18
|
+
end
|
19
|
+
|
20
|
+
@state.steps = steps
|
21
|
+
end
|
22
|
+
|
23
|
+
def starts_from_one
|
24
|
+
@state.start_at_one = true
|
25
|
+
end
|
26
|
+
|
27
|
+
def left_side(label)
|
28
|
+
@state.label[:left_side] = label
|
29
|
+
end
|
30
|
+
|
31
|
+
def middle(label)
|
32
|
+
@state.label[:center] = label
|
33
|
+
end
|
34
|
+
|
35
|
+
def right_side(label)
|
36
|
+
@state.label[:right] = label
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::PictureChoice < Field::Field
|
3
|
+
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
@state.choices = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def choice(label, picture:)
|
10
|
+
@state.choices << Choice.new(label: label, picture: picture)
|
11
|
+
end
|
12
|
+
|
13
|
+
def allow_multiple_selections
|
14
|
+
@state.allow_multiple_selections = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def randomize
|
18
|
+
@state.randomize = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def can_specify_other
|
22
|
+
@state.add_other_choice = true
|
23
|
+
end
|
24
|
+
|
25
|
+
def hide_labels
|
26
|
+
@state.labels = false
|
27
|
+
end
|
28
|
+
|
29
|
+
def align_vertically
|
30
|
+
@state.vertical_alignment = true
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::Rating < Field::Field
|
3
|
+
|
4
|
+
POSSIBLE_STEPS = 3..10
|
5
|
+
SHAPES = %i(
|
6
|
+
stars
|
7
|
+
thumbs_up
|
8
|
+
)
|
9
|
+
|
10
|
+
def initialize(*)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def steps(steps)
|
15
|
+
unless POSSIBLE_STEPS.cover?(steps)
|
16
|
+
raise ArgumentError, "number of steps must be between #{POSSIBLE_STEPS.begin} and #{POSSIBLE_STEPS.end}"
|
17
|
+
end
|
18
|
+
|
19
|
+
@state.steps = steps
|
20
|
+
end
|
21
|
+
|
22
|
+
def shape(shape)
|
23
|
+
unless SHAPES.include?(shape)
|
24
|
+
raise ArgumentError, "shape must be one of: #{SHAPES.join(", ")}"
|
25
|
+
end
|
26
|
+
|
27
|
+
@state.shape = shape
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Field::Statement < Field::Field
|
3
|
+
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def say(statement)
|
9
|
+
@state.question = statement
|
10
|
+
end
|
11
|
+
|
12
|
+
def show_quotation_marks
|
13
|
+
@state.has_marks = true
|
14
|
+
end
|
15
|
+
|
16
|
+
def button_text(text)
|
17
|
+
@state.button_text = text
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Picture
|
3
|
+
|
4
|
+
attr_reader :file_or_url, :public_url, :type, :typeform_id
|
5
|
+
|
6
|
+
DEFAULT_TYPE = :choice
|
7
|
+
|
8
|
+
PICTURE_TYPES = [
|
9
|
+
:choice
|
10
|
+
]
|
11
|
+
|
12
|
+
def initialize(file_or_url, type: DEFAULT_TYPE)
|
13
|
+
@file_or_url = file_or_url
|
14
|
+
@type = type
|
15
|
+
end
|
16
|
+
|
17
|
+
def public_url
|
18
|
+
@public_url ||= if url?
|
19
|
+
file_or_url
|
20
|
+
else
|
21
|
+
file = upload_to_s3
|
22
|
+
file.public_url
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def url?
|
29
|
+
file_or_url.to_s =~ %r(https?://)
|
30
|
+
end
|
31
|
+
|
32
|
+
def file?
|
33
|
+
Pathname.new(file_or_url.to_s).file?
|
34
|
+
end
|
35
|
+
|
36
|
+
def upload_to_s3
|
37
|
+
S3.upload(Pathname.new(file_or_url))
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class S3
|
3
|
+
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
delegate %i(
|
7
|
+
aws_access_key_id
|
8
|
+
aws_access_key_secret
|
9
|
+
aws_region
|
10
|
+
aws_bucket
|
11
|
+
has_aws_credentials?
|
12
|
+
) => "AskAwesomely.configuration"
|
13
|
+
|
14
|
+
delegate :public_url => :s3_object
|
15
|
+
|
16
|
+
attr_reader :file, :s3_object
|
17
|
+
|
18
|
+
def initialize(file)
|
19
|
+
@file = file
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.upload(file)
|
23
|
+
new(file).tap(&:upload_file)
|
24
|
+
end
|
25
|
+
|
26
|
+
def upload_file
|
27
|
+
ensure_credentials_set!
|
28
|
+
@s3_object = bucket.object(file.basename.to_s).tap do |obj|
|
29
|
+
obj.upload_file(file.to_s)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def ensure_credentials_set!
|
36
|
+
unless aws_access_key_id && aws_access_key_secret
|
37
|
+
raise ConfigurationError, "AWS Access Key ID and AWS Access Key Secret must be set before use"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def credentials
|
42
|
+
Aws::Credentials.new(aws_access_key_id, aws_access_key_secret)
|
43
|
+
end
|
44
|
+
|
45
|
+
def bucket
|
46
|
+
Aws::S3::Resource.new(region: aws_region, credentials: credentials)
|
47
|
+
.bucket(aws_bucket)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module AskAwesomely
|
2
|
+
class Typeform
|
3
|
+
|
4
|
+
attr_reader :links, :id, :structure
|
5
|
+
|
6
|
+
def initialize(structure)
|
7
|
+
@structure = structure
|
8
|
+
end
|
9
|
+
|
10
|
+
def title
|
11
|
+
@structure.class._state.title
|
12
|
+
end
|
13
|
+
|
14
|
+
def public_url
|
15
|
+
@public_url ||= links.find {|link|
|
16
|
+
link["rel"] == "form_render"
|
17
|
+
}.fetch("href")
|
18
|
+
end
|
19
|
+
|
20
|
+
def private_url
|
21
|
+
@private_url ||= links.find {|link|
|
22
|
+
link["rel"] == "self"
|
23
|
+
}.fetch("href")
|
24
|
+
end
|
25
|
+
|
26
|
+
def embed_as(type)
|
27
|
+
Embeddable.new(type, options).render(binding)
|
28
|
+
end
|
29
|
+
|
30
|
+
def update_with_api_response(response)
|
31
|
+
@links = response["_links"]
|
32
|
+
@id = response["id"]
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_json
|
36
|
+
@structure.to_json
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_binding
|
40
|
+
binding
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ask_awesomely
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lee Machin
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: typhoeus
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.8'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: vcr
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.9'
|
97
|
+
description:
|
98
|
+
email:
|
99
|
+
- me@mrl.ee
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".ruby-version"
|
107
|
+
- ".travis.yml"
|
108
|
+
- Gemfile
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- ask_awesomely.gemspec
|
112
|
+
- bin/console
|
113
|
+
- bin/setup
|
114
|
+
- lib/ask_awesomely.rb
|
115
|
+
- lib/ask_awesomely/api_client.rb
|
116
|
+
- lib/ask_awesomely/choice.rb
|
117
|
+
- lib/ask_awesomely/configuration.rb
|
118
|
+
- lib/ask_awesomely/dsl.rb
|
119
|
+
- lib/ask_awesomely/embeddable.rb
|
120
|
+
- lib/ask_awesomely/embeds/drawer.erb
|
121
|
+
- lib/ask_awesomely/embeds/fullscreen.erb
|
122
|
+
- lib/ask_awesomely/embeds/modal.erb
|
123
|
+
- lib/ask_awesomely/embeds/widget.erb
|
124
|
+
- lib/ask_awesomely/field.rb
|
125
|
+
- lib/ask_awesomely/field/dropdown.rb
|
126
|
+
- lib/ask_awesomely/field/email.rb
|
127
|
+
- lib/ask_awesomely/field/field.rb
|
128
|
+
- lib/ask_awesomely/field/legal.rb
|
129
|
+
- lib/ask_awesomely/field/long_text.rb
|
130
|
+
- lib/ask_awesomely/field/multiple_choice.rb
|
131
|
+
- lib/ask_awesomely/field/number.rb
|
132
|
+
- lib/ask_awesomely/field/opinion_scale.rb
|
133
|
+
- lib/ask_awesomely/field/picture_choice.rb
|
134
|
+
- lib/ask_awesomely/field/rating.rb
|
135
|
+
- lib/ask_awesomely/field/short_text.rb
|
136
|
+
- lib/ask_awesomely/field/statement.rb
|
137
|
+
- lib/ask_awesomely/field/website.rb
|
138
|
+
- lib/ask_awesomely/field/yes_no.rb
|
139
|
+
- lib/ask_awesomely/picture.rb
|
140
|
+
- lib/ask_awesomely/s3.rb
|
141
|
+
- lib/ask_awesomely/typeform.rb
|
142
|
+
- lib/ask_awesomely/version.rb
|
143
|
+
homepage: https://github.com/leemachin/ask_awesomely
|
144
|
+
licenses: []
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.4.5
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Create Typeforms on the fly, the Typeform way.
|
166
|
+
test_files: []
|