planning_center 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -1
- data/README.md +74 -2
- data/Rakefile +1 -1
- data/lib/planning_center/base.rb +1 -1
- data/lib/planning_center/client.rb +3 -1
- data/lib/planning_center/version.rb +1 -1
- data/planning_center.gemspec +7 -6
- data/spec/planning_center/arrangement_spec.rb +0 -1
- data/spec/planning_center/item_spec.rb +0 -1
- metadata +60 -36
- checksums.yaml +0 -7
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# Planning Center
|
2
2
|
|
3
3
|
[![Build Status](https://img.shields.io/travis/molawson/planning_center.svg)](https://travis-ci.org/molawson/planning_center)
|
4
4
|
[![Code Climate](https://img.shields.io/codeclimate/github/molawson/planning_center.svg)](https://codeclimate.com/github/molawson/planning_center)
|
@@ -22,7 +22,79 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
### Configuration
|
26
|
+
|
27
|
+
All API requests are made via an OAuth client. You'll have to register an application with Planning Center to get a consumer key and secret. Then, you can follow the normal OAuth procedures for requesting access tokens for your users.
|
28
|
+
|
29
|
+
Once you've jumped through all the OAuth hoops, you're ready to configure a client.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
client = PlanningCenter::Client.new do |c|
|
33
|
+
c.consumer_key = 'YOUR_CONSUMER_KEY'
|
34
|
+
c.consumer_secret = 'YOUR_CONSUMER_SECRET'
|
35
|
+
c.access_token = 'YOUR_ACCESS_TOKEN'
|
36
|
+
c.access_token_secret = 'YOUR_ACCESS_SECRET'
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
### Organization
|
41
|
+
|
42
|
+
All Planning Center API data flows through the user's organization. Since each OAuth client is tied to a user's account, you can access the organization directly from a `Client` object.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
client = PlanningCenter::Client.new do |c|
|
46
|
+
# config details
|
47
|
+
end
|
48
|
+
|
49
|
+
client.organization # => #<PlanningCenter::Organization>
|
50
|
+
```
|
51
|
+
|
52
|
+
### Attributes
|
53
|
+
|
54
|
+
The API response body is parsed and stored as a hash in each object. You can get at the hash directly through the `#attrs` method or via a method directly.
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
organization.attrs['name'] # => 'Organization Name'
|
58
|
+
organization.name # => 'Organization Name'
|
59
|
+
```
|
60
|
+
|
61
|
+
For more details about what attributes and methods are available for various objects, check out the [API docs](http://get.planningcenteronline.com/api).
|
62
|
+
|
63
|
+
|
64
|
+
### Associations
|
65
|
+
|
66
|
+
Associations between objects are setup to work seamlessly, regardless of whether the source object contains a full version of the associated object, a partial set of attributes, or only the id of the associated object.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
# Fully embedded association (no additional API request)
|
70
|
+
organization.service_types # => [#<PlanningCenter::ServiceType>, #<PlanningCenter::ServiceType>, ...]
|
71
|
+
|
72
|
+
# Partially embedded association (no immediate additional API request)
|
73
|
+
service_type.plans # => [#<PlanningCenter::Plan>, #<PlanningCenter::Plan>, ...]
|
74
|
+
|
75
|
+
# Association referenced by id (performs API request)
|
76
|
+
item.arrangement # => [#<PlanningCenter::Arrangement>, #<PlanningCenter::Arrangement>, ...]
|
77
|
+
```
|
78
|
+
|
79
|
+
### Lazily Loaded Attributes
|
80
|
+
|
81
|
+
In a few cases, an object retrieved from the API contains embedded associations that don't have their full set of attributes. For example, the `service_type` API object contains an array of `plans`, but those `plans` only have some of the more "vital" attributes.
|
82
|
+
|
83
|
+
For these kinds of associations, we initially create the associated object(s) with the partial set of attributes. That way, if you only need to access one of the attributes that's already been loaded, we won't bother making another API request.
|
84
|
+
|
85
|
+
But if you need to get at one of the attributes that isn't already loaded, all you have to do is call that method. The object knows that it can load the desired attribute from the API, so it makes that API call, updates the object's attributes, and returns the result.
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
partial_plan = service_type.plans.first
|
89
|
+
|
90
|
+
# No additional API request is made because 'plan_title' was
|
91
|
+
# already present in the 'service_type' object
|
92
|
+
partial_plan.plan_title # => 'Plan Title'
|
93
|
+
|
94
|
+
# Makes an API request for the entire 'plan' object,
|
95
|
+
# updates the `attrs`, and returns the desired value
|
96
|
+
partial_plan.total_length # => 4560
|
97
|
+
```
|
26
98
|
|
27
99
|
## Contributing
|
28
100
|
|
data/Rakefile
CHANGED
data/lib/planning_center/base.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'oauth'
|
4
|
+
require 'oauth/signature/plaintext'
|
4
5
|
require 'json'
|
5
6
|
|
6
7
|
module PlanningCenter
|
@@ -41,7 +42,8 @@ module PlanningCenter
|
|
41
42
|
@consumer ||= OAuth::Consumer.new(
|
42
43
|
consumer_key,
|
43
44
|
consumer_secret,
|
44
|
-
site: SITE
|
45
|
+
site: SITE,
|
46
|
+
signature_method: 'plaintext'
|
45
47
|
)
|
46
48
|
end
|
47
49
|
|
data/planning_center.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'planning_center/version'
|
@@ -8,14 +9,14 @@ Gem::Specification.new do |spec|
|
|
8
9
|
spec.version = PlanningCenter::VERSION
|
9
10
|
spec.authors = ['Mo Lawson']
|
10
11
|
spec.email = ['mo@molawson.com']
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
12
|
+
spec.summary = 'Ruby wrapper for the Planning Center Online API.'
|
13
|
+
spec.description = 'Ruby wrapper for the Planning Center Online API.'
|
13
14
|
spec.homepage = 'https://github.com/molawson/planning_center'
|
14
15
|
spec.license = 'MIT'
|
15
16
|
|
16
17
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(
|
18
|
-
spec.test_files = spec.files.grep(
|
18
|
+
spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
19
20
|
spec.require_paths = ['lib']
|
20
21
|
|
21
22
|
spec.add_dependency 'oauth', '~> 0.4'
|
@@ -26,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
26
27
|
spec.add_development_dependency 'rspec', '~> 2.14'
|
27
28
|
spec.add_development_dependency 'vcr', '~> 2.9'
|
28
29
|
spec.add_development_dependency 'webmock', '~> 1.17'
|
29
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
30
|
+
spec.add_development_dependency 'rubocop', '~> 0.23'
|
30
31
|
|
31
32
|
spec.add_development_dependency 'pry', '~> 0.9'
|
32
33
|
spec.add_development_dependency 'dotenv', '~> 0.10'
|
metadata
CHANGED
@@ -1,167 +1,190 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: planning_center
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Mo Lawson
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: oauth
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0.4'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0.4'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: json
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '1.8'
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '1.8'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: bundler
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '1.5'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '1.5'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rake
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '10.1'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '10.1'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rspec
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '2.14'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- -
|
91
|
+
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '2.14'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: vcr
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ~>
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '2.9'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- -
|
107
|
+
- - ~>
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '2.9'
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: webmock
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '1.17'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
|
-
- -
|
123
|
+
- - ~>
|
109
124
|
- !ruby/object:Gem::Version
|
110
125
|
version: '1.17'
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: rubocop
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
|
-
- -
|
131
|
+
- - ~>
|
116
132
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0.
|
133
|
+
version: '0.23'
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
|
-
- -
|
139
|
+
- - ~>
|
123
140
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0.
|
141
|
+
version: '0.23'
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: pry
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
|
-
- -
|
147
|
+
- - ~>
|
130
148
|
- !ruby/object:Gem::Version
|
131
149
|
version: '0.9'
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
|
-
- -
|
155
|
+
- - ~>
|
137
156
|
- !ruby/object:Gem::Version
|
138
157
|
version: '0.9'
|
139
158
|
- !ruby/object:Gem::Dependency
|
140
159
|
name: dotenv
|
141
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
142
162
|
requirements:
|
143
|
-
- -
|
163
|
+
- - ~>
|
144
164
|
- !ruby/object:Gem::Version
|
145
165
|
version: '0.10'
|
146
166
|
type: :development
|
147
167
|
prerelease: false
|
148
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
149
170
|
requirements:
|
150
|
-
- -
|
171
|
+
- - ~>
|
151
172
|
- !ruby/object:Gem::Version
|
152
173
|
version: '0.10'
|
153
174
|
- !ruby/object:Gem::Dependency
|
154
175
|
name: awesome_print
|
155
176
|
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
156
178
|
requirements:
|
157
|
-
- -
|
179
|
+
- - ~>
|
158
180
|
- !ruby/object:Gem::Version
|
159
181
|
version: '1.2'
|
160
182
|
type: :development
|
161
183
|
prerelease: false
|
162
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
163
186
|
requirements:
|
164
|
-
- -
|
187
|
+
- - ~>
|
165
188
|
- !ruby/object:Gem::Version
|
166
189
|
version: '1.2'
|
167
190
|
description: Ruby wrapper for the Planning Center Online API.
|
@@ -171,11 +194,11 @@ executables: []
|
|
171
194
|
extensions: []
|
172
195
|
extra_rdoc_files: []
|
173
196
|
files:
|
174
|
-
-
|
175
|
-
-
|
176
|
-
-
|
177
|
-
-
|
178
|
-
-
|
197
|
+
- .env
|
198
|
+
- .gitignore
|
199
|
+
- .rspec
|
200
|
+
- .rubocop.yml
|
201
|
+
- .travis.yml
|
179
202
|
- Gemfile
|
180
203
|
- LICENSE.txt
|
181
204
|
- README.md
|
@@ -214,26 +237,27 @@ files:
|
|
214
237
|
homepage: https://github.com/molawson/planning_center
|
215
238
|
licenses:
|
216
239
|
- MIT
|
217
|
-
metadata: {}
|
218
240
|
post_install_message:
|
219
241
|
rdoc_options: []
|
220
242
|
require_paths:
|
221
243
|
- lib
|
222
244
|
required_ruby_version: !ruby/object:Gem::Requirement
|
245
|
+
none: false
|
223
246
|
requirements:
|
224
|
-
- -
|
247
|
+
- - ! '>='
|
225
248
|
- !ruby/object:Gem::Version
|
226
249
|
version: '0'
|
227
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
|
+
none: false
|
228
252
|
requirements:
|
229
|
-
- -
|
253
|
+
- - ! '>='
|
230
254
|
- !ruby/object:Gem::Version
|
231
255
|
version: '0'
|
232
256
|
requirements: []
|
233
257
|
rubyforge_project:
|
234
|
-
rubygems_version:
|
258
|
+
rubygems_version: 1.8.23.2
|
235
259
|
signing_key:
|
236
|
-
specification_version:
|
260
|
+
specification_version: 3
|
237
261
|
summary: Ruby wrapper for the Planning Center Online API.
|
238
262
|
test_files:
|
239
263
|
- spec/cassettes/PlanningCenter_Arrangement/_find/returns_an_arrangement.yml
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 159121da7603076333824f1e7ce1bee827de365e
|
4
|
-
data.tar.gz: fe9c7828b7f5751e70f417eada4cc7bec3fcc25c
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: ab125cb190684ff8ac4cdc36133ee1d7a4039f4ac0f9a7a00214b1081831a22bcef6343b6267b68b7bdefbfd425d925fb85c364397b85e40d1e764e900b8fdfe
|
7
|
-
data.tar.gz: 059216a7be26ade811eba279907ce563466c75ad0d11dfe8c2bc005b9dd1a4336e34961a23bb30f6e9526687be5cf289ecca06069b1dd6c2ed1984f2e79fbb8e
|