social 0.3.0 → 0.3.2

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: a3becb7a8ded7114cb92fbe39b3aa334e8f1c058
4
- data.tar.gz: b40e98c12f7143e7dd9332b227ffeb09c2a373ea
3
+ metadata.gz: 3d6c163dc76e920f4691c6d3555d27bf855add2c
4
+ data.tar.gz: d180dbf80378b05f4e953498551caea3909687ba
5
5
  SHA512:
6
- metadata.gz: 038fbcc6d9745a44cfad4750a2933efcc77bc92361ae9df9c2b9dfcb12c2467cdf5baccbaeb90cdbbbaafef5f7905356ab0e3eb8dae64c68a8d44336d7e7bed9
7
- data.tar.gz: 861d167d64dac6f76c0f8525c907f9e512dec581c5d019d910c14bbc40bedc567b7a0786ed4b4647d7c4f4d86898b725ba227e9b27fadbf338b2a4a66e8626bf
6
+ metadata.gz: 3cd8bf8cb022574745256ff2eed2aa9e9e3e9c71870e0557d1c1a61af63fe2c99f410a37e39897f2d186c5f7848456a62be218b2226e9736eae3d73c1244faab
7
+ data.tar.gz: 28a732ef46c40ae158540f25508dd4634a80e047a75f463f7e444e9c398f105a288afe4e3a05a246c29d3c90ed348e66e87a3f2efaf9dff7404902402223a151
data/README.md CHANGED
@@ -29,6 +29,13 @@ Social
29
29
 
30
30
  gem 'social'
31
31
 
32
+ Концепция API
33
+ ---------------------
34
+
35
+ - Интерфейс API социальной сети представлена одним объектом (синглтоном), чтобы иметь легкий доступ к этому API из разных мест без необходимости каждый раз конструировать объект.
36
+ - Интерфейс API социальной сети разделен на блоки которые представленны соответствующими цепочками вызова, например api.user.get_info
37
+ - Конфигурация API социальной сети должна каходится в файле (с учетом различных окруженйи), но также должна быть возможность переопределить ее простым объектом
38
+
32
39
  Использование
33
40
  ---------------------
34
41
 
@@ -48,11 +55,12 @@ Social
48
55
 
49
56
  Social::Network.current.user.get_info(uid)
50
57
 
58
+ Инциализация по запросу (и по SocialPrefix)
51
59
 
52
60
  Глобальное определение типа социальной сети
53
61
  ---------------------
54
62
 
55
- Social::Env.init(params[:social_types])
63
+ Social::Env.init(params[:social_type])
56
64
 
57
65
  Определение соцсети с помощью SocialPrefix
58
66
  ---------------------
@@ -94,16 +102,71 @@ config.ru
94
102
  Предпологается, что все запросы все запросы осуществляются с помощью
95
103
  SocialPrefix
96
104
 
97
- Определение соцсети с помощью
105
+ Определение соцсети с помощью SocialParam
98
106
  ---------------------
99
107
 
100
108
  Помимо SocialPrefix определение соцсети можно осуществлять
101
- с помощью параметров запроса. Например если запрос содержит
102
- параметры viewer_id и sid, то можно сказать что это
103
- соцсеть ВКонтакт.
109
+ с помощью параметров запроса - SocialParam, если нет поддержки SocialPrefix. Например если запрос содержит параметры viewer_id и sid, то можно сказать что это соцсеть ВКонтакт.
104
110
 
105
111
  Этот способ также предпологает использование Rack::Builder.
106
112
 
113
+ Глобальная инициализация окружения для SocialPrefix и SocialPrams
114
+ ---------------------
115
+
116
+ Осуществляет вызовом метода Social::Env.init_by_params, например
117
+
118
+ before_filter ->{ Social::Env.init_by_params(params) }
119
+
120
+ Определение конфигурации
121
+ ---------------------
122
+
123
+ Определение конфигурации задает данные для обращения к соц.сети. К этим данным относятся, например, секретный ключ, публичный ключ, ID приложения.
124
+
125
+ По-умолчанию конфигурация загружается из конфигурационного файла (см. далее), но также конфигурацию можно задать первым вызовом #Network этого хеша, например
126
+
127
+ Social::Network(:ok, config_hash)
128
+
129
+ Или определить с помощью у объекта
130
+
131
+ Social::Network::Ok.instance.params = { config: config_hash }
132
+ Social::Network::Ok.instance.reload_config
133
+
134
+ или
135
+
136
+ Social::Network(:ok).params = { config: config_hash }
137
+ Social::Network(:ok).reload_config
138
+
139
+ Определение конфигурации через конфигурационный файл
140
+ ---------------------
141
+
142
+ Конфигурационный файл должен иметь имя "social.yml"
143
+
144
+ При использовании Rails конфигурационный файл должн находится в папаке
145
+
146
+ APP_ROOT/config
147
+
148
+ Также путь к папке с конфигурационным файлом может быть определен в переменной окружения "SOCIAL_CONFIG_PATH".
149
+
150
+ Конфигурационный файл может иметь следующее содержание
151
+
152
+ ```yml
153
+ ok:
154
+ development:
155
+ api_server: 'http://api.odnoklassniki.ru/'
156
+ application_key: 'APPLICATION_KEY'
157
+ secret_key: 'SECRET_KEY'
158
+ production:
159
+ test:
160
+ vk:
161
+ development:
162
+ key: "KEY"
163
+ app_id: 123
164
+ production:
165
+ test:
166
+ ```
167
+
168
+ Название окружение для чтения конфига задается через переменные окружения "APP_ENV", "RACK_ENV", "RAILS_ENV". По-умолчанию окружение "development".
169
+
107
170
  TODO
108
171
  ---------------------
109
172
 
@@ -6,8 +6,9 @@ require 'social/determinant'
6
6
  require 'social/determinant/social_prefix'
7
7
  require 'social/determinant/request_param'
8
8
  require 'social/config'
9
- require 'social/config/vk'
10
- require 'social/config/ok'
9
+ require 'social/config/driver'
10
+ require 'social/config/driver/file'
11
+ require 'social/config/provider'
11
12
  require 'social/env'
12
13
  require 'social/network'
13
14
  require 'social/network/graph'
@@ -90,8 +91,8 @@ module Social
90
91
  end
91
92
  end
92
93
 
93
- def request_session_token(params)
94
- case request_social_type(params)
94
+ def request_session_token(params, type = nil)
95
+ case (type || request_social_type(params))
95
96
  when :vk then "vk::#{params[:sid]}"
96
97
  when :ok then "ok::#{params[:session_key]}"
97
98
  else
@@ -99,8 +100,8 @@ module Social
99
100
  end
100
101
  end
101
102
 
102
- def request_uid(params)
103
- case request_social_type(params)
103
+ def request_uid(params, type = nil)
104
+ case (type || request_social_type(params))
104
105
  when :vk then "vk::#{params[:user_id]}"
105
106
  when :ok then "ok::#{params[:logged_user_id]}"
106
107
  else
@@ -1,43 +1,4 @@
1
1
  module Social
2
2
  class Config
3
-
4
- def initialize(network_name)
5
- @network_name = network_name
6
- @config_file_data = {}
7
- end
8
-
9
- def network_name
10
- @network_name
11
- end
12
-
13
- def config
14
- @config_data ||= load_config_file[@network_name]
15
- end
16
-
17
- def config_file_path=(new_path)
18
- @config_file_path = new_path
19
- @config = load_config_file if @config_data
20
- end
21
-
22
- def config_root=(new_root)
23
- @config_root = new_root
24
- end
25
-
26
- def config_root
27
- @config_root ||= File.join(Rails.root, 'config') if defined?(Rails)
28
- @config_root ||= ENV['SOCIAL_CONFIG_ROOT']
29
- @config_root ||= File.join('.', 'config')
30
- end
31
-
32
- def config_file_path
33
- @config_file_path ||= ENV['SOCIAL_CONFIG_PATH']
34
- @config_file_path ||= File.join(self.config_root, 'social.yml')
35
- end
36
-
37
- def load_config_file
38
- @config_file_data[config_file_path] ||= YAML.load_file(config_file_path).with_indifferent_access
39
- end
40
-
41
-
42
3
  end
43
4
  end
@@ -0,0 +1,9 @@
1
+ class Social::Config
2
+ class Driver
3
+
4
+ def config_data
5
+ raise NotImplementedError.new
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,42 @@
1
+ class Social::Config::Driver
2
+ class File < self
3
+
4
+ def initialize(network_name)
5
+ @network_name = network_name
6
+ @config_file_data = {}
7
+ end
8
+
9
+ def network_name
10
+ @network_name
11
+ end
12
+
13
+ def config_data
14
+ @config_data ||= load_config_file[@network_name]
15
+ end
16
+
17
+ def config_file_path=(new_path)
18
+ @config_file_path = new_path
19
+ @config = load_config_file if @config_data
20
+ end
21
+
22
+ def config_root=(new_root)
23
+ @config_root = new_root
24
+ end
25
+
26
+ def config_root
27
+ @config_root ||= ::File.join(Rails.root, 'config') if defined?(Rails)
28
+ @config_root ||= ENV['SOCIAL_CONFIG_ROOT']
29
+ @config_root ||= ::File.join('.', 'config')
30
+ end
31
+
32
+ def config_file_path
33
+ @config_file_path ||= ENV['SOCIAL_CONFIG_PATH']
34
+ @config_file_path ||= ::File.join(self.config_root, 'social.yml')
35
+ end
36
+
37
+ def load_config_file
38
+ @config_file_data[config_file_path] ||= YAML.load_file(config_file_path).with_indifferent_access
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ class Social::Config::Provider
2
+
3
+ class << self
4
+
5
+ def factory_data(social_type, type = :file)
6
+ factory_driver(social_type, type).config_data[env]
7
+ end
8
+
9
+ def env
10
+ @env ||= ENV['APP_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
11
+ end
12
+
13
+ def factory_driver(social_type, type)
14
+ case type
15
+ when :file
16
+ Social::Config::Driver::File.new(social_type)
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -17,7 +17,7 @@ module Social
17
17
 
18
18
  def init_by_params(params)
19
19
  unless social_type = Social.request_social_type(params)
20
- raise "Can't find social env in params #{params.inspect}"
20
+ raise "Can't find social type into SocialEnv or SocialParams with params: #{params.inspect}"
21
21
  else
22
22
  init(social_type)
23
23
  end
@@ -14,24 +14,32 @@ class Social::Network::Base
14
14
  init_graph_for(root, list)
15
15
  end
16
16
 
17
+ def reload_config
18
+ if self.params[:config].present?
19
+ @config = self.params[:config]
20
+ else
21
+ provider_type = self.params[:config_provider] || :file
22
+ @config = Social::Config::Provider.factory_data(social_type, provider_type)
23
+ end
24
+ end
25
+
26
+ def config
27
+ reload_config if @config.nil?
28
+ @config
29
+ end
30
+
17
31
  def params
18
32
  @params
19
33
  end
20
34
 
21
- def params!(params)
22
- @params = params
23
- self
35
+ def params=(params)
36
+ @params = params.with_indifferent_access
24
37
  end
25
38
 
26
39
  def param(key)
27
40
  @params[key]
28
41
  end
29
42
 
30
- def param!(key, value)
31
- @params[key] = value
32
- self
33
- end
34
-
35
43
  protected
36
44
 
37
45
  def init_params(params)
@@ -29,7 +29,10 @@ module Social::Network::Graph::Ok
29
29
  class Base
30
30
 
31
31
  include Social::Network::Graph::Tail
32
- include Social::Config::Ok
32
+
33
+ def config
34
+ Social::Network(:ok).config
35
+ end
33
36
 
34
37
  def normalize_msg(msg)
35
38
  [ ['&nbps;', ' '],
@@ -2,7 +2,10 @@ module Social::Network::Graph::Vk
2
2
  class Base
3
3
 
4
4
  include Social::Network::Graph::Tail
5
- include Social::Config::Vk
5
+
6
+ def config
7
+ Social::Network(:vk).config
8
+ end
6
9
 
7
10
  def http_query(query)
8
11
  Net::HTTP.start("api.vkontakte.ru", 80).get(query)
@@ -1,6 +1,16 @@
1
1
  class Social::Network
2
2
  class Ok < Base
3
- include Social::Config::Ok
3
+
4
+ def social_type
5
+ :ok
6
+ end
7
+
8
+ def safe_config(auth_params = {})
9
+ auth_params.merge \
10
+ :api_server => Social::Network(:ok).config[:api_server],
11
+ :application_key => Social::Network(:ok).config[:application_key],
12
+ :logged_user_id => auth_params['uid']
13
+ end
4
14
 
5
15
  def rate
6
16
  1
@@ -1,6 +1,15 @@
1
1
  class Social::Network
2
2
  class Vk < Base
3
- include Social::Config::Vk
3
+
4
+ def social_type
5
+ :vk
6
+ end
7
+
8
+ def safe_config(auth_params = {})
9
+ auth_params.merge \
10
+ :app_id => Social::Network(:vk).config['app_id'],
11
+ :logged_user_id => auth_params['uid']
12
+ end
4
13
 
5
14
  def rate
6
15
  6
@@ -8,11 +8,9 @@ module Social
8
8
 
9
9
  def site(network, params)
10
10
  @domains[network.to_sym] ||= deploy(network)
11
- @domains[network.to_sym].params!(params)
12
- end
13
-
14
- def sites
15
- @domains
11
+ @domains[network.to_sym].params = params || {}
12
+ @domains[network.to_sym].reload_config
13
+ @domains[network.to_sym]
16
14
  end
17
15
 
18
16
  protected
@@ -1,3 +1,3 @@
1
1
  module Social
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazantsev Nickolay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2014-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core
@@ -169,8 +169,9 @@ files:
169
169
  - lib/social.rb
170
170
  - lib/social/balance.rb
171
171
  - lib/social/config.rb
172
- - lib/social/config/ok.rb
173
- - lib/social/config/vk.rb
172
+ - lib/social/config/driver.rb
173
+ - lib/social/config/driver/file.rb
174
+ - lib/social/config/provider.rb
174
175
  - lib/social/determinant.rb
175
176
  - lib/social/determinant/request_param.rb
176
177
  - lib/social/determinant/social_prefix.rb
@@ -1,22 +0,0 @@
1
- class Social::Config
2
- module Ok
3
-
4
- def config
5
-
6
- unless @config
7
- @env = ENV['APP_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
8
- @config_ins = Social::Config.new(:ok)
9
- @config = @config_ins.config[@env]
10
- end
11
-
12
- @config
13
- end
14
-
15
- def safe_config(auth_params = {})
16
- auth_params.merge \
17
- :api_server => Social::Network(:ok).config[:api_server],
18
- :application_key => Social::Network(:ok).config[:application_key],
19
- :logged_user_id => auth_params['uid']
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- class Social::Config
2
- module Vk
3
-
4
- def config
5
-
6
- unless @config
7
- @env = ENV['APP_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
8
- @config_ins = Social::Config.new(:vk)
9
- @config = @config_ins.config[@env]
10
- end
11
-
12
- @config
13
- end
14
-
15
- def safe_config(auth_params = {})
16
- auth_params.merge \
17
- :app_id => Social::Network(:vk).config['app_id'],
18
- :logged_user_id => auth_params['uid']
19
- end
20
-
21
- end
22
- end