transcoder 0.1.0

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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Ben Schwarz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # transcoder
2
+
3
+ Transcode from common web based formats into plain old Ruby.
4
+
5
+ ## Scenario
6
+ Say you'd pulled an API based resource using `rest-client`
7
+
8
+ * All that you wanted was a ruby object.
9
+ * You don't want to know anything about the format that the API uses.
10
+ * You're pretty sure its something pretty common.
11
+
12
+ ## Example
13
+ $ irb -rubygems
14
+
15
+ >> require 'restclient'
16
+ >> require 'transcoder'
17
+
18
+ >> rc = RestClient.get('http://vimeo.com/api/v2/benschwarz/likes.json')
19
+
20
+ >> Transcoder::Parser.for(rc.headers[:content_type]).parse(rc.to_s)
21
+
22
+ What you'll get back is a Ruby object. Lovley.
23
+
24
+ ## Supported formats
25
+
26
+ * Json
27
+ * XML
28
+ * RSS / Atom
29
+
30
+ ## Future thoughts
31
+
32
+ * Add something to cast attributes to a native ruby object, eg - if its key is created_at, try to date parse it.
33
+
34
+
35
+ ## Note on Patches/Pull Requests
36
+
37
+ * Fork the project.
38
+ * Make your feature addition or bug fix.
39
+ * Add tests for it. This is important so I don't break it in a
40
+ future version unintentionally.
41
+ * Commit, do not mess with rakefile, version, or history.
42
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
43
+ * Send me a pull request. Bonus points for topic branches.
44
+
45
+ ## Copyright
46
+
47
+ Copyright (c) 2010 Ben Schwarz. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "transcoder"
8
+ gem.summary = %Q{Transcode from common web based formats into plain old Ruby.}
9
+ gem.description = %Q{Transcode from json, xml or atom/rss feeds to Ruby.}
10
+ gem.email = "ben.schwarz@gmail.com"
11
+ gem.homepage = "http://github.com/benschwarz/transcoder"
12
+ gem.authors = ["Ben Schwarz"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_development_dependency "restclient"
15
+ gem.add_dependency "registry", ">= 0.1.2"
16
+ gem.add_dependency "json"
17
+ gem.add_dependency "crack"
18
+ gem.add_dependency "simple-rss"
19
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
+ end
25
+
26
+ require 'spec/rake/spectask'
27
+ Spec::Rake::SpecTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
31
+
32
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
33
+ spec.libs << 'lib' << 'spec'
34
+ spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.rcov = true
36
+ end
37
+
38
+ task :spec => :check_dependencies
39
+
40
+ task :default => :spec
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "transcoder #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,12 @@
1
+ require "simple-rss"
2
+
3
+ module Transcoder
4
+ class Feed < Parser
5
+ identifier "application/atom+xml",
6
+ "application/rss+xml"
7
+
8
+ def self.parse(raw)
9
+ ::SimpleRSS.parse(raw)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require "json"
2
+
3
+ module Transcoder
4
+ class Json < Parser
5
+ identifier "application/json",
6
+ "application/x-javascript",
7
+ "text/javascript",
8
+ "text/x-javascript",
9
+ "text/x-json"
10
+
11
+ def self.parse(raw)
12
+ ::JSON.parse(raw)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ require "crack"
2
+
3
+ module Transcoder
4
+ class XML < Parser
5
+ identifier "text/xml",
6
+ "application/xml"
7
+
8
+ def self.parse(raw)
9
+ ::Crack::XML.parse(raw)
10
+ end
11
+ end
12
+ end
data/lib/transcoder.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'registry'
2
+
3
+ module Transcoder
4
+ class Parser
5
+ extend Registry
6
+ end
7
+ end
8
+
9
+ $LOAD_PATH << File.dirname(__FILE__)
10
+
11
+ require 'transcoder/parser/json'
12
+ require 'transcoder/parser/xml'
13
+ require 'transcoder/parser/feed'
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'transcoder'
5
+ require 'spec'
6
+ require 'spec/autorun'
7
+
8
+ Spec::Runner.configure do |config|
9
+
10
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Transcoder" do
4
+ describe "mime-types" do
5
+ it "should parse json" do
6
+ Transcoder::Parser.for('application/json').should == Transcoder::Json
7
+ end
8
+
9
+ it "should parse xml" do
10
+ Transcoder::Parser.for('text/xml').should == Transcoder::XML
11
+ end
12
+
13
+ it "should parse rss or atom" do
14
+ Transcoder::Parser.for('application/atom+xml').should == Transcoder::Feed
15
+ end
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: transcoder
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Ben Schwarz
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-07 00:00:00 +11:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
31
+ version: 1.2.9
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: restclient
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :development
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: registry
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ - 1
56
+ - 2
57
+ version: 0.1.2
58
+ type: :runtime
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: json
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ type: :runtime
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: crack
74
+ prerelease: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ type: :runtime
83
+ version_requirements: *id005
84
+ - !ruby/object:Gem::Dependency
85
+ name: simple-rss
86
+ prerelease: false
87
+ requirement: &id006 !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ type: :runtime
95
+ version_requirements: *id006
96
+ description: Transcode from json, xml or atom/rss feeds to Ruby.
97
+ email: ben.schwarz@gmail.com
98
+ executables: []
99
+
100
+ extensions: []
101
+
102
+ extra_rdoc_files:
103
+ - LICENSE
104
+ - README.md
105
+ files:
106
+ - .document
107
+ - .gitignore
108
+ - LICENSE
109
+ - README.md
110
+ - Rakefile
111
+ - VERSION
112
+ - lib/transcoder.rb
113
+ - lib/transcoder/parser/feed.rb
114
+ - lib/transcoder/parser/json.rb
115
+ - lib/transcoder/parser/xml.rb
116
+ - spec/spec.opts
117
+ - spec/spec_helper.rb
118
+ - spec/transcoder_spec.rb
119
+ has_rdoc: true
120
+ homepage: http://github.com/benschwarz/transcoder
121
+ licenses: []
122
+
123
+ post_install_message:
124
+ rdoc_options:
125
+ - --charset=UTF-8
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ requirements: []
143
+
144
+ rubyforge_project:
145
+ rubygems_version: 1.3.6
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Transcode from common web based formats into plain old Ruby.
149
+ test_files:
150
+ - spec/spec_helper.rb
151
+ - spec/transcoder_spec.rb