nationbuilder-rb 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d83b134864f0b5f5ce54e8307b72bdc2a5a5927
4
- data.tar.gz: bd202309dbee17ca1d51abd5d88254761d056fc9
3
+ metadata.gz: 478eaf49468a14664586855b0105a5c0781b9e82
4
+ data.tar.gz: be6334a496d0b620c74c357515fb026224935594
5
5
  SHA512:
6
- metadata.gz: dc6c4822b2837c08955bd873e39b6eee0afc9bddd0060ded804612a85e73a93c076deabcbaf56dce90b95e4612190b80443c538f21be3d4638ecccd296550ccb
7
- data.tar.gz: 6e251541cfbd3bce1bb91fbf5f3dda79ccb266c068ecb5385a74bad9070b98ad7e99b6f82e2232962839cd7b2275aecfcd7135edcb634ac8d08739539b87db91
6
+ metadata.gz: d3f42b168b4b0ce526e17ef7462c1666e27e57b05822c005e3f97fd5ca4832041de1884a3c6cbd11656bf89d1d02d874fd66e5dd57ceb533d9efbc057b7f6652
7
+ data.tar.gz: a1b4b4fef2cad1592d178c50cc91f385e69b1b9828c7037bdbb963020afb5469129b4ed1f3e23c4f9f98d383ccab76b564d20ec1bf06c0d3daa85efc3fd03c69
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ # 1.1.0
2
+ - [#6] Pagination class for iterating through paginated sets
data/README.md CHANGED
@@ -35,8 +35,8 @@ client = NationBuilder::Client.new('my_nation_name', 'my_api_token')
35
35
 
36
36
  ## Calling the API
37
37
 
38
- There is only a single method for calling the NationBuilder API in
39
- `nationbuilder-rb`, and that's the `#call` method on a client. The
38
+ The primary method for calling the NationBuilder API in
39
+ `nationbuilder-rb` is the `#call` method, used on a client. The
40
40
  `#call` method takes three parameters: the name of the endpoint,
41
41
  the name of the method, and an optional hash containing arguments
42
42
  for the method.
@@ -69,6 +69,20 @@ client.call(:people, :create, params)
69
69
  client.call(:people, :destroy, id: 15)
70
70
  ```
71
71
 
72
+ ## Pagination
73
+
74
+ A call can be paginated by creating a new instance of the `Paginator` class. This takes two parameters: the client and the response of the call to be paginated.
75
+
76
+ ```ruby
77
+ response = client.call(:people, :index)
78
+
79
+ paginated = Paginator.new(client, response)
80
+ page1 = paginated
81
+ page2 = page1.next
82
+ page3 = page2.next
83
+ ```
84
+ Methods `#next` and `#prev` return the results of the next or previous page of results, nil if none. `#next?` and `#prev?` return the path to the next or prev page, or nil if none. The results of a page can be accessed through `.body` - in the above example, `page1.body` returns the same hash as `response`.
85
+
72
86
  ## Documentation
73
87
 
74
88
  This gem includes a command line utility that prints out
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
data/lib/nationbuilder.rb CHANGED
@@ -11,3 +11,4 @@ require 'nationbuilder/method'
11
11
  require 'nationbuilder/parameter'
12
12
  require 'nationbuilder/url'
13
13
  require 'nationbuilder/spec_parser'
14
+ require 'nationbuilder/paginator'
@@ -31,13 +31,8 @@ class NationBuilder::Client
31
31
  @base_url.gsub(':nation_name', @nation_name)
32
32
  end
33
33
 
34
- def call(endpoint_name, method_name, args={})
35
- endpoint = self[endpoint_name]
36
- method = endpoint[method_name]
37
- nonmethod_args = method.nonmethod_args(args)
38
- method_args = method.method_args(args)
39
- method.validate_args(method_args)
40
- url = NationBuilder::URL.new(base_url).generate_url(method.uri, method_args)
34
+ def raw_call(path, method, body = {}, args = {})
35
+ url = NationBuilder::URL.new(base_url).generate_url(path, args)
41
36
 
42
37
  request_args = {
43
38
  header: {
@@ -49,17 +44,26 @@ class NationBuilder::Client
49
44
  }
50
45
  }
51
46
 
52
- if method.http_method == :get
53
- request_args[:query].merge!(nonmethod_args)
47
+ if method == :get
48
+ request_args[:query].merge!(body)
54
49
  else
55
- nonmethod_args[:access_token] = @api_key
56
- request_args[:body] = JSON(nonmethod_args)
50
+ body[:access_token] = @api_key
51
+ request_args[:body] = JSON(body)
57
52
  end
58
53
 
59
- set_response(HTTPClient.send(method.http_method, url, request_args))
54
+ set_response(HTTPClient.send(method, url, request_args))
60
55
  return parse_response_body(response)
61
56
  end
62
57
 
58
+ def call(endpoint_name, method_name, args={})
59
+ endpoint = self[endpoint_name]
60
+ method = endpoint[method_name]
61
+ nonmethod_args = method.nonmethod_args(args)
62
+ method_args = method.method_args(args)
63
+ method.validate_args(method_args)
64
+ return raw_call(method.uri, method.http_method, nonmethod_args, args)
65
+ end
66
+
63
67
  def set_response(value)
64
68
  Thread.current[:nationbuilder_rb_response] = value
65
69
  end
@@ -0,0 +1,22 @@
1
+ class Paginator
2
+ attr_reader :body
3
+
4
+ def initialize(client, body)
5
+ @client = client
6
+ @body = body
7
+ end
8
+
9
+ [:next, :prev].each do |page_type|
10
+ define_method(:"#{page_type}?") do
11
+ @body[page_type.to_s]
12
+ end
13
+
14
+ define_method(:"#{page_type}") do
15
+ return nil unless send(:"#{page_type}?")
16
+ path = send(:"#{page_type}?").split('/api/v1').last
17
+ results = @client.raw_call(path, :get)
18
+ return Paginator.new(@client, results)
19
+ end
20
+ end
21
+
22
+ end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: nationbuilder-rb 1.0.0 ruby lib
5
+ # stub: nationbuilder-rb 1.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "nationbuilder-rb"
9
- s.version = "1.0.0"
9
+ s.version = "1.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["David Huie"]
14
- s.date = "2015-01-06"
14
+ s.date = "2015-02-10"
15
15
  s.description = "A Ruby client to the NationBuilder API"
16
16
  s.email = "david@nationbuilder.com"
17
17
  s.executables = ["nbdoc"]
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  ".ruby-gemset",
26
26
  ".ruby-version",
27
27
  ".travis.yml",
28
+ "CHANGELOG.md",
28
29
  "Gemfile",
29
30
  "Gemfile.lock",
30
31
  "LICENSE.txt",
@@ -37,14 +38,18 @@ Gem::Specification.new do |s|
37
38
  "lib/nationbuilder/client.rb",
38
39
  "lib/nationbuilder/endpoint.rb",
39
40
  "lib/nationbuilder/method.rb",
41
+ "lib/nationbuilder/paginator.rb",
40
42
  "lib/nationbuilder/parameter.rb",
41
43
  "lib/nationbuilder/spec_parser.rb",
42
44
  "lib/nationbuilder/url.rb",
43
45
  "nationbuilder-rb.gemspec",
44
46
  "spec/fixtures/delete.yml",
47
+ "spec/fixtures/paginated_get_page2.yml",
48
+ "spec/fixtures/paginated_get_page3.yml",
45
49
  "spec/fixtures/parametered_get.yml",
46
50
  "spec/fixtures/parametered_post.yml",
47
51
  "spec/nationbuilder_client_spec.rb",
52
+ "spec/nationbuilder_paginator_spec.rb",
48
53
  "spec/spec_helper.rb"
49
54
  ]
50
55
  s.homepage = "http://github.com/3dna/nationbuilder-rb"
@@ -2,17 +2,17 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: delete
5
- uri: https://dh.nationbuilder.com/api/v1/people/24?access_token=6ed3ab9395daf0e3e39098761e85e8e703aa84921c5c1e32637f6984944cf1f2
5
+ uri: https://organizeralexandreschmitt.nationbuilder.com/api/v1/people/21234?access_token=53920a524356034a065515a37650df2bd295971975d5742b9daa50eb8c7404d5
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"access_token":"6ed3ab9395daf0e3e39098761e85e8e703aa84921c5c1e32637f6984944cf1f2"}'
8
+ string: "{\"access_token\":\"53920a524356034a065515a37650df2bd295971975d5742b9daa50eb8c7404d5\"}"
9
9
  headers:
10
10
  User-Agent:
11
- - HTTPClient/1.0 (2.4.0, ruby 2.0.0 (2013-11-22))
11
+ - HTTPClient/1.0 (2.4.0, ruby 2.1.0 (2013-12-25))
12
12
  Accept:
13
13
  - application/json
14
14
  Date:
15
- - Tue, 07 Oct 2014 17:43:46 GMT
15
+ - Thu, 05 Feb 2015 05:47:08 GMT
16
16
  Content-Type:
17
17
  - application/json
18
18
  response:
@@ -23,49 +23,49 @@ http_interactions:
23
23
  Server:
24
24
  - cloudflare-nginx
25
25
  Date:
26
- - Tue, 07 Oct 2014 17:43:50 GMT
27
- Content-Type:
28
- - application/octet-stream
26
+ - Thu, 05 Feb 2015 05:47:11 GMT
29
27
  Content-Length:
30
28
  - '0'
31
29
  Connection:
32
30
  - keep-alive
33
31
  Set-Cookie:
34
- - __cfduid=d1d7ffdf9caac3883c7d2a972e0cf26f11412703826586; expires=Mon, 23-Dec-2019
35
- 23:50:00 GMT; path=/; domain=.nationbuilder.com; HttpOnly
32
+ - __cfduid=d1d4e79a31d9574d13e2cafc0d75e217b1423115228; expires=Fri, 05-Feb-16
33
+ 05:47:08 GMT; path=/; domain=.nationbuilder.com; HttpOnly
36
34
  Cache-Control:
37
35
  - no-cache
38
36
  Nation-Ratelimit-Limit:
39
- - '-1'
37
+ - '125000'
40
38
  Nation-Ratelimit-Remaining:
41
- - '0'
39
+ - '124962'
42
40
  Nation-Ratelimit-Reset:
43
- - '1412726400'
41
+ - '1423180800'
44
42
  Status:
45
43
  - 204 No Content
46
44
  X-Powered-By:
47
- - Phusion Passenger 4.0.48
45
+ - Phusion Passenger 4.0.53
46
+ X-Pulse-Approved:
47
+ - 'true'
48
48
  X-Rack-Cache:
49
49
  - invalidate, pass
50
50
  X-Ratelimit-Limit:
51
- - 33s
51
+ - 10s
52
52
  X-Ratelimit-Remaining:
53
- - '49997'
53
+ - '97'
54
54
  X-Ratelimit-Reset:
55
- - '32.038486321'
55
+ - '1423115237'
56
56
  X-Request-Id:
57
- - d5ab16fa2e0ac355cecdab2324422be0
57
+ - 8548ed69e5b179a369dbf2c82598e911
58
58
  X-Runtime:
59
- - '3.853476'
59
+ - '2.128177'
60
60
  X-Ua-Compatible:
61
61
  - IE=Edge,chrome=1
62
62
  Via:
63
63
  - 1.1 nationbuilder.com
64
64
  Cf-Ray:
65
- - 175be7242f0d0679-LAX
65
+ - 1b3ccfc3fff3068b-LAX
66
66
  body:
67
67
  encoding: UTF-8
68
68
  string: ''
69
69
  http_version:
70
- recorded_at: Tue, 07 Oct 2014 17:43:50 GMT
70
+ recorded_at: Thu, 05 Feb 2015 05:47:11 GMT
71
71
  recorded_with: VCR 2.9.2
@@ -0,0 +1,205 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://organizeralexandreschmitt.nationbuilder.com/api/v1/sites/organizeralexandreschmitt/pages/basic_pages?access_token=53920a524356034a065515a37650df2bd295971975d5742b9daa50eb8c7404d5
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - HTTPClient/1.0 (2.4.0, ruby 2.1.0 (2013-12-25))
12
+ Accept:
13
+ - application/json
14
+ Date:
15
+ - Thu, 05 Feb 2015 05:58:22 GMT
16
+ Content-Type:
17
+ - application/json
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - cloudflare-nginx
25
+ Date:
26
+ - Thu, 05 Feb 2015 05:58:23 GMT
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Set-Cookie:
34
+ - __cfduid=d95a74d79d057efd75b3932a4fd76c4211423115903; expires=Fri, 05-Feb-16
35
+ 05:58:23 GMT; path=/; domain=.nationbuilder.com; HttpOnly
36
+ Cache-Control:
37
+ - max-age=0, private, must-revalidate
38
+ Etag:
39
+ - W/"a8890e6ebc2582f813ad6c36a877b862"
40
+ Nation-Ratelimit-Limit:
41
+ - '125000'
42
+ Nation-Ratelimit-Remaining:
43
+ - '124956'
44
+ Nation-Ratelimit-Reset:
45
+ - '1423180800'
46
+ Status:
47
+ - 200 OK
48
+ Vary:
49
+ - Accept-Encoding
50
+ X-Powered-By:
51
+ - Phusion Passenger 4.0.53
52
+ X-Pulse-Approved:
53
+ - 'true'
54
+ X-Rack-Cache:
55
+ - miss
56
+ X-Ratelimit-Limit:
57
+ - 10s
58
+ X-Ratelimit-Remaining:
59
+ - '99'
60
+ X-Ratelimit-Reset:
61
+ - '1423115913'
62
+ X-Request-Id:
63
+ - 93eaa496959856120c812861de0a27da
64
+ X-Runtime:
65
+ - '0.151672'
66
+ X-Ua-Compatible:
67
+ - IE=Edge,chrome=1
68
+ Via:
69
+ - 1.1 nationbuilder.com
70
+ Cf-Ray:
71
+ - 1b3ce039d47a13d7-LAX
72
+ body:
73
+ encoding: UTF-8
74
+ string: "{\"results\":[{\"slug\":\"liquid_howto_videos\",\"path\":\"/liquid_howto_videos\",\"status\":\"published\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Liquid
75
+ howto videos\",\"headline\":\"Liquid howto videos\",\"title\":\"Liquid howto
76
+ videos - Matt's General Store\",\"excerpt\":\"\",\"author_id\":79278,\"published_at\":\"2014-08-20T13:48:13-07:00\",\"external_id\":null,\"tags\":[],\"id\":27,\"content\":\"\\u003Cp\\u003Ehttps://www.youtube.com/watch?v=tZLTExLukSg\\u003C/p\\u003E\\r\\n\\u003Cp\\u003Ehttps://www.youtube.com/watch?v=u8IPLtBtKcc\\u003C/p\\u003E\\r\\n\\u003Cp\\u003Ehttps://www.youtube.com/watch?v=ZqO5AwwLw5I\\u003C/p\\u003E\\r\\n\\u003Cp\\u003E(note:
77
+ for specific variables available in NationBuilder, check \\u003Ca href=\\\"http://nationbuilder.com/request_variables\\\"\\u003Ehere\\u003C/a\\u003E)\\u003C/p\\u003E\"},{\"slug\":\"liquid_training\",\"path\":\"/liquid_training\",\"status\":\"published\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Liquid
78
+ training\",\"headline\":\"Liquid training\",\"title\":\"Liquid training -
79
+ Matt's General Store\",\"excerpt\":\"\",\"author_id\":79278,\"published_at\":\"2014-08-20T13:35:10-07:00\",\"external_id\":null,\"tags\":[],\"id\":26,\"content\":\"\\u003Col\\u003E\\n\\u003Cli
80
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EExpectations\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
81
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EThat you have a
82
+ basic understanding of html and scss, and you\\u2019ve probably seen/delt
83
+ with liquid already but would like to know more about things that can be done
84
+ with it.\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp
85
+ dir=\\\"ltr\\\"\\u003EWhat we\\u2019re covering today\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
86
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EWhat exactly liquid
87
+ is\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp
88
+ dir=\\\"ltr\\\"\\u003EHow we use it\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
89
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EExamples of live
90
+ liquid actions\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp
91
+ dir=\\\"ltr\\\"\\u003ECalling blog entries to the front page of a website
92
+ (or other pages)\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp
93
+ dir=\\\"ltr\\\"\\u003ECustom fields - how they work and how they can be used\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
94
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EAdding a Twitter
95
+ widget to our website that will dynamically pull in the broadcaster info\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
96
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003ELimiting page views
97
+ by tags on a profile\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
98
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EWalk sheets, and
99
+ mastering some awesomeness there\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
100
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003ELiquid for emails\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli
101
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EQuestions\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli
102
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EWhat is Liquid?\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
103
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EOpen source, ruby
104
+ based, template language - created by \\u003Ca href=\\\"http://www.shopify.com/\\\"\\u003EShopify\\u003C/a\\u003E\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
105
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003ELink to github:
106
+ \\u003Ca href=\\\"https://github.com/Shopify/liquid\\\"\\u003Ehttps://github.com/Shopify/liquid\\u003C/a\\u003E\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli
107
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EWhy is it so awesome?\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
108
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EBecause it allows
109
+ for a more dynamic experience, both for users and for visitors to websites
110
+ built on NationBuilder.\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
111
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EExample - limited
112
+ pageviews to only signed in, members, etc.\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
113
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EExample - custom
114
+ walk list\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli
115
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EHow does it do
116
+ that?\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp
117
+ dir=\\\"ltr\\\"\\u003E\\u003Ca href=\\\"http://nationbuilder.com/liquid_basics#tags\\\"\\u003ETags\\u003C/a\\u003E
118
+ {% %} =\\u0026gt; logic\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
119
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003E\\u003Ca href=\\\"http://nationbuilder.com/liquid_basics#output\\\"\\u003EObjects\\u003C/a\\u003E
120
+ {{ }} =\\u0026gt; attributes\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003Cli
121
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003E\\u003Ca href=\\\"http://nationbuilder.com/liquid_basics#filter\\\"\\u003EFilters\\u003C/a\\u003E
122
+ {{ | }} =\\u0026gt; modify output\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli\\u003EExercises\\u003Col\\u003E\\n\\u003Cli\\u003ECreate
123
+ a basic page\\u003Col\\u003E\\n\\u003Cli dir=\\\"ltr\\\"\\u003ESet it so that
124
+ you have to be either tagged with \\\"WooHoo\\\" to be able to see the {{
125
+ page.content }}, otherwise come up with something else creative to show...\\u003C/li\\u003E\\r\\n\\u003Cli
126
+ dir=\\\"ltr\\\"\\u003EExtra credit: If the site visitor isn't tagged to be
127
+ able to see the page, show a link to a volunteer page that will automatically
128
+ tag them and then redirect back to the page.\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli\\u003ECreate
129
+ a signup page with a custom field\\u003C/li\\u003E\\r\\n\\u003Cli\\u003ECreate
130
+ a custom walksheet\\u003C/li\\u003E\\r\\n\\u003Cli\\u003ECreate a custom email
131
+ theme template\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\n\\u003C/li\\u003E\\r\\n\\u003Cli
132
+ dir=\\\"ltr\\\"\\u003E\\r\\n\\u003Cp dir=\\\"ltr\\\"\\u003EQ\\u0026amp;A/Debrief\\u003C/p\\u003E\\r\\n\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\u003Cp\\u003E\\u00a0\\u003C/p\\u003E\\r\\n\\u003Cp\\u003EResources\\u003C/p\\u003E\\r\\n\\u003Col\\u003E\\n\\u003Cli
133
+ dir=\\\"ltr\\\"\\u003E\\u003Ca href=\\\"http://www.mattsgeneralstore.com/liquid_howto_videos\\\"\\u003EVideos\\u003C/a\\u003E\\u003C/li\\u003E\\r\\n\\u003Cli
134
+ dir=\\\"ltr\\\"\\u003E\\u003Ca href=\\\"http://docs.shopify.com/themes/liquid-documentation/basics\\\"\\u003EShopify
135
+ documentation\\u003C/a\\u003E\\u003C/li\\u003E\\r\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\u003Ca
136
+ href=\\\"http://nationbuilder.com/request_variables\\\"\\u003ENationBuilder
137
+ documentation\\u003C/a\\u003E\\u003C/li\\u003E\\r\\n\\u003Cli dir=\\\"ltr\\\"\\u003E\\u003Ca
138
+ href=\\\"https://github.com/codealchemy/codedump\\\"\\u003EGithub (repo for
139
+ tips and tricks)\\u003C/a\\u003E\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\"},{\"slug\":\"custom_membership_page\",\"path\":\"/custom_membership_page\",\"status\":\"unlisted\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Custom
140
+ membership page\",\"headline\":\"Custom membership page\",\"title\":\"Custom
141
+ membership page - Matt's General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":25,\"content\":null},{\"slug\":\"basic_home_page\",\"path\":\"/basic_home_page\",\"status\":\"archived\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Basic
142
+ home page\",\"headline\":\"Basic home page\",\"title\":\"Basic home page -
143
+ Matt's General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":21,\"content\":null},{\"slug\":\"new_page\",\"path\":\"/new_page\",\"status\":\"archived\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"New
144
+ page\",\"headline\":\"New page\",\"title\":\"New page - Matt's General Store\",\"excerpt\":\"\",\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":20,\"content\":\"\\u003Cblockquote\\u003E\\r\\n\\u003Cp\\u003E\\u003Cspan
145
+ style=\\\"background-color:rgb(204, 204, 221); color:rgb(0, 0, 0)\\\"\\u003EWe
146
+ can dance if we want to\\u003C/span\\u003E\\u003Cbr\\u003E\\u003Cspan style=\\\"background-color:rgb(204,
147
+ 204, 221); color:rgb(0, 0, 0)\\\"\\u003EWe can leave your friends behind\\u003C/span\\u003E\\u003Cbr\\u003E\\u003Cspan
148
+ style=\\\"background-color:rgb(204, 204, 221); color:rgb(0, 0, 0)\\\"\\u003E'Cause
149
+ your friends don't dance and if they don't dance\\u003C/span\\u003E\\u003Cbr\\u003E\\u003Cspan
150
+ style=\\\"background-color:rgb(204, 204, 221); color:rgb(0, 0, 0)\\\"\\u003EWell,
151
+ they're no friends of mine\\u003C/span\\u003E\\u003C/p\\u003E\\r\\n\\u003C/blockquote\\u003E\\r\\n\\r\\n\\u003Cp\\u003Ehttp://www.youtube.com/watch?v=AjPau5QYtYs\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u003Cimg
152
+ alt=\\\"\\\" src=\\\"http://d3n8a8pro7vhmx.cloudfront.net/themes/521f7ca578c2723d84000002/attachments/original/1370903749/ph-hiring.png?1370903749\\\"
153
+ style=\\\"height:106px; width:108px\\\"\\u003E\\u003Cimg alt=\\\"\\\" src=\\\"http://tippvet.com/wp-content/uploads/2013/05/cat-vet.jpg\\\"
154
+ style=\\\"height:150px; width:200px\\\"\\u003E\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u003Cbr\\u003E\\r\\nThis
155
+ is awesome!!!\\u00a0\\u20ac\\u00d0\\u00a0\\u003Ca id=\\\"Delta Gamma\\\" name=\\\"Delta%20Gamma\\\"\\u003E\\u003C/a\\u003E\\u00a0\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cul\\u003E\\n\\u003Cli\\u003Eitem
156
+ 1\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003E2\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003E3\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003E4\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003Ecool
157
+ beans\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003E\\n\\u003Cspan style=\\\"color:#A52A2A\\\"\\u003Eawesomesauce\\u003C/span\\u003E\\r\\n\\t\\u003Chr\\u003E\\n\\u003Cblockquote\\u003E\\r\\n\\t\\u003Cp\\u003EOne
158
+ for all, all for one\\u003C/p\\u003E\\r\\n\\t\\u003C/blockquote\\u003E\\r\\n\\t\\u003C/li\\u003E\\r\\n\\u003C/ul\\u003E\\u003Col\\u003E\\n\\u003Cli\\u003Eone\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003Etwo\\u003C/li\\u003E\\r\\n\\t\\u003Cli\\u003Ethree\\u003C/li\\u003E\\r\\n\\u003C/ol\\u003E\\u003Cp\\u003EIndent\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u003Ca
159
+ href=\\\"google.com\\\"\\u003E\\u003Cimg alt=\\\"\\\" src=\\\"http://d3n8a8pro7vhmx.cloudfront.net/organizeralexandreschmitt/pages/144/attachments/original/1400886485/dogecoin_logo_large_verge_medium_landscape.png?1400886485\\\"\\u003E\\u003C/a\\u003E\\u003C/p\\u003E\\r\\n\\r\\n\\u003Chr\\u003E\\u003Cp\\u003EIndent\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003EIndent
160
+ (can't do indents)\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003EStyle \\u003Cstrong\\u003Ebold\\u003C/strong\\u003E,
161
+ \\u003Cem\\u003Eitalics\\u003C/em\\u003E, \\u003Cs\\u003Estrikethrough\\u003C/s\\u003E,
162
+ remove formatting\\u003C/p\\u003E\\r\\n\\r\\n\\u003Ctable border=\\\"1\\\"
163
+ style=\\\"width:100%\\\"\\u003E\\u003Ctbody\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E\\r\\n\\t\\t\\t\\u003Ctable
164
+ align=\\\"center\\\" border=\\\"1\\\" style=\\\"width:500px\\\"\\u003E\\n\\u003Ccaption\\u003E\\u003Cspan
165
+ style=\\\"background-color:#FF8C00\\\"\\u003ENested table\\u003C/span\\u003E\\u003C/caption\\u003E\\r\\n\\t\\t\\t\\t\\u003Ctbody\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E\\u003Cspan
166
+ style=\\\"background-color:#FF8C00\\\"\\u003E\\u00a0Cell 1\\u003C/span\\u003E\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\t\\u003Ctd\\u003E2\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E3\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\t\\u003Ctd\\u003E4\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E\\r\\n\\t\\t\\t\\t\\t\\t\\u003Cp\\u003E5\\u00a0\\u003Cimg
167
+ alt=\\\"\\\" src=\\\"http://d3n8a8pro7vhmx.cloudfront.net/organizeralexandreschmitt/pages/144/attachments/original/1400886485/dogecoin_logo_large_verge_medium_landscape.png?1400886485\\\"
168
+ style=\\\"border-style:solid; border-width:2px; float:left; height:123px;
169
+ margin:2px 4px; width:200px\\\"\\u003E\\u003C/p\\u003E\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t\\u003Cp\\u003E\\u00a0\\u003C/p\\u003E\\r\\n\\t\\t\\t\\t\\t\\t\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\t\\u003Ctd\\u003E6\\u003C/td\\u003E\\r\\n\\t\\t\\t\\t\\t\\u003C/tr\\u003E\\n\\u003C/tbody\\u003E\\n\\u003C/table\\u003E\\n\\u003Cp\\u003E\\u00a0\\u003C/p\\u003E\\r\\n\\t\\t\\t\\u003C/td\\u003E\\r\\n\\t\\t\\t\\u003Ctd\\u003E1\\u003C/td\\u003E\\r\\n\\t\\t\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E\\u00a0\\u003C/td\\u003E\\r\\n\\t\\t\\t\\u003Ctd\\u003E1\\u003C/td\\u003E\\r\\n\\t\\t\\u003C/tr\\u003E\\n\\u003Ctr\\u003E\\n\\u003Ctd\\u003E\\u00a0\\u003C/td\\u003E\\r\\n\\t\\t\\t\\u003Ctd\\u003E2\\u003C/td\\u003E\\r\\n\\t\\t\\u003C/tr\\u003E\\n\\u003C/tbody\\u003E\\u003C/table\\u003E\\u003Cp\\u003ENotes:\\u003Cbr\\u003E\\u003Cbr\\u003E\\r\\nSaving
170
+ images in tables removes the image (linked image) FIXED\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003ELinked
171
+ images in content area do not appear \\u003Cs\\u003EFIXED\\u003C/s\\u003E\\u00a0worked
172
+ for a moment, then went back to dropping the image when saving\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003ECannot
173
+ compare auto saved versions side-by-side (when prompted)\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u0026lt;ul\\u0026gt;
174
+ inheriting styling from theme.scss - removing bullets (Theme issue, not WYSIWYG
175
+ issue)\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u0026lt;ol\\u0026gt; inherting
176
+ styling from theme.scss - removing numbering FIXED\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003E\\u0026lt;blockquote\\u0026gt;
177
+ has a \\u0026lt;p\\u0026gt; with the text nested in it - doesn't seem to affect
178
+ styling other than an indentation\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003Eembed.ly
179
+ not functioning\\u003C/p\\u003E\\r\\n\\r\\n\\u003Cp\\u003Eunable to upload
180
+ image/files from WYSIWYG editor (unsure if this is going to be added functionality
181
+ or not)\\u003C/p\\u003E\"},{\"slug\":\"press_releases\",\"path\":\"/press_releases\",\"status\":\"published\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Press
182
+ releases\",\"headline\":\"Press releases\",\"title\":\"Press releases - Matt's
183
+ General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":\"2014-05-11T21:29:11-07:00\",\"external_id\":null,\"tags\":[],\"id\":19,\"content\":null},{\"slug\":\"social_capital\",\"path\":\"/social_capital\",\"status\":\"published\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Social
184
+ Capital\",\"headline\":\"Social Capital\",\"title\":\"Social Capital - Matt's
185
+ General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":\"2014-04-25T17:35:00-07:00\",\"external_id\":null,\"tags\":[],\"id\":17,\"content\":null},{\"slug\":\"crowdhall\",\"path\":\"/crowdhall\",\"status\":\"archived\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"CrowdHall\",\"headline\":\"CrowdHall\",\"title\":\"CrowdHall
186
+ - Matt's General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":16,\"content\":null},{\"slug\":\"the_game\",\"path\":\"/the_game\",\"status\":\"expired\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"The
187
+ Game\",\"headline\":\"The Game\",\"title\":\"The Game - Matt's General Store\",\"excerpt\":null,\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":15,\"content\":null},{\"slug\":\"members\",\"path\":\"/members\",\"status\":\"archived\",\"site_slug\":\"organizeralexandreschmitt\",\"name\":\"Members\",\"headline\":\"Members\",\"title\":\"Members
188
+ - Matt's General Store\",\"excerpt\":\"\",\"author_id\":79278,\"published_at\":null,\"external_id\":null,\"tags\":[],\"id\":13,\"content\":\"\\u003Cp\\u003EBacon
189
+ ipsum dolor sit amet flank swine turducken ball tip short loin hamburger beef
190
+ ribs beef biltong boudin. Doner short loin venison frankfurter cow prosciutto
191
+ tri-tip pork belly boudin t-bone meatloaf tenderloin tail. Tail ribeye salami
192
+ pastrami landjaeger jowl tri-tip doner prosciutto kevin swine ball tip frankfurter.
193
+ Frankfurter beef ribs tenderloin ball tip porchetta sirloin. Shoulder capicola
194
+ porchetta frankfurter corned beef prosciutto tri-tip ribeye pork chop chuck.
195
+ Bresaola short ribs t-bone meatball beef, tail turkey bacon sausage filet
196
+ mignon doner. Flank tri-tip pastrami fatback landjaeger ball tip.\\u003C/p\\u003E\\r\\n\\u003Cp\\u003EPancetta
197
+ sausage brisket turducken frankfurter, pastrami tri-tip ribeye. Ham pastrami
198
+ bresaola ribeye, turkey porchetta corned beef swine jowl tongue meatball ball
199
+ tip. Pork loin short ribs shoulder flank strip steak tail tongue porchetta
200
+ hamburger ball tip pastrami venison beef ribs. Swine prosciutto pork chop
201
+ kevin fatback landjaeger. Bresaola filet mignon landjaeger meatball drumstick
202
+ ham hock rump. Ribeye pig chicken salami kevin.\\u003C/p\\u003E\"}],\"next\":\"/api/v1/sites/organizeralexandreschmitt/pages/basic_pages?__nonce=WFLdAtsECEYUOHDMmSxr7A\\u0026__token=AHEIn2BHzrG-kW8bkvoc2ufQMmH9RnPkgBjg3DzLHU_y\",\"prev\":\"/api/v1/sites/organizeralexandreschmitt/pages/basic_pages?__nonce=bMkjOhmZRMsMx5k32k3wSA\\u0026__token=AEXYxxwa0GEkIUgPMF7mgc4Quhf1oCLVdsMnO6tple4E\"}"
203
+ http_version:
204
+ recorded_at: Thu, 05 Feb 2015 05:58:23 GMT
205
+ recorded_with: VCR 2.9.2