welcu 0.0.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.
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