odata-model 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe33f5051420883663adf80b9d1a59b13eafec5d
4
- data.tar.gz: 126f1440868c5fd7daf861b1b15719934599756f
3
+ metadata.gz: c9af1e9a92b9ecf511d9da7347473c779824b9b8
4
+ data.tar.gz: 6172738728c6b5ed9349611bb700c5b578c3d383
5
5
  SHA512:
6
- metadata.gz: 939c3fbb81c39e03a56b412383fd9822c486aa39f0439b7efeb1b97bf8f161f34ee2c242dbbef4fa50ad0016c54b85f69f9b31e6a50d2fa19bd31e2acd727a79
7
- data.tar.gz: 5a88c0a36091e278714ca0026c164f1773f11f423ea0add97571766969063201bd1d19bd270ddeb78a3597a28d8e615e641c2cec106352eba358a3c089ee3d4e
6
+ metadata.gz: 344ff2fb53b0bc6feb3f2a9cf7ca2936a44335cb5af249d773618967d808c1772cce02bbab53a510e90a214aa79722f9091b0710e43475c745ca4dc54b525e19
7
+ data.tar.gz: c286f7a764c5597b190466b20e3a457d2dab750aed01ee91e214c06621f181807b80f9a886ea80d03b2c03f89ad13c3289172a5d1c8b1e2d471f2a96979f2661
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.2.0
4
+
5
+ * Added `odata_service_name` to private API methods
6
+ * Added `for_entity` as alternative to `use_entity_set`
7
+
3
8
  ## 0.1.1
4
9
 
5
10
  * Added bin/odata-model
data/bin/odata-model CHANGED
@@ -1,58 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- require 'odata/model'
3
2
  require 'slop'
4
- require 'erb'
5
-
6
- def validate_service_url(opts)
7
- unless opts[:service_url]
8
- puts 'You must supply a service_url (-s, --service_url=)'
9
- exit(1)
10
- end
11
- end
12
-
13
- def handle_auth_options(opts)
14
- service_options = {}
15
- if opts[:username] && opts[:password]
16
- service_options[:typhoeus] = {
17
- username: opts[:username],
18
- password: opts[:password]
19
- }
20
- if opts[:auth_type]
21
- auth_type = opts[:auth_type].to_sym
22
- service_options[:typhoeus][:httpauth] = auth_type
23
- end
24
- end
25
- service_options
26
- end
27
-
28
- class ModelTemplate
29
- attr_reader :class_name, :service_name, :properties
30
-
31
- def initialize(class_name, service_name, properties)
32
- @class_name = class_name
33
- @service_name = service_name
34
- @properties = properties
35
- end
36
3
 
37
- def template
38
- <<-EOS
39
- class <%= @class_name %>
40
- include OData::Model
41
-
42
- use_service '<%= @service_name %>'
43
-
44
- <% properties.each do |property_name, as_name| %>
45
- property '<%= property_name %>'<%= as_name.nil? ? nil : ", as: :\#\{as_name\}" %>
46
- <% end %>
47
- end
48
- EOS
49
- end
50
-
51
- def render
52
- renderer = ERB.new(template, 0, '<>')
53
- renderer.result(binding)
54
- end
55
- end
4
+ require 'odata/model'
5
+ require 'odata/model/cli/model_template'
6
+ require 'odata/model/cli/generator_configuration'
56
7
 
57
8
  opts = Slop.parse do
58
9
  banner 'Usage: odata-model <command> [options]'
@@ -69,10 +20,10 @@ opts = Slop.parse do
69
20
  on :a, :auth_type=, 'CURL authentication type (optional)', argument: :optional
70
21
 
71
22
  run do |opts, args|
72
- validate_service_url(opts)
23
+ OData::Model::CLI::GeneratorConfiguration.validate_service_url(opts)
24
+ generator = OData::Model::CLI::GeneratorConfiguration.new(opts)
73
25
 
74
- service = OData::Service.open(opts[:service_url], handle_auth_options(opts))
75
- service.entity_sets.each do |type, name|
26
+ generator.service.entity_sets.each do |type, name|
76
27
  puts "#{name} <EntityType: #{type}>"
77
28
  end
78
29
 
@@ -86,23 +37,17 @@ opts = Slop.parse do
86
37
  on :p, :password=, 'password (optional)', argument: :optional
87
38
  on :a, :auth_type=, 'CURL authentication type (optional)', argument: :optional
88
39
 
89
- on :sn, :service_name=, 'OData service name to use', argument: :optional
40
+ on :n, :service_name=, 'OData service name to use', argument: :optional
90
41
  on :m, :model_name=, 'name to give model', argument: :optional
91
42
  on :e, :entity_set=, 'EntitySet to generate model for'
92
43
 
93
- run do |opts, args|
94
- validate_service_url(opts)
44
+ on :properties=, as: Array, argument: :optional
95
45
 
96
- service = OData::Service.open(opts[:service_url], handle_auth_options(opts))
97
- entity_set = service[opts[:entity_set]]
98
- properties = service.properties_for(entity_set.type)
99
-
100
- class_name = opts[:model_name] || entity_set.type
101
- service_name = opts[:service_name] || opts[:service_url]
102
- properties = Hash[properties.collect {|k,v| [k, nil]}]
46
+ run do |opts, args|
47
+ OData::Model::CLI::GeneratorConfiguration.validate_service_url(opts)
103
48
 
104
- template = ModelTemplate.new(class_name, service_name, properties)
105
- puts template.render
49
+ generator = OData::Model::CLI::GeneratorConfiguration.new(opts)
50
+ puts generator.generate
106
51
 
107
52
  exit(0)
108
53
  end
@@ -0,0 +1,72 @@
1
+ module OData
2
+ module Model
3
+ # Module for classes related to command-line tools
4
+ module CLI
5
+ # Represents the configuration for the command-line tool responsible for
6
+ # model generation.
7
+ # @api private
8
+ class GeneratorConfiguration
9
+ attr_reader :service, :options
10
+
11
+ def initialize(options)
12
+ @options = options
13
+ @service = OData::Service.open(service_url, handle_auth_options)
14
+ end
15
+
16
+ def generate
17
+ template = ModelTemplate.new(class_name, service_name, properties)
18
+ template.render
19
+ end
20
+
21
+ def self.validate_service_url(opts)
22
+ unless opts[:service_url]
23
+ puts 'You must supply a service_url (-s, --service_url=)'
24
+ exit(1)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def class_name
31
+ options[:model_name] || entity_set.type
32
+ end
33
+
34
+ def properties
35
+ if options[:properties]
36
+ Hash[options[:properties].collect {|property_set| property_set.split(':')}]
37
+ else
38
+ properties = service.properties_for(entity_set.type)
39
+ Hash[properties.collect {|k,v| [k, nil]}]
40
+ end
41
+ end
42
+
43
+ def service_name
44
+ options[:service_name] || service_url
45
+ end
46
+
47
+ def service_url
48
+ options[:service_url]
49
+ end
50
+
51
+ def entity_set
52
+ service[options[:entity_set]]
53
+ end
54
+
55
+ def handle_auth_options
56
+ service_options = {}
57
+ if options[:username] && options[:password]
58
+ service_options[:typhoeus] = {
59
+ username: options[:username],
60
+ password: options[:password]
61
+ }
62
+ if options[:auth_type]
63
+ auth_type = options[:auth_type].to_sym
64
+ service_options[:typhoeus][:httpauth] = auth_type
65
+ end
66
+ end
67
+ service_options
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,41 @@
1
+ require 'erb'
2
+
3
+ module OData
4
+ module Model
5
+ # Module for classes related to command-line tools
6
+ module CLI
7
+ # Represents the model template used by the command-line generator.
8
+ # @api private
9
+ class ModelTemplate
10
+ attr_reader :class_name, :service_name, :properties
11
+
12
+ def initialize(class_name, service_name, properties, entity_name)
13
+ @class_name = class_name
14
+ @service_name = service_name
15
+ @properties = properties
16
+ @entity_name = entity_name
17
+ end
18
+
19
+ def template
20
+ <<-EOS
21
+ class <%= @class_name %>
22
+ include OData::Model
23
+
24
+ use_service '<%= @service_name %>'
25
+ <%= @entity_name.nil? ? nil : "use_entity_set '\#\{@entity_name\}'" %>
26
+
27
+ <% properties.each do |property_name, as_name| %>
28
+ property '<%= property_name %>'<%= as_name.nil? ? nil : ", as: :\#\{as_name\}" %>
29
+ <% end %>
30
+ end
31
+ EOS
32
+ end
33
+
34
+ def render
35
+ renderer = ERB.new(template, 0, '<>')
36
+ renderer.result(binding)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -59,6 +59,17 @@ module OData
59
59
  nil
60
60
  end
61
61
 
62
+ # Define the entity set to use for the current OData::Model. This
63
+ # method will look up the correct EntitySet using the Entity's type
64
+ # name.
65
+ #
66
+ # @param entity_name [to_s] name of EntityType used by OData Service
67
+ # @return [nil]
68
+ def for_entity(entity_name)
69
+ odata_config[:entity_set_name] = odata_service.entity_sets[entity_name]
70
+ nil
71
+ end
72
+
62
73
  # Get the OData::Service
63
74
  # @return [OData::Service]
64
75
  # @api private
@@ -66,6 +77,13 @@ module OData
66
77
  odata_config[:service]
67
78
  end
68
79
 
80
+ # Returns the name of the OData::Service used.
81
+ # @return [String]
82
+ # @api private
83
+ def odata_service_name
84
+ odata_config[:service].name
85
+ end
86
+
69
87
  # Get the OData::Service's namespace
70
88
  # @return [String] OData Service's namespace
71
89
  # @api private
@@ -1,5 +1,5 @@
1
1
  module OData
2
2
  module Model
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ class Person
2
+ include OData::Model
3
+
4
+ use_service 'ODataDemo'
5
+ for_entity 'Person'
6
+
7
+ property 'ID'
8
+ property 'Name'
9
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::Model do
4
+ describe 'EntitySet identification and configuration' do
5
+ describe 'default behavior' do
6
+ it { expect(Product.odata_entity_set_name).to eq('Products') }
7
+ end
8
+
9
+ describe 'using for_entity' do
10
+ it { expect(Person.odata_entity_set_name).to eq('Persons') }
11
+ end
12
+ end
13
+ end
@@ -10,5 +10,8 @@ describe OData::Model do
10
10
 
11
11
  it { expect(Product).to respond_to(:odata_namespace) }
12
12
  it { expect(Product.odata_namespace).to eq('ODataDemo') }
13
+
14
+ it { expect(Product).to respond_to(:odata_service_name) }
15
+ it { expect(Product.odata_service_name).to eq('ODataDemo') }
13
16
  end
14
17
  end
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,7 @@ OData::Service.open('http://services.odata.org/OData/OData.svc', name: 'ODataDem
20
20
 
21
21
  require 'example_models/bare_model'
22
22
  require 'example_models/odatademo_product'
23
+ require 'example_models/odatademo_person'
23
24
 
24
25
  RSpec::Matchers.define :be_boolean do
25
26
  match do |actual|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odata-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-22 00:00:00.000000000 Z
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,16 +157,19 @@ files:
157
157
  - lib/odata/model.rb
158
158
  - lib/odata/model/active_model.rb
159
159
  - lib/odata/model/attributes.rb
160
+ - lib/odata/model/cli/generator_configuration.rb
161
+ - lib/odata/model/cli/model_template.rb
160
162
  - lib/odata/model/configuration.rb
161
163
  - lib/odata/model/persistence.rb
162
164
  - lib/odata/model/query.rb
163
165
  - lib/odata/model/query_proxy.rb
164
- - lib/odata/model/templates/model.erb
165
166
  - lib/odata/model/version.rb
166
167
  - odata-model.gemspec
167
168
  - spec/example_models/bare_model.rb
169
+ - spec/example_models/odatademo_person.rb
168
170
  - spec/example_models/odatademo_product.rb
169
171
  - spec/model/active_model_lint_spec.rb
172
+ - spec/model/entity_set_identification_spec.rb
170
173
  - spec/model/property_defaults_spec.rb
171
174
  - spec/model/query_interface_spec.rb
172
175
  - spec/model/query_proxy_spec.rb
@@ -198,8 +201,10 @@ specification_version: 4
198
201
  summary: An ActiveModel mapping layer for the OData gem
199
202
  test_files:
200
203
  - spec/example_models/bare_model.rb
204
+ - spec/example_models/odatademo_person.rb
201
205
  - spec/example_models/odatademo_product.rb
202
206
  - spec/model/active_model_lint_spec.rb
207
+ - spec/model/entity_set_identification_spec.rb
203
208
  - spec/model/property_defaults_spec.rb
204
209
  - spec/model/query_interface_spec.rb
205
210
  - spec/model/query_proxy_spec.rb
File without changes