ask_awesomely 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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: []