euston-websites 1.0.0-java

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/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,161 @@
1
+ require 'date'
2
+ require 'rspec/core/rake_task'
3
+
4
+ #############################################################################
5
+ #
6
+ # Helper functions
7
+ #
8
+ #############################################################################
9
+
10
+ def name
11
+ @name ||= Dir['*.gemspec'].first.split('.').first
12
+ end
13
+
14
+ def version
15
+ line = File.read("lib/#{name}/version.rb")[/^\s*VERSION\s*=\s*.*/]
16
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
17
+ end
18
+
19
+ def date
20
+ Date.today.to_s
21
+ end
22
+
23
+ def rubyforge_project
24
+ name
25
+ end
26
+
27
+ def gemspec_file
28
+ "#{name}.gemspec"
29
+ end
30
+
31
+ def gem_file
32
+ "#{name}-#{version}.gem"
33
+ end
34
+
35
+ def replace_header(head, header_name, provider = nil)
36
+ if provider
37
+ value = send(provider)
38
+ else
39
+ value = "'#{send(header_name)}'"
40
+ end
41
+
42
+ provider ||= header_name
43
+ head.sub!(/(\.#{header_name}\s*= ).*/) { "#{$1}#{value}"}
44
+ end
45
+
46
+ def platform
47
+ jruby? ? '-java' : ''
48
+ end
49
+
50
+ def platform_dependant_gem_file
51
+ "#{name}-#{version}#{platform}.gem"
52
+ end
53
+
54
+ def platform_dependent_version
55
+ "'#{version}#{platform}'"
56
+ end
57
+
58
+ def jruby?
59
+ RUBY_PLATFORM.to_s == 'java'
60
+ end
61
+
62
+ def trim_array_ends array
63
+ array.shift
64
+ array.pop
65
+ array
66
+ end
67
+
68
+ #############################################################################
69
+ #
70
+ # Custom tasks
71
+ #
72
+ #############################################################################
73
+
74
+ default_rspec_opts = %w[--colour --format Fuubar]
75
+
76
+ desc "Run all examples"
77
+ RSpec::Core::RakeTask.new(:spec) do |t|
78
+ t.rspec_opts = default_rspec_opts
79
+ end
80
+
81
+ #############################################################################
82
+ #
83
+ # Packaging tasks
84
+ #
85
+ #############################################################################
86
+
87
+ def built_gem
88
+ @built_gem ||= Dir["#{name}*.gem"].first
89
+ end
90
+
91
+ desc "Create tag v#{platform_dependent_version} and build and push #{platform_dependant_gem_file} to Rubygems"
92
+ task :release => :build do
93
+ unless `git branch` =~ /^\* master$/
94
+ puts "You must be on the master branch to release!"
95
+ exit!
96
+ end
97
+
98
+ sh "git commit --allow-empty -a -m 'Release #{platform_dependent_version}'"
99
+ sh "git tag v#{platform_dependent_version}"
100
+ sh "git push origin master"
101
+ sh "git push origin v#{platform_dependent_version}"
102
+
103
+ command = "gem push pkg/#{platform_dependant_gem_file}"
104
+
105
+ if jruby?
106
+ puts "--------------------------------------------------------------------------------------"
107
+ puts "can't push to rubygems using jruby at the moment, so switch to mri and run: #{command}"
108
+ puts "--------------------------------------------------------------------------------------"
109
+ else
110
+ sh command
111
+ end
112
+ end
113
+
114
+ desc "Build #{platform_dependant_gem_file} into the pkg directory"
115
+ task :build => :gemspec do
116
+ sh "mkdir -p pkg"
117
+ sh "gem build #{gemspec_file}"
118
+ sh "mv #{built_gem} pkg"
119
+ end
120
+
121
+ desc "Generate #{gemspec_file}"
122
+ task :gemspec => :validate do
123
+ # read spec file and split out manifest section
124
+ spec = File.read(gemspec_file)
125
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
126
+
127
+ # replace name version and date
128
+ replace_header(head, :name)
129
+ replace_header(head, :version)
130
+ replace_header(head, :date)
131
+ #comment this out if your rubyforge_project has a different name
132
+ #replace_header(head, :rubyforge_project)
133
+
134
+ # determine file list from git ls-files
135
+ files = `git ls-files`.
136
+ split("\n").
137
+ sort.
138
+ reject { |file| file =~ /^\./ }.
139
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
140
+ map { |file| " #{file}" }.
141
+ join("\n")
142
+
143
+ # piece file back together and write
144
+ manifest = " s.files = %w[\n#{files}\n ]\n"
145
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
146
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
147
+ puts "Updated #{gemspec_file}"
148
+ end
149
+
150
+ desc "Validate #{gemspec_file}"
151
+ task :validate do
152
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
153
+ unless libfiles.empty?
154
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
155
+ exit!
156
+ end
157
+ unless Dir['VERSION*'].empty?
158
+ puts "A `VERSION` file at root level violates Gem best practices."
159
+ exit!
160
+ end
161
+ end
@@ -0,0 +1,35 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'euston-websites'
3
+ s.version = '1.0.0'
4
+ s.platform = RUBY_PLATFORM.to_s == 'java' ? 'java' : Gem::Platform::RUBY
5
+ s.authors = ['Lee Henson', 'Guy Boertje']
6
+ s.email = ['lee.m.henson@gmail.com', 'guyboertje@gmail.com']
7
+ s.summary = %q{Common functionality for interacting with euston from websites.}
8
+ s.description = ""
9
+ s.homepage = 'http://github.com/leemhenson/euston-websites'
10
+
11
+ # = MANIFEST =
12
+ s.files = %w[
13
+ Gemfile
14
+ Rakefile
15
+ euston-websites.gemspec
16
+ lib/euston-websites.rb
17
+ lib/euston-websites/api_command_request_parsing/abstract_parser.rb
18
+ lib/euston-websites/api_command_request_parsing/batch_parser.rb
19
+ lib/euston-websites/api_command_request_parsing/discrete_parser.rb
20
+ lib/euston-websites/api_version.rb
21
+ lib/euston-websites/version.rb
22
+ ]
23
+ # = MANIFEST =
24
+
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
27
+
28
+ s.add_dependency 'activesupport', '>= 3.0.10'
29
+ s.add_dependency 'hash-keys', '~> 1.0.1'
30
+ s.add_dependency 'hollywood', '~> 1.0.0'
31
+
32
+ s.add_development_dependency 'awesome_print', '~> 0.4.0'
33
+ s.add_development_dependency 'fuubar', '~> 0.0.0'
34
+ s.add_development_dependency 'rspec', '~> 2.6.0'
35
+ end
@@ -0,0 +1,34 @@
1
+ module Euston
2
+ module Websites
3
+ module ApiCommandRequestParsing
4
+ class AbstractParser
5
+ include Hollywood
6
+
7
+ def initialize request
8
+ @body = request.body.read
9
+ end
10
+
11
+ def parse
12
+ valid = true
13
+
14
+ begin
15
+ commands = [transform_hash_to_commands(ActiveSupport::JSON.decode(@body))].flatten
16
+ rescue StandardError => e
17
+ callback :not_parseable
18
+ valid = false
19
+ end
20
+
21
+ return unless valid
22
+
23
+ invalid_commands = commands.reject { |c| c.valid? }
24
+
25
+ if invalid_commands.any?
26
+ callback :invalid, invalid_commands
27
+ else
28
+ callback :valid, commands
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ module Euston
2
+ module Websites
3
+ module ApiCommandRequestParsing
4
+ class BatchParser < AbstractParser
5
+ def initialize request, &block
6
+ super request
7
+ @transformer = block
8
+ end
9
+
10
+ def transform_hash_to_commands hash
11
+ @transformer.call hash
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module Euston
2
+ module Websites
3
+ module ApiCommandRequestParsing
4
+ class DiscreteParser < AbstractParser
5
+ def initialize request, params, command_type, command_id = nil
6
+ super request
7
+ @command_id = command_id || params[:id]
8
+ @command_type = command_type
9
+ end
10
+
11
+ def transform_hash_to_commands hash
12
+ hash = hash.recursive__symbolize__keys!
13
+
14
+ callback :preparing_hash, hash
15
+
16
+ command = @command_type.new hash
17
+ command.id = @command_id
18
+ command
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ # Taken from:
2
+ # http://freelancing-gods.com/posts/versioning_your_ap_is
3
+
4
+ module Euston
5
+ module Websites
6
+ class ApiVersion
7
+ def initialize version
8
+ @version = version
9
+ end
10
+
11
+ def matches? request
12
+ versioned_accept_header?(request) || version_one?(request)
13
+ end
14
+
15
+ private
16
+
17
+ def vendor_application_id
18
+ # abstract
19
+ end
20
+
21
+ def version_one? request
22
+ @version == 1 && unversioned_accept_header?(request)
23
+ end
24
+
25
+ def versioned_accept_header? request
26
+ accept = request.headers['Accept']
27
+ accept && accept[/application\/vnd\.#{vendor_application_id}-v#{@version}\+json/]
28
+ end
29
+
30
+ def unversioned_accept_header? request
31
+ accept = request.headers['Accept']
32
+ accept.blank? || accept[/application\/vnd\.#{vendor_application_id}/].nil?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ module Euston
2
+ module Websites
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ require 'active_support/json'
2
+ require 'hash-keys'
3
+ require 'hollywood'
4
+
5
+ require 'euston-websites/api_version'
6
+ require 'euston-websites/api_command_request_parsing/abstract_parser'
7
+ require 'euston-websites/api_command_request_parsing/batch_parser'
8
+ require 'euston-websites/api_command_request_parsing/discrete_parser'
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: euston-websites
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: java
7
+ authors:
8
+ - Lee Henson
9
+ - Guy Boertje
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-11-29 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ version_requirements: &2058 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.10
22
+ none: false
23
+ requirement: *2058
24
+ prerelease: false
25
+ type: :runtime
26
+ - !ruby/object:Gem::Dependency
27
+ name: hash-keys
28
+ version_requirements: &2076 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
33
+ none: false
34
+ requirement: *2076
35
+ prerelease: false
36
+ type: :runtime
37
+ - !ruby/object:Gem::Dependency
38
+ name: hollywood
39
+ version_requirements: &2092 !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.0.0
44
+ none: false
45
+ requirement: *2092
46
+ prerelease: false
47
+ type: :runtime
48
+ - !ruby/object:Gem::Dependency
49
+ name: awesome_print
50
+ version_requirements: &2108 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ none: false
56
+ requirement: *2108
57
+ prerelease: false
58
+ type: :development
59
+ - !ruby/object:Gem::Dependency
60
+ name: fuubar
61
+ version_requirements: &2126 !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.0.0
66
+ none: false
67
+ requirement: *2126
68
+ prerelease: false
69
+ type: :development
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ version_requirements: &2142 !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 2.6.0
77
+ none: false
78
+ requirement: *2142
79
+ prerelease: false
80
+ type: :development
81
+ description: ''
82
+ email:
83
+ - lee.m.henson@gmail.com
84
+ - guyboertje@gmail.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - Gemfile
90
+ - Rakefile
91
+ - euston-websites.gemspec
92
+ - lib/euston-websites.rb
93
+ - lib/euston-websites/api_command_request_parsing/abstract_parser.rb
94
+ - lib/euston-websites/api_command_request_parsing/batch_parser.rb
95
+ - lib/euston-websites/api_command_request_parsing/discrete_parser.rb
96
+ - lib/euston-websites/api_version.rb
97
+ - lib/euston-websites/version.rb
98
+ homepage: http://github.com/leemhenson/euston-websites
99
+ licenses: []
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ none: false
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ none: false
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.9
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: Common functionality for interacting with euston from websites.
122
+ test_files: []
123
+ ...