js-client-bridge 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in js-client-bridge.gemspec
4
+ gemspec
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ js-client-bridge (0.1.0)
5
+ json (~> 1.4.6)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ addressable (2.2.1)
11
+ archive-tar-minitar (0.5.2)
12
+ columnize (0.3.1)
13
+ dm-core (1.0.2)
14
+ addressable (~> 2.2)
15
+ extlib (~> 0.9.15)
16
+ extlib (0.9.15)
17
+ json (1.4.6)
18
+ linecache19 (0.5.11)
19
+ ruby_core_source (>= 0.1.4)
20
+ mocha (0.9.8)
21
+ rake
22
+ rake (0.8.7)
23
+ rcov (0.9.9)
24
+ rspec (1.3.0)
25
+ ruby-debug-base19 (0.11.24)
26
+ columnize (>= 0.3.1)
27
+ linecache19 (>= 0.5.11)
28
+ ruby_core_source (>= 0.1.4)
29
+ ruby-debug19 (0.11.6)
30
+ columnize (>= 0.3.1)
31
+ linecache19 (>= 0.5.11)
32
+ ruby-debug-base19 (>= 0.11.19)
33
+ ruby_core_source (0.1.4)
34
+ archive-tar-minitar (>= 0.5.2)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ bundler (>= 1.0.0)
41
+ dm-core (~> 1.0.2)
42
+ js-client-bridge!
43
+ json (~> 1.4.6)
44
+ mocha (~> 0.9.8)
45
+ rcov (~> 0.9.8)
46
+ rspec (~> 1.3.0)
47
+ ruby-debug19 (~> 0.11.6)
File without changes
data/Rakefile CHANGED
@@ -1,74 +1,4 @@
1
- =begin
2
- %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
3
- require File.dirname(__FILE__) + '/lib/js-client-bridge'
4
-
5
- # Generate all the Rake tasks
6
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
7
- $hoe = Hoe.new('js-client-bridge', JsClientBridge::VERSION) do |p|
8
- p.developer('Rolly', 'rolly@luma.co.nz')
9
- p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
10
- p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
11
- p.rubyforge_name = p.name # TODO this is default value
12
- p.extra_deps = [
13
- # ['activesupport','>= 2.0.2'],
14
- ['json', '>= 0'],
15
- ['extlib', '>= 0']
16
- ]
17
- p.extra_dev_deps = [
18
- ['newgem', ">= #{::Newgem::VERSION}"]
19
- ]
20
-
21
- p.clean_globs |= %w[**/.DS_Store tmp *.log]
22
- path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
23
- p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
24
- p.rsync_args = '-av --delete --ignore-errors'
25
- end
26
-
27
- require 'newgem/tasks' # load /tasks/*.rake
28
- Dir['tasks/**/*.rake'].each { |t| load t }
29
-
30
- # TODO - want other tests/tasks run by default? Add them to the list
31
- # task :default => [:spec, :features]
32
-
33
- desc "Run all examples (or a specific spec with TASK=xxxx)"
34
- Spec::Rake::SpecTask.new('spec') do |t|
35
- t.spec_opts = ["-cfs"]
36
- t.spec_files = begin
37
- if ENV["TASK"]
38
- ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
39
- else
40
- FileList['spec/**/*_spec.rb']
41
- end
42
- end
43
- end
44
-
45
- #desc 'Default: run spec examples'
46
- #task :default => 'spec'
47
- =end
48
- # -*- ruby -*-
49
-
50
- require 'rubygems'
51
- require 'hoe'
52
- require 'fileutils'
53
- require 'newgem'
54
- require 'rubigen'
55
-
56
- #require File.dirname(__FILE__) + '/lib/js-client-bridge'
57
-
58
- Hoe.spec 'js-client-bridge' do
59
- developer 'Rolly', 'rolly@luma.co.nz'
60
-
61
- extra_deps << ['json', '>= 0']
62
- extra_deps << ['extlib', '>= 0']
63
-
64
- # extra_dev_deps << ['newgem', ">= #{::Newgem::VERSION}"]
65
- =begin
66
- clean_globs |= %w[**/.DS_Store tmp *.log]
67
- path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
68
- remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
69
- rsync_args = '-av --delete --ignore-errors'
70
- =end
71
- end
72
-
73
- # vim: syntax=ruby
74
-
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ Dir['tasks/**/*.rake'].each { |t| load t }
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/js-client-bridge/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "js-client-bridge"
6
+ s.version = JsClientBridge::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['Rolly Fordham']
9
+ s.email = ['rolly@luma.co.nz']
10
+ s.homepage = "http://rubygems.org/gems/js-client-bridge"
11
+ s.summary = "Standardised way of talking between a service and javascript"
12
+ s.description = "Little library that encapsulates a (particular) standardised way of talking between a service and javascript. Probably not the best way of doing things, but it's been handy in a pinch."
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.rubyforge_project = "js-client-bridge"
16
+
17
+ s.add_dependency "json", "~> 1.4.6"
18
+
19
+ s.add_development_dependency "bundler", ">= 1.0.0"
20
+ s.add_development_dependency "rspec", "~> 1.3.0"
21
+ s.add_development_dependency "rcov", "~> 0.9.8"
22
+ s.add_development_dependency "mocha", "~> 0.9.8"
23
+ s.add_development_dependency "dm-core", "~> 1.0.2"
24
+
25
+ if RUBY_VERSION > '1.9.0'
26
+ s.add_development_dependency "ruby-debug19", "~> 0.11.6"
27
+ else
28
+ s.add_development_dependency "ruby-debug", "~> 0.10.3"
29
+ end
30
+
31
+ s.files = `git ls-files`.split("\n")
32
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
33
+ s.require_path = 'lib'
34
+ end
@@ -1,14 +1,12 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ require 'json'
2
+ require 'cgi'
3
+
3
4
 
4
5
  module JsClientBridge
5
- VERSION = '0.1.0'
6
6
  end
7
7
 
8
- require 'rubygems'
9
- require 'json'
10
- require "extlib"
11
- require 'hoe'
8
+ dir = File.join(Pathname(__FILE__).dirname.expand_path, 'js-client-bridge', 'responses/')
9
+ %w(ok error exception validation).each {|f| require dir + f }
12
10
 
13
- require 'js-client-bridge/responses'
14
- require 'js-client-bridge/extensions/datamapper_errors'
11
+ dir = File.join(Pathname(__FILE__).dirname.expand_path + 'js-client-bridge/')
12
+ require dir + 'responses'
@@ -1,9 +1,4 @@
1
- require 'cgi'
2
-
3
- base = File.dirname(__FILE__) / 'responses'
4
- %w(ok error exception validation).each {|f| require base / f }
5
-
6
- module JSClientBridge #:nodoc:
1
+ module JsClientBridge #:nodoc:
7
2
  module Responses
8
3
  class << self
9
4
  include Responses::Ok
@@ -44,4 +39,4 @@ module JSClientBridge #:nodoc:
44
39
  end
45
40
  end
46
41
  end # module Responses
47
- end # module JSClientBridge
42
+ end # module JsClientBridge
@@ -1,6 +1,6 @@
1
1
  require 'cgi'
2
2
 
3
- module JSClientBridge #:nodoc:
3
+ module JsClientBridge #:nodoc:
4
4
  module Responses #:nodoc:
5
5
  module Error
6
6
  # Generates a error response. If the first parameter is a string is will be
@@ -19,4 +19,4 @@ module JSClientBridge #:nodoc:
19
19
 
20
20
  end # module Error
21
21
  end # module Responses
22
- end # module JSClientBridge
22
+ end # module JsClientBridge
@@ -1,6 +1,6 @@
1
1
  require 'cgi'
2
2
 
3
- module JSClientBridge #:nodoc:
3
+ module JsClientBridge #:nodoc:
4
4
  module Responses #:nodoc:
5
5
  module Exception
6
6
 
@@ -57,4 +57,4 @@ module JSClientBridge #:nodoc:
57
57
 
58
58
  end # module Exception
59
59
  end # module Responses
60
- end # module JSClientBridge
60
+ end # module JsClientBridge
@@ -1,6 +1,6 @@
1
1
  require 'cgi'
2
2
 
3
- module JSClientBridge #:nodoc:
3
+ module JsClientBridge #:nodoc:
4
4
  module Responses #:nodoc:
5
5
  module Ok
6
6
  # Generates a 'ok' status response. If the first parameter is a string is will be
@@ -18,4 +18,4 @@ module JSClientBridge #:nodoc:
18
18
  end
19
19
  end # module Ok
20
20
  end # module Responses
21
- end # module JSClientBridge
21
+ end # module JsClientBridge
@@ -1,9 +1,9 @@
1
1
  require 'cgi'
2
2
 
3
- module JSClientBridge #:nodoc:
3
+ module JsClientBridge #:nodoc:
4
4
  module Responses #:nodoc:
5
5
  module Validation
6
- # Generates a 'ok' status response. If the first parameter is a string is will be
6
+ # Generates a validation error status response. If the first parameter is a string is will be
7
7
  # used as the _status options. It will also honour custom optionss as long
8
8
  # they don't clash with the standard ones.
9
9
  #
@@ -14,34 +14,39 @@ module JSClientBridge #:nodoc:
14
14
  # ==== Returns
15
15
  # JSON String::
16
16
  def respond_with_validation_error(*args)
17
- if args.blank? || !args.first.respond_to?(:errors_to_hash)
18
- raise ArgumentError.new("respond_with_validation_error requires an object that responds to errors_to_hash as it's first parameter")
19
- end
20
-
21
17
  obj = args.shift
22
18
  options = args.last.is_a?(Hash) ? args.pop : {}
23
19
 
24
20
  # Generate our response hash and add the exceptions parameter
25
21
  response = if options.include?(:message)
26
- options.merge(obj.errors_to_hash(options.delete(:message)))
22
+ options.merge( validation_errors_to_hash(obj, options.delete(:message)) )
27
23
 
28
24
  else
29
- options.merge(obj.errors_to_hash)
25
+ options.merge( validation_errors_to_hash(obj) )
30
26
  end
31
27
 
32
28
  format_response(response, options)
33
29
  end
34
30
 
31
+ protected
32
+
33
+ def validation_errors_to_hash(data_object, message = "Sorry, we couldn't save your #{data_object.class.to_s.split('::').last}")
34
+ short_type = data_object.class.to_s.split('::').last
35
+
36
+ validation = {
37
+ :_status => 'validation',
38
+ :_type => data_object.class,
39
+ :_short_type => short_type,
40
+ :_message => message,
41
+ :validation => data_object.errors.to_hash,
42
+ }
43
+
44
+ validation[:id] = data_object.id.to_s unless data_object.new_record?
45
+
46
+ validation
47
+ end
48
+
49
+
35
50
  end # module Validation
36
51
  end # module Responses
37
- end # module JSClientBridge
38
-
39
- =begin
40
- {
41
- :_status => 'validation',
42
- :_type => self.class,
43
- :_short_type => self.class.to_s.split('::').first,
44
- :_message => message,
45
- :validation => self.errors.to_json
46
- }
47
- =end
52
+ end # module JsClientBridge
@@ -0,0 +1,3 @@
1
+ module JsClientBridge
2
+ VERSION = "0.1.1"
3
+ end
@@ -1,23 +1,26 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
2
 
3
3
  describe "Error Responses" do
4
4
  it "should generate a basic error response" do
5
- JSClientBridge::Responses.respond_with_error.should == {:_status => 'error'}.to_json
5
+ JSON.parse(JsClientBridge::Responses.respond_with_error).should == {'_status' => 'error'}
6
6
  end
7
7
 
8
8
  it "should generate a error response with a status message" do
9
- JSClientBridge::Responses.respond_with_error('a message').should == {:_status => 'error', :_message => "a message"}.to_json
9
+ JSON.parse(JsClientBridge::Responses.respond_with_error('a message')).should == {'_status' => 'error', '_message' => "a message"}
10
10
  end
11
11
 
12
12
  it "should generate a error response with a status message and additional custom properties" do
13
- JSClientBridge::Responses.respond_with_error('a message', :blame => 'the user').should == {:_status => 'error', :_message => "a message", :blame => 'the user'}.to_json
13
+ JSON.parse(JsClientBridge::Responses.respond_with_error('a message', 'blame' => 'the user')).should == {'_status' => 'error', '_message' => "a message", 'blame' => 'the user'}
14
14
  end
15
15
 
16
16
  it "should generate a error response with custom properties but not message" do
17
- JSClientBridge::Responses.respond_with_error(:blame => 'the user').should == {:_status => 'error', :blame => 'the user'}.to_json
17
+ JSON.parse(JsClientBridge::Responses.respond_with_error('blame' => 'the user')).should == {'_status' => 'error', 'blame' => 'the user'}
18
18
  end
19
19
 
20
20
  it "should generate a basic error response using JSONP" do
21
- JSClientBridge::Responses.respond_with_error('a message', :jsonp => 'jsonp1').should == "jsonp1(#{{:_status => 'error', :_message => "a message"}.to_json})"
21
+ jsonp = JsClientBridge::Responses.respond_with_error('a message', :jsonp => 'jsonp1')
22
+ jsonp[0..6].should == 'jsonp1('
23
+ jsonp[-1..-1].should == ')'
24
+ JSON.parse(jsonp[7..-2]).should == {'_message' => "a message", '_status' => 'error'}
22
25
  end
23
26
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
2
 
3
3
 
4
4
 
@@ -9,7 +9,7 @@ describe "Exception Responses" do
9
9
  it "should generate an exception response" do
10
10
  exception = TestException.new('An exception')
11
11
 
12
- ex = JSON.parse(JSClientBridge::Responses.respond_with_exception(exception, :request_uri => '/', :parameters => {:param1 => 'value1'}))
12
+ ex = JSON.parse(JsClientBridge::Responses.respond_with_exception(exception, :request_uri => '/', :parameters => {:param1 => 'value1'}))
13
13
 
14
14
  ex['_status'].should == 'exception'
15
15
  ex['request_uri'].should == '/'
@@ -26,7 +26,7 @@ describe "Exception Responses" do
26
26
  it "should generate an exceptions response" do
27
27
  exceptions = [TestException.new('An exception'), TestException.new('Another exception')]
28
28
 
29
- ex = JSON.parse(JSClientBridge::Responses.respond_with_exceptions(exceptions, :request_uri => '/', :parameters => {:param1 => 'value1'}))
29
+ ex = JSON.parse(JsClientBridge::Responses.respond_with_exceptions(exceptions, :request_uri => '/', :parameters => {:param1 => 'value1'}))
30
30
 
31
31
  ex['_status'].should == 'exception'
32
32
  ex['request_uri'].should == '/'
@@ -36,20 +36,20 @@ describe "Exception Responses" do
36
36
 
37
37
  it "should require the request_uri option" do
38
38
  lambda {
39
- JSClientBridge::Responses.respond_with_exception(TestException.new('An exception'), :parameters => {:param1 => 'value1'})
39
+ JsClientBridge::Responses.respond_with_exception(TestException.new('An exception'), :parameters => {:param1 => 'value1'})
40
40
  }.should raise_error(ArgumentError)
41
41
  end
42
42
 
43
43
  it "should require the exception option" do
44
44
  lambda {
45
- JSClientBridge::Responses.respond_with_exception(:request_uri => '/', :parameters => {:param1 => 'value1'})
45
+ JsClientBridge::Responses.respond_with_exception(:request_uri => '/', :parameters => {:param1 => 'value1'})
46
46
  }.should raise_error(ArgumentError)
47
47
  end
48
48
 
49
49
  it "should generate an exception response using JSONP" do
50
50
  exception = TestException.new('An exception')
51
51
 
52
- ex = JSClientBridge::Responses.respond_with_exception(exception, :request_uri => '/', :parameters => {:param1 => 'value1'}, :jsonp => 'jsonp1')
52
+ ex = JsClientBridge::Responses.respond_with_exception(exception, :request_uri => '/', :parameters => {:param1 => 'value1'}, :jsonp => 'jsonp1')
53
53
  ex[0..6].should == 'jsonp1('
54
54
  ex[-1..-1].should == ')'
55
55
  end
@@ -1,46 +1,50 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
2
 
3
3
 
4
4
 
5
5
 
6
6
  describe "Ok Responses" do
7
7
  it "should generate a basic ok response" do
8
- JSClientBridge::Responses.respond_with_ok.should == {:_status => 'ok'}.to_json
8
+ JSON.parse(JsClientBridge::Responses.respond_with_ok).should == {'_status' => 'ok'}
9
9
  end
10
10
 
11
11
  it "should generate a ok response with a status message" do
12
- JSClientBridge::Responses.respond_with_ok('a message').should == {:_status => 'ok', :_message => "a message"}.to_json
12
+ JSON.parse(JsClientBridge::Responses.respond_with_ok('a message')).should == {'_status' => 'ok', '_message' => "a message"}
13
13
  end
14
14
 
15
15
  it "should generate a ok response with a status message and additional custom parameters" do
16
- JSClientBridge::Responses.respond_with_ok('a message', :awesomeness => 'has happened').should == {:_status => 'ok', :_message => "a message", :awesomeness => 'has happened'}.to_json
16
+ JSON.parse(JsClientBridge::Responses.respond_with_ok('a message', 'awesomeness' => 'has happened')).should == {'_status' => 'ok', '_message' => "a message", 'awesomeness' => 'has happened'}
17
17
  end
18
18
 
19
19
  it "should generate a ok response with a status message and a complex parameters" do
20
- JSClientBridge::Responses.respond_with_ok('a message', :stuff => complext_test_data).should == {:_message => "a message", :stuff => complext_test_data, :_status => 'ok'}.to_json
20
+ JSON.parse(JsClientBridge::Responses.respond_with_ok('a message', 'stuff' => complext_test_data)).should == {'_message' => "a message", 'stuff' => complext_test_data, '_status' => 'ok'}
21
21
  end
22
22
 
23
23
  it "should generate a basic ok response using JSONP" do
24
- JSClientBridge::Responses.respond_with_ok('a message', :jsonp => 'jsonp1').should == "jsonp1(#{{:_status => 'ok', :_message => "a message"}.to_json})"
24
+ jsonp = JsClientBridge::Responses.respond_with_ok('a message', :jsonp => 'jsonp1')
25
+ jsonp[0..6].should == 'jsonp1('
26
+ jsonp[-1..-1].should == ')'
27
+ JSON.parse(jsonp[7..-2]).should == {'_status' => 'ok', '_message' => "a message"}
25
28
  end
26
29
 
27
30
  def complext_test_data
28
31
  [
29
- {:name=>"Whangarei",
30
- :description=>"Northland Coach & Travel Centre, 3C Bank St.",
31
- :id=>:WRE},
32
- {:name=>"Westwood Lodge", :description=>"Westwood Lodge", :id=>:WWL},
33
- {:name=>"Queenstown YHA Lake Esplanade",
34
- :description=>"Queenstown YHA, 80 Lake Esplanade",
35
- :id=>:YHQ},
36
- {:name=>"Queenstown Airport", :description=>"Queenstown Airport", :id=>:ZQA},
37
- {:name=>"Queenstown",
38
- :description=>"Athol Street in the middle of the car park",
39
- :id=>:ZQN},
40
- {:name=>"Queenstown The Station",
41
- :description=>"The Station, corner of Camp and Shotover Streets",
42
- :id=>:ZQT}
32
+ {'name'=>"Whangarei",
33
+ 'description'=>"Northland Coach & Travel Centre, 3C Bank St.",
34
+ 'id'=>'WRE'},
35
+ {'name'=>"Westwood Lodge", 'description'=>"Westwood Lodge", 'id'=>'WWL'},
36
+ {'name'=>"Queenstown YHA Lake Esplanade",
37
+ 'description'=>"Queenstown YHA, 80 Lake Esplanade",
38
+ 'id'=>'YHQ'},
39
+ {'name'=>"Queenstown Airport", 'description'=>"Queenstown Airport", 'id'=>'ZQA'},
40
+ {'name'=>"Queenstown",
41
+ 'description'=>"Athol Street in the middle of the car park",
42
+ 'id'=>'ZQN'},
43
+ {'name'=>"Queenstown The Station",
44
+ 'description'=>"The Station, corner of Camp and Shotover Streets",
45
+ 'id'=>'ZQT'}
43
46
  ]
44
47
  end
48
+
45
49
  end
46
50
 
@@ -0,0 +1,6 @@
1
+ --exclude "doc/*,pkg/*,tasks/*,spec/*,test/*,script/*,features/*"
2
+ --sort coverage
3
+ --callsites
4
+ --xrefs
5
+ --profile
6
+ --text-summary
@@ -1,12 +1,11 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems'
5
- gem 'rspec'
6
- require 'spec'
7
- end
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'ruby-debug'
4
+ require 'pp'
8
5
 
9
6
  $:.unshift(File.dirname(__FILE__) + '/../lib')
10
7
  require 'js-client-bridge'
11
8
 
12
- require 'pp'
9
+ Spec::Runner.configure do |config|
10
+ config.mock_with :mocha
11
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
2
 
3
3
  require 'dm-core'
4
4
  require 'dm-aggregates'
@@ -14,8 +14,8 @@ module Luma
14
14
 
15
15
  property :id, String, :key => true, :length => 36
16
16
 
17
- property :subject, String, :length => 30..155, :nullable => false
18
- property :body, Text, :nullable => false
17
+ property :subject, String, :length => 30..155, :required => true
18
+ property :body, Text, :required => true
19
19
  end # class Message
20
20
  end
21
21
  end
@@ -27,21 +27,21 @@ describe "Validation Responses" do
27
27
  end
28
28
 
29
29
  it "should generate a basic validation response" do
30
- test_do = Luma::Test::TestDO.new
30
+ test_do = Luma::Test::TestDO.new(:id => 'bob')
31
31
  test_do.save.should be_false
32
32
 
33
- ex = JSON.parse(JSClientBridge::Responses.respond_with_validation_error(test_do))
33
+ ex = JSON.parse(JsClientBridge::Responses.respond_with_validation_error(test_do))
34
34
  pp ex
35
- ex['validation'].length.should == 3
35
+ ex['validation'].length.should == 2
36
36
  ex['_short_type'].should == "TestDO"
37
37
  ex['_type'].should == "Luma::Test::TestDO"
38
38
  end
39
39
 
40
40
  it "should generate a basic validation response using JSONP" do
41
- test_do = Luma::Test::TestDO.new
41
+ test_do = Luma::Test::TestDO.new(:id => 'bob')
42
42
  test_do.save.should be_false
43
43
 
44
- ex = JSClientBridge::Responses.respond_with_validation_error(test_do, :jsonp => 'jsonp1')
44
+ ex = JsClientBridge::Responses.respond_with_validation_error(test_do, :jsonp => 'jsonp1')
45
45
  ex[0..6].should == 'jsonp1('
46
46
  ex[-1..-1].should == ')'
47
47
  end
@@ -1,21 +1,36 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems'
5
- require 'spec'
1
+ spec_defaults = lambda do |spec|
2
+ spec.pattern = 'spec/**/*_spec.rb'
3
+ spec.libs << 'lib' << 'spec'
4
+ spec.spec_opts << '--options' << 'spec/spec.opts'
6
5
  end
6
+
7
7
  begin
8
8
  require 'spec/rake/spectask'
9
+
10
+ Spec::Rake::SpecTask.new(:spec, &spec_defaults)
9
11
  rescue LoadError
10
- puts <<-EOS
11
- To use rspec for testing you must install rspec gem:
12
- gem install rspec
13
- EOS
14
- exit(0)
12
+ task :spec do
13
+ abort 'rspec is not available. In order to run spec, you must: gem install rspec'
14
+ end
15
15
  end
16
16
 
17
- desc "Run the specs under spec/models"
18
- Spec::Rake::SpecTask.new do |t|
19
- t.spec_opts = ['--options', "spec/spec.opts"]
20
- t.spec_files = FileList['spec/**/*_spec.rb']
21
- end
17
+ begin
18
+ require 'rcov'
19
+ require 'spec/rake/verify_rcov'
20
+
21
+ Spec::Rake::SpecTask.new(:rcov) do |rcov|
22
+ spec_defaults.call(rcov)
23
+ rcov.rcov = true
24
+ rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
25
+ end
26
+
27
+ RCov::VerifyTask.new(:verify_rcov => :rcov) do |rcov|
28
+ rcov.threshold = 100
29
+ end
30
+ rescue LoadError
31
+ %w[ rcov verify_rcov ].each do |name|
32
+ task name do
33
+ abort "rcov is not available. In order to run #{name}, you must: gem install rcov"
34
+ end
35
+ end
36
+ end
metadata CHANGED
@@ -1,88 +1,135 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js-client-bridge
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 0
9
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
10
11
  platform: ruby
11
12
  authors:
12
- - Rolly
13
+ - Rolly Fordham
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-03-02 00:00:00 +13:00
18
+ date: 2010-09-17 00:00:00 +12:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: json
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
- - - ">="
27
+ - - ~>
26
28
  - !ruby/object:Gem::Version
29
+ hash: 11
27
30
  segments:
28
- - 0
29
- version: "0"
31
+ - 1
32
+ - 4
33
+ - 6
34
+ version: 1.4.6
30
35
  type: :runtime
31
36
  version_requirements: *id001
32
37
  - !ruby/object:Gem::Dependency
33
- name: extlib
38
+ name: bundler
34
39
  prerelease: false
35
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
36
42
  requirements:
37
43
  - - ">="
38
44
  - !ruby/object:Gem::Version
45
+ hash: 23
39
46
  segments:
47
+ - 1
40
48
  - 0
41
- version: "0"
42
- type: :runtime
49
+ - 0
50
+ version: 1.0.0
51
+ type: :development
43
52
  version_requirements: *id002
44
53
  - !ruby/object:Gem::Dependency
45
- name: rubyforge
54
+ name: rspec
46
55
  prerelease: false
47
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
48
58
  requirements:
49
- - - ">="
59
+ - - ~>
50
60
  - !ruby/object:Gem::Version
61
+ hash: 27
51
62
  segments:
52
- - 2
63
+ - 1
64
+ - 3
53
65
  - 0
54
- - 4
55
- version: 2.0.4
66
+ version: 1.3.0
56
67
  type: :development
57
68
  version_requirements: *id003
58
69
  - !ruby/object:Gem::Dependency
59
- name: gemcutter
70
+ name: rcov
60
71
  prerelease: false
61
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
62
74
  requirements:
63
- - - ">="
75
+ - - ~>
64
76
  - !ruby/object:Gem::Version
77
+ hash: 43
65
78
  segments:
66
79
  - 0
67
- - 4
68
- - 1
69
- version: 0.4.1
80
+ - 9
81
+ - 8
82
+ version: 0.9.8
70
83
  type: :development
71
84
  version_requirements: *id004
72
85
  - !ruby/object:Gem::Dependency
73
- name: hoe
86
+ name: mocha
74
87
  prerelease: false
75
88
  requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
76
90
  requirements:
77
- - - ">="
91
+ - - ~>
78
92
  - !ruby/object:Gem::Version
93
+ hash: 43
79
94
  segments:
80
- - 2
81
- - 5
82
95
  - 0
83
- version: 2.5.0
96
+ - 9
97
+ - 8
98
+ version: 0.9.8
84
99
  type: :development
85
100
  version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: dm-core
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ hash: 19
110
+ segments:
111
+ - 1
112
+ - 0
113
+ - 2
114
+ version: 1.0.2
115
+ type: :development
116
+ version_requirements: *id006
117
+ - !ruby/object:Gem::Dependency
118
+ name: ruby-debug
119
+ prerelease: false
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ hash: 49
126
+ segments:
127
+ - 0
128
+ - 10
129
+ - 3
130
+ version: 0.10.3
131
+ type: :development
132
+ version_requirements: *id007
86
133
  description: Little library that encapsulates a (particular) standardised way of talking between a service and javascript. Probably not the best way of doing things, but it's been handy in a pinch.
87
134
  email:
88
135
  - rolly@luma.co.nz
@@ -90,62 +137,64 @@ executables: []
90
137
 
91
138
  extensions: []
92
139
 
93
- extra_rdoc_files:
94
- - History.txt
95
- - Manifest.txt
96
- - README.txt
140
+ extra_rdoc_files: []
141
+
97
142
  files:
98
- - History.txt
99
- - Manifest.txt
100
- - README.txt
143
+ - Gemfile
144
+ - Gemfile.lock
145
+ - README.rdoc
101
146
  - Rakefile
147
+ - js-client-bridge.gemspec
102
148
  - lib/js-client-bridge.rb
103
149
  - lib/js-client-bridge/responses.rb
104
- - lib/js-client-bridge/responses/ok.rb
105
- - lib/js-client-bridge/responses/validation.rb
106
150
  - lib/js-client-bridge/responses/error.rb
107
151
  - lib/js-client-bridge/responses/exception.rb
108
- - lib/js-client-bridge/extensions/datamapper_errors.rb
109
- - script/console
110
- - script/destroy
111
- - script/generate
112
- - spec/ok_responses_spec.rb
152
+ - lib/js-client-bridge/responses/ok.rb
153
+ - lib/js-client-bridge/responses/validation.rb
154
+ - lib/js-client-bridge/version.rb
113
155
  - spec/error_responses_spec.rb
114
156
  - spec/exception_responses_spec.rb
115
- - spec/validation_responses_spec.rb
157
+ - spec/ok_responses_spec.rb
158
+ - spec/rcov.opts
116
159
  - spec/spec.opts
117
160
  - spec/spec_helper.rb
161
+ - spec/validation_responses_spec.rb
118
162
  - tasks/rspec.rake
119
163
  has_rdoc: true
120
- homepage: https://github.com/luma/js-client-bridge/tree/master
164
+ homepage: http://rubygems.org/gems/js-client-bridge
121
165
  licenses: []
122
166
 
123
167
  post_install_message:
124
- rdoc_options:
125
- - --main
126
- - README.txt
168
+ rdoc_options: []
169
+
127
170
  require_paths:
128
171
  - lib
129
172
  required_ruby_version: !ruby/object:Gem::Requirement
173
+ none: false
130
174
  requirements:
131
175
  - - ">="
132
176
  - !ruby/object:Gem::Version
177
+ hash: 3
133
178
  segments:
134
179
  - 0
135
180
  version: "0"
136
181
  required_rubygems_version: !ruby/object:Gem::Requirement
182
+ none: false
137
183
  requirements:
138
184
  - - ">="
139
185
  - !ruby/object:Gem::Version
186
+ hash: 23
140
187
  segments:
141
- - 0
142
- version: "0"
188
+ - 1
189
+ - 3
190
+ - 6
191
+ version: 1.3.6
143
192
  requirements: []
144
193
 
145
194
  rubyforge_project: js-client-bridge
146
- rubygems_version: 1.3.6
195
+ rubygems_version: 1.3.7
147
196
  signing_key:
148
197
  specification_version: 3
149
- summary: Little library that encapsulates a (particular) standardised way of talking between a service and javascript
198
+ summary: Standardised way of talking between a service and javascript
150
199
  test_files: []
151
200
 
@@ -1,3 +0,0 @@
1
- == 0.1.0 2009-03-28
2
-
3
- * Repackaged an earlier version of this gem in a more modern way.
@@ -1,21 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.txt
4
- Rakefile
5
- lib/js-client-bridge.rb
6
- lib/js-client-bridge/responses.rb
7
- lib/js-client-bridge/responses/ok.rb
8
- lib/js-client-bridge/responses/validation.rb
9
- lib/js-client-bridge/responses/error.rb
10
- lib/js-client-bridge/responses/exception.rb
11
- lib/js-client-bridge/extensions/datamapper_errors.rb
12
- script/console
13
- script/destroy
14
- script/generate
15
- spec/ok_responses_spec.rb
16
- spec/error_responses_spec.rb
17
- spec/exception_responses_spec.rb
18
- spec/validation_responses_spec.rb
19
- spec/spec.opts
20
- spec/spec_helper.rb
21
- tasks/rspec.rake
@@ -1,43 +0,0 @@
1
-
2
- module DataMapper
3
- module Validate
4
-
5
- ##
6
- #
7
- # Monkey patch of Datamapper to add a nice to_json method that uses our error format
8
- class ValidationErrors
9
-
10
- def to_hash
11
- js = {}
12
-
13
- errors.each do |list, pair|
14
- js[list] = pair
15
- end
16
-
17
- js
18
- end
19
-
20
- end # class ValidationErrors
21
- end # module Validate
22
- end # module DataMapper
23
-
24
- module DataMapper
25
- module Resource
26
- def errors_to_hash(message = "Sorry, we couldn't save your #{self.class.to_s.split('::').last}")
27
-
28
- short_type = self.class.to_s.split('::').last
29
-
30
- validation = {
31
- :_status => 'validation',
32
- :_type => self.class,
33
- :_short_type => short_type,
34
- :_message => message,
35
- :validation => self.errors.to_hash,
36
- }
37
-
38
- validation[:id] = self.id.to_s unless new_record?
39
-
40
- validation
41
- end
42
- end # module Resource
43
- end # module DataMapper
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # File: script/console
3
- irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
-
5
- libs = " -r irb/completion"
6
- # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
- # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
- libs << " -r #{File.dirname(__FILE__) + '/../lib/js-client-bridge.rb'}"
9
- puts "Loading js-client-bridge gem"
10
- exec "#{irb} #{libs} --simple-prompt"
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/destroy'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/generate'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Generate.new.run(ARGV)