saran 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in villan.gemspec
4
+ gemspec
5
+
6
+ gem 'open_auth2', :git => 'https://github.com/sent-hil/open_auth2.git'
@@ -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
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
File without changes
@@ -0,0 +1,3 @@
1
+ module Saran
2
+ VERSION = '0.0.1'
3
+ end
@@ -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
@@ -0,0 +1 @@
1
+ require 'spec_helper'
@@ -0,0 +1,16 @@
1
+ require 'pry'
2
+ require 'saran'
3
+ require 'vcr'
4
+
5
+ VCR.configure do |c|
6
+ c.cassette_library_dir = 'spec/vcr'
7
+ c.hook_into :webmock
8
+ end
9
+
10
+ def mock_access_token
11
+ 1
12
+ end
13
+
14
+ def mock_api_endpoint
15
+ 'http://localhost:9393'
16
+ end
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: