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.
@@ -2,7 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - jruby
4
4
  - rbx
5
- - 1.9.2
6
5
  - 1.9.3
7
6
  - 2.0.0
8
7
  - 2.1.0
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # PlanningCenter
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
- TODO: Write usage instructions here
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
@@ -3,7 +3,7 @@ require 'rspec/core/rake_task'
3
3
  require 'rubocop/rake_task'
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
- Rubocop::RakeTask.new
6
+ RuboCop::RakeTask.new
7
7
 
8
8
  task default: [:spec, :rubocop]
9
9
 
@@ -13,7 +13,7 @@ module PlanningCenter
13
13
  attrs.fetch(method_name.to_s) { super }
14
14
  end
15
15
 
16
- def respond_to_missing?(method_name, include_private = false)
16
+ def respond_to_missing?(method_name, _include_private = false)
17
17
  attrs.key? method_name.to_s
18
18
  end
19
19
 
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module PlanningCenter
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
@@ -1,4 +1,5 @@
1
- # coding: utf-8
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 = %q{Ruby wrapper for the Planning Center Online API.}
12
- spec.description = %q{Ruby wrapper for the Planning Center Online API.}
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(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
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.20'
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'
@@ -3,7 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe PlanningCenter::Arrangement do
6
-
7
6
  describe '.find', :vcr do
8
7
  it 'returns an arrangement' do
9
8
  arrangement = PlanningCenter::Arrangement.find(8535124, client)
@@ -3,7 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe PlanningCenter::Item do
6
-
7
6
  describe '#arrangement', :vcr do
8
7
  it 'returns an arrangement' do
9
8
  item = plan.items.first
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.0
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: 2014-04-23 00:00:00.000000000 Z
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.20'
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.20'
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
- - ".env"
175
- - ".gitignore"
176
- - ".rspec"
177
- - ".rubocop.yml"
178
- - ".travis.yml"
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: 2.2.2
258
+ rubygems_version: 1.8.23.2
235
259
  signing_key:
236
- specification_version: 4
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