saran 0.0.1
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/Gemfile +6 -0
- data/Rakefile +113 -0
- data/Readme.md +0 -0
- data/Spec.md +121 -0
- data/examples/facebook.rb +53 -0
- data/examples/google_cal.rb +78 -0
- data/lib/saran.rb +0 -0
- data/lib/saran/version.rb +3 -0
- data/saran.gemspec +45 -0
- data/spec/saran_spec.rb +1 -0
- data/spec/spec_helper.rb +16 -0
- metadata +139 -0
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
def name
|
4
|
+
@name ||= Dir['*.gemspec'].first.split('.').first
|
5
|
+
end
|
6
|
+
|
7
|
+
def version
|
8
|
+
line = File.read("lib/#{name}/version.rb")[/^\s*VERSION\s*=\s*.*/]
|
9
|
+
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
|
10
|
+
end
|
11
|
+
|
12
|
+
def date
|
13
|
+
Date.today.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def rubyforge_project
|
17
|
+
name
|
18
|
+
end
|
19
|
+
|
20
|
+
def gemspec_file
|
21
|
+
"#{name}.gemspec"
|
22
|
+
end
|
23
|
+
|
24
|
+
def gem_file
|
25
|
+
"#{name}-#{version}.gem"
|
26
|
+
end
|
27
|
+
|
28
|
+
def replace_header(head, header_name)
|
29
|
+
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
30
|
+
end
|
31
|
+
|
32
|
+
# Standard tasks
|
33
|
+
|
34
|
+
task :default => :spec
|
35
|
+
require "rspec/core/rake_task"
|
36
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
37
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
38
|
+
spec.rspec_opts = ['--backtrace']
|
39
|
+
end
|
40
|
+
|
41
|
+
desc "Generate SimpleCov test coverage and open in your browser"
|
42
|
+
task :coverage do
|
43
|
+
sh "rake spec COVERAGE=true"
|
44
|
+
sh "open coverage/index.html"
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Open an irb session preloaded with this library"
|
48
|
+
task :irb do
|
49
|
+
sh "irb -rubygems -r ./lib/#{name}.rb"
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Open a pry session preloaded with this library"
|
53
|
+
task :pry do
|
54
|
+
sh "pry -r ./lib/#{name}.rb"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Custom tasks (add your own tasks here)
|
58
|
+
|
59
|
+
desc "Open a pry session preloaded with this Facebook example"
|
60
|
+
task :facebook do
|
61
|
+
sh "pry -r ./examples/facebook.rb"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Packaging tasks
|
65
|
+
|
66
|
+
desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
|
67
|
+
task :release => :build do
|
68
|
+
unless `git branch` =~ /^\* master$/
|
69
|
+
puts "You must be on the master branch to release!"
|
70
|
+
exit!
|
71
|
+
end
|
72
|
+
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
73
|
+
sh "git tag v#{version}"
|
74
|
+
sh "git push origin master"
|
75
|
+
sh "git push origin v#{version}"
|
76
|
+
sh "gem push pkg/#{name}-#{version}.gem"
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Build #{gem_file} into the pkg directory"
|
80
|
+
task :build => :gemspec do
|
81
|
+
sh "mkdir -p pkg"
|
82
|
+
sh "gem build #{gemspec_file}"
|
83
|
+
sh "mv #{gem_file} pkg"
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "Generate #{gemspec_file}"
|
87
|
+
task :gemspec do
|
88
|
+
# read spec file and split out manifest section
|
89
|
+
spec = File.read(gemspec_file)
|
90
|
+
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
91
|
+
|
92
|
+
# replace name version and date
|
93
|
+
replace_header(head, :name)
|
94
|
+
replace_header(head, :version)
|
95
|
+
replace_header(head, :date)
|
96
|
+
#comment this out if your rubyforge_project has a different name
|
97
|
+
replace_header(head, :rubyforge_project)
|
98
|
+
|
99
|
+
# determine file list from git ls-files
|
100
|
+
files = `git ls-files`.
|
101
|
+
split("\n").
|
102
|
+
sort.
|
103
|
+
reject { |file| file =~ /^\./ }.
|
104
|
+
reject { |file| file =~ /^(rdoc|pkg)/ }.
|
105
|
+
map { |file| " #{file}" }.
|
106
|
+
join("\n")
|
107
|
+
|
108
|
+
# piece file back together and write
|
109
|
+
manifest = " s.files = %w[\n#{files}\n ]\n"
|
110
|
+
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
|
111
|
+
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
112
|
+
puts "Updated #{gemspec_file}"
|
113
|
+
end
|
data/Readme.md
ADDED
File without changes
|
data/Spec.md
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# Saran
|
2
|
+
|
3
|
+
DSL for wrapping RESTful apis.
|
4
|
+
|
5
|
+
## Config
|
6
|
+
|
7
|
+
Accepted variables: `endpoint`, `access_token`, `provider` (for OpenAuth2).
|
8
|
+
|
9
|
+
```
|
10
|
+
class GoogleCalendar
|
11
|
+
include Wrappable
|
12
|
+
|
13
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
14
|
+
provdier :google
|
15
|
+
end
|
16
|
+
|
17
|
+
# getters
|
18
|
+
fb.endpoint #=> 'https://graph.facebook.com'
|
19
|
+
|
20
|
+
# setters
|
21
|
+
fb.endpoint('something else')
|
22
|
+
```
|
23
|
+
|
24
|
+
### Resources:
|
25
|
+
|
26
|
+
```
|
27
|
+
class GoogleCalendar
|
28
|
+
include Wrappable
|
29
|
+
|
30
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
31
|
+
provdier :google
|
32
|
+
|
33
|
+
resources :calendars
|
34
|
+
end
|
35
|
+
|
36
|
+
GoogleCalendar::Calendars
|
37
|
+
GoogleCalendar::Calendar
|
38
|
+
```
|
39
|
+
|
40
|
+
#### Collection:
|
41
|
+
|
42
|
+
```
|
43
|
+
class GoogleCalendar
|
44
|
+
include Wrappable
|
45
|
+
|
46
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
47
|
+
provdier :google
|
48
|
+
|
49
|
+
resources :calendars do
|
50
|
+
collection do
|
51
|
+
get '/calendars' # fails, expects collection of cals
|
52
|
+
post '/calendars'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
cls = GoogleCalendar::Calendars.new
|
58
|
+
cls.post(:params => '')
|
59
|
+
cls.get
|
60
|
+
```
|
61
|
+
|
62
|
+
#### Member:
|
63
|
+
|
64
|
+
```
|
65
|
+
class GoogleCalendar
|
66
|
+
include Wrappable
|
67
|
+
|
68
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
69
|
+
provdier :google
|
70
|
+
|
71
|
+
resources :calendars do
|
72
|
+
member do
|
73
|
+
get '/:id'
|
74
|
+
delete '/:id'
|
75
|
+
put '/:id'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
cal = GoogleCalendar::Calendar.new(1).get
|
81
|
+
cal.delete
|
82
|
+
cal.put(:param => '')
|
83
|
+
```
|
84
|
+
|
85
|
+
#### Nested Resources:
|
86
|
+
|
87
|
+
```
|
88
|
+
class GoogleCalendar
|
89
|
+
include Wrappable
|
90
|
+
|
91
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
92
|
+
provdier :google
|
93
|
+
|
94
|
+
resources :calendars do
|
95
|
+
member do
|
96
|
+
resources :acls do
|
97
|
+
collection do
|
98
|
+
post '/acl'
|
99
|
+
get '/acl'
|
100
|
+
end
|
101
|
+
|
102
|
+
member do
|
103
|
+
get '/:id'
|
104
|
+
delete '/:id'
|
105
|
+
put '/:id'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
cal = GoogleCalendar::Calendar.new(cal_id)
|
113
|
+
|
114
|
+
# returns [acl, acl, acl]
|
115
|
+
acls = cal.acls
|
116
|
+
acl = acls.first
|
117
|
+
|
118
|
+
# acl needs to have `id` param for following to work
|
119
|
+
acl.get
|
120
|
+
acl.delete
|
121
|
+
```
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../lib/saran'
|
2
|
+
|
3
|
+
class Facebook
|
4
|
+
include Wrappable
|
5
|
+
|
6
|
+
endpoint 'https://graph.facebook.com'
|
7
|
+
provider :facebook
|
8
|
+
|
9
|
+
resources :users do
|
10
|
+
member do
|
11
|
+
get '/:id' do
|
12
|
+
get '/albums'
|
13
|
+
get '/apprequests'
|
14
|
+
post '/apprequests'
|
15
|
+
get '/events', :resource => :events
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
resources :events do
|
21
|
+
member do
|
22
|
+
get '/:id'
|
23
|
+
delete '/:id'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
resources :pages do
|
28
|
+
member do
|
29
|
+
get '/:id' do
|
30
|
+
get '/events'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# /me
|
37
|
+
user = Facebook::User.new(user_id).get
|
38
|
+
user.albums.get
|
39
|
+
user.apprequests.get
|
40
|
+
user.apprequests.post
|
41
|
+
|
42
|
+
user.events
|
43
|
+
event = user.events.first
|
44
|
+
event.post
|
45
|
+
event.delete
|
46
|
+
|
47
|
+
page = Facebook::Page.new(page_id).get
|
48
|
+
event = page.events.first
|
49
|
+
event.post
|
50
|
+
event.delete
|
51
|
+
|
52
|
+
event = Facebook::Event.new(event_id).get
|
53
|
+
event.delete
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative '../lib/saran'
|
2
|
+
|
3
|
+
class GoogleCalendar
|
4
|
+
include Wrappable
|
5
|
+
|
6
|
+
endpoint 'https://www.googleapis.com/calendar/v3'
|
7
|
+
provdier :google
|
8
|
+
|
9
|
+
resources :calendar_lists do
|
10
|
+
collection do
|
11
|
+
post '/users/me/calendarsList'
|
12
|
+
get '/users/me/calendarsList', :resouce => :calendar
|
13
|
+
end
|
14
|
+
|
15
|
+
member do
|
16
|
+
delete '/users/me/calendarsList/:id'
|
17
|
+
get '/users/me/calendarsList/:id'
|
18
|
+
update '/users/me/calendarsList/:id'
|
19
|
+
patch '/users/me/calendarsList/:id'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
resources :calendars do
|
24
|
+
collection do
|
25
|
+
post '/calendars'
|
26
|
+
end
|
27
|
+
|
28
|
+
member do
|
29
|
+
post '/calendars/:id/clear'
|
30
|
+
delete '/calendars/:id'
|
31
|
+
get '/calendars/:id'
|
32
|
+
put '/calendars/:id'
|
33
|
+
patch '/calendars/:id'
|
34
|
+
|
35
|
+
resources :events do
|
36
|
+
member do
|
37
|
+
delete '/events/:id'
|
38
|
+
get '/events/:id'
|
39
|
+
post '/events/import'
|
40
|
+
post '/events'
|
41
|
+
get '/events/:id/instances'
|
42
|
+
get '/events'
|
43
|
+
post '/events/:id/move'
|
44
|
+
post '/events/quickAdd'
|
45
|
+
put '/events/:id'
|
46
|
+
patch '/events/:id'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
resources :acls do
|
51
|
+
collection do
|
52
|
+
post '/acl'
|
53
|
+
get '/acl'
|
54
|
+
end
|
55
|
+
|
56
|
+
member do
|
57
|
+
delete '/acl/:id'
|
58
|
+
get '/acl/:id'
|
59
|
+
put '/acl/:id'
|
60
|
+
patch '/acl/:id'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
get '/color'
|
67
|
+
post '/freeBusy'
|
68
|
+
|
69
|
+
resource :settings do
|
70
|
+
collection do
|
71
|
+
get '/users/me/settings'
|
72
|
+
end
|
73
|
+
|
74
|
+
member do
|
75
|
+
get '/users/me/settings/:id'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/saran.rb
ADDED
File without changes
|
data/saran.gemspec
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require './lib/saran/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "saran"
|
6
|
+
s.version = Saran::VERSION
|
7
|
+
s.authors = ["sent-hil"]
|
8
|
+
s.email = ["me@sent-hil.com"]
|
9
|
+
s.homepage = "https://github.com/sent-hil/wrappable"
|
10
|
+
s.description = %q{Dsl for wrapping RESTful apis.}
|
11
|
+
s.summary = %q{Dsl for wrapping RESTful apis.}
|
12
|
+
|
13
|
+
s.rubyforge_project = "saran"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map do |f|
|
18
|
+
File.basename(f)
|
19
|
+
end
|
20
|
+
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_dependency 'rake', '~> 0.9.5'
|
24
|
+
|
25
|
+
s.add_development_dependency 'rspec', '~> 2.12'
|
26
|
+
s.add_development_dependency 'vcr', '~> 2.3.0'
|
27
|
+
s.add_development_dependency 'webmock', '1.8.9'
|
28
|
+
s.add_development_dependency 'pry', '~> 0.9.1'
|
29
|
+
|
30
|
+
# = MANIFEST =
|
31
|
+
s.files = %w[
|
32
|
+
Gemfile
|
33
|
+
Rakefile
|
34
|
+
Readme.md
|
35
|
+
Spec.md
|
36
|
+
examples/facebook.rb
|
37
|
+
examples/google_cal.rb
|
38
|
+
lib/saran.rb
|
39
|
+
lib/saran/version.rb
|
40
|
+
saran.gemspec
|
41
|
+
spec/saran_spec.rb
|
42
|
+
spec/spec_helper.rb
|
43
|
+
]
|
44
|
+
# = MANIFEST =
|
45
|
+
end
|
data/spec/saran_spec.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'spec_helper'
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: saran
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- sent-hil
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.5
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.5
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.12'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.12'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: vcr
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.3.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.3.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: webmock
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.8.9
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.9
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: pry
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.9.1
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.9.1
|
94
|
+
description: Dsl for wrapping RESTful apis.
|
95
|
+
email:
|
96
|
+
- me@sent-hil.com
|
97
|
+
executables: []
|
98
|
+
extensions: []
|
99
|
+
extra_rdoc_files: []
|
100
|
+
files:
|
101
|
+
- Gemfile
|
102
|
+
- Rakefile
|
103
|
+
- Readme.md
|
104
|
+
- Spec.md
|
105
|
+
- examples/facebook.rb
|
106
|
+
- examples/google_cal.rb
|
107
|
+
- lib/saran.rb
|
108
|
+
- lib/saran/version.rb
|
109
|
+
- saran.gemspec
|
110
|
+
- spec/saran_spec.rb
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
homepage: https://github.com/sent-hil/wrappable
|
113
|
+
licenses: []
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
126
|
+
requirements:
|
127
|
+
- - ! '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project: saran
|
132
|
+
rubygems_version: 1.8.24
|
133
|
+
signing_key:
|
134
|
+
specification_version: 3
|
135
|
+
summary: Dsl for wrapping RESTful apis.
|
136
|
+
test_files:
|
137
|
+
- spec/saran_spec.rb
|
138
|
+
- spec/spec_helper.rb
|
139
|
+
has_rdoc:
|