eastwood 0.3.8 → 0.4.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.
@@ -16,12 +16,12 @@ app.exports =
16
16
  ###*
17
17
  * Routes
18
18
  ###
19
- <% if routes.any? or hashes.any? %>
19
+ <% if server_routes.any? or client_routes.any? %>
20
20
  app.routes =
21
- <% routes.each do |key, route| %>
21
+ <% server_routes.each do |key, route| %>
22
22
  <%= route.coffee_name %> : ( <%= route.coffee_args %> ) -> "<%= route.coffee_path %>"
23
23
  <% end %>
24
- <% hashes.each do |key, route| %>
24
+ <% client_routes.each do |key, route| %>
25
25
  <%= route.coffee_name %> : ( <%= route.coffee_args %> ) -> "<%= route.coffee_path %>"
26
26
  <% end %>
27
27
  <% end %>
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/jeremyruppel/Git/eastwood
3
3
  specs:
4
- eastwood (0.3.7)
4
+ eastwood (0.3.8)
5
5
  coffee-rails
6
6
  rails (>= 3.1.0)
7
7
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/jeremyruppel/Git/eastwood
3
3
  specs:
4
- eastwood (0.3.7)
4
+ eastwood (0.3.8)
5
5
  coffee-rails
6
6
  rails (>= 3.1.0)
7
7
 
@@ -9,11 +9,19 @@ module Eastwood
9
9
  module ClassMethods
10
10
 
11
11
  def hash( name, route )
12
- hashes[ name ] = route
12
+ hashes[ name ] = [ route, 'hash' ]
13
13
  end
14
14
 
15
- def hashes
16
- @@hashes ||= Hash.new
15
+ def path( name, route )
16
+ paths[ name ] = [ route, 'path' ]
17
+ end
18
+
19
+ def url( name, route )
20
+ urls[ name ] = [ route, 'url' ]
21
+ end
22
+
23
+ def custom_routes
24
+ hashes.merge paths.merge urls
17
25
  end
18
26
 
19
27
  def export( *args )
@@ -33,6 +41,20 @@ module Eastwood
33
41
  @@javascript_route_style = :underscore
34
42
  @@javascript_namespace = nil
35
43
  end
44
+
45
+ protected
46
+
47
+ def hashes
48
+ @@hashes ||= Hash.new
49
+ end
50
+
51
+ def paths
52
+ @@paths ||= Hash.new
53
+ end
54
+
55
+ def urls
56
+ @@urls ||= Hash.new
57
+ end
36
58
  end
37
59
  end
38
60
  end
@@ -1,6 +1,6 @@
1
1
  module Eastwood
2
2
  module Context
3
- class HashRoute < Struct.new( :key, :hash )
3
+ class ClientRoute < Struct.new( :key, :route, :suffix )
4
4
  include RouteHelpers
5
5
 
6
6
  def name
@@ -8,15 +8,15 @@ module Eastwood
8
8
  end
9
9
 
10
10
  def parts
11
- hash.scan( /:(\w+)/ ).flatten.map &:to_sym
11
+ route.scan( /:(\w+)/ ).flatten.map &:to_sym
12
12
  end
13
13
 
14
14
  def path
15
- hash
15
+ route
16
16
  end
17
17
 
18
18
  def coffee_name
19
- style_for_javascript "#{name}_hash"
19
+ style_for_javascript "#{name}_#{suffix}"
20
20
  end
21
21
 
22
22
  def coffee_args
@@ -13,18 +13,18 @@ module Eastwood
13
13
  env === 'test' ? '( @window = { } )' : 'window'
14
14
  end
15
15
 
16
- def routes
16
+ def server_routes
17
17
  # TODO would kind of like to find a better way to transform
18
18
  # these values into my routes, but keep as a hash
19
19
  # http://www.ruby-forum.com/topic/185611
20
20
  named_routes.merge( named_routes ) { |key, route| route_class.new route, route_format }
21
21
  end
22
22
 
23
- def hashes
23
+ def client_routes
24
24
  # TODO would kind of like to find a better way to transform
25
25
  # these values into my routes, but keep as a hash
26
26
  # http://www.ruby-forum.com/topic/185611
27
- named_hashes.merge( named_hashes ){ |key, hash| HashRoute.new key, hash }
27
+ custom_routes.merge( custom_routes ){ |key, (route, suffix)| ClientRoute.new key, route, suffix }
28
28
  end
29
29
 
30
30
  def exports
@@ -45,8 +45,8 @@ module Eastwood
45
45
  [ '', false ].include? Eastwood.default_route_format
46
46
  end
47
47
 
48
- def named_hashes
49
- Eastwood.hashes
48
+ def custom_routes
49
+ Eastwood.custom_routes
50
50
  end
51
51
 
52
52
  def named_routes
@@ -1,3 +1,3 @@
1
1
  module Eastwood
2
- VERSION = "0.3.8"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/eastwood.rb CHANGED
@@ -7,7 +7,7 @@ module Eastwood
7
7
  module Context
8
8
  autoload :ActionRoute, 'eastwood/context/action_route'
9
9
  autoload :JourneyRoute, 'eastwood/context/journey_route'
10
- autoload :HashRoute, 'eastwood/context/hash_route'
10
+ autoload :ClientRoute, 'eastwood/context/client_route'
11
11
  autoload :RouteHelpers, 'eastwood/context/route_helpers'
12
12
  end
13
13
 
@@ -78,6 +78,24 @@ describe 'eastwood.js' do
78
78
  end
79
79
  end
80
80
 
81
+ describe 'about_path' do
82
+ it 'should be defined' do
83
+ context.eval( "typeof #{routes}.about_path" ).should eq( 'function' )
84
+ end
85
+ it 'should return the correct path' do
86
+ context.call( "#{routes}.about_path", 'foo' ).should eq( '/about/foo' )
87
+ end
88
+ end
89
+
90
+ describe 'google_url' do
91
+ it 'should be defined' do
92
+ context.eval( "typeof #{routes}.google_url" ).should eq( 'function' )
93
+ end
94
+ it 'should return the correct url' do
95
+ context.call( "#{routes}.google_url" ).should eq( 'http://www.google.com/search' )
96
+ end
97
+ end
98
+
81
99
  describe 'exports' do
82
100
  it 'should be defined' do
83
101
  context.eval( "typeof #{exports}" ).should eq( 'object' )
@@ -21,6 +21,10 @@ Eastwood.configure do |config|
21
21
  config.hash :user, '#/users/:id'
22
22
  config.hash :post, '#/users/:id/posts/:slug'
23
23
 
24
+ config.path :about, '/about/:topic'
25
+
26
+ config.url :google, 'http://www.google.com/search'
27
+
24
28
  config.export :string => 'foo',
25
29
  :float => 123.45,
26
30
  :boolean => true
@@ -29,12 +29,40 @@ describe Eastwood do
29
29
 
30
30
  describe 'adding a hash' do
31
31
  before do
32
- Eastwood.hash :foo, '#/bar'
32
+ Eastwood.hash :myhash, '#/bar'
33
33
  end
34
34
 
35
- subject { Eastwood.hashes }
35
+ subject { Eastwood.custom_routes }
36
36
 
37
- it { should include( :foo => '#/bar' ) }
37
+ it { should include( :myhash => [ '#/bar', 'hash' ] ) }
38
+ end
39
+ end
40
+
41
+ describe '#path' do
42
+ it { should respond_to( :path ) }
43
+
44
+ describe 'adding a path' do
45
+ before do
46
+ Eastwood.path :mypath, '/foo/bar'
47
+ end
48
+
49
+ subject { Eastwood.custom_routes }
50
+
51
+ it { should include( :mypath => [ '/foo/bar', 'path' ] ) }
52
+ end
53
+ end
54
+
55
+ describe '#url' do
56
+ it { should respond_to( :url ) }
57
+
58
+ describe 'adding a url' do
59
+ before do
60
+ Eastwood.url :myurl, 'http://www.foo.com'
61
+ end
62
+
63
+ subject { Eastwood.custom_routes }
64
+
65
+ it { should include( :myurl => [ 'http://www.foo.com', 'url' ] ) }
38
66
  end
39
67
  end
40
68
 
@@ -25,14 +25,14 @@ describe 'the Sprockets context class' do
25
25
  it { should delegate( :env ).to( Eastwood, :env ) }
26
26
  end
27
27
 
28
- describe '#routes' do
29
- it { should respond_to( :routes ) }
30
- its( :routes ){ should be_a( Hash ) }
28
+ describe '#server_routes' do
29
+ it { should respond_to( :server_routes ) }
30
+ its( :server_routes ){ should be_a( Hash ) }
31
31
  end
32
32
 
33
- describe '#hashes' do
34
- it { should respond_to( :hashes ) }
35
- its( :hashes ){ should be_a( Hash ) }
33
+ describe '#client_routes' do
34
+ it { should respond_to( :client_routes ) }
35
+ its( :client_routes ){ should be_a( Hash ) }
36
36
  end
37
37
 
38
38
  describe '#exports' do
@@ -70,11 +70,11 @@ describe 'the Sprockets context class' do
70
70
  end
71
71
  end
72
72
 
73
- describe 'routes' do
73
+ describe 'sever routes' do
74
74
  let( :context ){ ::Rails.application.assets.context_class.new nil, nil, nil }
75
75
 
76
76
  describe 'eastwood_engine' do
77
- subject { context.routes[ :eastwood_engine ] }
77
+ subject { context.server_routes[ :eastwood_engine ] }
78
78
 
79
79
  its( :name ){ should eq( 'eastwood_engine' ) }
80
80
  its( :path ){ should eq( '/eastwood' ) }
@@ -86,7 +86,7 @@ describe 'routes' do
86
86
  end
87
87
 
88
88
  describe 'match' do
89
- subject { context.routes[ :match ] }
89
+ subject { context.server_routes[ :match ] }
90
90
 
91
91
  its( :name ){ should eq( 'match' ) }
92
92
  its( :path ){ should eq( '/foo.:format' ) }
@@ -98,7 +98,7 @@ describe 'routes' do
98
98
  end
99
99
 
100
100
  describe 'match with segment' do
101
- subject { context.routes[ :match_with_segment ] }
101
+ subject { context.server_routes[ :match_with_segment ] }
102
102
 
103
103
  its( :name ){ should eq( 'match_with_segment' ) }
104
104
  its( :path ){ should eq( '/foo/:id.:format' ) }
@@ -110,11 +110,11 @@ describe 'routes' do
110
110
  end
111
111
  end
112
112
 
113
- describe 'hashes' do
113
+ describe 'client routes' do
114
114
  let( :context ){ ::Rails.application.assets.context_class.new nil, nil, nil }
115
115
 
116
116
  describe 'home' do
117
- subject { context.hashes[ :home ] }
117
+ subject { context.client_routes[ :home ] }
118
118
 
119
119
  its( :name ){ should eq( 'home' ) }
120
120
  its( :path ){ should eq( '#/home' ) }
@@ -126,7 +126,7 @@ describe 'hashes' do
126
126
  end
127
127
 
128
128
  describe 'user' do
129
- subject { context.hashes[ :user ] }
129
+ subject { context.client_routes[ :user ] }
130
130
 
131
131
  its( :name ){ should eq( 'user' ) }
132
132
  its( :path ){ should eq( '#/users/:id' ) }
@@ -138,7 +138,7 @@ describe 'hashes' do
138
138
  end
139
139
 
140
140
  describe 'post' do
141
- subject { context.hashes[ :post ] }
141
+ subject { context.client_routes[ :post ] }
142
142
 
143
143
  its( :name ){ should eq( 'post' ) }
144
144
  its( :path ){ should eq( '#/users/:id/posts/:slug' ) }
@@ -46,7 +46,7 @@ describe 'route formatting' do
46
46
 
47
47
  describe 'including the format in routes' do
48
48
  let( :context ){ ::Rails.application.assets.context_class.new nil, nil, nil }
49
- subject { context.routes[ :match ] }
49
+ subject { context.server_routes[ :match ] }
50
50
 
51
51
  context 'default format' do
52
52
  its( :coffee_args ){ should eq( "format='.json'" ) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eastwood
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &120640 !ruby/object:Gem::Requirement
16
+ requirement: &120730 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *120640
24
+ version_requirements: *120730
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: coffee-rails
27
- requirement: &120330 !ruby/object:Gem::Requirement
27
+ requirement: &120430 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *120330
35
+ version_requirements: *120430
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &120090 !ruby/object:Gem::Requirement
38
+ requirement: &120180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *120090
46
+ version_requirements: *120180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: appraisal
49
- requirement: &119730 !ruby/object:Gem::Requirement
49
+ requirement: &119830 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.4.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *119730
57
+ version_requirements: *119830
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec-rails
60
- requirement: &119370 !ruby/object:Gem::Requirement
60
+ requirement: &119480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - =
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.9.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *119370
68
+ version_requirements: *119480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: shoulda
71
- requirement: &118820 !ruby/object:Gem::Requirement
71
+ requirement: &119100 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - =
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 3.0.1
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *118820
79
+ version_requirements: *119100
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: execjs
82
- requirement: &117720 !ruby/object:Gem::Requirement
82
+ requirement: &118100 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - =
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.3.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *117720
90
+ version_requirements: *118100
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: simplecov
93
- requirement: &116710 !ruby/object:Gem::Requirement
93
+ requirement: &116830 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - =
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: 0.6.1
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *116710
101
+ version_requirements: *116830
102
102
  description: Start your client side out right
103
103
  email:
104
104
  - jeremy.ruppel@gmail.com
@@ -125,7 +125,7 @@ files:
125
125
  - lib/eastwood/config.rb
126
126
  - lib/eastwood/context.rb
127
127
  - lib/eastwood/context/action_route.rb
128
- - lib/eastwood/context/hash_route.rb
128
+ - lib/eastwood/context/client_route.rb
129
129
  - lib/eastwood/context/journey_route.rb
130
130
  - lib/eastwood/context/route_helpers.rb
131
131
  - lib/eastwood/engine.rb