thecity 0.0.7 → 0.0.8

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: 2c176e00ec8bb0c18426ec2de367af7860f6d507
4
- data.tar.gz: 97db6cae4dd681343fc3ab26cd9cf1398b1fdae7
3
+ metadata.gz: d34152f9f12969373d5f5eb2be4b02356ade4ffd
4
+ data.tar.gz: 693564268d37117d9f619b83998f872912262350
5
5
  SHA512:
6
- metadata.gz: e31f5742ba57813ff9b5fb18b56e85dd55976b2273ba6ed6c6fa44b7e5ce820892ba63036bbb2e333f62f90e421bca52436091aee1f03ff2a7e244ddf8bb0d06
7
- data.tar.gz: bb49a9510a57b7f2923cc67111376f4bcd9febe65f8fe42916e33d0ad4035220ab60dbdec1af6c81fbc7d50b644aff73673ff4651073d4d3187a8a8cb7d442ac
6
+ metadata.gz: 426501071ad8fd11f5cd1842799f2aa9b360607e30dbb2f6076af0cb38605316a5b6ac36cfa5439848510c9b66b796ac2078e0f85b5f9c66d36a61e201f7d92f
7
+ data.tar.gz: 31ee55ad21b32d3d007cafe9c38f8a695567af5a17e31ed65cbbefd05a596f4cbabe9397c4a1d2bbc111f2600b8320989995dc80fedc1bea64254cd3694afa91
@@ -25,7 +25,7 @@ module TheCity
25
25
  end
26
26
 
27
27
  def label_for(thecity_primitive)
28
- terminology.send(thecity_primitive.downcase.to_sym)
28
+ terminology.send(thecity_primitive.downcase.to_sym) rescue nil
29
29
  end
30
30
 
31
31
  end
@@ -8,7 +8,7 @@ module TheCity
8
8
 
9
9
  # Returns all the groups that the current user has an active role in
10
10
  #
11
- # @req_scope group_contont or user_groups
11
+ # @req_scope group_content or user_groups
12
12
  # @param options [Hash] A customizable set of options.
13
13
  # @option options [Boolean] :force_download Forces the request to hit the server and flush the cached response
14
14
  # @return [Array<TheCity::Group>]
@@ -16,13 +16,12 @@ module TheCity
16
16
 
17
17
  class Content < TheCity::Base
18
18
  include TheCity::Time
19
- attr_reader :id, :title, :body
19
+ attr_reader :id, :title, :body, :blurb, :group_id,
20
+ :leader_only, :priority, :member_only, :gender_only, :gender_only_gender, :featured,
21
+ :short_url, :file_attachments, :plaza, :shareable, :address
20
22
  object_attr_reader :User, :user
21
23
  object_attr_reader :Group, :group
22
24
 
23
- # def user
24
- # @user
25
- # end
26
25
  alias author user
27
26
 
28
27
  end
@@ -1,6 +1,6 @@
1
1
  module TheCity
2
2
  class Group < TheCity::Base
3
- attr_reader :name, :type, :id, :profile_picture, :role_title, :primary_campus
3
+ attr_reader :name, :type, :id, :profile_picture, :role_title, :primary_campus, :can_create
4
4
 
5
5
  end
6
6
  end
@@ -17,5 +17,13 @@ module TheCity
17
17
  class Permissions < TheCity::Base
18
18
  attr_reader :can_list_in_plaza, :member, :staff, :admin, :can_create_in_group_ids, :admin_privileges
19
19
 
20
+ def is_account_admin?
21
+ admin_privileges.any? {|ap| ap[:title] == 'Account Admin'} rescue false
22
+ end
23
+
24
+ def is_user_admin?
25
+ admin_privileges.any? {|ap| ap[:title] == 'User Admin'} rescue false
26
+ end
27
+
20
28
  end
21
29
  end
@@ -7,4 +7,8 @@ module TheCity
7
7
  class Topic < TheCity::Content
8
8
  end
9
9
 
10
+ def valid?
11
+ return (title and body and group_id)
12
+ end
13
+
10
14
  end
data/lib/the_city/user.rb CHANGED
@@ -1,23 +1,56 @@
1
+ require 'time'
2
+
1
3
  module TheCity
2
4
  class User < TheCity::Base
3
- extend Forwardable
4
-
5
- attr_reader :id, :name, :profile_picture, :gender
5
+ attr_reader :id, :title, :first, :last, :name, :profile_picture, #user_basic
6
+ :gender, :email ##user_extended
6
7
  attr_writer :permissions
7
8
 
8
- def_delegators :@permissions, :member?, :staff?, :admin?
9
-
10
9
  # Returns the groups that the user belongs to
11
10
  #
12
11
  # @return [Array<TheCity::Group>]
13
12
  def groups
14
13
  memoize(:groups) do
15
- Array(@attrs[:groups]).map do |g|
16
- TheCity::Group.new(g)
14
+ if @attrs[:groups].any?
15
+ Array(@attrs[:groups]).map do |g|
16
+ TheCity::Group.new(g)
17
+ end
18
+ elsif @client
19
+ @client.my_groups
20
+ else
21
+ []
17
22
  end
18
23
  end
19
24
  end
20
25
 
26
+ def method_missing(method_sym, *arguments, &block)
27
+ if method_sym.to_s =~ /^is_in_group_(\d+)\??$/
28
+ is_in_group_with_title?($1.to_i, arguments.first)
29
+ else
30
+ super
31
+ end
32
+ end
33
+
34
+ # @note Returns true/false if the current user has an active role in the group (group_id).
35
+ #
36
+ # @param group_id [Integer] the id of TheCity::Group in question.
37
+ # @param title [Array<String>] the title or titles of the user's active role.
38
+ # @example see if the user is a leader in group 1234
39
+ # current_user.is_in_group_with_title(1234, :leader)
40
+ # @return [Boolean]
41
+ def is_in_group_with_title?(group_id, title=nil)
42
+ return groups.any? {|g| g.id == group_id } if title.nil?
43
+ titles = [title].flatten
44
+ return groups.any? {|g| (g.id == group_id and titles.any? {|t| t.to_s.downcase == g.role_title.downcase } ) }
45
+ end
46
+
47
+ # Returns the user's birthdate as a ruby Date object.
48
+ #
49
+ # @return [Date]
50
+ def birthdate
51
+ @bday ||= Date.strptime(@attrs[:birthdate], '%m/%d/%Y') rescue nil
52
+ end
53
+
21
54
  # Returns the permissions for the current user
22
55
  #
23
56
  # @return [TheCity::Permissions]
@@ -25,17 +58,27 @@ module TheCity
25
58
  @permissions ||= @client.permissions if (@client and @client.current_user.id == id)
26
59
  end
27
60
 
28
- # def member?
29
- # permissions.member? rescue false
30
- # end
61
+ # Returns true/false if the current user is an admin on the current church (Group Admin, Account Admin, etc).
62
+ # If you need to check for a specific admin privilege, you will need to go through TheCity::Permissions object.
63
+ #
64
+ # @return [Boolean]
65
+ def admin?
66
+ @attrs[:admin] || permissions.admin? rescue nil
67
+ end
31
68
 
32
- # def staff?
33
- # permissions.staff? rescue false
34
- # end
69
+ # Returns true/false if the current user is a member of the current church.
70
+ #
71
+ # @return [Boolean]
72
+ def member?
73
+ @attrs[:member] || permissions.member? rescue nil
74
+ end
35
75
 
36
- # def admin?
37
- # permissions.admin? rescue false
38
- # end
76
+ # Returns true/false if the current user is on staff at the current church.
77
+ #
78
+ # @return [Boolean]
79
+ def staff?
80
+ @attrs[:staff] || permissions.staff? rescue nil
81
+ end
39
82
 
40
83
  end
41
84
  end
@@ -2,7 +2,7 @@ module TheCity
2
2
  class Version
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- PATCH = 7
5
+ PATCH = 8
6
6
  PRE = nil
7
7
 
8
8
  class << self
data/spec/helper.rb CHANGED
@@ -11,8 +11,16 @@ SimpleCov.start
11
11
  require 'the_city'
12
12
  require 'rspec'
13
13
  require 'webmock/rspec'
14
+ require 'vcr'
15
+ require 'typhoeus'
16
+ require 'active_support/core_ext'
14
17
 
15
- WebMock.disable_net_connect!(:allow => 'coveralls.io')
18
+ VCR.configure do |c|
19
+ c.cassette_library_dir = "spec/vcr_cassettes"
20
+ c.hook_into :webmock
21
+ c.default_cassette_options = {:re_record_interval => 7.days}
22
+ c.configure_rspec_metadata!
23
+ end
16
24
 
17
25
  RSpec.configure do |config|
18
26
  config.expect_with :rspec do |c|
@@ -20,42 +28,64 @@ RSpec.configure do |config|
20
28
  end
21
29
  end
22
30
 
23
- def a_delete(path)
24
- a_request(:delete, TheCity::API::Client::ENDPOINT + path)
25
- end
26
31
 
27
- def a_get(path)
28
- a_request(:get, TheCity::API::Client::ENDPOINT + path)
29
- end
30
-
31
- def a_post(path)
32
- a_request(:post, TheCity::API::Client::ENDPOINT + path)
33
- end
34
-
35
- def a_put(path)
36
- a_request(:put, TheCity::API::Client::ENDPOINT + path)
37
- end
38
-
39
- def stub_delete(path)
40
- stub_request(:delete, TheCity::API::Client::ENDPOINT + path)
41
- end
42
-
43
- def stub_get(path)
44
- stub_request(:get, TheCity::API::Client::ENDPOINT + path)
45
- end
46
-
47
- def stub_post(path)
48
- stub_request(:post, TheCity::API::Client::ENDPOINT + path)
49
- end
50
-
51
- def stub_put(path)
52
- stub_request(:put, TheCity::API::Client::ENDPOINT + path)
32
+ def get_oauth_token_for(username, password, subdomain='')
33
+ auth_response = Typhoeus.post("https://authentication.onthecity.org/",
34
+ :params => {"app_id" => APP_ID, "secret" => SECRET, "login" => username, "password" => password, "subdomain" => subdomain})
35
+ typhoeus_token = JSON.parse(auth_response.options[:response_body])['access_token']['token'] rescue nil
36
+ vcr_token = JSON.parse(auth_response.options[:body])['access_token']['token'] rescue nil
37
+ if typhoeus_token.nil?
38
+ return vcr_token
39
+ else
40
+ return typhoeus_token
41
+ end
53
42
  end
54
43
 
55
- def fixture_path
56
- File.expand_path("../fixtures", __FILE__)
44
+ def fire_up_test_client(subdomain='')
45
+ ENV['THECITY_SUBDOMAIN'] = subdomain
46
+ client = TheCity::API::Client.new do |config|
47
+ config.app_id = APP_ID
48
+ config.app_secret = SECRET
49
+ end
50
+ return client
57
51
  end
58
52
 
59
- def fixture(file)
60
- File.new(fixture_path + '/' + file)
61
- end
53
+ #def a_delete(path)
54
+ # a_request(:delete, TheCity::API::Client::ENDPOINT + path)
55
+ #end
56
+ #
57
+ #def a_get(path)
58
+ # a_request(:get, TheCity::API::Client::ENDPOINT + path)
59
+ #end
60
+ #
61
+ #def a_post(path)
62
+ # a_request(:post, TheCity::API::Client::ENDPOINT + path)
63
+ #end
64
+ #
65
+ #def a_put(path)
66
+ # a_request(:put, TheCity::API::Client::ENDPOINT + path)
67
+ #end
68
+ #
69
+ #def stub_delete(path)
70
+ # stub_request(:delete, TheCity::API::Client::ENDPOINT + path)
71
+ #end
72
+ #
73
+ #def stub_get(path)
74
+ # stub_request(:get, TheCity::API::Client::ENDPOINT + path)
75
+ #end
76
+ #
77
+ #def stub_post(path)
78
+ # stub_request(:post, TheCity::API::Client::ENDPOINT + path)
79
+ #end
80
+ #
81
+ #def stub_put(path)
82
+ # stub_request(:put, TheCity::API::Client::ENDPOINT + path)
83
+ #end
84
+ #
85
+ #def fixture_path
86
+ # File.expand_path("../fixtures", __FILE__)
87
+ #end
88
+ #
89
+ #def fixture(file)
90
+ # File.new(fixture_path + '/' + file)
91
+ #end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require 'helper'
3
2
 
4
3
  describe TheCity::User do
@@ -16,6 +15,7 @@ describe TheCity::User do
16
15
  expect(user.groups.first).to be_a TheCity::Group
17
16
  expect(user.groups.first.name).to eq("My Group")
18
17
  end
18
+
19
19
  it "is empty when not set" do
20
20
  user = TheCity::User.new(:id => 6753948)
21
21
  expect(user.groups).to be_empty
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thecity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Leib
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-26 00:00:00.000000000 Z
11
+ date: 2013-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -104,7 +104,6 @@ files:
104
104
  - lib/the_city/api/events.rb
105
105
  - lib/the_city/api/groups.rb
106
106
  - lib/the_city/api/needs.rb
107
- - lib/the_city/api/oauth.rb
108
107
  - lib/the_city/api/prayers.rb
109
108
  - lib/the_city/api/request/multipart_with_file.rb
110
109
  - lib/the_city/api/response/parse_json.rb
@@ -139,14 +138,12 @@ files:
139
138
  - lib/the_city/rate_limit.rb
140
139
  - lib/the_city/terminology.rb
141
140
  - lib/the_city/time.rb
142
- - lib/the_city/token.rb
143
141
  - lib/the_city/topic.rb
144
142
  - lib/the_city/user.rb
145
143
  - lib/the_city/version.rb
146
144
  - lib/the_city.rb
147
145
  - spec/fixtures/me.json
148
146
  - spec/helper.rb
149
- - spec/thecity/api/users_spec.rb
150
147
  - spec/thecity/base_spec.rb
151
148
  - spec/thecity/user_spec.rb
152
149
  - spec/thecity_spec.rb
@@ -177,7 +174,6 @@ summary: A Ruby interface to The City API.
177
174
  test_files:
178
175
  - spec/fixtures/me.json
179
176
  - spec/helper.rb
180
- - spec/thecity/api/users_spec.rb
181
177
  - spec/thecity/base_spec.rb
182
178
  - spec/thecity/user_spec.rb
183
179
  - spec/thecity_spec.rb
@@ -1,50 +0,0 @@
1
- require 'the_city/api/utils'
2
- require 'the_city/token'
3
-
4
- module TheCity
5
- module API
6
- module OAuth
7
- include TheCity::API::Utils
8
-
9
- def authentication_url
10
- "https://authentication.onthecity.org/oauth/authorize?#{authentication_headers}"
11
- end
12
-
13
- def authentication_headers
14
-
15
- end
16
-
17
- def authentication_params
18
- "scope=user_basic&app_id="
19
- end
20
-
21
- def authorization_url(code)
22
- end
23
-
24
- # Allows a registered application to obtain an OAuth 2 Bearear Token, which can be used to make API requests
25
- # on an application's own behalf, without a user context.
26
- #
27
- # Only one bearer token may exist outstanding for an application, and repeated requests to this method
28
- # will yield the same already-existent token until it has been invalidated.
29
- #
30
- # @return [TheCity::Token] The Bearer Token. token_type should be 'bearer'.
31
- # @example Generate a Bearer Token
32
- # client = TheCity::API::Client.new(:consumer_key => "abc", :consumer_secret => 'def')
33
- # bearer_token = client.token
34
- def token
35
- object_from_response(TheCity::Token, :post, "/oauth2/token", :grant_type => "client_credentials", :bearer_token_request => true)
36
- end
37
- alias bearer_token token
38
-
39
- # Allows a registered application to revoke an issued OAuth 2 Bearer Token by presenting its client credentials.
40
- #
41
- # @param access_token [String, TheCity::Token] The bearer token to revoke.
42
- # @return [TheCity::Token] The invalidated token. token_type should be nil.
43
- def invalidate_token(access_token)
44
- access_token = access_token.access_token if access_token.is_a?(TheCity::Token)
45
- object_from_response(TheCity::Token, :post, "/oauth2/invalidate_token", :access_token => access_token)
46
- end
47
-
48
- end
49
- end
50
- end
@@ -1,16 +0,0 @@
1
- require 'the_city/base'
2
-
3
- module TheCity
4
- class Token < TheCity::Base
5
- attr_reader :access_token, :token_type
6
- alias to_s access_token
7
-
8
- BEARER_TYPE = "bearer"
9
-
10
- # @return [Boolean]
11
- def bearer?
12
- @attrs[:token_type] == BEARER_TYPE
13
- end
14
-
15
- end
16
- end
@@ -1,24 +0,0 @@
1
- require 'helper'
2
-
3
- describe TheCity::API::Users do
4
-
5
- before do
6
- @client = TheCity::API::Client.new(:app_id => "CK", :app_secret => "CS", :access_token => "AT")
7
- end
8
-
9
- describe "#me" do
10
- before do
11
- stub_get("/me").to_return(:body => fixture("me.json"), :headers => {:content_type => "application/json; charset=utf-8"})
12
- end
13
- it "requests the correct resource" do
14
- @client.me
15
- expect(a_get("/me")).to have_been_made
16
- end
17
- it "returns the requesting user" do
18
- user = @client.me
19
- expect(user).to be_a TheCity::User
20
- expect(user.id).to eq(6753948)
21
- end
22
- end
23
-
24
- end