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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +8 -0
  6. data/Gemfile +4 -0
  7. data/README.md +474 -0
  8. data/Rakefile +11 -0
  9. data/ask_awesomely.gemspec +27 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +7 -0
  12. data/lib/ask_awesomely.rb +31 -0
  13. data/lib/ask_awesomely/api_client.rb +56 -0
  14. data/lib/ask_awesomely/choice.rb +10 -0
  15. data/lib/ask_awesomely/configuration.rb +30 -0
  16. data/lib/ask_awesomely/dsl.rb +50 -0
  17. data/lib/ask_awesomely/embeddable.rb +30 -0
  18. data/lib/ask_awesomely/embeds/drawer.erb +3 -0
  19. data/lib/ask_awesomely/embeds/fullscreen.erb +28 -0
  20. data/lib/ask_awesomely/embeds/modal.erb +3 -0
  21. data/lib/ask_awesomely/embeds/widget.erb +3 -0
  22. data/lib/ask_awesomely/field.rb +18 -0
  23. data/lib/ask_awesomely/field/dropdown.rb +18 -0
  24. data/lib/ask_awesomely/field/email.rb +5 -0
  25. data/lib/ask_awesomely/field/field.rb +68 -0
  26. data/lib/ask_awesomely/field/legal.rb +4 -0
  27. data/lib/ask_awesomely/field/long_text.rb +9 -0
  28. data/lib/ask_awesomely/field/multiple_choice.rb +30 -0
  29. data/lib/ask_awesomely/field/number.rb +22 -0
  30. data/lib/ask_awesomely/field/opinion_scale.rb +40 -0
  31. data/lib/ask_awesomely/field/picture_choice.rb +34 -0
  32. data/lib/ask_awesomely/field/rating.rb +31 -0
  33. data/lib/ask_awesomely/field/short_text.rb +9 -0
  34. data/lib/ask_awesomely/field/statement.rb +21 -0
  35. data/lib/ask_awesomely/field/website.rb +4 -0
  36. data/lib/ask_awesomely/field/yes_no.rb +4 -0
  37. data/lib/ask_awesomely/picture.rb +41 -0
  38. data/lib/ask_awesomely/s3.rb +51 -0
  39. data/lib/ask_awesomely/typeform.rb +43 -0
  40. data/lib/ask_awesomely/version.rb +3 -0
  41. metadata +166 -0
@@ -0,0 +1,4 @@
1
+ module AskAwesomely
2
+ class Field::Legal < Field::Field
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ module AskAwesomely
2
+ class Field::LongText < Field::Field
3
+
4
+ def max_characters(num)
5
+ @state.max_characters = num
6
+ end
7
+
8
+ end
9
+ end
@@ -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,9 @@
1
+ module AskAwesomely
2
+ class Field::ShortText < Field::Field
3
+
4
+ def max_characters(num)
5
+ @state.max_characters = num
6
+ end
7
+
8
+ end
9
+ 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,4 @@
1
+ module AskAwesomely
2
+ class Field::Website < Field::Field
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module AskAwesomely
2
+ class Field::YesNo < Field::Field
3
+ end
4
+ 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
@@ -0,0 +1,3 @@
1
+ module AskAwesomely
2
+ VERSION = "0.1.2"
3
+ 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: []