gather_content-api 1.0.0 → 1.1.0

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +7 -0
  3. data/README.md +161 -35
  4. data/gather_content-api.gemspec +1 -1
  5. data/lib/gather_content.rb +2 -0
  6. data/lib/gather_content/api.rb +16 -15
  7. data/lib/gather_content/config.rb +9 -0
  8. data/lib/gather_content/config/builder.rb +20 -0
  9. data/lib/gather_content/config/elements.rb +15 -0
  10. data/lib/gather_content/config/elements/base.rb +32 -0
  11. data/lib/gather_content/config/elements/choice_checkbox.rb +32 -0
  12. data/lib/gather_content/config/elements/choice_radio.rb +62 -0
  13. data/lib/gather_content/config/elements/files.rb +17 -0
  14. data/lib/gather_content/config/elements/option.rb +30 -0
  15. data/lib/gather_content/config/elements/other_option.rb +26 -0
  16. data/lib/gather_content/config/elements/section.rb +31 -0
  17. data/lib/gather_content/config/elements/text.rb +32 -0
  18. data/lib/gather_content/config/tab.rb +30 -0
  19. data/lib/gather_content/config/tabs.rb +13 -0
  20. data/lib/gather_content/dsl.rb +15 -0
  21. data/lib/gather_content/dsl/base.rb +28 -0
  22. data/lib/gather_content/dsl/choice_checkbox.rb +19 -0
  23. data/lib/gather_content/dsl/choice_radio.rb +25 -0
  24. data/lib/gather_content/dsl/config.rb +16 -0
  25. data/lib/gather_content/dsl/files.rb +12 -0
  26. data/lib/gather_content/dsl/option.rb +29 -0
  27. data/lib/gather_content/dsl/other_option.rb +18 -0
  28. data/lib/gather_content/dsl/section.rb +24 -0
  29. data/lib/gather_content/dsl/tab.rb +54 -0
  30. data/lib/gather_content/dsl/text.rb +29 -0
  31. data/lib/gather_content/error.rb +1 -1
  32. data/lib/gather_content/version.rb +1 -1
  33. data/spec/gather_content/config/builder_spec.rb +42 -0
  34. data/spec/gather_content/config/elements/choice_checkbox_spec.rb +78 -0
  35. data/spec/gather_content/config/elements/choice_radio_spec.rb +175 -0
  36. data/spec/gather_content/config/elements/files_spec.rb +23 -0
  37. data/spec/gather_content/config/elements/option_spec.rb +88 -0
  38. data/spec/gather_content/config/elements/other_option_spec.rb +124 -0
  39. data/spec/gather_content/config/elements/section_spec.rb +80 -0
  40. data/spec/gather_content/config/elements/text_spec.rb +163 -0
  41. data/spec/gather_content/config/tab_spec.rb +120 -0
  42. data/spec/gather_content/dsl/choice_checkbox_spec.rb +25 -0
  43. data/spec/gather_content/dsl/choice_radio_spec.rb +47 -0
  44. data/spec/gather_content/dsl/files_spec.rb +12 -0
  45. data/spec/gather_content/dsl/section_spec.rb +37 -0
  46. data/spec/gather_content/dsl/tab_spec.rb +107 -0
  47. data/spec/gather_content/dsl/text_spec.rb +48 -0
  48. data/spec/spec_helper.rb +1 -1
  49. data/spec/support/shared_examples/dsl.rb +63 -0
  50. data/spec/support/shared_examples/element.rb +77 -0
  51. metadata +63 -4
@@ -0,0 +1,29 @@
1
+ require 'gather_content/dsl/base'
2
+ require 'gather_content/config/elements/text'
3
+
4
+ module GatherContent
5
+ module DSL
6
+ class Text < Base
7
+ def initialize(tab)
8
+ @text = GatherContent::Config::Element::Text.new
9
+ super(tab, @text)
10
+ end
11
+
12
+ def value(value)
13
+ @text.value = value
14
+ end
15
+
16
+ def limit_type(limit_type)
17
+ @text.limit_type = limit_type
18
+ end
19
+
20
+ def limit(limit)
21
+ @text.limit = limit
22
+ end
23
+
24
+ def plain_text(plain_text)
25
+ @text.plain_text = plain_text
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
+ require 'gather_content/error/request_error'
1
2
  module GatherContent
2
3
  module Error
3
- autoload :RequestError, 'gather_content/error/request_error'
4
4
  end
5
5
  end
@@ -1,3 +1,3 @@
1
1
  module GatherContent
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'gather_content/config/tab'
3
+ require 'gather_content/config/builder'
4
+
5
+ RSpec.describe GatherContent::Config::Builder do
6
+ context "adding a tab element" do
7
+ it "adds the tab" do
8
+ builder = GatherContent::Config::Builder.build do
9
+ tab do
10
+ label "text_label"
11
+ name "Text Label"
12
+ end
13
+ end
14
+
15
+ expect(builder.first).to be_instance_of(GatherContent::Config::Tab)
16
+ end
17
+ end
18
+
19
+ context "to_json" do
20
+ it "returns a JSON object" do
21
+ builder = GatherContent::Config::Builder.build do
22
+ tab do
23
+ label "text_label"
24
+ name "Text Label"
25
+
26
+ text do
27
+ name "Text"
28
+ label "text"
29
+ required false
30
+ value ""
31
+ microcopy ""
32
+ limit_type :chars
33
+ limit 255
34
+ plain_text true
35
+ end
36
+ end
37
+ end
38
+
39
+ expect(JSON.parse(builder.to_json)).to eq(JSON.parse([{"label": "text_label", "name": "Text Label", "hidden": false, "elements": [{"name": "Text", "required": false, "label": "text", "microcopy": "", "type": "text", "value": "", "limit_type": "chars", "limit": 255, "plain_text": true}]}].to_json))
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'gather_content/config/elements/choice_checkbox'
3
+ require 'gather_content/config/elements/option'
4
+ require 'gather_content/config/elements/other_option'
5
+
6
+ RSpec.describe GatherContent::Config::Element::ChoiceCheckbox do
7
+ let(:name) { "checkbox" }
8
+ let(:required) { false }
9
+ let(:label) { "Choices" }
10
+ let(:microcopy) { "Choose a thing" }
11
+ let(:options) do
12
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1")
13
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2")
14
+
15
+ [o1, o2]
16
+ end
17
+
18
+ let(:checkbox) { GatherContent::Config::Element::ChoiceCheckbox.new }
19
+
20
+ context "defaults" do
21
+ subject { checkbox }
22
+
23
+ include_examples "Gather Content Defaults", "text"
24
+ end
25
+
26
+ context "when converting to JSON" do
27
+ before(:each) do
28
+ checkbox.name = name
29
+ checkbox.required = required
30
+ checkbox.label = label
31
+ checkbox.microcopy = microcopy
32
+ checkbox.options = options
33
+ end
34
+
35
+ subject { checkbox.serialize }
36
+ it_behaves_like "a Gather Content Element", "choice_checkbox"
37
+
38
+ context "options" do
39
+ context "aren't supplied" do
40
+ let(:options) { [] }
41
+
42
+ it "raises a ArgumentError" do
43
+ expect {
44
+ subject
45
+ }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+
49
+ context "are supplied" do
50
+ let(:options) { [ GatherContent::Config::Element::Option.new("option_1", "Option 1") ] }
51
+
52
+ it "serialises the options" do
53
+ expect(subject[:options]).to eq(options.map{ |el| el.serialize })
54
+ end
55
+ end
56
+
57
+ context "are type OtherOption" do
58
+ let(:options) { [ GatherContent::Config::Element::OtherOption.new("option_1", "Option 1") ] }
59
+
60
+ it "raises a ArgumentError" do
61
+ expect {
62
+ subject
63
+ }.to raise_error(ArgumentError)
64
+ end
65
+ end
66
+
67
+ context "are not an Option type" do
68
+ let(:options) { [ "Hello" ] }
69
+
70
+ it "raises a ArgumentError" do
71
+ expect {
72
+ subject
73
+ }.to raise_error(ArgumentError)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,175 @@
1
+ require 'spec_helper'
2
+ require 'gather_content/config/elements/choice_radio'
3
+ require 'gather_content/config/elements/option'
4
+
5
+ RSpec.describe GatherContent::Config::Element::ChoiceRadio do
6
+ let(:name) { "radio" }
7
+ let(:required) { false }
8
+ let(:label) { "Choices" }
9
+ let(:microcopy) { "Choose a thing" }
10
+ let(:other_option) { false }
11
+ let(:options) do
12
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1")
13
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2")
14
+
15
+ [o1, o2]
16
+ end
17
+
18
+ let(:radio) { GatherContent::Config::Element::ChoiceRadio.new }
19
+
20
+ context "defaults" do
21
+ subject { radio }
22
+
23
+ include_examples "Gather Content Defaults", "text"
24
+
25
+ context "other_option" do
26
+ it "is false" do
27
+ expect(subject.other_option).to eq(false)
28
+ end
29
+ end
30
+ end
31
+
32
+ context "when converting to JSON" do
33
+ before(:each) do
34
+ radio.name = name
35
+ radio.required = required
36
+ radio.label = label
37
+ radio.microcopy = microcopy
38
+ radio.options = options
39
+ radio.other_option = other_option
40
+ end
41
+
42
+ subject { radio.serialize }
43
+ it_behaves_like "a Gather Content Element", "choice_radio"
44
+
45
+ context "options" do
46
+ context "aren't supplied" do
47
+ let(:options) { [] }
48
+
49
+ it "raises a ArgumentError" do
50
+ expect {
51
+ subject
52
+ }.to raise_error(ArgumentError)
53
+ end
54
+ end
55
+
56
+ context "where none are selected" do
57
+ let(:options) do
58
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1", false)
59
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2", false)
60
+
61
+ [o1, o2]
62
+ end
63
+
64
+ it "serialises the options" do
65
+ expect(subject[:options]).to eq(options.map{ |el| el.serialize })
66
+ end
67
+ end
68
+
69
+ context "where one is selected" do
70
+ let(:options) do
71
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1", true)
72
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2", false)
73
+
74
+ [o1, o2]
75
+ end
76
+
77
+ it "serialises the options" do
78
+ expect(subject[:options]).to eq(options.map{ |el| el.serialize })
79
+ end
80
+ end
81
+
82
+ context "where more than one is selected" do
83
+ let(:options) do
84
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1", true)
85
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2", true)
86
+
87
+ [o1, o2]
88
+ end
89
+
90
+ it "raises a ArgumentError" do
91
+ expect {
92
+ subject
93
+ }.to raise_error(ArgumentError)
94
+ end
95
+ end
96
+
97
+ context "when other_option is false" do
98
+ context "there is only one option" do
99
+ let(:options) { [ GatherContent::Config::Element::Option.new("option_1", "Option 1") ] }
100
+
101
+ it "serialises the options" do
102
+ expect(subject[:options]).to eq(options.map{ |el| el.serialize })
103
+ end
104
+ end
105
+ end
106
+
107
+ context "when other_option is true" do
108
+ let(:other_option) { true }
109
+
110
+ context "there is only one option" do
111
+ let(:options) { [ GatherContent::Config::Element::Option.new("option_1", "Option 1") ] }
112
+
113
+ it "raises a ArgumentError" do
114
+ expect {
115
+ subject
116
+ }.to raise_error(ArgumentError)
117
+ end
118
+ end
119
+
120
+ context "and the last option is a OptionOther" do
121
+ let(:options) do
122
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1")
123
+ o2 = GatherContent::Config::Element::OtherOption.new("option_2", "Option 2")
124
+
125
+ [o1, o2]
126
+ end
127
+
128
+ it "serialises the options" do
129
+ expect(subject[:options]).to eq(options.map{ |el| el.serialize })
130
+ end
131
+ end
132
+
133
+ context "and the last option is not an OtherOption" do
134
+ let(:options) do
135
+ o1 = GatherContent::Config::Element::Option.new("option_1", "Option 1")
136
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2")
137
+
138
+ [o1, o2]
139
+ end
140
+
141
+ it "raises a ArgumentError" do
142
+ expect {
143
+ subject
144
+ }.to raise_error(ArgumentError)
145
+ end
146
+ end
147
+
148
+ context "the OtherOption is not the last option" do
149
+ let(:options) do
150
+ o1 = GatherContent::Config::Element::OtherOption.new("option_1", "Option 1")
151
+ o2 = GatherContent::Config::Element::Option.new("option_2", "Option 2")
152
+
153
+ [o1, o2]
154
+ end
155
+
156
+ it "raises a ArgumentError" do
157
+ expect {
158
+ subject
159
+ }.to raise_error(ArgumentError)
160
+ end
161
+ end
162
+ end
163
+
164
+ context "are not an Option type" do
165
+ let(:options) { [ "Hello" ] }
166
+
167
+ it "raises a ArgumentError" do
168
+ expect {
169
+ subject
170
+ }.to raise_error(ArgumentError)
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ require 'gather_content/config/elements/files'
3
+
4
+ RSpec.describe GatherContent::Config::Element::Files do
5
+ let(:name) { "file" }
6
+ let(:required) { false }
7
+ let(:label) { "Files" }
8
+ let(:microcopy) { "Upload a file" }
9
+
10
+ let(:files) { GatherContent::Config::Element::Files.new }
11
+
12
+ before(:each) do
13
+ files.name = name
14
+ files.required = required
15
+ files.label = label
16
+ files.microcopy = microcopy
17
+ end
18
+
19
+ context "when converting to JSON" do
20
+ subject { files.serialize }
21
+ it_behaves_like "a Gather Content Element", "files"
22
+ end
23
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+ require 'gather_content/config/elements/option'
3
+
4
+ RSpec.describe GatherContent::Config::Element::Option do
5
+ let(:name) { "file" }
6
+ let(:label) { "Files" }
7
+ let(:selected) { false }
8
+
9
+ let(:option) { GatherContent::Config::Element::Option.new }
10
+
11
+ before(:each) do
12
+ option.name = name
13
+ option.label = label
14
+ option.selected = selected
15
+ end
16
+
17
+ context "when converting to JSON" do
18
+ subject { option.serialize }
19
+
20
+ context "a valid section instance" do
21
+ it "has a name" do
22
+ expect(subject[:name]).to eq(name)
23
+ end
24
+
25
+ it "has a label" do
26
+ expect(subject[:label]).to eq(label)
27
+ end
28
+
29
+ it "has a selected flag" do
30
+ expect(subject[:selected]).to eq(selected)
31
+ end
32
+ end
33
+
34
+ context "with an empty name" do
35
+ let(:name) { "" }
36
+
37
+ it "raises a ArgumentError" do
38
+ expect {
39
+ subject
40
+ }.to raise_error(ArgumentError)
41
+ end
42
+ end
43
+
44
+ context "with an empty label" do
45
+ let(:label) { "" }
46
+
47
+ it "raises a ArgumentError" do
48
+ expect {
49
+ subject
50
+ }.to raise_error(ArgumentError)
51
+ end
52
+ end
53
+
54
+ context "selected" do
55
+ context "is true" do
56
+ let(:selected) { true }
57
+
58
+ it "compiles to true" do
59
+ expect(subject[:selected]).to eq(true)
60
+ end
61
+ end
62
+
63
+ context "is false" do
64
+ let(:selected) { false }
65
+
66
+ it "compiles to false" do
67
+ expect(subject[:selected]).to eq(false)
68
+ end
69
+ end
70
+
71
+ context "is truthy" do
72
+ let(:selected) { "I'm a string!" }
73
+
74
+ it "compiles to true" do
75
+ expect(subject[:selected]).to eq(true)
76
+ end
77
+ end
78
+
79
+ context "is falsey" do
80
+ let(:selected) { nil }
81
+
82
+ it "compiles to false" do
83
+ expect(subject[:selected]).to eq(false)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end