nationbuilder-rb 1.0.0 → 1.1.0

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