welcu 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in welcu.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ Working on our own gem.
2
+
3
+ TODO: Write specs XD
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/lib/welcu.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'oauth2'
2
+ require 'json'
3
+
4
+ require 'uri'
5
+ require "base64"
6
+ require "openssl"
7
+
8
+ require 'welcu/error'
9
+ require 'welcu/base'
10
+ require 'welcu/api'
11
+ require 'welcu/client'
12
+
13
+ module Welcu
14
+ DEFAULT_CONFIG = {
15
+ 'welcu_uri' => 'https://backstage.welcu.com',
16
+ 'api_path' => '/api/v1'
17
+ }.freeze
18
+ @config = DEFAULT_CONFIG
19
+
20
+ class << self
21
+
22
+ def load_config(yaml_file, scope = nil)
23
+ cfg = YAML::load(File.open(yaml_file))
24
+ if scope
25
+ cfg = cfg[scope]
26
+ end
27
+
28
+ config(cfg)
29
+ end
30
+
31
+ def config(values=nil)
32
+ if values
33
+ @config = @config.merge(values).freeze
34
+ end
35
+
36
+ @config
37
+ end
38
+ end
39
+ end
40
+
41
+ require 'welcu/railtie' if defined? Rails
data/lib/welcu/api.rb ADDED
@@ -0,0 +1,35 @@
1
+ module Welcu
2
+ class API
3
+ attr_reader :client_id , :client_secret , :welcu_uri , :access_token , :consumer , :auth, :api_path
4
+ attr_accessor :locale, :administrator_id, :mode
5
+ alias_method :id, :client_id
6
+ alias_method :secret, :client_secret
7
+
8
+ def initialize(options = {})
9
+ options = Welcu.config.merge(options)
10
+ @client_id, @client_secret = options['client_id'], options['client_secret']
11
+ @welcu_uri = options['welcu_uri']
12
+ @api_path = options['api_path']
13
+ @access_token = options.fetch :access_token, nil
14
+ @auth = OAuth2::AccessToken.new(oauth_client , @access_token)
15
+ end
16
+
17
+ def access_token=(new_token)
18
+ @access_token = new_token
19
+ @auth = OAuth2::AccessToken.new(oauth_client , @access_token)
20
+ new_token
21
+ end
22
+
23
+ def oauth_client
24
+ OAuth2::Client.new(client_id, client_secret, :site => welcu_uri)
25
+ end
26
+
27
+ %w{get post put delete}.each do |method|
28
+ class_eval <<-EOM
29
+ def #{method}(path, *args)
30
+ JSON.parse( auth.#{method}(api_path+'/'+path+'.json',*args) )
31
+ end
32
+ EOM
33
+ end
34
+ end
35
+ end
data/lib/welcu/base.rb ADDED
@@ -0,0 +1,29 @@
1
+ module Welcu
2
+ class Base
3
+ attr_reader :attributes, :client
4
+
5
+ def initialize(client, attributes={})
6
+ @client = client
7
+ @attributes = attributes
8
+ end
9
+
10
+ def self.attribute(*names)
11
+ names.each do |name|
12
+ self.class_eval <<-EOF
13
+ def #{name}
14
+ attributes['#{name}']
15
+ end
16
+
17
+ def #{name}=(value)
18
+ attributes['#{name}'] = value
19
+ end
20
+ EOF
21
+ end
22
+ end
23
+ attribute :id
24
+
25
+ def to_hash
26
+ { self.class.name.gsub('Welcu::','').downcase => attributes }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module Welcu
2
+
3
+ class Client < API
4
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
+
6
+
7
+ include Welcu::Client::Canvas
8
+ include Welcu::Client::Event
9
+ include Welcu::Client::Passes
10
+ include Welcu::Client::Registries
11
+
12
+ end
13
+ end
@@ -0,0 +1,45 @@
1
+ require 'base64'
2
+
3
+ module Welcu
4
+ class Client
5
+ module Canvas
6
+ def self.included(receiver)
7
+ receiver.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def from_signed_request(request, options = {})
12
+ client = Welcu::Client.new(options)
13
+ signature, payload = request.split('.', 2)
14
+
15
+ data = Welcu::Client::Canvas.decode_payload(payload)
16
+
17
+ if data['algorithm'].to_s.upcase != 'HMAC-SHA256'
18
+ raise Welcu::Client::Canvas::BadSignatureAlgorithmError.new(data['algorithm'])
19
+ end
20
+ expected_sig = OpenSSL::HMAC.hexdigest('sha256', client.secret, payload)
21
+
22
+ if expected_sig != signature
23
+ raise Welcu::Client::Canvas::BadSignatureError
24
+ end
25
+
26
+ client.access_token = data['access_token']
27
+ client.mode = data['mode']
28
+ client.locale = data['locale']
29
+ client.administrator_id = data['administrator_id']
30
+
31
+ client
32
+ end
33
+ end
34
+
35
+ def self.decode_payload(payload)
36
+ payload = payload.dup
37
+ payload << '=' until (payload.size % 4).zero?
38
+ JSON.parse(Base64.urlsafe_decode64(payload))
39
+ end
40
+
41
+ class BadSignatureError < Error; end
42
+ class BadSignatureAlgorithmError < Error; end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,32 @@
1
+ module Welcu
2
+ class Client
3
+ module Event
4
+ def event
5
+ @event ||= Welcu::Event.new(self).load!
6
+ end
7
+
8
+ def company
9
+ event.company
10
+ end
11
+ end
12
+ end
13
+
14
+ class Event < Base
15
+ attr_accessor :company
16
+
17
+ attribute :name, :short_name, :permalink, :description, :starts_at, :ends_at, :locale, :logo, :location, :url, :logo_big
18
+
19
+ def load!
20
+ @attributes = client.get('event')['event']
21
+ self.company = Welcu::Company.new(self, @attributes.delete('company'))
22
+ self.company.event = self
23
+ client.locale ||= self.locale
24
+ self
25
+ end
26
+ end
27
+
28
+ class Company < Base
29
+ attr_accessor :event
30
+ attribute :name, :short_name, :permalink, :description, :locale
31
+ end
32
+ end
@@ -0,0 +1,48 @@
1
+ module Welcu
2
+ class Client
3
+ module Passes
4
+ def passes
5
+ @passes ||= Welcu::Client::Passes::Proxy.new(self)
6
+ end
7
+
8
+ class Proxy
9
+ include Enumerable
10
+
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ def find(id)
16
+ passes.find { |p| p.id == id }
17
+ end
18
+
19
+ def [](poss)
20
+ passes[poss]
21
+ end
22
+
23
+ def each
24
+ passes.each { |p| yield p }
25
+ end
26
+
27
+ protected
28
+ def passes
29
+ @passes ||= begin
30
+ @client.get('passes').map do |data|
31
+ Welcu::Pass.new(@client,data['pass'])
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ class Pass < Base
40
+ attr_reader :event
41
+ attribute :name, :description
42
+
43
+ def initialize(client, attributes={})
44
+ super
45
+ @event = client.event
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,65 @@
1
+ module Welcu
2
+ class Client
3
+ module Registries
4
+ def registries
5
+ @registries ||= Welcu::Client::Registries::Proxy.new(self)
6
+ end
7
+
8
+ class Proxy
9
+ def initialize(client)
10
+ @client = client
11
+ end
12
+
13
+ def find(id)
14
+ data = @client.get("registries/#{id}")
15
+ Welcu::Registry.new(@client,data['registry'])
16
+ end
17
+
18
+ def build(attributes = {})
19
+ Welcu::Registry.new(@client,attributes)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ class Registry < Base
26
+ attr_reader :event
27
+ attribute :first_name, :last_name, :email, :phone, :pass_id
28
+
29
+ def initialize(client, attributes={})
30
+ super
31
+ @event = client.event
32
+ end
33
+
34
+ def pass
35
+ if pass_id
36
+ @pass ||= client.passes.find(pass_id)
37
+ end
38
+ end
39
+
40
+ def pass=(pass)
41
+ @pass = pass
42
+ self.pass_id = pass && pass.id
43
+ end
44
+
45
+ def save
46
+ if id
47
+ self.attributes = client.put("registries/#{id}", to_hash)['registry']
48
+ else
49
+ self.attributes = client.post("registries", to_hash)['registry']
50
+ end
51
+
52
+ true
53
+ end
54
+
55
+ def confirm!
56
+ client.put("/registries/#{id}/confirm")
57
+ true
58
+ end
59
+
60
+ def reject!
61
+ client.put("/registries/#{id}/reject")
62
+ true
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ module Welcu
2
+ class Error < RuntimeError; end
3
+ end
@@ -0,0 +1,8 @@
1
+ module Welcu
2
+ class Railtie < Rails::Railtie
3
+ initializer "load configuration" do
4
+ config_file = Rails.root.join("config", "welcu.yml")
5
+ Welcu.load_config(config_file,Rails.env) if config_file.file?
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Welcu
2
+ VERSION = "0.0.2"
3
+ end
data/spec/TODO ADDED
@@ -0,0 +1 @@
1
+ :P
data/welcu.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'base64'
3
+ $:.push File.expand_path("../lib", __FILE__)
4
+ require "welcu/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "welcu"
8
+ s.version = Welcu::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Sebastian Gamboa"]
11
+ s.email = [ Base64.decode64("c2ViYUB3ZWxjdS5jb20=\n") ]
12
+ s.homepage = "http://github.com/welcu/welcu.gem"
13
+ s.summary = "A Gem for the Welcu API"
14
+ s.description = "A Gem for the Welcu API"
15
+
16
+ s.files = `git ls-files`.split("\n") rescue
17
+ Dir['README.rdoc', 'Rakefile', 'lib/**/*', 'spec/**/*']
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") rescue Dir['spec/**/*']
19
+ s.executables = ( `git ls-files -- bin/*`.split("\n") rescue Dir['bin/*'] ).map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency("oauth2", '0.1.1')
23
+ s.add_runtime_dependency("json")
24
+
25
+ s.add_development_dependency("rake")
26
+ s.add_development_dependency("bundler")
27
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: welcu
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Sebastian Gamboa
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-20 00:00:00 -03:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: oauth2
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 1
32
+ version: 0.1.1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: json
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :development
73
+ version_requirements: *id004
74
+ description: A Gem for the Welcu API
75
+ email:
76
+ - seba@welcu.com
77
+ executables: []
78
+
79
+ extensions: []
80
+
81
+ extra_rdoc_files: []
82
+
83
+ files:
84
+ - .gitignore
85
+ - Gemfile
86
+ - README.rdoc
87
+ - Rakefile
88
+ - lib/welcu.rb
89
+ - lib/welcu/api.rb
90
+ - lib/welcu/base.rb
91
+ - lib/welcu/client.rb
92
+ - lib/welcu/client/canvas.rb
93
+ - lib/welcu/client/event.rb
94
+ - lib/welcu/client/passes.rb
95
+ - lib/welcu/client/registries.rb
96
+ - lib/welcu/error.rb
97
+ - lib/welcu/railtie.rb
98
+ - lib/welcu/version.rb
99
+ - spec/TODO
100
+ - welcu.gemspec
101
+ has_rdoc: true
102
+ homepage: http://github.com/welcu/welcu.gem
103
+ licenses: []
104
+
105
+ post_install_message:
106
+ rdoc_options: []
107
+
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project:
129
+ rubygems_version: 1.3.7
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: A Gem for the Welcu API
133
+ test_files:
134
+ - spec/TODO