vj-sdk 0.2.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.
Files changed (88) hide show
  1. data/.gitignore +4 -0
  2. data/LICENSE +20 -0
  3. data/README.markdown +0 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +70 -0
  6. data/VERSION.yml +4 -0
  7. data/lib/core_ext/cgi.rb +12 -0
  8. data/lib/core_ext/hash.rb +52 -0
  9. data/lib/core_ext/object.rb +15 -0
  10. data/lib/core_ext/string.rb +11 -0
  11. data/lib/sdk_connection_harness.rb +101 -0
  12. data/lib/videojuicer/asset/audio.rb +13 -0
  13. data/lib/videojuicer/asset/base.rb +80 -0
  14. data/lib/videojuicer/asset/flash.rb +8 -0
  15. data/lib/videojuicer/asset/image.rb +10 -0
  16. data/lib/videojuicer/asset/text.rb +8 -0
  17. data/lib/videojuicer/asset/video.rb +22 -0
  18. data/lib/videojuicer/campaign.rb +19 -0
  19. data/lib/videojuicer/campaign_policy.rb +116 -0
  20. data/lib/videojuicer/criterion/base.rb +56 -0
  21. data/lib/videojuicer/criterion/date_range.rb +15 -0
  22. data/lib/videojuicer/criterion/geolocation.rb +18 -0
  23. data/lib/videojuicer/criterion/request.rb +15 -0
  24. data/lib/videojuicer/criterion/time.rb +15 -0
  25. data/lib/videojuicer/criterion/week_day.rb +20 -0
  26. data/lib/videojuicer/oauth/multipart_helper.rb +96 -0
  27. data/lib/videojuicer/oauth/proxy_factory.rb +18 -0
  28. data/lib/videojuicer/oauth/request_proxy.rb +280 -0
  29. data/lib/videojuicer/presentation.rb +38 -0
  30. data/lib/videojuicer/preset.rb +29 -0
  31. data/lib/videojuicer/promo/base.rb +72 -0
  32. data/lib/videojuicer/resource/base.rb +175 -0
  33. data/lib/videojuicer/resource/collection.rb +36 -0
  34. data/lib/videojuicer/resource/embeddable.rb +30 -0
  35. data/lib/videojuicer/resource/errors.rb +17 -0
  36. data/lib/videojuicer/resource/inferrable.rb +141 -0
  37. data/lib/videojuicer/resource/property_registry.rb +145 -0
  38. data/lib/videojuicer/resource/relationships/belongs_to.rb +39 -0
  39. data/lib/videojuicer/resource/types.rb +28 -0
  40. data/lib/videojuicer/session.rb +74 -0
  41. data/lib/videojuicer/shared/configurable.rb +103 -0
  42. data/lib/videojuicer/shared/exceptions.rb +32 -0
  43. data/lib/videojuicer/user.rb +43 -0
  44. data/lib/videojuicer.rb +110 -0
  45. data/spec/assets/audio_spec.rb +25 -0
  46. data/spec/assets/flash_spec.rb +24 -0
  47. data/spec/assets/image_spec.rb +25 -0
  48. data/spec/assets/text_spec.rb +24 -0
  49. data/spec/assets/video_spec.rb +25 -0
  50. data/spec/belongs_to_spec.rb +45 -0
  51. data/spec/campaign_policy_spec.rb +41 -0
  52. data/spec/campaign_spec.rb +25 -0
  53. data/spec/collection_spec.rb +31 -0
  54. data/spec/criterion/date_range_spec.rb +24 -0
  55. data/spec/criterion/geolocation_spec.rb +23 -0
  56. data/spec/criterion/request_spec.rb +23 -0
  57. data/spec/criterion/time_spec.rb +23 -0
  58. data/spec/criterion/week_day_spec.rb +23 -0
  59. data/spec/files/audio.mp3 +0 -0
  60. data/spec/files/empty_file +0 -0
  61. data/spec/files/flash.swf +0 -0
  62. data/spec/files/image.jpg +0 -0
  63. data/spec/files/text.txt +1 -0
  64. data/spec/files/video.mov +0 -0
  65. data/spec/helpers/be_equal_to.rb +26 -0
  66. data/spec/helpers/spec_fixtures.rb +227 -0
  67. data/spec/helpers/spec_helper.rb +53 -0
  68. data/spec/presentation_spec.rb +25 -0
  69. data/spec/preset_spec.rb +30 -0
  70. data/spec/promos/audio_spec.rb +23 -0
  71. data/spec/promos/image_spec.rb +24 -0
  72. data/spec/promos/text_spec.rb +23 -0
  73. data/spec/promos/video_spec.rb +23 -0
  74. data/spec/property_registry_spec.rb +130 -0
  75. data/spec/request_proxy_spec.rb +90 -0
  76. data/spec/session_spec.rb +98 -0
  77. data/spec/shared/asset_spec.rb +39 -0
  78. data/spec/shared/configurable_spec.rb +75 -0
  79. data/spec/shared/dependent_spec.rb +40 -0
  80. data/spec/shared/embeddable_spec.rb +34 -0
  81. data/spec/shared/model_spec.rb +74 -0
  82. data/spec/shared/resource_spec.rb +140 -0
  83. data/spec/spec.opts +3 -0
  84. data/spec/user_spec.rb +42 -0
  85. data/spec/videojuicer_spec.rb +122 -0
  86. data/tasks/vj-core.rb +72 -0
  87. data/vj-sdk.gemspec +168 -0
  88. metadata +209 -0
@@ -0,0 +1,103 @@
1
+ =begin
2
+
3
+ Configurable is a mixin intended for internal use within the SDK.
4
+
5
+ It provides a suite of helper methods to objects that use the scoped configuration
6
+ system within the root Videojuicer module.
7
+
8
+ Objects that are Configurable have a local configuration, which will always be
9
+ respected, and a shared configuration object which merges the current configuration
10
+ scope with the local configuration.
11
+
12
+ For instance:
13
+
14
+ # Assuming that the Videojuicer default configuration is a simple hash containing {:in_a_scope=>false}
15
+
16
+ a_configurable.configure! :foo=>"bar" # config[:foo] will ALWAYS == "bar" for this object.
17
+ a_configurable.local_config #=> {:foo=>"bar"}
18
+ a_configurable.config #=> {:in_a_scope=>false, :foo=>"bar"}
19
+
20
+ # Now let's enter a scope:
21
+ Videojuicer.enter_scope :in_a_scope=>true, :foo=>"not bar"
22
+
23
+ a_configurable.local_config #=> {:foo=>"bar"}
24
+ a_configurable.config #=> {:in_a_scope=>true, :foo=>"bar"}
25
+
26
+ # And leave it again..
27
+ Videojuicer.exit_scope
28
+
29
+ a_configurable.local_config #=> {:foo=>"bar"}
30
+ a_configurable.config #=> {:in_a_scope=>false, :foo=>"bar"}
31
+
32
+ =end
33
+
34
+ module Videojuicer
35
+ module Configurable
36
+
37
+ attr_accessor :local_config
38
+
39
+ # Sets the local configuration for this Configurable.
40
+ # The local configuration will always be respected regardless of the
41
+ # current controller scope.
42
+ def configure!(options={})
43
+ self.local_config = options
44
+ end
45
+
46
+ # Returns the shared configuration, which is the current
47
+ # controller scope merged with the local config.
48
+ def config
49
+ Videojuicer.current_scope.merge(local_config || {})
50
+ end
51
+
52
+ # Executes a block of code within the scope of this Configurable's
53
+ # local configuration.
54
+ #
55
+ # This is achieved by pushing the local configuration onto the controller's
56
+ # scope stack, executing the given block and then exiting the scope. During
57
+ # this procedure the local configuration on this object will remain unchanged.
58
+ #
59
+ # Example:
60
+ # Videojuicer.configure! :bar=>"baz"
61
+ # configurable_a.configure! :foo=>"a"
62
+ # configurable_b.configure! :foo=>"b"
63
+ #
64
+ # configurable_a.scope do |config|
65
+ # config[:bar] #=> "baz"
66
+ # config[:foo] #=> "a"
67
+ #
68
+ # configurable_b.scope do |config|
69
+ # config[:foo] #=> "b"
70
+ # end
71
+ #
72
+ # config[:foo] #=> "a"
73
+ # end
74
+ def scope(&block)
75
+ Videojuicer.enter_scope local_config
76
+ block_out = block.call(Videojuicer.current_scope)
77
+ Videojuicer.exit_scope
78
+ return block_out
79
+ end
80
+
81
+ # Retrieves the host from the configuration options.
82
+ def host; config[:host]; end
83
+ # Retrieves the port from the configuration options.
84
+ def port; config[:port]; end
85
+ # Retrieves the consumer_key from the configuration options.
86
+ def consumer_key; config[:consumer_key]; end
87
+ # Retrieves the consumer_secret from the configuration options.
88
+ def consumer_secret; config[:consumer_secret]; end
89
+ # Retrieves the token from the configuration options.
90
+ def token; config[:token]; end
91
+ # Retrieves the token_secret from the configuration options.
92
+ def token_secret; config[:token_secret]; end
93
+ # Retrieves the api_version from the configuration options.
94
+ def api_version; config[:api_version]; end
95
+ # Retrieves the protocol from the configuration options.
96
+ def protocol; config[:protocol]; end
97
+ # Retrieves the seed name from the configuration options.
98
+ def seed_name; config[:seed_name]; end
99
+ # Retrieves the user_id from the configuration options. Master tokens can be used to authenticate as any user.
100
+ def user_id; config[:user_id]; end
101
+
102
+ end
103
+ end
@@ -0,0 +1,32 @@
1
+ module Videojuicer
2
+ module Exceptions
3
+
4
+ class NotAuthorised < ::StandardError; end
5
+
6
+ # Raised when a method requiring instance-specific data from the remote API
7
+ # is called on an object that does not exist remotely.
8
+ class NoResource < ::RuntimeError; end
9
+
10
+ # Raised when a record cannot be saved because it has attributes that are well rubbish.
11
+ class InvalidRecord < ::RuntimeError; end
12
+
13
+ # Raised when a request is completely buggered by the remote API.
14
+ class RemoteApplicationError < ::StandardError; end
15
+
16
+ # Raised when the remote resource refuses to carry out an action.
17
+ class Forbidden < ::StandardError; end
18
+
19
+ # Raised when status is 401
20
+ class Unauthenticated < ::StandardError; end
21
+
22
+ # Raised when status is 406
23
+ class NotAcceptable < ::StandardError; end
24
+
25
+ # Raised when status is 411
26
+ class ContentLengthRequired < ::StandardError; end
27
+
28
+ # Raised on an unclassified exception
29
+ class UnhandledHTTPStatus < ::StandardError; end
30
+
31
+ end
32
+ end
@@ -0,0 +1,43 @@
1
+ module Videojuicer
2
+ class User
3
+ include Videojuicer::Resource
4
+ include Videojuicer::Exceptions
5
+
6
+ property :name, String
7
+ property :login, String
8
+ property :email, String
9
+ property :password, String
10
+ property :password_confirmation, String
11
+ property :created_at, DateTime
12
+ property :updated_at, DateTime
13
+
14
+ # Authenticates the given login and password and returns
15
+ # a user if the details are correct. Requires a Master token.
16
+ def self.authenticate(login, password)
17
+ proxy = Videojuicer::OAuth::RequestProxy.new
18
+ begin
19
+ jobj = JSON.parse(proxy.get("/users/authenticate.json", :login=>login, :password=>password).body)
20
+ o = new(:id=>jobj["id"])
21
+ o.reload
22
+ return o
23
+ rescue NoResource =>e
24
+ return nil
25
+ end
26
+ end
27
+
28
+ # Manage virtual attributes that are not sent back to the API
29
+ attr_accessor :roles
30
+ def has_role?(symbol)
31
+ roles.include?(symbol.to_s)
32
+ end
33
+
34
+ def add_role(*symbols)
35
+ symbols.each {|r| proxy_for(config).post(resource_path(:add_role), :role=>r) }
36
+ end
37
+
38
+ def remove_role(*symbols)
39
+ symbols.each {|r| proxy_for(config).post(resource_path(:remove_role), :role=>r) }
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,110 @@
1
+ $:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
2
+
3
+ # Gem and stdlib dependencies
4
+ require 'rubygems'
5
+ require 'cgi'
6
+ require 'json'
7
+ require 'hmac-sha1'
8
+ require 'net/http'
9
+
10
+ # Core ext
11
+ require 'core_ext/hash'
12
+ require 'core_ext/string'
13
+ require 'core_ext/object'
14
+ require 'core_ext/cgi'
15
+ # Core mixins
16
+ require 'videojuicer/shared/exceptions'
17
+ require 'videojuicer/shared/configurable'
18
+ # Authentication and authorisation
19
+ require 'videojuicer/oauth/request_proxy'
20
+ require 'videojuicer/oauth/proxy_factory'
21
+ # Resource handling
22
+ require 'videojuicer/resource/embeddable'
23
+ require 'videojuicer/resource/types'
24
+ require 'videojuicer/resource/relationships/belongs_to'
25
+ require 'videojuicer/resource/errors'
26
+ require 'videojuicer/resource/collection'
27
+ require 'videojuicer/resource/inferrable'
28
+ require 'videojuicer/resource/property_registry'
29
+ require 'videojuicer/resource/base'
30
+ require 'videojuicer/session'
31
+ # Frontend models
32
+ require 'videojuicer/user'
33
+ require 'videojuicer/campaign'
34
+ require 'videojuicer/campaign_policy'
35
+ require 'videojuicer/presentation'
36
+ require 'videojuicer/asset/audio'
37
+ require 'videojuicer/asset/flash'
38
+ require 'videojuicer/asset/image'
39
+ require 'videojuicer/asset/text'
40
+ require 'videojuicer/asset/video'
41
+ require 'videojuicer/promo/base'
42
+ require 'videojuicer/criterion/date_range'
43
+ require 'videojuicer/criterion/geolocation'
44
+ require 'videojuicer/criterion/request'
45
+ require 'videojuicer/criterion/time'
46
+ require 'videojuicer/criterion/week_day'
47
+ require 'videojuicer/promo/base'
48
+ require 'videojuicer/preset'
49
+
50
+ module Videojuicer
51
+
52
+ DEFAULTS = {
53
+ :consumer_key => nil,
54
+ :consumer_secret => nil,
55
+ :token => nil,
56
+ :token_secret => nil,
57
+ :api_version => nil,
58
+ :seed_name => nil,
59
+ :user_id => nil,
60
+ :protocol => "http",
61
+ :host => "api.videojuicer.com",
62
+ :port => 80
63
+ }.freeze
64
+
65
+ @default_options = {}
66
+ @scope_stack = []
67
+
68
+ class << self
69
+
70
+ def scopes
71
+ ([default_options]+@scope_stack).compact
72
+ end
73
+
74
+ def in_scope?
75
+ !@scope_stack.empty?
76
+ end
77
+
78
+ def current_scope
79
+ scopes.last
80
+ end
81
+
82
+ def enter_scope(config)
83
+ @scope_stack.push current_scope.merge(config)
84
+ end
85
+
86
+ def exit_scope
87
+ @scope_stack.pop
88
+ end
89
+
90
+ def exit_all!
91
+ @scope_stack = []
92
+ end
93
+
94
+ def [](key)
95
+ @default_options[key]
96
+ end
97
+
98
+ def configure!(options={})
99
+ @default_options = DEFAULTS.merge(@default_options.merge(options))
100
+ end
101
+
102
+ def unconfigure!
103
+ @default_options = DEFAULTS
104
+ end
105
+
106
+ def default_options
107
+ @default_options
108
+ end
109
+ end # class << self
110
+ end # module Videojuicer
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Audio do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Audio
7
+ @preset_params = {:derived_type => "Audio", :file_format => "mp3"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/audio"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Flash do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Flash
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "asset"
17
+ @plural_name = "assets/flash"
18
+ end
19
+
20
+ it_should_behave_like "a RESTFUL resource model"
21
+ end
22
+
23
+ it_should_behave_like "an asset"
24
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Image do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Image
7
+ @preset_params = {:derived_type => "Image", :file_format => "png"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/image"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Text do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Text
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "asset"
17
+ @plural_name = "assets/text"
18
+ end
19
+
20
+ it_should_behave_like "a RESTFUL resource model"
21
+ end
22
+
23
+ it_should_behave_like "an asset"
24
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Video do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Video
7
+ @preset_params = {:derived_type => "Video", :file_format => "mp4"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/video"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Resource::Relationships::BelongsTo do
4
+
5
+ after(:all) do
6
+ Videojuicer.exit_scope
7
+ end
8
+
9
+ before(:all) do
10
+ configure_test_settings
11
+ Videojuicer.enter_scope :seed_name => fixtures.seed.name,
12
+ :consumer_key=>fixtures["write-master"].consumer.consumer_key,
13
+ :consumer_secret=>fixtures["write-master"].consumer.consumer_secret,
14
+ :token=>fixtures["write-master"].authorized_token.oauth_token,
15
+ :token_secret=>fixtures["write-master"].authorized_token.oauth_token_secret
16
+
17
+ @user = Videojuicer::User.first
18
+ @user.should be_kind_of(Videojuicer::User)
19
+
20
+ class ::BelongsToExample
21
+ include Videojuicer::Resource
22
+
23
+ property :user_id, Integer
24
+ belongs_to :user, :class=>Videojuicer::User
25
+ end
26
+
27
+ @example = ::BelongsToExample.new
28
+ @example.user_id = @user.id
29
+ end
30
+
31
+ it "retrieves the user" do
32
+ @example.user.id.should == @user.id
33
+ end
34
+
35
+ it "returns nil when the user_id is nonsense" do
36
+ bad_example = ::BelongsToExample.new(:user_id=>9900000000)
37
+ bad_example.user.should be_nil
38
+ end
39
+
40
+ it "sets the user" do
41
+ @example.user = @user
42
+ @example.user_id.should == @user.id
43
+ end
44
+
45
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Campaign::CampaignPolicy do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Campaign::CampaignPolicy
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "campaign_policy"
17
+ @plural_name = "campaign_policies"
18
+ @fixed_attributes = [:campaign_id]
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ describe "adding policies" do
25
+
26
+ end
27
+
28
+ describe "removing policies" do
29
+
30
+ end
31
+
32
+ describe "adding promos" do
33
+
34
+ end
35
+
36
+ describe "removing promos" do
37
+
38
+ end
39
+
40
+
41
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Campaign do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Campaign
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ string_mash = (("A".."z").to_a + ("a".."z").to_a)
17
+ @singular_name = "campaign"
18
+ @plural_name = "campaigns"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+
25
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Resource::Collection do
4
+
5
+ before(:all) do
6
+ @objects = [:foo]*100
7
+ @collection = Videojuicer::Resource::Collection.new(@objects[0..9], 155, 17, 10)
8
+ end
9
+
10
+ it "is instantiated correctly" do
11
+ @collection.should be_kind_of(Videojuicer::Resource::Collection)
12
+ @collection.total.should == 155
13
+ @collection.offset.should == 17
14
+ @collection.limit.should == 10
15
+ end
16
+
17
+ it "can count the number of pages" do
18
+ @collection.page_count.should == 16
19
+ end
20
+
21
+ it "can tell the current page" do
22
+ @collection.page_number.should == 2
23
+ end
24
+
25
+ it "pagination copes with a nil limit" do
26
+ collection = Videojuicer::Resource::Collection.new(@objects[0..9], 155, 17, nil)
27
+ collection.page_count.should == 1
28
+ collection.page_number.should == 1
29
+ end
30
+
31
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::DateRange do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::DateRange
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/date_range"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Geolocation do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Geolocation
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/geolocation"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Request do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Request
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/request"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Time do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Time
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/time"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::WeekDay do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::WeekDay
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/week_day"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
Binary file
File without changes