social 0.3.0 → 0.3.2

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: 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